Недавно я нашёл очень хорошую SDK для создания ботов. Не зная документацию Telegram, но разбираясь в методах API, я быстро разобрался в том как создавать ботов на Telegram с клавиатурой, подсказками и передачей картинок. В данной записи мы с вами рассмотрим библиотеку TelegramBot/Api
Ссылка на SDK- https://github.com/TelegramBot/Api/
Перейдя по ссылке ваше, вы сможете скачать библиотеку с GitHub или через Composer.
Регистрация файла для приёма хуков от бота
У Telegram максимально упрощённая система приёма хуков. Для того чтобы назначить файл куда будут отправляться запросы от бота, достаточно просто перейти по шаблонному URL. В данном URL нужно подставить свой токен и путь до файла с обработчиком.
https://api.telegram.org/botТОКЕН_ДЛЯ_БОТА/setwebhook?url=https://prog-time.ru/tg_script/index.php
/* ловим запросы от бота */
$requestBody = file_get_contents('php://input');
$data = json_decode($requestBody, true);
/* записываем данные в лог файл */
file_put_contents(__DIR__ . '/message.txt', print_r($data, true));
Для подключения библиотеки пропишем следующий код:
// подключаем библиотеку
require_once __DIR__ . '/TelegramBot/vendor/autoload.php';
Для работы любого метода вам нужно для начала создать объект и передать ему токен вашего бота.
$bot = new \TelegramBot\Api\Client(API_KEY);
Простая отправка сообщения с помощью бота
Для отправления простого сообщения используется метод sendMessage(). Первым параметром передаётся id диалога, второй параметр — это само сообщение и третий параметр — тип сообщения (в этом случае я всегда проставляю «HTML» для поддержки тегов).
$bot->sendMessage(
$message->getChat()->getId(),
"Текс для сообщения",
"HTML"
);
Отправка картинки с помощью бота
Для отправки изображений вам нужно использовать метод sendPhoto(). К изображению вы можете добавить текст, для этого пропишите его третьим параметром.
$bot->sendPhoto(
$message->getChat()->getId(),
"https://telegram.org/file/464001876/2/61q3quSkA-o.229990/0448e8588e48b3942c",
"Some <b>bold</b> caption for the photo",
null,
null,
null,
"HTML"
);
Отправка кнопок в сообщение в Telegram
$question = 'Это текст для сообщения!';
$keyboard = new \TelegramBot\Api\Types\Inline\InlineKeyboardMarkup([
[
['text' => "Кнопка 1", 'callback_data' => 'option1'],
['text' => "Кнопка 2", 'callback_data' => 'option2'],
['text' => "Кнопка 3", 'callback_data' => 'option3']
]
]);
$bot->sendMessage($message->getChat()->getId(), $question, null, false, null, $keyboard);
Удаление сообщений с помощью бота
Для удаления определенного сообщения можно использовать метод editMessageText(). Первый параметр — id чата, второй параметр — id сообщения, а третьим параметром вы можете передавать сообщение для замены.
$bot->editMessageText(
$temp_message->getChat()->getId(),
$temp_message->getMessageId(),
"I'm sorry. I found <b>nothing</b>!",
"HTML"
);