callbackQuery telegram bot

1087
13 июля 2017, 02:09

никак не могу разобраться с callbackquery в telegram bot api. одним из требований является id - Уникальный идентификатор запроса. откуда его взять?

$callbackquery=array(array("id"=>"","from"=>"$user","data"=>"$inbreply2"));
    $inlinekeyb=array(array(array("text"=>"принять","callback_data"=>"$callbackquery")));
$inlineresp=array("inline_keyboard"=>$inlinekeyb);
$inbreply=json_encode($inlineresp);
Answer 1

Объект вида CallbackQuery возвращается боту (например при использовании метода getUpdates) после того как пользователь нажал CallbackButton. При этом в объекте в поле data будет то, что Вы указали в параметре callback_data в массиве описывающем InlineKeyboardButton

Например в reply_markup мы передаем такой массив:

$arMarkup = [
    'inline_keyboard' => [
        [
            ['text' => 'test_1','callback_data' => '1'],
            ['text' => 'test_2','callback_data' => '2'],
        ]
    ]
];
//не забываем преобразовать в JSON
$replyMarkup = json_encode($arMarkup);

Пользователь в клиенте нажимает кнопку с надписью test_1 и затем ответ с CallbackQuery отправляется на веб-хук или мы сами должны получить его через метод getUpdates

Например мы получаем сообщения через getUpdates, тогда вызвав метод, мы получаем JSON вида:

"{"ok":true,"result":
    [
        {
            "update_id":xxxxxxxxxx,
            "callback_query":
            {
                "id":"xxxxxxxxxxx",
                "from":
                {
                    "id":xxxxxxxxx,
                    "first_name":"xxxxxxx",
                    "last_name":"xxxxxxx",
                    "username":"xxxxxxxxx",
                    "language_code":"ru"
                },
                "message":
                {
                    "message_id":xxxx,
                    "from":
                    {
                        "id":xxxxxxxxx,
                        "first_name":"xxxxxxxx",
                        "username":"xxxxxxx"
                    },
                    "chat":
                    {
                        "id":xxxxxxxx,
                        "first_name":"xxxxxxx",
                        "last_name":"xxxxxxxx",
                        "username":"xxxxxxx",
                        "type":"private"
                    },
                    "date":1499854111,
                    "text":"test"
                },
                "chat_instance":"xxxxxxxxxxxx",
                "data":"1"
            }
        }
    ]
}"

Далее можно обработать этот CallbackQuery и например отправить пользователю сообщение в зависимости от того что содержится в поле data

Совсем простой пример:

<?php
$bot = new TelegramBot();
$arUpdates = $bot->getUpdates();
if (!empty($arUpdates['result'])) { 
    foreach ($arUpdates['result'] as $arResult) {
        if (array_key_exists('callback_query',$arResult)) {
            $userId = $arResult['callback_query']['from']['id']; 
            if ($arResult['callback_query']['data'] == 1) {
                $bot->sendMessage($userId, 'Its ok!');
            } else {
                $bot->sendMessage($userId, 'Its not ok!');
            }
        }
    }
}
?>
READ ALSO
Не могу создать сессию

Не могу создать сессию

Имеется код который должен авторизировать пользователяАвторизация держится на сессиях разумеется

248
Почему Apache возвращает forbidden?

Почему Apache возвращает forbidden?

В корне сайта нет файлаhtaccess , присутствует index

249
Как запомнить данные, выбранные в &lt;select&gt; из MySQL

Как запомнить данные, выбранные в <select> из MySQL

Логика следующая: у меня есть форма ввода данных состоящая из

358
Архитектура приложения yii2 с админкой на angular 2

Архитектура приложения yii2 с админкой на angular 2

Как лучше устроить архитектуру приложения на базе yii2 и админкой на angular2? Пока что есть приложение yii2-basic с самим сайтом, модуль yii2 api (rest-api)

315