<Proger/> Про мене
ProProger

Telegram Bot API > Telegram Callback Data

Автор: / Час публікації: 28/10/2018 22:02

В попередній статті я розказував про види кнопок в Telegram-ботах. І також ми розглядали inline-кнопки, які мають можливість надсилати якісь дані на наш сервер за допомогою Webhooks. І в деяких випадках краще використовувати такий спосіб!

З додаванням inline-кнопок Ви можете ознайомитись в попередній статті. Там при додаванні inline-кнопки потрібно було передавати параметр callback_data. Загалом туди передають будь-яку потрібну інформацію, і зазвичай вона починається з /. Але це зовсім необов'язково.

Тепер після того як користувач натисне на таку кнопку на ваш сервер, який ви підключали у Webhooks, прийде стрічка з даними в форматі JSON. І зараз ми детальніше їх розглянемо. Ось приклад:

stdClass Object
(
    [update_id] => 275836705
    [callback_query] => stdClass Object
        (
            [id] => 1623895700668480198
            [from] => stdClass Object
                (
                    [id] => 378092681
                    [is_bot] => 
                    [first_name] => Olexii
                    [last_name] => Havryshkiv
                    [username] => wogy14
                    [language_code] => uk
                )
            [message] => stdClass Object
                (
                    [message_id] => 1621
                    [from] => stdClass Object
                        (
                            [id] => BOT_ID
                            [is_bot] => 1
                            [first_name] => BOT_NAME
                            [username] => BOT_USERNAME
                        )
                    [chat] => stdClass Object
                        (
                            [id] => 378092681
                            [first_name] => Olexii
                            [last_name] => Havryshkiv
                            [username] => wogy14
                            [type] => private
                        )
                    [date] => 1540753705
                    [text] => ТЕКСТ ПОВІДОМЛЕННЯ, КНОПКУ ЯКОГО НАТИСНУЛИ
                )
            [chat_instance] => GLOBAL_ID
            [data] => callback_data
        )
)

Це типове повідомлення від серверу, але вже у вигляді об'єктів. В основному ми будемо працювати тільки з from(Дані про того, хто натиснув на кнопку), message(Дані про повідомлення), data(callback_data, параметр, який ми передавали про створенні кнопки). Щоб опрацювати callback_data, достатньо декодувати JSON в об'єкт і звернутись до цієї змінної $data->callback_query->data.

Але якщо це все, що можна робити з inline-кнопками, то не було б причини писати таку коротку статтю. Маючи ці callback-дані, ми можемо редагувати повідомлення, під якими була ця кнопка. І основними методами є editMessageText i deleteMessage. Зараз ми їх розглянемо.

editMessageText

За допомогою цього методу ми можемо редагувати вміст повідомлення з активованою кнопкою. Ось, наприклад:

$params = [
    'chat_id' => $data->callback_query->from->id,
    'message_id' => $data->callback_query->message->message_id,
    'text' => "New Text",
    'parse_mode' => 'HTML'        
];    
$query = http_build_query($params);
$url = "https://api.telegram.org/bot".TELEGRAM_TOKEN."/editMessageText?".$query;
file_get_contents($url);

Get-параметрами потрібно передати ті ж параметри, що й при методі sendMessage. Детальніше про ці параметри можна прочитати тут.

deleteMessage

Аналогічне і видалення повідомлення. Тут достатньо передати chat_id i message_id.

$params = [
    'chat_id' => $data->callback_query->from->id,
    'message_id' => $data->callback_query->message->message_id            
];    
$query = http_build_query($params);
$url = "https://api.telegram.org/bot".TELEGRAM_TOKEN."/deleteMessage?".$query;
file_get_contents($url);

Ось це прості дії з повідомленнями в Telegram-ботах. Тепер ви станете ще ближче до розробки крутого бота!

Callback Query - core.telegram.org/bots/api#callbackquery
editMessageText - core.telegram.org/bots/api#editmessagetext
deleteMessage - core.telegram.org/bots/api#deletemessage
SeoBot - бот для заробітку і просування каналів в Telegram @seobbot
Не забувай написати коментар і поширити посилання в соц. мережах за допомогою кнопок нижче! Дякую за увагу!

Коментарі(1)

Bond
28/10/2018 22:18
Круто :) Класна стаття.