Установить веб хук Телеграм

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

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

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

Telegram logo

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

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

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

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

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

1. Создание Telegram бота с Webhook’ом на Python. Подготовка.

Писать будем на 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.

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

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

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

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

Первая команда обновит локальные репозитории, чтобы не было проблем с поиском нужных пакетов. Вторая поставит 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-бот с помощью таблицы Google

Книга Telegram-бот с помощью таблицы Google

Для создания собственного Telegram-бота потребуется минимум программирования. На самом деле вам даже не нужно иметь редактор кода, чтобы начать. К концу этого поста вы узнаете, как создать свой личный интерактивный Telegram-бот всего лишь с помощью электронной таблицы Google. Конечным продуктом будет бот, отвечающий на ваши сообщения. Что-то вроде этого:

Прежде всего я хочу, чтобы у вас сложилось понимание принципов работы бота. Мы коснёмся концепции веб-хуков и будем регулярно обращаться к документации API Telegram-бота.

Краткое введение в веб-хуки

Приложения общаются двумя способами: через polling и webhooks. Когда вы совершаете онлайн-покупку и получаете сообщение от приложения вашей кредитной карты, это — интеграция в действии. Когда вы переводите деньги из приложения и получаете SMS для вашего провайдера — это интеграция в действии. Разработчики создают в приложениях способ получать данные друг от друга, потому что это довольно круто и это то, что хотят пользователи.

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

Веб-хуки как рыболовные крючки

Подумайте об интеграции приложений как о рыбалке. Это похоже на попытку поймать рыбу, только на этот раз ваше приложение ловит данные. Сейчас вы можете рыбачить двумя способами: первый — вы бросаете сеть над водой и проверяете её в установленные периоды, чтобы увидеть, не поймали ли вы рыбу.

Второй: вы нанизываете червя на крючок и ждете, пока не почувствуете, что движущаяся рыба тянет вас на себя. Именно так работают API polling и webhooks. С помощью опроса API приложение проверяет другое приложение в каждый установленный период времени, чтобы увидеть, есть ли данные для извлечения, в то время как с помощью веб-хуков приложение просто ждёт передачи данных, которая начинается событием.

А что такое события?

События — это действия, инициируемые человеком. Нажатие кнопки добавления товара в корзину, отправка сообщений кому-то или переход на определенную веб-страницу — всё это события, вызванные человеком. К этим событиям прилагаются данные. Когда вы кладёте товар в свою корзину, то метка времени, товар и цена, скорее всего, являются частью данных, генерируемых из события. Когда вы отправляете сообщение боту в Telegram, метка времени, ваш идентификатор пользователя, идентификатор сообщения и само сообщение — части данных, генерируемых отправкой сообщения.

Требования

Есть две вещи, которые нам нужны, чтобы создать бота с веб-хуками:

  1. Пропуск — мы не можем просто так получить доступ к данным из другого приложения. Разработчикам нужен способ отследить, кто получает доступ к их приложениям с черного хода. Для этого они выдают уникальные ключи всем, кто хочет войти в их приложения вне основного пользовательского интерфейса. Я покажу вам, как быстро получить ключ Telegram — буквально за минуту.
  2. Загрузочный док — как только у нас появится доступ к другому приложению, мы сможем начать извлекать из него данные. Но для этого нам нужен загрузочный док — место для приема этих данных. Наш док — URL веб-приложения. Приложение не может выгрузить данные, если у нас нет загрузочной платформы. С платформы же мы можем делать с данными все, что захотим: проверять их, манипулировать ими, отправить в другое приложение или даже обратно в наше приложение.
Еще по теме:  Как заархивировать Телеграмм чат

Вот изображение морского порта, иллюстрирующее, как работают веб-хуки. Во-первых, кран поднимает контейнер с судна и ставит его на погрузочную площадку. Оттуда тот, кто контролирует морской порт, может снова поднять контейнер и поставить его на другое судно. Теперь представьте, что кран — это веб-хук, а корабли — два разных приложения; загрузочный док — это адрес приложения.

Хук извлекает данные из App 1 (корабля внизу слева) и отправляет их на URL-адрес веб-приложения. Оттуда можно отправить эти данные в App 2 (корабль вверху справа) или сделать с ними всё, что захотите. Этот контейнер теперь ваш. Открывайте, проверяйте и отправляйте!

Рождение бота

Теперь, когда у вас есть понимание, как работают веб-хуки, мы можем создать бота!

Пропуск

Во-первых, нам нужен пропуск. В некоммерческих приложениях может потребоваться запросить у разработчика напрямую, но, к счастью, есть очень простой способ получить ключи входа (или токены) авторизации в Telegram. Ключи нам даст BotFather!

  1. Кликните по ссылке.
  2. Поздоровайтесь с ним (надо отдать должное).
  3. Отправьте придуманное вами имя бота.
  4. БАМ! Токен у вас в руках!

Настройка таблицы Google

