Вывод клавиатуры в Телеграмм-боте через 1с
Добрый день,форумчане!
Подскажите пожалуйста как вывести клавиатуру(inlineKeyboard или replyKeyboard) в телеграмм-боте.
Вот функция ПолучитьСписокСообщений,где используется getUpdates:
Вот сама функция getUpdates:
Вот функция sendMessage:
Как я понял reply_markup отвечает за вывод клавиатуры,но как её вывести я так и не понял
Заранее спасибо!
Подскажите пожалуйста как вывести клавиатуру(inlineKeyboard или replyKeyboard) в телеграмм-боте.
Вот функция ПолучитьСписокСообщений,где используется getUpdates:
Функция ПолучитьСписокСообщений() Экспорт
Результат = getUpdates(Константы.update_id.Получить() + 1);
Если Результат.Свойство("ok") И Результат.ok = Истина Тогда
Если Результат.Свойство("result") Тогда
Для Каждого НС Из Результат.result Цикл
Если НС.Свойство("message") И НС.message.Свойство("chat") Тогда
Если НС.message.text = "/start" Тогда
chat = НС.message.chat;
id = chat.id;
sendMessage(id, "Здравствуй, дорогой друг)",,,,,);
КонецЕсли;
Константы.update_id.Установить(НС.update_id);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
ПоказатьВот сама функция getUpdates:
Функция getUpdates(offset = 0,limit = 0,timeout = 0) Экспорт
method_param = Новый Массив;
Если offset> 0 Тогда
method_param.Добавить("offset=" + ФорматироватьСтроку(offset));
КонецЕсли;
Если limit> 0 Тогда
method_param.Добавить("limit=" + ФорматироватьСтроку(limit));
КонецЕсли;
Если offset> 0 Тогда
method_param.Добавить("timeout=" + ФорматироватьСтроку(timeout));
КонецЕсли;
Результат = ОтправитьHTTPЗапрос(ПолучитьAcessToken(),"getUpdates", method_param);
Возврат ОбработатьJSON(Результат);
КонецФункции
ПоказатьВот функция sendMessage:
Функция sendMessage(chat_id,text,parse_mode = Неопределено,disable_web_page_preview = Неопределено,disable_notification = Неопределено, reply_to_message_id = 0,reply_markup = Неопределено) Экспорт
Если НЕ ЗначениеЗаполнено(chat_id) ИЛИ НЕ ЗначениеЗаполнено(text) Тогда
Возврат Неопределено;
КонецЕсли;
method_param = Новый Массив;
method_param.Добавить("chat_id=" + ФорматироватьСтроку(chat_id));
method_param.Добавить("text=" + text);
Если НЕ parse_mode = Неопределено Тогда
method_param.Добавить("parse_mode" + parse_mode);
КонецЕсли;
Если НЕ disable_web_page_preview = Неопределено Тогда
method_param.Добавить("disable_web_page_preview" + disable_web_page_preview);
КонецЕсли;
Если НЕ disable_notification = Неопределено Тогда
method_param.Добавить("disable_notification" + disable_notification);
КонецЕсли;
Если НЕ reply_to_message_id > 0 Тогда
method_param.Добавить("reply_to_message_id" + ФорматироватьСтроку(reply_to_message_id));
КонецЕсли;
Если НЕ reply_markup = Неопределено Тогда
method_param.Добавить("reply_markup=" + reply_markup);
КонецЕсли;
Результат = ОтправитьHTTPЗапрос(ПолучитьAcessToken(),"sendMessage", method_param);
Возврат ОбработатьJSON(Результат);
КонецФункции
ПоказатьКак я понял reply_markup отвечает за вывод клавиатуры,но как её вывести я так и не понял
Заранее спасибо!
Найденные решения
В reply_markup передается inline_keyboard из массива массивов объектов кнопок.
Кнопка состоит из text и одного обязательного callback_data.
Пример:
Блок "сallback_query" говорит о нажатии на кнопку
Кнопка состоит из text и одного обязательного callback_data.
Пример:
Строки = Новый Массив;
Кнопки = Новый Массив;
Кнопки.Добавить(Новый структура("text, callback_data", "Ответ 1", "1"));
Кнопки.Добавить(Новый структура("text, callback_data", "Ответ 2", "2"));
Строки.Добавить(Кнопки);
КлавиатураВСообщении = JSON.мЗаписатьJSON(Новый Структура("inline_keyboard", Строки), Ложь);
Блок "сallback_query" говорит о нажатии на кнопку
КодНажатойКнопки = mes.callback_query.data
Спасибо большое за помощь.
Я сделал вот так:
И получилось вывести inline и reply клавиатуры.
Я сделал вот так:
Функция ПолучитьСписокСообщений() Экспорт
Результат = getUpdates(Константы.update_id.Получить() + 1);
Если Результат.Свойство("ok") И Результат.ok = Истина Тогда
Если Результат.Свойство("result") Тогда
Для Каждого НС Из Результат.result Цикл
Если НС.Свойство("message") И НС.message.Свойство("chat") Тогда
Если НС.message.text = "/start" Тогда
chat = НС.message.chat;
id = chat.id;
Строки = Новый Массив;
Кнопки = Новый Массив;
Кнопки.Добавить(Новый Структура("text,callback_data","Показать прайс","prays"));
Кнопки.Добавить(Новый Структура("text,callback_data","Сделать заказ","zakaz"));
Строки.Добавить(Кнопки);
КлавиатураВСообщении = СформироватьJSON(Новый Структура("inline_keyboard",Строки),Ложь);
sendMessage(id, "Здравствуй, дорогой друг)",,,,,КлавиатураВСообщении);
ИначеЕсли НС.message.text = "/report" Тогда
chat = НС.message.chat;
id = chat.id;
Строки = Новый Массив;
Кнопки = Новый Массив;
Кнопки.Добавить(Новый Структура("text,callback_data","Показать прайс","prays"));
Кнопки.Добавить(Новый Структура("text,callback_data","Сделать заказ","zakaz"));
Кнопки.Добавить(Новый Структура("text,callback_data","Показать долг","dolg"));
Строки.Добавить(Кнопки);
КлавВСообщ = СформироватьJSON(Новый Структура("keyboard,resize_keyboard=Истина",Строки),Ложь);
sendMessage(id,"Выберите действие",,,,,КлавВСообщ);
КонецЕсли;
Константы.update_id.Установить(НС.update_id);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли; //показать прайс показать долг сделать заказ
Возврат Результат;
КонецФункции
ПоказатьИ получилось вывести inline и reply клавиатуры.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
В reply_markup передается inline_keyboard из массива массивов объектов кнопок.
Кнопка состоит из text и одного обязательного callback_data.
Пример:
Блок "сallback_query" говорит о нажатии на кнопку
Кнопка состоит из text и одного обязательного callback_data.
Пример:
Строки = Новый Массив;
Кнопки = Новый Массив;
Кнопки.Добавить(Новый структура("text, callback_data", "Ответ 1", "1"));
Кнопки.Добавить(Новый структура("text, callback_data", "Ответ 2", "2"));
Строки.Добавить(Кнопки);
КлавиатураВСообщении = JSON.мЗаписатьJSON(Новый Структура("inline_keyboard", Строки), Ложь);
Блок "сallback_query" говорит о нажатии на кнопку
КодНажатойКнопки = mes.callback_query.data
(3) На самом деле тут вопрос не 1С-ный. По работе с телеграмм ботом есть много информации на других ресурсах.
CallbackQuery
Этот объект представляет входящий запрос обратной связи от инлайн-кнопки с заданным callback_data.
Если кнопка, создавшая этот запрос, была привязана к сообщению, то в запросе будет присутствовать поле message.
Если кнопка была показана в сообщении, отправленном при помощи встроенного режима, в запросе будет присутствовать поле inline_message_id.
Поле Тип Описание
id String Уникальный идентификатор запроса
from User Отправитель
message Message Опционально. Сообщение, к которому была привязана вызвавшая запрос кнопка. Обратите внимание: если сообщение слишком старое, содержание сообщения и дата отправки будут недоступны.
inline_message_id String Опционально. Идентификатор сообщения, отправленного через вашего бота во встроенном режиме
data String Данные, связанные с кнопкой. Обратите внимание, что клиенты могут добавлять свои данные в это поле.
CallbackQuery
Этот объект представляет входящий запрос обратной связи от инлайн-кнопки с заданным callback_data.
Если кнопка, создавшая этот запрос, была привязана к сообщению, то в запросе будет присутствовать поле message.
Если кнопка была показана в сообщении, отправленном при помощи встроенного режима, в запросе будет присутствовать поле inline_message_id.
Поле Тип Описание
id String Уникальный идентификатор запроса
from User Отправитель
message Message Опционально. Сообщение, к которому была привязана вызвавшая запрос кнопка. Обратите внимание: если сообщение слишком старое, содержание сообщения и дата отправки будут недоступны.
inline_message_id String Опционально. Идентификатор сообщения, отправленного через вашего бота во встроенном режиме
data String Данные, связанные с кнопкой. Обратите внимание, что клиенты могут добавлять свои данные в это поле.
Спасибо большое за помощь.
Я сделал вот так:
И получилось вывести inline и reply клавиатуры.
Я сделал вот так:
Функция ПолучитьСписокСообщений() Экспорт
Результат = getUpdates(Константы.update_id.Получить() + 1);
Если Результат.Свойство("ok") И Результат.ok = Истина Тогда
Если Результат.Свойство("result") Тогда
Для Каждого НС Из Результат.result Цикл
Если НС.Свойство("message") И НС.message.Свойство("chat") Тогда
Если НС.message.text = "/start" Тогда
chat = НС.message.chat;
id = chat.id;
Строки = Новый Массив;
Кнопки = Новый Массив;
Кнопки.Добавить(Новый Структура("text,callback_data","Показать прайс","prays"));
Кнопки.Добавить(Новый Структура("text,callback_data","Сделать заказ","zakaz"));
Строки.Добавить(Кнопки);
КлавиатураВСообщении = СформироватьJSON(Новый Структура("inline_keyboard",Строки),Ложь);
sendMessage(id, "Здравствуй, дорогой друг)",,,,,КлавиатураВСообщении);
ИначеЕсли НС.message.text = "/report" Тогда
chat = НС.message.chat;
id = chat.id;
Строки = Новый Массив;
Кнопки = Новый Массив;
Кнопки.Добавить(Новый Структура("text,callback_data","Показать прайс","prays"));
Кнопки.Добавить(Новый Структура("text,callback_data","Сделать заказ","zakaz"));
Кнопки.Добавить(Новый Структура("text,callback_data","Показать долг","dolg"));
Строки.Добавить(Кнопки);
КлавВСообщ = СформироватьJSON(Новый Структура("keyboard,resize_keyboard=Истина",Строки),Ложь);
sendMessage(id,"Выберите действие",,,,,КлавВСообщ);
КонецЕсли;
Константы.update_id.Установить(НС.update_id);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли; //показать прайс показать долг сделать заказ
Возврат Результат;
КонецФункции
ПоказатьИ получилось вывести inline и reply клавиатуры.
(8)
МассивКнопок = ПолучитьПереченьКнопокДляTelegramm();
Строки = Новый Массив;
Для Каждого НаименованиеКнопки из МассивКнопок Цикл
Кнопки = Новый Массив;
Кнопки.Добавить(Новый Структура("text, callback_data", НаименованиеКнопки, НаименованиеКнопки));
Строки.Добавить(Кнопки);
клСтруктура = Новый Структура("inline_keyboard",Строки);
КонецЦикла;
Показать
(10) я так делаю:
Строки = Новый Массив;
Кнопки = Новый Массив;
Кнопки.Добавить(Новый Структура("text, callback_data", "кнопка 1", "кнопка1"));
Кнопки.Добавить(Новый Структура("text, callback_data", "кнопка 2", "кнопка2"));
Строки.Добавить(Кнопки);
клСтруктура = Новый Структура("inline_keyboard",Строки);
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет);
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
ЗаписатьJSON(ЗаписьJSON,клСтруктура);
Клавиатура = ЗаписьJSON.Закрыть();
ТекстДляОтправки = "&reply_markup=" + СокрЛП(Клавиатура);
Показать
Коллеги, Вопрос такого плана Пытаюсь программно создать кнопки клавиатуры:
клСтруктура = Новый Структура;
Строки = Новый Массив;
Кнопки = Новый Массив;
Для Каждого СтрТЗ Из Параметр Цикл
Кнопки.Добавить(Новый Структура("text, callback_data", СтрТЗ.Наименование, Команда + " " + СтрТЗ.Наименование));
КонецЦикла;
Строки.Добавить(Кнопки);
клСтруктура.Вставить("inline_keyboard", Строки);
клСтруктура.Вставить("resize_keyboard", Истина);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет,,,ЭкранированиеСимволовJSON.Нет));
ЗаписатьJSON(ЗаписьJSON,клСтруктура,,);
Клавиатура = ЗаписьJSON.Закрыть();
Не хочет создавать, Заполняю руками создается. Уже всю голову сломал, и помещал создание массива и добавление строк в цикл, и что только не делал. По типам на выходе тоже самое что если и руками задать, И оборачивал в строку, и выносил переменные в отдельные. Самое интересное если создание массива кнопки поместить в запрос то он отрабатывает только для последнего из цикла, это понятно почему. Но почему не отрабатывает так как вам написал не могу понять. Помогите.
клСтруктура = Новый Структура;
Строки = Новый Массив;
Кнопки = Новый Массив;
Для Каждого СтрТЗ Из Параметр Цикл
Кнопки.Добавить(Новый Структура("text, callback_data", СтрТЗ.Наименование, Команда + " " + СтрТЗ.Наименование));
КонецЦикла;
Строки.Добавить(Кнопки);
клСтруктура.Вставить("inline_keyboard", Строки);
клСтруктура.Вставить("resize_keyboard", Истина);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет,,,ЭкранированиеСимволовJSON.Нет));
ЗаписатьJSON(ЗаписьJSON,клСтруктура,,);
Клавиатура = ЗаписьJSON.Закрыть();
Не хочет создавать, Заполняю руками создается. Уже всю голову сломал, и помещал создание массива и добавление строк в цикл, и что только не делал. По типам на выходе тоже самое что если и руками задать, И оборачивал в строку, и выносил переменные в отдельные. Самое интересное если создание массива кнопки поместить в запрос то он отрабатывает только для последнего из цикла, это понятно почему. Но почему не отрабатывает так как вам написал не могу понять. Помогите.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот