Как проверить webhook Telegram

Всем мир! Сегодня я вам на практике покажу, как с 0 написать несложного Telegram бота.

Для начала придумаем тестовое задание.

У меня есть сервер Counter Strike 1.6 на котором я временами играю с друзьями. Заходить в игру, чтобы проверить наличие там игроков, лень. Напишем бота, который будет доставать для нас информацию о сервере и список игроков со счетом и выводить в удобном формате.

Telegram logo

Для того, чтобы проследить за действиями, достаточно базовых знаний linux, web и python.

Постановка задачи

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

  • Long polling. Метод, когда ваша программа в определенный промежуток времени опрашивает сервер об обновлениях.
  • Web hook. Тут вы поднимаете веб сервер, на который телеграм бот шлет обновления, если они есть.

Второй метод популярнее и считается надежнее, поэтому остановимся на нем.

Set webhook Url — TELEGRAM BOT API WITH PHP

Писать будем на Python с использованием Flask. В роли веб сервера используем nginx. В работе с сервером CS нам поможет чудесный модуль python-valve

Выбор сервера для хостинга нашего бота роли не играет, я буду работать с Digital Ocean.

Сам бот будет довольно простым: одна кнопка Обновить, нажатие на которую, как и любое сообщение, будет обновлять информацию о карте и игроках.

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

BotFather

Первый шаг сделали. Мы уже сейчас можем найти нашего бота в ТГ и писать ему, но это пока только оболочка и отвечать вам не будет. Ему нужен код/призрак.

Аренда выделенного сервера на DO

Как и любой сайт и серверсайд программа, наш код должен быть запущен на машине с белым ip и выходом в интернет. Для такого случая мы арендуем машину у Ditial Ocean

Показывать пошаговую регистрацию на сайте я не буду, покажу только как получить и настроить сам сервер. Кстати, если вы студент, можете попробовать получить 50$ на хостинг бесплатно.

Нажимаем на большую копку Create droplet.

Digital ocean

Выбираем желаемую ОС. Я буду работать с Ubuntu.

Дальше можно выбрать самый дешевый сервер за 5 баксов в месяц или 0.007 в час. С выбором региона чуть тяжелее. Для телеграм бота особой разницы нет, но если будете хостить игры тут, следует подумать о пингах. Тут можно сравнивать состояние от вас, до разных регионов DO. http://speedtest-sfo1.digitalocean.com/

Еще по теме:  Как скрыть в Телеграмме прочитанные сообщения

Больше нам ничего менять тут не надо, нажимаем Create.

В течении пары минут мы получим ip адрес и root пароль от сервера на нашу почту. Все, машина работает. Можем коннектиться к ней по ssh.

Вводим пароль и получаем полный контроль над сервером. Возможно вас попросят сменить пароль, поставьте посложнее.

Telegram Bot — Part 5 — Set Webhook

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

Теперь необходимо перезайти на сервер под новым пользователем

Установка нужных сервисов

Первая команда обновит локальные репозитории, чтобы не было проблем с поиском нужных пакетов. Вторая поставит PIP (систему управления пакетами python), веб сервер nginx и dev пакет python. Третья команда запустит веб сервер.

Если вы сейчас введете ip адрес вашего сервера в браузере любого компьютера подключенного к сети интернет, вы получите страницу приветствия nginx.

Nginx hello world

Выключим на пока наш веб сервер и займемся python.

Python и virtualenv

По хорошему, нам надо создавать окружения для каждого из наших python проектов, чтобы их зависимости не начали конфликтовать между собой. Для этого воспользуемся virtualenv.

Создаем папку проекта и стартуем в ней новое изолированное окружение.

Теперь у нас есть локальная копия python, pip и все python модули установленные внутри останутся в этом окружении.

Устанавливем Flask и UWSGI

Бота будем писать на микрофреймворке flask, который позволит нам сократит время на разработку. Для перенаправления запросов с nginx на flask будем пользоваться uwsgi.

Для начала запустим простую страничку в Flask и попробуем достучаться к ней через nginx.

В папке с проектом создадим наш главный файл в котором будет хранится код.

Так же напишем скрипт, который будет запускать наше Flask приложение.

Оба файла находятся в папке с проектом.

Запускам uwsgi командой:

Если все прошло успешно, вы, перейдя в своем браузере по адресу вашего сервера и порт 5000 должны увидеть It’s working.

Uwsgi

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

Потом создадим .ini конфиг для uwsgi в папке с ботом. Конфиг задает количество процессов, имя сокета, права и файл для логирования.

Так же создадим папку для логов и сделаем ее владельцем себя.

Создадим так же systemd unit файл, для атвоматизации запуска нашего бота.

Теперь после ввода команды, мы должны увидеть сокет файл в нашей папке проекта.

Пишем бота Telegram на PHP

Anton Bagaiev

Anton Bagaiev Last updated Aug 3, 2016

Read Time: 9 min

Если вы читаете это, то скорее всего понимаете, что боты для чатов является популярным трендом в 2016 году.

Еще по теме:  Почему кружки в Телеграмме сохраняются в музыку

Эволюция ботов заключается не только в искусственном интеллекте. Ботом может быть инструмент в вашем мессенджере с простым интерфейсом, который может быть использован для расширения функционала сайта или сервиса, или использован как отдельное приложение. Боты легки в разработке и установке, и еще один плюс заключается в том, что мессенджеры могут использоваться на любом устройстве: ноутбуках, смартфонах и планшетах. Вот почему все сходят с ума по ботам.

И наиболее популярным мессенджером с открытым API для ботов является Telegram.

