Как шаг за шагом написать своего чат-бота для Telegram на Python. Или как мы провели ValoStartup Meetup #9

30 августа в преддверии дня знаний повели девятый по счету ValoStartup Meetup. Уже по хорошей традиции мы разместились в уютной ивент-зоне компьютерной школы Hillel. В этот раз спикером дебютировала Марина Лебедева Full Stack Developer нашей компании. 

Чуть больше 30 участников, среди которых были уже знакомые нам лица и те, которые пришли к нам впервые. Мы начали с того, что такое чат-боты и как давно они появились.  Интересно, что тема ботов не нова. Первый бот был запущен в консоли в 1966 году. Это был бот Eliza, который представлял собой «пародию» того, как мог бы отвечать психотерапевт при первой беседе с пациентом.

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

Ранее мы никогда не публиковали материалы митапа в открытом доступе. Однако сегодня мы хотим сделать иначе и написать такой вот развернутый блог пост. Будем ли мы публиковать такие пост-материалы далее, пока не знаем.

Итак, далее много технической информации. Если вы хотите посмотреть фоточки, листайте сразу вниз 😉

Кстати, вот презентация с митапа:

ValoStartup Meetup #9 «Как шаг за шагом написать чат-бот для Telegram на Python» from LumoSpark

 

И ссылка на GitHub.

Создание нового бота в Telegram

Пропустим теоретическую часть и сразу к делу. Бот в Telegram создается при помощи другого бота под названием @BotFather. Находим его в поиске и отправляем команду /newbot, выбираем имя, которое будет отображаться в списке контактов, и адрес. Для примера мы выбрали «Lumotest Bot» с адресом «Lumotest_bot». Если адрес не занят, а имя введено правильно, @BotFather пришлет в ответ сообщение с токеном — «ключом» для доступа к созданному боту. Его нужно сохранить и никому не показывать, поскольку по этому ключу можно вносить различные изменения. 

Все запросы к API Telegram Bot должны быть поданы через HTTPS и должны быть представлены в следующем виде:

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

Например:

https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe

Допускаются GET и POST запросы. Для передачи параметров в Bot API доступны 4 способа:

  • Запрос в URL;
  • application/x-www-form-urlencoded;
  • application/json (не подходит для загрузки файлов);
  • multipart/form-data (для загрузки файлов).

Ответ придёт в виде JSON-объекта, в котором всегда будет булево поле ok и опциональное строковое поле description, содержащее человекочитаемое описание результата. Если поле «ok» истинно, то запрос прошёл успешно и результат его выполнения можно увидеть в поле «result». В случае ошибки поле «ok» будет равно «false», а причины ошибки будут описаны в поле «description».

Библиотеки для создания Telegram-ботов

Существует несколько библиотек для создания Telegram-ботов, например pyTelegramBotAPI, Telegram-bot-api, Bobot, Aiotg, Botlab, Telegame и прочее. В своих примерах мы использовали именно pyTelegramBotAPI.

Установка библиотеки PyTelegramBotAPI

Команда установки библиотеки: 

pip install pytelegrambotapi

Проверка правильности установки:

python3

Когда появится окно ввода (вида >>>) введите команду:

import telebot

Если ничего не произошло — значит, библиотека установлена корректно.

Обмен данными с ботом GETUPDATES и SETWEBHOOK

Имеется 2 режима работы с ботами:

  • setWebhook — используйте этот метод, чтобы указать URL-адрес и получать входящие обновления через исходящий веб-сайт. Всякий раз, когда есть обновление для бота, будет отправлен запрос POST HTTPS на указанный URL-адрес, содержащий сериализованное JSON обновление. В случае неудачного запроса, после некоторого количества попыток, прекращается отправка информации. Возвращает true.
  • getUpdates — используйте этот метод для получения входящих обновлений с использованием опроса. Возвращается объект Array of Update.

Методы TELEGRAM

  • getMe;
  • sendMessage;
  • forwardMessage;
  • sendPhoto;
  • sendAudio;
  • sendDocument;
  • sendVoice;
  • sendVideoNote;
  • sendLocation;
  • sendContact.

По-умолчанию, у ботов заданы следующие команды:

  • /start -начинает общение с пользователем (например, отправляет приветственное сообщение). В эту команду также можно передавать дополнительные аргументы
  • /help — отображает сообщение с помощью по командам. Оно может представлять собой короткое сообщение о вашем боте и список доступных команд.
  • /settings — (по возможности) возвращает список возможных настроек и команды для их изменения.

Команды представляют собой более гибкий способ общения с роботом. Рекомендуется следующий синтаксис:

/команда [необязательный] [аргумент]

Команда должна начинаться с символа косой черты «/» и не может быть длиннее 32 символов. Команды могут состоять из букв латинского алфавита, цифр и подчёркивания. Если в группе есть несколько ботов, вы можете дописать после команды имя бота, чтобы избежать коллизий в общих командах:

/[email protected]

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

  • Сообщения, начинающиеся с символа косой черты «/»;
  • Сообщения, содержащие @упоминание бота;
  • Ответы на сообщения бота;
  • Служебные сообщения (о добавлении пользователя, смены изображения группы и т.д.).

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

Пользовательские клавиатуры

Обработка событий клавиатуры. Отправка НЕтекстовых сообщений. Мы определяем, что конкретно запросил пользователь, сверяя текст с командами клавиатуры.

INLINE-боты

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

Использование БД при разработке бота

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

Машинное обучение бота

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

Сервисы обработки естественного языка:

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

Анализ естественного языка и выделение смысла из текстовых предложений:

Бот e-Commerce. Онлайн оплата через бот

  • Получаем токен для оплаты через онлайн-кассу;
  • Подключаем оплату к онлайн боту;
  • Настраиваем команды оплаты бота.

Размещение бота на сервере

Для размещения бота на сервере мы воспользовались сервисом HEROKU.  Для загрузки бота на сервер, необходимо сконфигурировать пакет heroku (2 конфигурационных файла), залить весь проект, например, на GitHub. Подключить свой репозиторий к текущему проекту и нажать кнопку «deploy». При необходимости, можно настроить автоматическую загрузку на сервер, при добавлении новых коммитов на github.

Если вдруг вы пропустили ссылку на GitHub вверху, дублируем https://github.com/LumoSpark/meetap9-bots 

Что нас ждет дальше?

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


После окончания доклада ребята еще долго общались и задавали вопросы. Приятно чувствовать, когда то, что ты делаешь — нужно миру. Спасибо всем за участие. Скоро будет полный фото и видео-отчет, а пока делимся фотками с телефонов. Если у вас что-то есть, выкладывайте с хэштегом #valostartup и #lumospark.

И не забывайте писать свои комментарии и отзывы!;)

 

10й, юбилейный митап уже в процессе подготовки. Тема пока остается в тайне, но можем сейчас уже сказать, что проводить его будет Артур Галустян Art Director компании LumoSpark. Скоро анонс, следите за новостями и хорошего вам настроения 😉

Comments are closed.