@ldeimosl
Разработчик

Telegram Bot: Как получить не только callback от inlinekeyboard, но и введенное вручную сообщение?

Бот с использованием telegram-bot/api. Есть код (сокращенный):

Код бота
<?php
include('vendor/autoload.php'); 
include('admin/include/database.php'); 

function startMess($bot, $message, $db)
{
    ...
    foreach ($arDBStreets as $arDBStreet) {
        $arStreets[] = [
            ['callback_data' => 'street__' . $arDBStreet['id'], 'text' => ' ' . $arDBStreet['name']]
        ];
    }
    $arStreets[] = [
        ['callback_data' => 'message__1', 'text' => 'Перейти к разделам']
    ];

    $keyboard = new \TelegramBot\Api\Types\Inline\InlineKeyboardMarkup($arStreets);
    $sendedStartMessage = $bot->sendMessage($message->getChat()->getId(), $mess, false, null, null, $keyboard);
    
...

}

...

try {
    $bot = new \TelegramBot\Api\Client($settings['telegram']['token']);

    $bot->command('start', function ($message) use ($bot) {
        global $db;

       ...

        startMess($bot, $message, $db);
    });

    $bot->on(function ($update) use ($bot) {
        global $db;

        $callback = $update->getCallbackQuery();
        $message = $callback->getMessage();
        $data = $callback->getData();

        $bot->answerCallbackQuery($callback->getId());

        $arData = explode('__', $data);

        if ($arData[0] == 'street') {
            houseMess($bot, $message, $db, $arData[1]);
        }
        ...
    }, function ($update) {
        $callback = $update->getCallbackQuery();
        if (is_null($callback) || !strlen($callback->getData()))
            return false;
        return true;
    });

    $bot->run();

} catch (\TelegramBot\Api\Exception $e) {
    $e->getMessage();
}



Подскажите, пожалуйста, как отловить сообщения от пользователя не с inlinekeyboard, а просто отправленные боту сообщением. К примеру, задаю вопрос - введите возраст и надо получить от пользователя сообщение с его возрастом.
  • Вопрос задан
  • 252 просмотра
Решения вопроса 1
@ldeimosl Автор вопроса
Разработчик
Так, нашел ответ. Порылся в классу Client, там есть метод getRawBody(). Так вот он содержит в себе все, что приходит от клиента - и сообщения, и callback
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@dx4321
Я думаю, что можно брать сообщение пользователя и смотреть есть ли в нем команда для обработки. После чего брать команду из сообщения и использовать остальной текст как нужно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы