Как установить webhook Telegram

Содержание

Jul 21, 2015 22:17 · 565 words · 3 minute read telegram python

Не так давно Telegram открыл API для написание ботов. Примеры уже существующих можно посмотреть на их сайте. Всё общение сводится к отправке команды, её параметров и получение ответа, вот и меня попросили разобраться с этим и написать пример бота. Ну ok, почему бы и нет? 🙂

Регистрация нового бота telegram

Готовимся писать код

Настроив внешний вид бота в мессенджере, пришло время определиться как наш код будет получать сообщения. Доступны 2 варианта:

  1. Раз в n секунд опрашивать https://api.telegram.org/bot110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw/getUpdates и получать список сообщений, пришедший за это время;
  2. Установить обработчик с помощью https://api.telegram.org/bot110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw/setWebhook, который будет дёргаться при каждом новом сообщении.

Первый путь мне показался примитивным и уж более не безопасным — секретный ключ будет видно прямо в коде, поэтому я выбрал второй. И тут начинается ад! Для его работы обязателен веб-сервер с белым IP и действительным не самоподписанным сертификатом.

How To Create Simple Webhook to Send Hits On Telegram Group😎

Ну что ж, попробуем раздобыть сертификат… Я пошёл на сайт регистратора и — о чудо! — он раздавал его бесплатно 🙂 Будем считать, что повезло. Спустя пару дней после запроса мне пришло 4 ключа: приватный, публичный, промежуточный, корневой и запросный. Зачем нужен последний я так и не понял, но! Аккуратно устанавливаем всё это хозяйство согласно статьи. Тут меня ждали 2 засады.

Еще по теме:  Телеграм который показывает удаленные сообщения

Первое — обращаем внимание на какой домен выдан сертификат. В моём случае это tyvik.ru и www.tyvik.ru. Т.е. домен, допустим, telegram.tyvik.ru уже будет не защищён => повесить на него бота нельзя. Второе — в файле сертификата должен быть полный путь до корневого, включая все промежуточные. В противном случае сообщения от telegram в наш веб-хук просто не будут приходить. Да-да — ни ошибок, ни мусора — ни-че-го.

