Хостинг: Firebase Functions
Это руководство проведет вас через процесс развертывания вашего бота на Firebase Functions.
Необходимые условия
Чтобы следить за происходящим, вам необходимо иметь аккаунт Google. Если у вас его еще нет (ну или вас в нём забанили), вы можете создать его здесь.
Установка
Этот раздел поможет вам пройти процесс настройки. Если вам нужны более подробные объяснения каждого шага, обратитесь к официальной документации Firebase.
Создание проекта Firebase
- Перейдите в консоль Firebase и нажмите Добавить проект.
- Если появится запрос, просмотрите и примите условия Firebase.
- Нажмите Продолжить.
- Решите, хотите ли вы делиться аналитикой или нет.
- Нажмите Создать проект.
Настройка
Чтобы написать функции и развернуть их в среде выполнения Firebase Functions, вам нужно настроить среду Node.js и установить Firebase CLI.
Важно отметить, что в настоящее время Firebase Functions поддерживает только Node.js версий 14, 16 и 18. Подробнее о поддерживаемых версиях Node.js читайте здесь.
После установки Node.js и npm установите Firebase CLI глобально:
npm install -g firebase-toolsИнициализация проекта
- Запустите
firebase login, чтобы открыть браузер и аутентифицировать Firebase CLI с помощью вашей учетной записи. - Зайдите в директорию проекта
cd. - Запустите
firebase init functionsи введитеy, когда вас спросят, хотите ли вы инициализировать новый проект. - Выберите
use existing projectи выберите проект, который вы создали в шаге 1. - CLI предлагает вам два варианта поддержки языка:
- JavaScript
- TypeScript
- В качестве опции можно выбрать ESLint.
- CLI спросит вас, хотите ли вы установить зависимости с помощью npm. Если вы используете другой менеджер пакетов, например
yarnилиpnpm, вы можете отказаться. В этом случае вам придетсяcdв директориюfunctionsи установить зависимости вручную. - Откройте
.и найдите ключ:/functions /package .json "engines":. Версия{"node": "16"} nodeдолжна соответствовать установленной у вас версии Node.js. В противном случае проект может не запуститься.
Подготовка кода
Вы можете использовать этот короткий пример бота в качестве отправной точки:
import * as functions from "firebase-functions";
import { Bot, webhookCallback } from "grammy";
const bot = new Bot("");
bot.command(
"start",
(ctx) => ctx.reply("Добро пожаловать! Запущен и работаю."),
);
bot.command("ping", (ctx) => ctx.reply(`Понг! ${new Date()}`));
// Во время разработки вы можете запустить свою функцию по адресу https://localhost/<firebase-названиепроекта>/us-central1/helloWorld.
export const helloWorld = functions.https.onRequest(webhookCallback(bot));2
3
4
5
6
7
8
9
10
11
12
13
Локальная разработка
Во время разработки вы можете использовать набор эмуляторов Firebase для локального запуска вашего кода. Это гораздо быстрее, чем развертывать каждое изменение на Firebase. Чтобы установить эмуляторы, выполните команду:
firebase init emulatorsЭмулятор функций должен быть уже выбран. (Если это не так, перейдите к нему с помощью клавиш со стрелками и выберите его с помощью пробела). На вопросы о том, какой порт использовать для каждого эмулятора, просто нажмите enter.
Чтобы запустить эмуляторы и запустить ваш код, используйте:
npm run serveПо какой-то причине стандартная конфигурация скрипта npm не запускает
компилятор TypeScript в режиме watch. Поэтому, если вы используете TypeScript, вы также должны запустить:
npm run build:watchПосле запуска эмуляторов вы должны найти в выводе консоли строку, которая выглядит следующим образом:
+ functions[us-central1-helloWorld]: http function initialized (http://127.0.0.1:5001/<firebase-названиепроекта>/us-central1/helloWorld).Это локальный URL-адрес вашей облачной функции. Однако ваша функция доступна только для localhost на вашем компьютере. Чтобы протестировать бота, вам нужно вывести функцию в интернет, чтобы Telegram API мог отправлять обновления вашему боту. Существует несколько сервисов, таких как Cloudflare Tunnel или ngrok, которые могут помочь вам в этом. В этом примере мы будем использовать localtunnel.
Сначала давайте установим localtunnel:
npm i -g localtunnelПосле этого вы можете переадресовать порт 5001:
lt --port 5001localtunnel должен дать вам уникальный URL, например https://.
Осталось только указать Telegram, куда отправлять обновления. Это можно сделать с помощью вызова set. Например, откройте новую вкладку в браузере и перейдите по этому URL:
https://api.telegram.org/bot<токен>/setWebhook?url=<ВЕБХУК_URL>/<firebase-названиепроекта>/us-central1/helloWorldЗамените <токен> на ваш настоящий токен бота, а <ВЕБХУК на ваш собственный URL, который вы получили из localtunnel.
Теперь вы должны увидеть это в окне браузера.
{
"ok": true,
"result": true,
"description": "Webhook was set"
}2
3
4
5
Теперь ваш бот готов к тестированию на развертывание.
Развертывание
Чтобы развернуть свою функцию, просто выполните команду:
firebase deployFirebase CLI выдаст вам URL вашей функции после завершения развертывания. Он должен выглядеть примерно так: https://. Для более подробного объяснения вы можете взглянуть на шаг 8 руководства Начало работы.
После развертывания вам нужно указать Telegram, куда отправлять обновления для вашего бота, вызвав метод set. Для этого откройте новую вкладку браузера и перейдите по этому URL:
https://api.telegram.org/bot<токен>/setWebhook?url=https://<регион>.<мой_проект>.cloudfunctions.net/helloWorldЗамените <токен> на ваш токен бота, <регион> на название региона, в котором вы развернули свою функцию, а <мой на название вашего проекта Firebase. Firebase CLI должен предоставить вам полный URL вашей облачной функции, поэтому вы можете просто вставить его после параметра ?url в метод set.
Если все настроено правильно, вы должны увидеть этот ответ в окне браузера:
{
"ok": true,
"result": true,
"description": "Webhook was set"
}2
3
4
5
Вот и все, ваш бот готов к работе. Заходите в Telegram и смотрите, как он отвечает на сообщения!