Перейти к содержанию

Telegram-бот

Обрати внимание

Локальная среда разработки должна быть настроена и запущена.

Подготовка бота на стороне Telegram

  1. Написать @botfather, создать бота
  2. Полученный токен установить значением переменной TG_BOT_TOKEN в файле .env репозитория web
  3. Командой /mybots в @botfather выбрать свежесозданного бота, далее Edit Bot > Edit Commands и отправить текст:
    list - Список плейлистов
    info - Подробности о плейлисте по его коду
    help - Помощь по командам бота
    links - Ссылки на все страницы проекта
    stats - Статистика по плейлистам и каналам
    

Проброс внешних запросов на локальную машину

  1. Установить telebit и пройти примитивную регистрацию. В результате будет выдан уникальный адрес в формате 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