Хостинг: 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 мог отправлять обновления вашему боту. Существует несколько сервисов, таких как localtunnel или ngrok, которые могут помочь вам в этом. В этом примере мы будем использовать localtunnel.
Сначала давайте установим localtunnel:
npm i -g localtunnel
После этого вы можете переадресовать порт 5001
:
lt --port 5001
localtunnel должен дать вам уникальный 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 deploy
Firebase 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 и смотрите, как он отвечает на сообщения!