Как только у нас будет токен, создайте электронную таблицу Google и перейдите в меню Инструменты > Редактор сценариев . Именно здесь мы будем писать код.

Строим загрузочный док

Нам нужен URL приложения, чтобы получать данные из Telegram. К счастью, у Google очень простая публикация веб-приложений через редактор сценариев. Когда мы опубликуем скрипт, то получим уникальный адрес веб-приложения. Нажимайте Publish в редакторе скриптов Google Spreadsheet. Пожалуйста, обратите внимание на варианты на изображении ниже.

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

И теперь у нас есть адрес веб-приложения!

Сохраните все ссылки в переменных

Теперь, когда у нас есть пропуск и загрузочный док, давайте создадим веб-хук — наш крючок. Согласно документации Telegram API, все запросы к API (App Programming Interface) должны быть такими: https://api.telegram.org/bot/METHOD_NAME . Похоже, нам будет очень часто нужна эта ссылка. Давайте сохраним все нужные ссылки в переменных, чтобы мы могли легко писать их позже:

var token = «1379225052:AAHXeY6p816laT1nrVLU-qX3ufMXcymqyoM»;
var telegramUrl = «https://api.telegram.org/bot» + token;
var webAppUrl = «https://script.google.com/macros/s/AKfycbyGlsL9W7VG413SHoJ6LSNxs_uW8ZtbLY7h0hk9oOruxmZlizg/exec»;
var token = «1379225052:AAHXeY6p816laT1nrVLU-qX3ufMXcymqyoM»;
var telegramUrl = «https://api.telegram.org/bot» + token;
var webAppUrl = «https://script.google.com/macros/s/AKfycbyGlsL9W7VG413SHoJ6LSNxs_uW8ZtbLY7h0hk9oOruxmZlizg/exec»;

Настройка веб-хука

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

function setWebhook() var url = telegramUrl + «/setWebhook?url wp-block-image»>

Авторизуйте приложение: жизнь слишком коротка, чтобы прожить её в безопасности:

Настройка обмена сообщениями

Есть две вещи, которые наш бот должен знать, прежде чем сможет отправить кому-то сообщение:

  1. Кому сообщение? Идентификатор чата.
  2. Что напишем? Текст сообщения.

Запишем эти требования как параметры функции. Не стесняйтесь копировать и вставлять код:

function sendMessage(chat_id, text) var url = telegramUrl + «/sendMessage?chat_id=» + chat_id + » target=»_blank» rel=»noreferrer noopener»>разработчиков Telegram, все запросы к API должны идти по HTTPS. Они также упомянули, что поддерживают только запросы GET и POST. GET означает, что кто-то пытается получить данные. POST означает, что кто-то пытается их отправить. Это единственная концепция в учебнике, которую я ещё не освоила, поэтому я перестану притворяться, что знаю, о чем говорю, и просто покажу вам эту статью, которая помогла мне лучше понять принцип.

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

function doPost(e) var contents = JSON.parse(e.postData.contents);
var chat_id = contents.message.from.id;
var text = «Beep boop bop, message received.»;

sendMessage(chat_id,text)
>

Нам нужна эта функция, потому что она — наш способ отправки данных в Telegram и сам Google требует, чтобы его пользователи сценариев приложений — то есть мы — включали либо функцию doGet , либо doPost , когда публикуем веб-приложение. Вот документация об этом. В этом документе Google объясняет, что означает аргумент ( e ) в функции.

Он представляет собой данные из события, созданного человеком внутри приложения, к которому подключен наш веб-хук. В нашем случае аргумент e содержит все данные, генерируемые всякий раз, когда человек отправляет сообщение Telegram-боту. И именно в аргументе мы получим идентификатор чата пользователя. В конце концов, все предыдущие бредни оправдались (может быть).

Итак, вот история нашего бота:

  1. Когда пользователь общается с нашим ботом Telegram, происходит событие. Оно генерирует данные, получаемые нами из e .
  2. Веб-хук автоматически отправляет e на URL-адрес веб-приложения.
  3. Как только e попадёт в URL-адрес веб-приложения, оно захочет отправить запрос POST в Telegram. Он запросит Telegram об отправке сообщения пользователю.
  4. Однако он не может отправить запрос с неполными требованиями. Нам нужен идентификатор чата человека и сообщение, которое мы хотим отправить в Telegram. Функция doPost переносит сообщение внутри переменной text .
  5. doPost также обрабатывает идентификатор chat , но сначала ей нужно проанализировать e , чтобы найти его.
  6. После обнаружения она передаёт параметры в Telegram с помощью функции sendMessage . Всё: сообщение передаётся пользователю. Запрос завершен. И вот — работающий бот:
Еще по теме:  Как написать самой себе в Телеграм с телефона

На случай, если ты запутался…

var token = «1379225052:AAHXeY6p816laT1nrVLU-qX3ufMXcymqyoM»;
var telegramUrl = «https://api.telegram.org/bot» + token;
var webAppUrl = «https://script.google.com/macros/s/AKfycbyGlsL9W7VG413SHoJ6LSNxs_uW8ZtbLY7h0hk9oOruxmZlizg/exec»;

