Вывод клавиатуры в Телеграмм-боте через 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 клавиатуры.
(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.Закрыть();
Не хочет создавать, Заполняю руками создается. Уже всю голову сломал, и помещал создание массива и добавление строк в цикл, и что только не делал. По типам на выходе тоже самое что если и руками задать, И оборачивал в строку, и выносил переменные в отдельные. Самое интересное если создание массива кнопки поместить в запрос то он отрабатывает только для последнего из цикла, это понятно почему. Но почему не отрабатывает так как вам написал не могу понять. Помогите.