Чат-боты в мессенджерах
Бот — это сокращение от слова «робот». Чат-ботами называют программы, взаимодействующие с пользователем через мессенджер, систему обмена сообщениями. Это может быть мессенджер, встроенный на страницу сайта, или мобильный мессенджер, вроде WhatsApp или Telegram.
Через чат-ботов компании предоставляют клиентам дополнительный канал доступа к информации и услугам. Боты могут, например, известить клиента о появлении в продаже какого-то товара или об изменении цены на него.
Чат-бот хорош тем, что взаимодействие с ним идёт через знакомый пользователю интерфейс мессенджера. Чат-бот удобен: сегодня многие предпочтут отправить сообщение в мессенджере, чем работать через браузер. И ещё одно огромное преимущество чат-ботов перед настольными системами в том, что бот всегда «сидит» в кармане у пользователя, и это ускоряет доставку информации.
А для программиста бот — это отличный помощник, на которого можно переложить массу рутинных задач.
Например, можно десять раз в час заходить через браузер в свой аккаунт и узнавать, проверена ли ваша домашка, — а можно сгрузить эту задачу на бота и ждать сообщения в мессенджере, занимаясь более полезными и интересными делами.
Bot API в Telegram
Для управления ботами в Telegram есть Bot API. Общее описание процесса создания ботов представлено в официальной статье «Bots: An introduction for developers». Документация по Bot API опубликована здесь.
Отправка и получение запросов через Bot API
Боты в Telegram — это специализированные аккаунты. Чтобы пользователи отличали чат-ботов от реальных аккаунтов, для бот-аккаунтов установлены некоторые ограничения.
- Имя бота должно оканчиваться на bot*, например @practicum_bot* или @MisterRobot.
- У ботов нет статуса последнего посещения, вместо него выводится надпись «бот».
- Бот не может «постучаться» к другому пользователю и первым начать диалог: бот должен скромно сидеть и ждать, пока кто-нибудь обратит на него внимание и напишет ему.
Программа, управляющая ботом, взаимодействует с Bot API через HTTP-запросы: их можно отправлять как с помощью стандартной Python-библиотеки requests, так и посредством специальных библиотек-обёрток.
Простые запросы можно делать вручную, через обычный браузер. Вместе с запросом к Bot API должен передаваться токен, который выдаётся при создании бота.
Создание аккаунта Telegram-бота
Разработчики Telegram написали специального бота @BotFather, его предназначение — создавать и регистрировать ботов в Telegram. Найдите бота @BotFather: в окно поиска над списком контактов введите его имя.
Обратите внимание на иконку возле имени бота: белая галочка на голубом фоне. Эту иконку устанавливают администраторы Telegram, она означает, что бот настоящий, а не подделка (в системе может существовать несколько ботов с одинаковыми видимыми именами).
Опасайтесь подделок, выбирайте натуральное!
Нажмите кнопку Start («Запустить»), чтобы начать диалог с ботом. Затем отправьте команду /newbot
и укажите параметры нового бота:
- имя (на любом языке), под которым ваш бот будет отображаться в списке контактов;
- техническое имя вашего бота, по которому его можно будет найти в Telegram. Имя должно оканчиваться на слово bot в любом регистре, например
YaBot
,ya_bot
или дажеyour_login_assistant_bot
. Имена ботов должны быть уникальны.
Бот создан! @BotFather поздравит вас и отправит вам токен для работы с HTTP API. Токен выглядит примерно так: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
.
Client API и Bot API — это разные системы, у них разные токены. Токен Client API не сработает для доступа к Bot API.
Токен пригодится при отправке запросов к боту. @BotFather также может по вашему запросу отозвать токен (отправьте боту @BotFather команду /revoke
) и сгенерировать новый.
А в любой непонятной ситуации выполняйте команду /help
— и @BotFather вам покажет, на что он способен.
Готово!
Бот создан, но какой прок с молчаливого бота? Надо научить его чему-нибудь хорошему.— Ну скажи: «Кто там?», «Кто там?».
Бот отправляет вам сообщение
В Telegram найдите своего бота по имени через поиск, так же, как вы искали @BotFather. Нажмите кнопку Start («Запустить»), чтобы активировать его. Без такой активации бот не сможет отправлять вам сообщения.
Теперь можно отправить сообщение от имени бота в свой аккаунт. Самый простой способ — отправить GET-запрос из браузера, обратившись к методу API sendMessage
и передав необходимые параметры:
chat_id
— это ID того чата, в который бот должен отправить сообщение;text
— текст сообщения.
Запрос должен быть отправлен на https://api.telegram.org:
https://api.telegram.org/bot<ваш-токен>/sendMessage?chat_id=<id_чата_получателя>&text=<текст_сообщения>
Чтобы бот отправил сообщение именно вам, нужно узнать ID своего Telegram-аккаунта. Спросите у Telegram-бота @userinfobot — он подскажет.
Если возникнут какие-то проблемы — посмотрите документацию для метода sendMessage в Bot API.
Запрос должен получиться примерно таким:
https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/sendMessage?chat_id=1234567&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 часа. Если бот не получил их в течение суток с момента отправления — он не получит их никогда: сообщения будут стёрты.