Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

В данной статье мы разберем каким образом можно сделать клавиатуру быстрых ответов для Telegram.

Простой метод

В стрелках, выходящих из блока вопроса, можно автоматически создать кнопки с вариантами ответа, используя параметр Вариант ответа.

Примечание

Кнопки, созданные таким образом имеют следующие ограничения:

  • На одной строке может располагаться только одна кнопка
  • Максимальный размер клавиатуры - 4 строки (соответственно, 4 кнопки)

Для добавления кнопки ответа в параметрах стрелки из блока вопроса нужно заполнить поля Вариант ответа и Порядковый номер кнопки.
В качестве типа выходных данных могут использоваться ключевые слова или интеллектуальное принятие решений – но при нажатии на кнопку будет произведен переход по стрелке, независимо от настроек типа выходных данных.

Image AddedПример работы кнопок в телеграме:

Image Added

Продвинутый метод

Используя запрос к серверу, можно отправить запрос на отправку сообщений Telegram, который может содержать в себе клавиатуру быстрых ответов.

Примечание

Кнопки, созданные таким образом имеют следующие ограничения:

  • На одной строке могут располагаться 4 кнопки
  • Максимальный размер клавиатуры - 4 строки (соответственно, максимум можно вывести 16 кнопок)
  • Перед этим запросом может находиться только блок вопроса, или блок паузы - при использовании блоков информации будет нарушена очередь отправки сообщений, и клавиатура не будет выводиться

Порядок действий

1. Сначала необходимо добавить блок результата, в котором будут объявлены переменные, необходимые для отправки запроса:

Название переменнойЗначениеОписание
userId{messengerUserId}Идентификатор Telegram-чата, в который будет отправляться сообщение.
Должен быть равен {messengerUserId} для отправки в текущий чат.
botIdВАШ ТОКЕНТокен вашего Telegram-бота. Выдается BotFather во время создания бота в Telegram.
textТекстТекст сообщения, которое будет отправлено вместе с клавиатурой ответов.
Данное поле не может быть пустым, иначе клавиатура не будет отправлена.

Image Added

2. Далее нужно сформировать тело запроса, которое будет содержать клавиатуру быстрых ответов.
Тело запроса имеет следующий вид:

Блок кода
languagepy
themeDJango
titleПример тела запроса
Подсказка

Кейс есть в Twin LiveDemo bot https://t.me/twinDemo_bot

...

Image Removed

шаг 1. Создаем три блока вопроса

Image Removed

шаг 2. В каждой исходящей стрелке из блоков вопроса сохраняем ответ в переменные соответственно: botId, chatId, text

Подсказка

chatId может быть как айди чата, которое достал https://t.me/myidbot, так и {messengerUserId}

Image Removed

Image Removed

шаг 3. Создаем блок арифметики с произвольным типом

Image Removed

шаг 4. Сам запрос выглядит так

https://api.telegram.org/botАЙДИВАШЕГОБОТАТЕЛЕГРАМ/sendMessage?chat_id=АЙДИЧАТА8&parse_mode=HTML&text=Привет

Но так как в сценарии запрос будет отправлен через блок арифметики воспользуемся статьей

Как сделать запрос на сервер с помощью BPL-операций, чтобы сформировать универсальную ссылку с переменными

Примечание
titleВажно

bpl функции не работают в редакторе. Тестировать сценарий нужно в чате либо в мессенджерах

Блок кода
titleФрагмент кода на bpl
$url = str.join(["https://api.telegram.org/bot", $botId, "/sendMessage?chat_id=", $chatId, "&parse_mode=HTML&text=", $text], "")
//Вставляем эту строчку в блок арифметики

шаг 5. Чтобы включить клавиатуру у пользователя нужно создать следующее тело запроса:

Блок кода
titleТело
{
    "reply_markup": {
        "keyboard": [
            [                //этимассив квадратныес скобочкипервой этострокой первая строкаклавиатуры
                "😁",
                "Ты кто?😅",
                "Привет"
            ],
            [                //этомассив втораясо (строкивторой можно добавлять после запятой)строкой клавиатуры
                "Ой😊", 
                "М?", 
                "😜"
            ]
        ],
        "resize_keyboard": true, //параметр, отвечающий за автоматическую подгонку размера клавиатуры. (true - клавиатура уменьшится по количеству строк, false - полноразмерная клавиатура)
        "one_time_keyboard": true
    }
}
//Для блока арифметики это тело нужно форматировать в одну строку следующим образом
 //параметр, отвечающий за закрытие клавиатуры после нажатия на ответ (true - скрыть клавиатуру, false - не скрывать)
    }
} 

Для отправки запроса с помощью BPL-операций необходимо убрать переносы строки, чтобы тело запроса шло в одну строчку, и подставить в начале $json = :

Блок кода
languagepy
themeDJango
titleТело для BPL операции
 $json = {"reply_markup": {"keyboard": [["😁","Ты кто?😅","Привет"],["Ой😊","М?", "😜"]],"resize_keyboard": true,"one_time_keyboard": true}} 
//Вставляем эту строчку в блок арифметики следующей

где

  • keyboard это массив строк в клавиатуре
  • one_time_keyboard это параметр для того чтобы клавиатура закрылась после ответа и не мешала (по умолчанию false, то есть закрываться не будет)
  • resize_keyboard это параметр для красивого размера кнопок (по умолчанию false), если не включить будет выглядеть так

Image Removed

Подсказка
titleСмайлики можно скопировать тут

https://apps.timwhitlock.info/emoji/tables/unicode

шаг 6.  Вставляем эту строчку в блок арифметики последней 

Это будет являться первой строкой BPL-операции.

Далее добавляем в сценарий блок арифметики с типом Произвольный тип, и вставляем в него наше получившееся тело запроса, а затем еще две строчки:

Блок кода
languagepy
themeDJango
$url = str.join(["https://api.telegram.org/bot", $botId, "/sendMessage?chat_id=", $userId, "&parse_mode=HTML&text=", $text], "")
$response = http.sendRequest($url, "POST", $json, {"accept": "application/json", "Content-Type": "application/json"})

Полностью код блока арифметики должен выглядеть так:

Блок кода
titleПолный код блока с BPL
$json = {"reply_markup": {"keyboard": [["😁","Ты кто?😅","Привет"],["Ой😊","М?", "😜"]],"resize_keyboard": true,"one_time_keyboard": true}}
$url = str.join(["https://api.telegram.org/bot", $botId, "/sendMessage?chat_id=", $userId, "&parse_mode=HTML&text=", $text], "")
Блок кода
$response = http.sendRequest($url, "POST", $json, {"accept": "application/json", "Content-Type": "application/json"})

Итоговый сценарий выглядит следующим образом:
Image Removed

Примечание
titleВажно

bpl функции не работают в редакторе. Тестировать сценарий нужно в чате либо в мессенджерах

Результат:

Image Added

Информация

После ввода кода в поле BPL-выражение нажмите кнопку Преобразовать BPL в AST для сохранения кода в память бота.

3. После блока с запросом должен стоять блок вопроса без текста, и стрелки из этого блока вопроса должны отвечать за обработку ответов с клавиатуры.

Предупреждение

Если в блоке вопроса будет текст, то клавиатура пропадет сразу же после отправки.

Image Added

4. В стрелках из блока вопроса нужно обработать ответы с кнопок клавиатуры, используя ключевые слова, либо интеллектуальное принятие решений. В данном примере обрабатывается только вариант "Привет".

Image Added

Пример работы фрагмента сценария:

Image AddedImage AddedImage Removed
Image Removed