Что мы собираемся делать

В этой статье мы создадим простой бот-секундомер для Telegram. Я покажу вам как создавать собственного бота, связываться с аналитикой, напишем немножко кода и в конце добавим своего бота в магазин ботов.

Создаем бота с помощью BotFather

Первым шагом при создании бота нужно зарегистрировать аккаунт для своего бота в Telegram. И для этого есть собственный бот, который называется BotFather. Просто добавьте его в свой контакт лист и вы сможете создавать и настраивать ботов Telegram, просто напечатав команду /newbot и следуя инструкциям от BotFather.

BotFather running Telegram

После регистрации вашего нового бота, вы получите сообщение с поздравлением и токен для авторизации. Мы скоро будем использовать этот токен для авторизации бота и отправки запросов к Bot API.

Позднее вы сможете использовать BotFather для добавления описаний и фото к профилям ваших ботов, регенерации токенов, задания списка доступных боту команд, удаления аккаунтов и прочее. Чтобы получить полный список команд, просто напечатайте /help в чате с BotFather.

Соединяемся с Botan Analytics

Не существует никакой встроенной аналитики в Telegrem Bots API, но все равно важно знать, сколько пользователей у вас есть, как они себя ведут и какие команды используют чаще других. Конечно можно собрать такую информацию, используя собственный движок, но если мы собираемся сфокусироваться на функционале самого бота, а не метриках, то нужно использовать решение из коробки.

И для этого уже есть простой инструмент, который называется Botan. Он основан на Yandex AppMetric и абсолютно бесплатный. Используя Botan, можно сегментировать вашу аудиторию, получать информацию о профилях пользователей, получить наиболее часто используемые команды, а так же получить красивые графики прямо в вашем мессенджере:

Bot Analytics Graph

Для того чтобы начать, нужно зарегистрировать ваше бота в Botan и получить свой токен. И опять же это можно сделать в боте, используя BotanioBot:

Registering a bot in Telegram

Просто нажмите на «Add bot» на вашей клавиатуре в диалоговом окне, введите ник вашего бота, и получите ваш токен для трекинга. Теперь Botanio готов регистрировать события вашего бота, а вы можете получать статистику по пользователям, сессиям и событиям прямо в вашем мессенджере.

Создание и регистрация SSL Webhook

В Telegram есть два способа получения сообщений от пользователей: длинный опрос и webhooks.

Еще по теме:  ТГ с фота снимается одежда

A diagram of the Telegram API

Обычно с долгим опросом, вам необходимо запрашивать новые сообщения из API, а с webhooks вы устанавливаете свой обратный вызов, который будет вызван API Telegram, если появится новое сообщение от пользователя. Я предпочитаю использовать webhooks потому что это больше похоже на взаимодействие в реальном времени, так что в этой статье мы так же будем использовать этот способ. Теперь нам нужно выбрать URL для обратного вызова нашего webhook, который будет вызван по HTTPS протоколу, и нужно установить его достаточно безопасным, и расположить свой скрипт в безопасной директории как сказано в руководстве:

Если вы хотите убедится что запрос Webhook действительно исходит от Telegream, мы рекомендуем использовать секретный путь в URL, например: https://www.example.com/ . Так как никто больше не знает токена для вашего бота, то вы можете быть уверены, что запрос идет от нас.

Если у вас подтвержденный SSL сертификат, то все что вам нужно, это открыть ваш URL в браузере:

https://api.telegram.org:443/bot[token]/setwebhook?url=[webhook]

Иначе необходимо сгенерировать самоподписанный сертификат. Вот пример команды в Linux для этого:

openssl req -newkey rsa:2048 -sha256 -nodes -keyout /path/to/certificate.key -x509 -days 365 -out /path/to/certificate.crt -subj «/C=IT/ST=state/L=location/O=description/CN=yourdomain.com»

И не забудьте открыть SSL порт:

sudo ufw allow 443/tcp

Чтобы подтвердить ваш сертификат и сделать ваш домен для webhook доверительным, необходимо загрузить свой публичный ключ:

curl
-F «url=https://yourdomain.com/path/to/script.php»
-F «certificate=/path/to/certificate.key»
«https://api.telegram.org/bot[token]/setwebhook»

В итоге вы получите следующий JSON ответ:

«ok»:true,»result»:true,»description»:»Webhook was set»>

В нем сказано что webhook был установлен и мы готовы начать работу с ботом.

Создаем базу данных

Теперь нам нужно создать базу данных для наших таймеров. Что мы собираемся в ней хранить? Когда пользователь дает команду секундомеру начать отсчет, мы будем брать ID чата и сохранять строку с ID чата и текущим временем Unix. Следовательно мы сохраним строку с отметкой времени и ID чата.

Чтобы показывать текущее время секундомера, мы будем брать сохраненную метку времени и сравнивать ее с текущим временем. Разница и будет текущее время в секундах. Если пользователь останавливает секундомер, то мы просто удаляем строчку с данным ID чата.

Итак давайте создадим базу данных и таблицу для хранения информации для секундомера:

CREATE TABLE IF NOT EXISTS `stopwatch` (
`chat_id` int(10) unsigned NOT NULL,
`timestamp` int(10) unsigned NOT NULL,
PRIMARY KEY (`chat_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Создание класса Stopwatch

Наконец мы готовы начать писать код. Создадим класс для работы с базой данных в файле stopwatch.php и начнем с конструктора, который устанавливает два приватных свойства, где мы будем хранить ID чата и соединение с MySQL:

class Stopwatch

Источник: code.tutsplus.com

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