Сволочи! Я 3 часа потратил пытаясь найти что же ко мне приходит! То, что telegram.tyvik.ru не защищён https’ом я понял просто обратившись по адресу вебхука (на тот момент https://telegram.tyvik.ru/bot/) и увидев перечёркнутый значёк протокола. А вот про промежуточный нигде в документации не сказано. Решение я нашёл где-то на реддите и сейчас уже не повторю сей подвиг.

Кодим

Для реализации задуманного я решил взять flask. Почему? А потому что я его не знаю 🙂 В боте много бизнес-логики быть не должно, так что микрофреймворк — самое то. Создание виртуального окружения и непосредственно кодинг описывать не буду, приведу сразу весь код:

Итак, поехали. Во-первых, я нашёл библиотеку для работы с сообщениями telegram — twx.botapi. С помощью неё можно отправить сообщение, содержащее картинку, геопозицию, стикер, а также установить клавиатуру (варианты ответов). Во-вторых, строка декоратора говорит, что мы будем принимать сообщения по адресу /telegram/. В-третьих, само сравнение с командой и ответ на него.

Установка Telegram-бота на сервер (Python)

Замечу, что вызов wait() обязателен — он закрывает сообщение (делает flush), отправляя его собеседнику. Вот такой вот простенький бот, с которым можно поиграть в ping-pong 🙂 Настройку nginx+uwsgi описывать не буду, т.к. она не отличается от таковой для Django.

2010-2019 (c) TyVik

Powered by Hugo Theme By nodejh

Источник: tyvik.ru

Телеграм бот Node.js Webhook

Телеграм бот Node.js Webhook

Задача:
Создать Телеграм бота и научится работать с ним с помощью Node.js и библиотеки «Telegraf», через webhook, используя для этого виртуальный выделенный сервер (VDS) и самоподписанный SSL сертификат.

Еще по теме:  Как убрать медленный режим в Телеграмме в группе на Андроид

1. Регистрация в sprintbox.ru

Регистрируемся по адресу sprintbox.ru, с помощь промо кода «SPRINTBOXPROMO» пополняем счет на 100 рублей. После чего станет доступно создание VDS — виртуального выделенного сервера (бокса), с минимальными характеристиками.

2. Установка «PuTTY»

По адресу https://www.putty.org скачайте установочный пакет (MSI) «PuTTY» и установите все программы входящие в комплект. Программа «PuTTY» используется для удаленного подключение по протоколу SSH: https://ru.wikipedia.org/wiki/SSH.

3. Создание SSH – ключей

Создаем пару SSH — ключей, при помощи программы «PuTTYgen», которая идет в составе с программой «PuTTY». В программе «PuTTYgen» нажимаем «Generate» и перемещаем курсор мыши в произвольном порядке. После генерации, будут созданы два ключа, публичный и приватный (секретный), сохраняем их с помощью соответствующих кнопок и копируем текст публичного ключа из окна программы. Созданные ключи, будут использоваться в программе «PuTTY», для удаленного подключения по протокол SSH.

PuTTYgen создание SSH ключей

PuTTYgen создание SSH ключей

Примечание: Создание ключей можно выполнить в «Командной строке», при помощи команды «ssh-keygen», например:

ssh-keygen -t rsa -b 4096

4. Подключение SSH – ключей

В панели управления https://cp.sprintbox.ru/customer/boxes/ssh, «Боксы» -> «SSH — ключи», добавляем скопированное содержимое публичного ключа и задаем название, например, «PuTTY»:

Sprintbox добавляем SSH ключ

Sprintbox добавляем SSH ключ

5. Создание VDS

В панели управления, «Боксы» — «Управление», добавляем новый бокс, выбираем «Аутентификация по ключу «PuTTY»», кликаем на логотип «CentOS» и выбираем «CentOS 8» и «Создать бокс». Выбираем самый дешевый тариф и подтверждаем действия.

Создание VDS, шаг 1 Создание VDS, шаг 1 Создание VDS, шаг 2 Создание VDS, шаг 2 Создание VDS, шаг 3 Создание VDS, шаг 3 Создание VDS, шаг 4 Создание VDS, шаг 4

Будет создан бокс и на почту придет информация с данными для подключения.
Примечание https://help.sprintbox.ru/service-work/ssh-keys-usage: «в этом случае root-пароль не генерируется, соответственно, он будет отсутствовать в письме о создании бокса, а доступ по паролю будет запрещён.»

6. Подключение к VDS по SSH

Запускаем «PuTTY», указываем полученный из письма IP-адрес бокса. В ветке «Connection – SSH — Auth» настроек программы, с помощью кнопки «Browse…» выбираем приватный ключ, созданные в п.3.
Для удобства, в ветке «Session», поле «Saved Session» можно задать наименование сессии и сохранить, чтобы в дальнейшем не пришлось настраивать все заново.

7. Подготовка к установке Node.js

Перед установкой Node.js выполним обновление:

dnf update

и перезагрузку системы:

reboot

При перезагрузке сессия SSH завершится, необходимо пере подключится через несколько минут.

Еще по теме:  Все секретные анимации в Телеграмм

8. Устанавливаем Node.js

8.1 Проверим версию по умолчанию в потоке «AppStream»:

dnf module list nodejs

8.2 Переключимся на поток с версией 14:

dnf module enable nodejs:14

8.3 Устанавливаем Node.js:

dnf install nodejs

8.4 Проверяем установку:

node –v

Установка Node.js

9. Создаем самоподписанный SSL сертификат

Примечание: В конце, в параметре CN, вместо нулей, необходимо указать ваш IP-адрес бокса, полученный при регистрации. Будут созданы два файла, публичный и приватный (секретный) ключ. Данные ключи будут использоваться для установки webhook.

10. Регистрация Телеграм бота

Регистрируем нового Телеграм бота, см. п.1 Телеграм бот 1С.

11. Создаем Телеграм бота в Node.js

Разрабатывать Телеграм бота на Node.js с использованием webhook, можно локально, в дальнейшем копируя файлы на сервер либо сразу же на сервере, в примере будет использован смешанный способ.

11.1 Создаем директорию, в которой будет производится работа, например:

mkdir /home/telegram-bot

11.2 Выполняем инициализацию проекта:

npm init

11.3 Для разработки телеграм бота на Node.js используется «Telegraf», для этого в рабочей директории проекта, выполним установку необходимого модуля:

npm install telegraf

11.4 Дополнительно устанавливаем пакет «dotenv», для хранения токена бота в отдельном файле «.env»:

npm install dotenv

11.5 Создаем файл: «.env» и сохраняем в нем токен:

echo BOT_TOKEN= 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 > .env

11.6 Вручную устанавливаем адрес webhook, с помощью setwebhook и программы CURL:

Примечание: Вместо нулей, необходимо указать ваш IP-адрес бокса, полученный при регистрации.
Ответ от Telegram Bot API:

Проверяем установку в Postman с помощью метода «getWebhookInfo«:

Postman getWebhookInfo


В документации «telegraf» есть метод установки:

bot.telegram.setWebhook(‘https://server.tld:8443/secret-path’, < source: ‘server-cert.pem’ >);

К сожалению, с помощью него не удалось выполнить установку webhook.

11.7 Создаем основной файл бота:

touch index.js

Исходный код телеграм бота Node.js с использование webhook:

const < Telegraf >= require(‘telegraf’); const fs = require(‘fs’); require(‘dotenv’).config(); const bot = new Telegraf(process.env.BOT_TOKEN); bot.start((ctx) => ctx.reply(‘Бот запущен!’)); bot.help((ctx) => ctx.reply(‘Телеграм бот Node.js Webhook.’)); bot.on(‘message’, (ctx) => < ctx.telegram.copyMessage(ctx.message.chat.id, ctx.message.from.id, ctx.message.message_id); >); const tlsOptions = < key: fs.readFileSync(‘/etc/ssl/private/private-nodejs.key’), cert: fs.readFileSync(‘/etc/ssl/certs/public-nodejs.pem’) >; // bot.telegram.setWebhook(`https://185.251.90.198:8443/bot`, < // source: `public-nodejs.pem` // >); bot.startWebhook(`/bot`, tlsOptions, 8443);

11.8 Запуск бота осуществляется командой:

node index.js

Результат работы бота на Node.js

Результат работы бота на Node.js

Дополнительная информация:

  • Для удобства копирования файлов на сервер, можно воспользоваться программой WinSCP которая похожа на программу Total Commander:

WinSCP

WinSCP

Источник: blagin.ru

Рейтинг
( Пока оценок нет )
Загрузка ...