intprog/lwB2
2023-03-06 22:20:52 +04:00
..
README.md Add lwB2 2023-03-06 22:20:52 +04:00

Лабораторная работа №B2 - Разработка чат-бота для Telegram

Цель работы

Понять концепцию построения чат-ботов на примере Telegram.

Ход работы

Чат-бот - программа, с которой можно общаться, будто вы общаетесь с живым (но может быть и не самым умным) собеседником.

Чат-боты служат для различных целей: в качестве напоминателей (всяческие календари), подсказчиков ("не забудь заплатить за электричество!1"), информационных служб (например, "пробить авто по номеру" или "показать погоду в Ульяновске") и много чего ещё.

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

Существует множество архитектур по созданию чат-ботов для разных платформ. Мы же рассмотрим Telegram.

Для создания нового бота необходимо... написать боту @BotFather! Он на английском языке предложит определить имя нового бота, его логин и выдаст в итоге ключ доступа к API (token). Там же будет написано, что этот ключ ни в коем случае нельзя передать кому-либо, поэтому при оформлении отчёта по этой работе, пожалуйста, удаляйте token из исходного кода и из скриншотов.

Список доступных методов для ботов Telegram перечислен здесь: https://core.telegram.org/bots/api#available-methods. Где-то там есть и описание того, как эти методы вызывать. Нам пока это не особо интересно, однако знать следующие вещи стоит:

  • бот получает обновления при помощи команды getUpdates. Эта команда позволяет возвращать те обновления, к которым имеет доступ чат-бот. Например, кто-то написал или отредактировал личное сообщение. Команда позволяет получать до 100 обновлений за один вызов.
  • при вызове команды обычно требуется объект какого-то формата на вход. Также обычно команда возвращает ответ в определённом формате. Параметры можно сериализовать в JSON-строку.
  • если кто-то пишет чат-боту сообщения, информация об этом состоит из следующих полей: https://core.telegram.org/bots/api#message. Как можете заметить, возвращается много информации, но там есть как минимум: ИД сообщения, текст сообщения, чат, из которого было получено сообщение, дата, прикреплённые аудио, фото и т.д.
  • если мы хотим отправить сообщение, следует вызвать метод sendMessage: https://core.telegram.org/bots/api#sendmessage. Там обязательно требуется указать ИД чата и текст нашего сообщения. Однако можно указать и другие поля, например, ИД сообщения, на который мы хотим ответить и список доп. кнопок для быстрых действий.

Также первое сообщение боту от пользователя обычно /start, это также стоит помнить.

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

  • на сообщение /start писать, что этот бот написан в качестве учебного материала и может выполнять следующие команды: ...
  • на сообщение /who выводит ИД чата, ИД сообщения, ИД отправителя, имя отправителя и дату отправки сообщения.
  • на сообщение /rand %i %j выводит случайное число между %i и %j. Или сообщение об ошибке, если %j меньше, чем %i.
  • при отправке голосового сообщения должен отвечать, что он "бумер" и не понимает голосовые сообщения.
  • при отправке картинки должен всегда осыпать пользователя комплиментами по поводу красоты того, что он прислал.

Забавно? Ещё бы. Осталось реализовать.

Ход выполнения видится следующим:

  1. Регистрация бота.
  2. Обработка получения обновлений.
  3. По каждому обновлению: если оно сообщение, то разбираем содержимое сообщения.
  4. После разбора содержимого формируем ответ.
  5. Отправляем ответ на сообщение.

Вроде бы всё просто, однако одновременно с этим ничего и не понятно.

Здесь нам придёт на помощь сообщество ИТ-специалистов, потому что многие стандартные решения уже были реализованы до нас (или нами).

Например, далеко не полный список библиотек для построения ботов для Telegram:

Ваши задачи на эту лабораторную работу:

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

Демонстрация работы

Демонстрация работы предполагает запуск бота и проверку его ответов на сообщения преподавателя в режиме реального времени.