function setWebhook() var url = telegramUrl + «/setWebhook?url /sendMessage?chat_id=» + chat_id + «;

sendMessage(chat_id,text)
>

Источник: codengineering.net

Установить веб хук телеграм

Чтобы сделать автоматическое уведомление сотрудникам, которых нет в офисе. Для рассылок сообщений вашим клиентам или поставщикам по каким-то событиям. Уведомить администратора о проблемах доступа к серверам. Вариантов много, каждая компания найдёт своё применение.

2. Как это работает?

Для связи используется бот Telegram, который вы себе создаёте сами. В MyChat Server, в разделе интеграций включается связка MyChat Telegram, нужные вам пользователи Telegram подписываются на сообщения этого бота прямо из мессенджера.

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

3. Создаём бота в Telegram

Официальная инструкция здесь. Пройдёмся по шагам.

Лого бота Телеграм

4. Внешний IP адрес + HTTPS в MyChat

Чтобы заработала интеграция с Telegram, нужно соблюсти два условия:

а) ваш WEB-сервер MyChat должен быть доступен из Интернета. Для этого нужен внешний «белый» IP адрес. Что это такое и как настроить?

Пропишите доменное имя своего сервера в разделе админки «Настройки» -> «Сетевые настройки» -> «IP адрес или Host сервера для внешних клиентов» (внешний IP адрес нельзя, потому что SSL сертификат работает только с доменом):

Доменное имя сервера в админке MyChat

б) ваш WEB-сервер MyChat должен использовать сертификаты для шифрования трафика по HTTPS. Сертификаты должны быть выданы для вашего домена, самоподписные не доверенные сертификаты использовать нельзя. Шифрование HTTP включается в разделе админки MyChat Server «Настройки» -> «WEB-сервисы»:

Настройка HTTPS для WEB-сервера MyChat

5. Включаем интеграцию в MyChat

После того, как вы создали своего Telegram-бота, включите интеграцию с Telegram в админке сервера MyChat («Инструменты» -> «Интеграция» -> «Telegram»).

Токен бота Телеграм

Нажимаем на кнопку «Подключить бота». Если все «Ок», то MyChat Server автоматически зарегистрирует веб-хук в Telegram:

Подключение бота Телеграм на сервере MyChat

Если же есть какие-то проблемы — читаем и анализируем лог ошибок (он появится после попытки связи с ботом):

Лог ошибок подключения бота Телеграм

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

Для проверки вашего бота перейдите по ссылке https://api.telegram.org/bot(сюда подставьте токен вашего бота, без скобочек)/getWebhookInfo, если в результате нет параметра «last_error_message», то скорее всего все в порядке и Telegram-Бот сможет отправлять вам сообщения.

6. Включаем скрипт для веб-хука в MyChat

Тут всё просто, нам надо включить скрипт обработки входящих сообщений от бота Telegram.

Заходим в раздел «Инструменты» -> «Скрипты» -> «Event scripts» -> «OnRequestByREST» и включаем скрипт «Telegram» (галочка напротив названия в дереве):

Скрипт для веб-хука Телеграм в MyChat

7. Подписываем Telegram-пользователя на сообщения от бота

Открываем приложение Telegram на своем смартфоне и в поиске пишем название вашего созданного бота. Открываем с ним диалог и нажимаем кнопку «Start», либо просто пишем ему в приват текст «/start», чтобы он вас зарегистрировал на сервере MyChat:

Как только Telegram-пользователь подпишется на сообщения от бота, он появится в списке:

Пользователь бота Телеграм

Вы должны включить его и назначить ему реального пользователя MyChat, вот так:

Подключение пользователя к боту Телеграм

8. Как теперь отправить сообщение из MyChat в Telegram?

Реальный пример. Пользователь MyChat отправляет приватное сообщение другому пользователю, а тот сейчас офлайн. Компьютер выключен или MyChat Client не запустили.

Нужно это сообщение продублировать в Telegram нужному человеку. Как это сделать?

Воспользуемся событием OnPrivateMessage и напишем такой скрипт:

Скрипт для отпраки сообщений из Nелеграма в MyChat

Если получатель сообщения зарегистрирован в списке пользователей в разделе интеграции с Telegram, MyChat отправит ему копию приватного сообщения на смартфон.

9. Как отправить сообщение из Telegram в MyChat?

Чтобы ответить из Telegram человеку, который прислал нам сообщение, надо сделать длинный тап на сообщении и выбрать «Ответить». Сообщение ведь приходит от бота, а не от конкретного человека.

Получается полноценная двусторонняя связь:

Сообщение из Telegram в MyChat:

Сообщение из Telegram в MyChat

10. Что делать, если не получилось?

Идём на официальный форум поддержки офисного мессенджера MyChat и спрашиваем. Поддержка быстрая, на русском языке.

Источник: nsoft-s.com

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