Настройка и создание Telegram бота с использованием webhook

Регистрация и получение токена бота

r

Откройте telegram и подключитесь к боту @BotFatherВводите команду “/newbot”Введите name и username вашего бота. Username должен оканчиваться словом "bot"В ответ BotFather пришлет токен вида “1436541093:AAEp-Vsd31oOLWjfDOhcfn8bNx6tmVzj0yt”Лучше всего сохранитm токен в отдельную переменную. Которую потом следует подставить в функцию регистрации бота в коде:tgbotapi.NewBotAPI("Тут должен быть твой токен, полученный от Bot Father")

Проверка состояния бота, через браузер

r

Проверить установлен ли webhock можно при помощи командыhttps://api.telegram.org/botYOUR-TOKEN/getWebhookInfo Если все работает, то вы получите следующий json{"ok":true,"result":{"url":"https://35.224.231.90:8443/712308912:DLGSteczdUnPdnNYLzNikaGOhome7l9q3vova/","has_custom_certificate":true,"pending_update_count":0,"max_connections":40}} Сбросить регистрацию бота на определенном iphttps://api.telegram.org/botYOUR-TOKEN/setWebhook

a

Инструкция по созданию telegram-bota с использованием webhook и сервера от GCP

1. Получение токена для бота у BotFather

2. Настройка GCP

3. Подключение к удаленной машине

4. Генерация SSL сертефикатов

5. Настройка Nginx

r

Теперь у нас есть готовая машина с ssl ключами, telegram токен и доступ ко всему этому чуду. Однако нам остается зарегистрировать на сервере telegram бота, который будет находиться на полученном external ip, и работать через протокол https. Для подтверждения регистрации нам понадобится полученный токен и ssl сертефикаты подтверждающие безопасность https соединения. Так же поскольку telegram бот является сервисом, который сидит на внутреннем адресе и порту, а сообщения от telegram приходят на внешний адрес. То для связи их понадобится nginx в режиме обратный прокти

1. Установка nginx

r

Первым делом обновите репозитории системы sudo apt update -y && sudo apt-get update Далее установите nginxsudo apt-get install nginx

2. Настройка nginx

r

Для начала перейдите в папку с конфигурационным файлом nginxcd /etc/nginx/sites-available/ Посмотрите содержимое папкиls -la У вас отобразятся список всех файлов, которые находятся в этой папки. Лично у меня настройки хранятся в файле defaults. Откройте файл с настройками.sudo nano defaults Далее в нем в разделе server нужно написать следующую конфигурациюserver { listen 80; listen 443 ssl; # Тут должен быть внешний IP адрес машины, который вы получали в пункте 2.1 server_name EXTERNAL IP OF VM INSTANCE; # тут должны быть пути до ваших сертефикатов ssl_certificate /home/jj/cert.pem; ssl_certificate_key /home/jj/cert.key; location /Ваш_Telegram_токен!! { proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_pass https://0.0.0.0:5000/Ваш_Telegram_токен!!/; } } По сути сейчас только что вы связали внешний адрес и порт вашей машины с внутренним адресом приложения!Самые частые ошибки в этом файле бывают с указанием пути до сертификатов

a
3. Перезагрузка Nginx

3. Перезагрузка Nginx

r

Первым делом нужно связать конфигурационные файлы настроекsudo ln -s /etc/nginx/sites-available/default.txt /etc/nginx/sites-enabled/default Перезагрузка nginxsudo systemctl restart nginx && sudo systemctl status nginx В случае успеха должно вывестись сообщение похожее на приложенную картинку. В противном случае читайте текст ошибки

6. Запуск бота

r

Поскольку это интеллект карта посещена не программированию и настройке окружения на коком-то конкретном языке. То описание процесса установки go и python здесь отсутствует.

1. Пример кода на golang

r

При написании этого кода использовалась библиотека "telegtam bot api" её описание есть во вкладке "библиотеки для разработки".Еще я бы рекомендовал завести отдельный файл для хранения переменных со всеми адресами, портами и путями до сертификатов. package main import ( "github.com/Syfaro/telegram-bot-api" "log" "net/http" ) func main() { bot, err := tgbotapi.NewBotAPI("Ваш telegram токен") if err != nil { log.Fatal(err) } bot.Debug = true log.Printf("Authorized on account %s", bot.Self.UserName) // Запрос на сязь машины с телеграм серверо _, err = bot.SetWebhook(tgbotapi.NewWebhookWithCert("https://www.google.com:8443/"+bot.Token, "cert.pem")) if err != nil { log.Fatal(err) } updates, _ := bot.ListenForWebhook("/" + bot.Token) // поднятие бота на внутреннем адресе go http.ListenAndServeTLS("0.0.0.0:5000", "cert.pem", "key.pem", nil) for update := range updates { log.Printf("%+v\n", update) } }

2. Пример кода на python

r

import os import telegram from telegram.ext import (Updater, CommandHandler, MessageHandler, Filters) TOKEN = "Ваш токен телеграм бота" PORT = int(os.environ.get('PORT', '5000')) SERVER = 'EXTERNAL IP OF VM INSTANCE/' CERT = '/home/jj/PUBLIC.pem' def htel(update, context): update.message.reply_text('Help is here') def echo(update,context): dom = update.message.text update.message.reply_text(dom) def tbot(): updater = Updater(TOKEN, use_context=True) dp = updater.dispatcher dp.add_handler(CommandHandler("help", htel)) dp.add_handler(MessageHandler(Filters.text, echo)) # Поднятиебота на внутренннем ip updater.start_webhook(listen="0.0.0.0", port=5000, url_path=TOKEN) # Запрос на связь с телеграмом updater.bot.setWebhook(SERVER+TOKEN,certificate=open(CERT, 'rb')) updater.idle() tbot()

3. Проверить работу сервера и бота вы можете при помощи обычного браузера

7. Разработка на удаленном сервере при помощи VSC (Дополнительный пункт)

1. Можно установить среду VSC, и расширение remote ssh. Тогда вы сможете из этой среды писать код, который по факту находится на удаленном компьютере

2. При этом удобно фиксировать все изменения кода в своем репозитории github. В таком случае вы получите producrion сервер с возможностью написания кода.

Примечания по использованию этой интеллект карты

Эта интеллект карта является попыткой сохранения знаний. Для которых более типичным форматом хранения был бы doc файл.

Поскольку это карта - инструкция. То для её полного выполнения необходимо читать все вложенные примечания!

Альтернативная инструкция

Способы создания бота

Библиотеки для разработки

go

Бесплатные VPS серверы для размещения бота