Как сделать чат-бота Telegram. Рассказываю на реальном примере.

12 February

В данной статье я расскажу, как сделать бота Telegram на примере своего чат-бота для колесного робота (исходник можно скачать с сайта Github по ссылке ниже).

Скриншот с официального сайта https://core.telegram.org/bots
Скриншот с официального сайта https://core.telegram.org/bots
Бот - это приложение третьей стороны, которое запускается внутри Telegram. Люди могут отправлять ему сообщения и команды, как в обычном чате. Контролировать работу бота можно с помощью HTTPS запросов через API Telegram.

Что могут боты Telegram?

  • Ботов можно подключить практически к любому сайту и организовать подачу контента и новостей.
  • Бот может получать платежи от пользователей Telegram.
  • С помощью бота возможно создать специализированный сервис по обработке информации и сообщений от клиентов.
  • Бот может быть игрой с предоставлением богатой HTML5 разметки.
  • Виртуально боты могут всё !

Как начать разработку чат-бота?

  1. Обратиться к главному боту по имени "BotFather". С помощью простых запросов вы создадите в Telegram своего бота и получите токен авторизации для использования в API.
  2. Проще всего начать программировать своего бота можно по существующим примерам на официальном сайте Telegram core.telegram.org/bots/samples. Постепенно добавляя нужный вам функционал.
  3. Нужен сервер для запуска скрипта бота и интернет адрес с протоколом https для запросов WEBHOOK_URL.

Пример бота @kema_robot

Начнём разработку бота на языке PHP по примеру бота @kema_robot. За основу я брал пример с cайта Telegram.

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

  • Посмотреть бота в Telegram: kema_robot
  • Исходник в Github: kema_robot. Где kemarobot.php - скрипт самого бота, а msgkemarobot.php - скрипт отправки сообщений в чаты бота.

В параметре "BOT_TOKEN" - прописать токен бота, созданного BotFather. В параметре "WEBHOOK_URL" - установить URL php скрипта бота.

Функции apiRequestWebhook, exec_curl_request, apiRequest и apiRequestJson нужны для работы бота, их редактировать не надо.

PHP скрипт бота Telegram
PHP скрипт бота Telegram
функция apiRequest
PHP скрипт бота Telegram
функция exec_curl_request
PHP скрипт бота Telegram
функция apiRequestJson
PHP скрипт бота Telegram
функция apiRequestWebhook
PHP скрипт бота Telegram

В функции processMessage прописывается функционал бота. Функция processMsgArr создана для записи в массив чатов бота. Этот массив сериализуется и записывается в файл msgs.bas. В ключах массива находятся id чатов. Каждому чату Telegram присваивает уникальный номер, по которому бот сможет отсылать сообщения клиентам.

Функция processMessage
Функция processMessage
Функция processMsgArr
Функция processMessage

Команда /start

Так выглядит запрос команды /start в чате:

Команда /start в чат-боте
Команда /start в чат-боте

Код на языке PHP реализации команды /start. Открываем текстовый файл "start.txt" и отправляем его с помощью API в чат:

if (strpos($text, "/start") === 0)
{
$start_txt = file_get_contents("start.txt");
apiRequestWebhook("sendMessage", array('chat_id' => $chat_id, "text" => $start_txt));
processMsgArr($chat_id, $text);
$unknown_command = false;
return true;
}

Аналогичным образом реализуются команды help, about, parts, home, ttx. Для каждой команды создается текстовый файл на сервере и отправляется в чат.

Создаем клавиатуру с помощью API Telegram

На примере команды /foto создаем клавиатуру. Вот так она выглядит в чате:

Клавиатура в чат-боте
Клавиатура в чат-боте

Код на языке PHP создания клавиатуры. В параметрах функции "apiRequestJson" создаем вложенный массив keyboard со значениями строк и столбцов:

if (strpos($text, "/foto") === 0)
{
apiRequestJson("sendMessage", array('chat_id' => $chat_id, "text" => 'Выбери фото:', 'reply_markup' => array(
'keyboard' => array(array('Основной вид', 'Вид спереди'),array('Вид сбоку', 'Вид сзади')),
'one_time_keyboard' => true,
'resize_keyboard' => true)));
$unknown_command = false;
return true;
}

Распознавание текстового сообщения

С помощью PHP функции mb_ereg_match можно распознавать сообщения клиента в чате бота:

if (mb_ereg_match("Схема соединений робота", $text))
{
$unknown_command = false;
apiRequestWebhook("sendDocument", array('chat_id' => $chat_id, "document" => 'http://**********************/design/shema.pdf'));
return true;
}

В данном примере по запросу "Схема соединений робота" бот высылает документ pdf. Подобным образом можно высылать фотографии функцией apiRequestWebhook, если в параметре указать sendPhoto. Пример:

if (mb_ereg_match("Вид спереди", $text))
{
$unknown_command = false;
apiRequestWebhook("sendPhoto", array('chat_id' => $chat_id, "photo" => 'http://**********************/foto/front.jpg'));
return true;
}

Отправка сообщения в чаты бота

Вот простой код на языке PHP для массовой отправки сообщения во все чаты бота:

if (isset($_GET["msg"]))
{
$msg = urldecode($_GET["msg"]);
$msgs = unserialize(file_get_contents("msgs.bas"));
while(list($key, $value) = each($msgs))
{
apiRequest("sendMessage", array('chat_id' => $key, "text" => $msg));
print("Чат: ".$key.", msg sent<br>");
usleep(300000);
}
}

В параметре $_GET["msg"] можно передать сообщения для рассылки, а в файле msgs.bas находится сериализованный массив, в ключах которого id чатов (см. выше).

Официальные страницы: