Создание телеграм-бота - как получить значения из двух кликов по двум клавиатурам
Телеграм-ботов сейчас не пишет, наверное, только тот, кому это совсем не интересно. Я решил попробовать написать своего бота. Я, конечно, не программист, но какие-то знания о PHP ещё остались.
Как создать телеграм-бота написано достаточно. В интернет много инструкций и примеров кодов. Про это повторяться не буду. Напишу только о том, какая проблема возникла и как её решили.
(Программисты раскритикуют, наверное, такое решение и будут больно "пинать", но эта заметка для любителей.)
Вот в чём была проблема. Бот для поиска авиабилетов. Сначала пользователю показывается клавиатура с выбором аэропорта отправления, затем клавиатура с выбором аэропорта назначения, а затем клики этих двух клавиатур обрабатываются программой и выдаются варианты перелётов.
Первая клавиатура - Reply Keyboard.
Примерно такого вида:
"keyboard" => [ "text" => "Москва", ["text" => "Петербург",],
и так далее.
При клике по кнопке передаётся атрибут "text" с названием города отправления.
Переданное значение легко уловить и использовать дальше в программе.
Вторая клавиатура - Inline Keyboard.
Примерно такого вида
"inline_keyboard" => ["text"=>"Казань", "callback_data"=>' KZN'], ["text"=>"Калининград", "callback_data"=>'KGD']
и так далее.
Клик по кнопке этой клавиатуры тоже несложно выловить. (Вы найдёте много примеров с кодом в интернет.
Проблема в том, что после клика по второй клавиатуре не сохранялось значение клика по первой. В интернет примеров кода с решением этой задачи не нашёл, но нашёл намёк на путь решения.
Вот, что в итоге получилось.
После клика по первой кнопке значение атрибута "text" используется при создании второй клавиатуры и добавляется в атрибут callback_data.
В итоге получается вторая клавиатура такого примерно вида:
"inline_keyboard" => ["text"=>"Казань", "callback_data"=>$text . ' : KZN'], ["text"=>"Калининград", "callback_data"=>$text . ' : KGD']
и так далее.
После клика по первой кнопке она становится такой:
"inline_keyboard" => ["text"=>"Казань", "callback_data"=> ' Москва : KZN'], ["text"=>"Калининград", "callback_data"=>' Москва : KGD']
и так далее.
После клика по второй клавиатуре мы получаем значение "callback_data" (из callback_query) а дальше разделить значение Москва : KZN по двоеточию и использовать разделённые значения (переменные) это уже как вам будет нужно.
Программисты уже готовы критиковать? Не нужно, для меня важно, что это работает. (Не стреляйте в пианиста! Он играет как может.)
(При поиске образцов котов в интернете часто натыкался на образцы с ошибками. Пользуйтесь только проверенными источниками, обращайтесь к технической документации или лучше наймите программиста.
https://t.me/visitplus_bot - это другой бот, но тоже на тему путешествий.
Новые записи в блогах
- Создание телеграм-бота - как получить значения из двух кликов по двум клавиатурам
- Вас обманывают. Понемногу, но регулярно.
- Спасение Анны (Карениной) - по мотивам произведения Л. Н. Толстого
- Слова благодарности ласкают слух
- По какой цене сдавать квартиру, как выставить правильную цену
- Тёмная сторона силы красоты
- Конец эксперимента близок?
- Тема одна, а мнения у людей разные
- Цены влияют на наше покупательское поведение, конкретное наблюдение
- Паранойя-я-я-я-я
В связи с техническими проблемами регистрация пользователей приостановлена. Приносим извинения.