81 lines
4.9 KiB
Markdown
81 lines
4.9 KiB
Markdown
---
|
|
icon: material/robot-outline
|
|
---
|
|
|
|
# :material-robot-outline: Telegram-бот
|
|
|
|
!!! info "Обрати внимание"
|
|
Локальная среда разработки должна быть [настроена и запущена](local-dev.md).
|
|
|
|
## Подготовка бота на стороне Telegram
|
|
|
|
1. Написать [@botfather](https://t.me/botfather), создать бота
|
|
2. Полученный токен установить значением переменной `TG_BOT_TOKEN` в файле `.env` репозитория `web`
|
|
3. Командой `/mybots` в [@botfather](https://t.me/botfather) выбрать свежесозданного бота, далее `Edit Bot` > `Edit Commands` и отправить текст:
|
|
```
|
|
list - Список плейлистов
|
|
info - Подробности о плейлисте по его коду
|
|
help - Помощь по командам бота
|
|
links - Ссылки на все страницы проекта
|
|
stats - Статистика по плейлистам и каналам
|
|
```
|
|
|
|
## Проброс внешних запросов на локальную машину
|
|
|
|
1. Установить [telebit](https://telebit.cloud) и пройти примитивную регистрацию.
|
|
В результате будет выдан уникальный адрес в формате `https://foo-bar-99.telebit.io`.
|
|
На email, указанный при регистрации, будет оформлен бесплатный SSL-серификат Let's Encrypt для этого домена.
|
|
Если адрес не используется месяц+, то сертификат протухнет, но он автоматически восстановится, если адрес начнёт использоваться вновь.
|
|
|
|
2. В терминале выполнить:
|
|
```
|
|
telebit http 8080
|
|
```
|
|
где `8080` — порт локальной машины, на который проброшен порт 80 из контейнера `iptv-nginx`.
|
|
Для выключения выполнить:
|
|
```
|
|
telebit http
|
|
```
|
|
|
|
3. Проверить работу адреса, перейдя по нему браузером.
|
|
Должен открыться твой локальный проект.
|
|
|
|
4. Полученный адрес установить значением переменной `APP_URL` в файле `.env` репозитория `web`
|
|
|
|
5. Установить веб-хук, отправив запрос браузером или любым HTTP-клиентом на адрес:
|
|
```
|
|
https://api.telegram.org/bot$BOT_TOKEN/setWebhook?url=$TELEBIT_URL/bot/webhook&secret_token=$SECRET_TOKEN
|
|
```
|
|
где:
|
|
* `$BOT_TOKEN` - авторизационный токен, который @botfather выдал твоему боту;
|
|
* `$TELEBIT_URL` - адрес, который telebit выдал тебе;
|
|
* `$SECRET_TOKEN` - секретный токен, опционален, см. ниже.
|
|
|
|
6. Проверить веб-хук, отправив запрос браузером или любым HTTP-клиентом на адрес:
|
|
```
|
|
https://api.telegram.org/bot$BOT_TOKEN/getWebhookInfo
|
|
```
|
|
где:
|
|
* `$BOT_TOKEN` - авторизационный токен, который @botfather выдал твоему боту.
|
|
|
|
7. После разработки нужно установить "боевой" адрес веб-хука аналогично п4.
|
|
|
|
## Что за секретный токен?
|
|
|
|
Telegram авторизует твоего бота по токену, который выдал ему сам.
|
|
|
|
Ты тоже можешь (не) авторизовать Telegram по токену, который ты выдашь ему.
|
|
|
|
Для этого нужно в значением переменной `TG_BOT_SECRET` в файле `.env` репозитория `web` установить любую строку.
|
|
Если ты это сделаешь, тогда ту же строку ты должен передать в параметре `secret_token` метода `setWebhook`.
|
|
|
|
В этом случае, все HTTP-запросы, которые приходят от Telegram, будут содержать заголовок `X-Telegram-Bot-Api-Secret-Token` со этой строкой в качестве значения.
|
|
Эта строка сверяется с той, что указана в `.env` проекта.
|
|
Если такого заголовка нет или его значение некорректно, входящий запрос отклоняется.
|
|
|
|
Если переменная `TG_BOT_SECRET` не задана, то заголовок проверяться не будет.
|
|
|
|
См. подробности в документации: [setWebhook](https://core.telegram.org/bots/api#setwebhook)
|
|
|
|
|