Пишем Telegram-бота на PHP

BotMan Logo Недавно наткнулся на гитхабе на один интересный проект. Сам по себе проект весьма популярный (3к+ звезд). Но я увидел на него впервые. Что примечательно написан он на PHP. И называется он “Botman”.

Botman — PHP-фреймворк, с помощью которого вы очень просто можете написать своего бота. Он включает в себя поддержку таких платформ как: Slack, Telegram, Facebook Messenger, WeChat и т.д.

Сразу скажу, что до этого времени мне еще не приходилось писать бота. И эта попытка - это, так скажем, просто “по фану”.

Приступим непосредственно к главному.

Установка

Вообще, автора предлагает 2 варианта установки. Через Composer или же установить BotMan Studio.

Второй вариант я не пробовал, поэтому не могу про него ничего сказать.

Для начала переходим в нужную директорию (возможно сначала ее создаем).

Далее для установки через Composer, используем команду:

composer require botman/botman

Теперь у нас есть основные файлы для работы, но для написания бота нам еще нужен драйвер для Telegram.

Установить его можно следующей командой:

composer require botman/driver-telegram

Теперь, когда у нас есть все необходимое, можем переходить к следующему шагу.

Пример простого кода

Для старта воспользуемся примером кода из официальной документации.

<?php

use BotMan\BotMan\BotMan;
use BotMan\BotMan\BotManFactory;

$config = [
    // конфигурация
    // "telegram" => [
    //    "token" => "TOKEN"
    // ]
];

// подключаем нужный драйвер
DriverManager::loadDriver(\BotMan\Drivers\Telegram\TelegramDriver::class);

// создаем экземпляр
$botman = BotManFactory::create($config);

// даем боту правило для прослушивания
$botman->hears('hello', function (BotMan $bot) {
    $bot->reply('Hello yourself.');
});

// начинаем прослушивать
$botman->listen();

Кратко о содержании кода. В переменной $config нам необходимо поместить токен нашего Telegram-бота (об этом чуть позже). Далее загружаем необходимый нам драйвер для Telegram. После этого создаем экзмепляр бота BotMan и даем ему команду слушать.

В данном случае, как только бот получает сообщение ‘hello’, он отвечает сообщением ‘Hello yourself.’. Самый простой пример.

Примеры для hears()

Рассмотрим, что как еще можно использовать этот метод.

Начнем с того, что callback-функцию можно определить в другом месте. Например, в отдельном классе:

$botman->hears('Привет', 'Some\Namespace\MyBotCommands@handleFoo');
// прослушиваем приходящие сообщения
$botman->listen();

class MyBotCommands {

    public function handleFoo($bot) {
        $bot->reply('Здравствуй!');
    }

}

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

$botman->hears('Передай привет {name}', function ($bot, $name) {
    $bot->reply('Привет '.$name.'!');
});

Также мы можем использовать регулярные выражения:

$botman->hears('Я хочу цифру ([0-9]+)', function ($bot, $number) {
    $bot->reply('Получи цифру '.$number);
});

Создаем Telegram-бота

Для того, чтобы создать нового бота, вам достаточно написать этому боту (@BotFather).

Просто введите команду /newbot и следуйте инструкциям. Вам потребуется ввести имя бота и его никнейм. После этого вы получите свой API токен. Он то как раз нам и понадобится.

Теперь нам необходимо зарегистрировать нашего бота. Точнее сообщить Телеграму то, где находится наш бот.

Сделать это можно, отправив POST-запрос по такому адресу:

https://api.telegram.org/bot<ВАШ-ТОКЕН>/setWebhook

В качестве данных необходимо передать всего 1 параметр - url. Значением должен быть адрес, по которому доступен ваш бот. Для обеспечения безопасности должен использоваться только HTTPS.

Заключение

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

Для того, чтобы написать своего бота нужна идея. Он должен быть хоть сколько-нибудь полезным. Идей у меня пока нет, и поэтому не вижу смысла что-то делать.

Будут идеи - будет и продолжение. Спасибо за внимание!


Дата публикации: 28.12.2017