Как выглядит токен Телеграмм бота

Бот в Telegram

Бот — это сокращение от слова «робот». Чат-ботами называют программы, взаимодействующие с пользователем через мессенджер, систему обмена сообщениями. Это может быть мессенджер, встроенный на страницу сайта, или мобильный мессенджер, вроде WhatsApp или Telegram.

Через чат-ботов компании предоставляют клиентам дополнительный канал доступа к информации и услугам. Боты могут, например, известить клиента о появлении в продаже какого-то товара или об изменении цены на него.

Чат-бот хорош тем, что взаимодействие с ним идёт через знакомый пользователю интерфейс мессенджера. Чат-бот удобен: сегодня многие предпочтут отправить сообщение в мессенджере, чем работать через браузер. И ещё одно огромное преимущество чат-ботов перед настольными системами в том, что бот всегда «сидит» в кармане у пользователя, и это ускоряет доставку информации.

А для программиста бот — это отличный помощник, на которого можно переложить массу рутинных задач.

How to get Telegram Bot Token

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

Bot API в Telegram

Для управления ботами в Telegram есть Bot API. Общее описание процесса создания ботов представлено в официальной статье «Bots: An introduction for developers». Документация по Bot API опубликована здесь.

Отправка и получение запросов через Bot API

Боты в Telegram — это специализированные аккаунты. Чтобы пользователи отличали чат-ботов от реальных аккаунтов, для бот-аккаунтов установлены некоторые ограничения.

Программа, управляющая ботом, взаимодействует с Bot API через HTTP-запросы: их можно отправлять как с помощью стандартной Python-библиотеки requests, так и посредством специальных библиотек-обёрток.

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

Создание аккаунта Telegram-бота

Обратите внимание на иконку возле имени бота: белая галочка на голубом фоне. Эту иконку устанавливают администраторы Telegram, она означает, что бот настоящий, а не подделка (в системе может существовать несколько ботов с одинаковыми видимыми именами).

Опасайтесь подделок, выбирайте натуральное!

Нажмите кнопку Start («Запустить»), чтобы начать диалог с ботом. Затем отправьте команду /newbot и укажите параметры нового бота:

  • имя (на любом языке), под которым ваш бот будет отображаться в списке контактов;
  • техническое имя вашего бота, по которому его можно будет найти в Telegram. Имя должно оканчиваться на слово bot в любом регистре, например YaBot , ya_bot или даже your_login_assistant_bot . Имена ботов должны быть уникальны.
Еще по теме:  Бот в Телеграм чтобы смотреть истории инст анонимно

Client API и Bot API — это разные системы, у них разные токены. Токен Client API не сработает для доступа к Bot API.

Восстановление Токена (token) Бота

Готово!

Бот создан, но какой прок с молчаливого бота? Надо научить его чему-нибудь хорошему.— Ну скажи: «Кто там?», «Кто там?».

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

Теперь можно отправить сообщение от имени бота в свой аккаунт. Самый простой способ — отправить GET-запрос из браузера, обратившись к методу API sendMessage и передав необходимые параметры:

  • chat_id — это ID того чата, в который бот должен отправить сообщение;
  • text — текст сообщения.

https://api.telegram.org/bot/sendMessage?chat_id=text=привет

Составьте свой запрос и отправьте его через браузер.

Вам в Telegram придёт сообщение от бота, а на веб-странице отобразится JSON со всеми данными об отправленном запросе.

Заработало!

Даже если вы только что подключились к Telegram — вам уже есть с кем поговорить. Неплохое начало.

Бот получает ваше сообщение

Помимо отправки сообщений и другой активной деятельности бот должен получать сообщения с сервера Telegram.

Для этого существует два способа.

Первый способ: polling (англ. «опрос») — это метод, при котором программа регулярно отправляет запросы к серверу с целью проверить, не обновились ли данные. В Telegram-ботах для этого применяется метод getUpdates. Такой способ подходит для небольших проектов, он очень прост и не требует предварительной настройки.

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

Второй способ: webhooks, методика «обратных вызовов». При таком подходе сервер Telegram сам будет уведомлять бота о появившихся обновлениях. «Обновления» — это всё, что приходит боту от пользователя: новые сообщения, картинки или файлы. Этот метод предпочтителен для больших проектов, но он сложнее в отладке и настройке.

Polling — это просто запросы

Отправьте своему боту пару сообщений через мобильный или настольный клиент. Чтобы бот получил эти сообщения, нужно отправить запрос на получение входящих. Для этого в Bot API есть метод getUpdates.

https://api.telegram.org/bot/getUpdates

Добавьте в запрос ваш токен и отправьте его через браузер. Никакие GET-параметры не нужны. Если этот запрос отправлять регулярно (например, раз в минуту) — это и будет polling.

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

Сообщения, отправленные боту, хранятся на серверах Telegram только 24 часа. Если бот не получил их в течение суток с момента отправления — он не получит их никогда: сообщения будут стёрты.

Еще по теме:  Безопасно ли заходить на Телеграмм ботов и тебе говорят оплати 1 рубль чтобы получить 5000

Похожие записи:

  1. Библиотека python-telegram-bot
  2. Client API в Telegram
  3. Библиотека python-telegram-bot. Пример
  4. Аутентификация по токену. JWT + Djoser

Источник: mob25.com

Telegram бот через webhook

Я тогда давно написал статью про создание Telegram бота, и обещал дополнить её описанием настройки работы через webhook, но так и не дополнил. Вот только сейчас дошли руки.

Telegram bot webhook

Что это такое

Как пишут в документации, общаться с серверами Telegram бот может двумя способами:

  1. getUpdates — pull: ваш бот постоянно дёргает сервер Telegram и проверяет есть ли новые сообщения;
  2. setWebhook — push: по мере поступления новых сообщений сервер Telegram отправляет их вашему боту.

Разницу можно изобразить следующим образом:

Telegram bot, getUpdates vs setWebhook

Очевидно, что второй способ ( setWebhook ) рациональнее для всех участников процесса. Однако в нём присутствует неявная сложность: кто-то должен принимать сообщения от Telegram на стороне бота, то есть необходим веб-сервер или его эквивалент.

Как настроить

Что нужно сделать:

  1. Заиметь доменное имя для сервера и получить на него сертификат (например, от Let’s Encrypt). Документация также говорит, что в случае самоподписанного сертификата можно обойтись и просто IP адресом, но этого я не пробовал;
  2. Запилить серверную часть на стороне бота (куда будет ломиться Telegram);
  3. Зарегистрировать адрес серверной части в Telegram (зацепить webhook на endpoint), чтобы Telegram знал, куда ломиться с сообщениями.

Сертификат

С доменом и сертификатом просто. Домен у меня уже был, а сертификат я получил по этой инструкции.

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

Серверная часть

Серверная часть чуть посложнее. Я переделал текущую реализацию бота на pyTelegramBotAPI, используя пример для AIOHTTP.

Ставим необходимые пакеты:

pip install pyTelegramBotAPI pip install aiohttp pip install cchardet pip install aiodns

И сокращённо код бота теперь такой:

Что здесь происходит: мы запускаем мини-веб-сервер, который слушает порт 8443 и отвечает на запросы через определённый endpoint, который образован токеном бота. Токен используется здесь как достаточно уникальный идентификатор, чтобы какой-нибудь мимокрокодил из интернета не навызывал бота и не натворил дел. Полный адрес endpoint’а будет выглядеть вот так: https://YOUR.DOMAIN:8443/YOUR-TOKEN/ .

Обратите также внимание на отличия от стандартного примера из репозитория:

  • в качестве файла сертификата указан fullchain.pem , а не cert.pem ;
  • удалён код снятия и установки webhook’а.

Так как бота я запускаю не из-под root’а, сервис начал валиться с такой ошибкой:

python-bot[1824]: Traceback (most recent call last): python-bot[1824]: File «/usr/local/bin/bot/bot.py», line 142, in python-bot[1824]: context.load_cert_chain(WEBHOOK_SSL_CERT, WEBHOOK_SSL_PRIV) python-bot[1824]: PermissionError: [Errno 13] Permission denied systemd[1]: telegram-bot.service: Main process exited, code=exited, status=1/FAILURE systemd[1]: telegram-bot.service: Failed with result ‘exit-code’.

То есть, у пользователя, из-под которого выполняется скрипт, нет доступа к /etc/letsencrypt/ , чтобы открыть файл сертификата. Я попытался дать доступ к каталогу для новой группы, включив в неё этого пользователя:

Еще по теме:  Последствия использования Телеграмм ботов

groupadd letsencrypt usermod -a -G letsencrypt userforbot chgrp -R letsencrypt /etc/letsencrypt/

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

chown -R userforbot:letsencrypt /etc/letsencrypt/

Тогда сервис запустился нормально.

Регистрация

Теперь осталось самое, как оказалось, сложное — зарегистрировать endpoint бота в Telegram. Сложности возникли потому, что я сначала неправильно понял принцип составления endpoint’а, а также из-за проблем с проверкой сертификата.

Для установки/регистрации webhook’а нужно выполнить следующий HTTP запрос (можно просто открыть этот URL в браузере):

https://api.telegram.org/botYOUR-TOKEN/setWebhook?url=https://YOUR.DOMAIN:8443/YOUR-TOKEN/

Пока я экспериментировал и разбирался с форматом endpoint’а, Telegram возвращал мне нормальный результат:

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

Но потом я его видимо задолбал, и он стал возвращать мне следующее:

«ok»: false, «error_code»: 504, «description»: «Gateway Timeout» >

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

Проверить статус webhook’а можно таким запросом:

https://api.telegram.org/botYOUR-TOKEN/getWebhookInfo

Если всё нормально, должно вернуть такое:

«ok»: true, «result»: «url»: «https://YOUR.DOMAIN:8443/YOUR-TOKEN/», «has_custom_certificate»: false, «pending_update_count»: 0, «max_connections»: 40 > >

Как видим, в поле url стоит наш endpoint.

Однако, мне оно сейчас возвращает такое:

«ok»: true, «result»: «url»: «https://YOUR.DOMAIN:8443/YOUR-TOKEN/», «has_custom_certificate»: false, «pending_update_count»: 0, «last_error_date»: 1543762687, «last_error_message»: «SSL error «, «max_connections»: 40 > >

Что указывает на некие проблемы с сертификатом. При этом бот работает нормально, то есть эта ошибка ни на что не влияет. Однако, если вместо fullchain.pem оставить cert.pem (как было указано в примере), то бот работать перестанет.

Стоит также отметить, что если вы установили webhook, то опрос Telegram через getUpdates работать больше будет. Чтобы снять webhook, надо отправить тот же самый запрос, что и для установки, но на этот раз без параметра url :

https://api.telegram.org/botYOUR-TOKEN/setWebhook
«ok»: true, «result»: true, «description»: «Webhook was deleted» >

Ну и всё, не так уж и сложно. Если бы в документации (и сторонних манулах из интернетов) была указана такая простая вещь, что для webhook’а всего-то нужен лишь веб-сервер на стороне бота, я бы это сделал уже сто лет назад. Конечно, продвинутым чувакам это скорее всего было очевидно сразу, но мнe — нет.

Note that even if you sign-in with your e-mail or GitHub, you still won’t be subscribed to replies. That is by design of remark42, unfortunately. To get updates about new replies/commends you need to explicitly subscribe to them either via e-mail or RSS.

Источник: decovar.dev

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