Добрый день,форумчане!
Подскажите пожалуйста как вывести клавиатуру(inlineKeyboard или replyKeyboard) в телеграмм-боте.
Вот функция ПолучитьСписокСообщений,где используется getUpdates:

```1c
    Функция ПолучитьСписокСообщений() Экспорт
    Результат = 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:

```1c
    Функция 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:

```1c
    Функция 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.

Пример:

```1c
    Строки = Новый Массив;
    Кнопки = Новый Массив;
    Кнопки.Добавить(Новый структура("text, callback_data", "Ответ 1", "1"));
    Кнопки.Добавить(Новый структура("text, callback_data", "Ответ 2", "2"));
    Строки.Добавить(Кнопки);

    КлавиатураВСообщении = JSON.мЗаписатьJSON(Новый Структура("inline_keyboard", Строки), Ложь);
```

Блок "сallback_query" говорит о нажатии на кнопку

```1c
    КодНажатойКнопки = mes.callback_query.data
```
---
Спасибо большое за помощь.
Я сделал вот так:

```1c
    Функция ПолучитьСписокСообщений() Экспорт
    Результат = 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.

Пример:

```1c
    Строки = Новый Массив;
    Кнопки = Новый Массив;
    Кнопки.Добавить(Новый структура("text, callback_data", "Ответ 1", "1"));
    Кнопки.Добавить(Новый структура("text, callback_data", "Ответ 2", "2"));
    Строки.Добавить(Кнопки);

    КлавиатураВСообщении = JSON.мЗаписатьJSON(Новый Структура("inline_keyboard", Строки), Ложь);
```

Блок "сallback_query" говорит о нажатии на кнопку

```1c
    КодНажатойКнопки = mes.callback_query.data
```
---
А можете подробно объяснить про блок "callback_query"?
---
На самом деле тут вопрос не 1С-ный. По работе с телеграмм ботом есть много информации на других ресурсах.

CallbackQuery

Этот объект представляет входящий запрос обратной связи от инлайн-кнопки с заданным callback_data.
Если кнопка, создавшая этот запрос, была привязана к сообщению, то в запросе будет присутствовать поле message.
Если кнопка была показана в сообщении, отправленном при помощи встроенного режима, в запросе будет присутствовать поле inline_message_id.

Поле Тип Описание
id String Уникальный идентификатор запроса
from User Отправитель
message Message Опционально. Сообщение, к которому была привязана вызвавшая запрос кнопка. Обратите внимание: если сообщение слишком старое, содержание сообщения и дата отправки будут недоступны.
inline_message_id String Опционально. Идентификатор сообщения, отправленного через вашего бота во встроенном режиме
data String Данные, связанные с кнопкой. Обратите внимание, что клиенты могут добавлять свои данные в это поле.
---
И ещё один вопрос.Принцип работы с "reply_keyboard" такой же?Или там есть свои заморочки?
---
Спасибо большое за помощь.
Я сделал вот так:

```1c
    Функция ПолучитьСписокСообщений() Экспорт
    Результат = 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 клавиатуры.
---
Остался последний вопрос.
Что нужно сделать,чтобы клавиатура выводилась вертикально?
---
Разобрался.Надо было каждую кнопку записать в отдельный массив
---
```1c
    МассивКнопок = ПолучитьПереченьКнопокДляTelegramm();

    Строки = Новый Массив;
    Для Каждого НаименованиеКнопки из МассивКнопок Цикл
    Кнопки = Новый Массив;
    Кнопки.Добавить(Новый Структура("text, callback_data", НаименованиеКнопки, НаименованиеКнопки));
    Строки.Добавить(Кнопки);
    клСтруктура = Новый Структура("inline_keyboard",Строки);
    КонецЦикла;
```
---
что сделать чтобы после нажатия кнопка удалилась?
---
СформироватьJSON(Новый Где можно подсмотреть?
---
я так делаю:

```1c
    Строки = Новый Массив;
    Кнопки = Новый Массив;
    Кнопки.Добавить(Новый Структура("text, callback_data", "кнопка 1", "кнопка1"));
    Кнопки.Добавить(Новый Структура("text, callback_data", "кнопка 2", "кнопка2"));
    Строки.Добавить(Кнопки);
    клСтруктура = Новый Структура("inline_keyboard",Строки);

    ЗаписьJSON = Новый ЗаписьJSON;
    ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет);
    ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
    ЗаписатьJSON(ЗаписьJSON,клСтруктура);
    Клавиатура = ЗаписьJSON.Закрыть();
    ТекстДляОтправки = "&reply_markup=" + СокрЛП(Клавиатура);
```
---
Добрый день. Не нашла ветку, поэтому задам вопрос здесь.
Подскажите, пожалуйста, можно ли в Телеграм создавать опросники через 1С, чтобы затем по аналогии с кнопками inline можно было отловить ответ?
---
Коллеги, Вопрос такого плана Пытаюсь программно создать кнопки клавиатуры:

        клСтруктура = Новый Структура;
 Строки = Новый Массив;

 Кнопки = Новый Массив;
 Для Каждого СтрТЗ Из Параметр Цикл
  Кнопки.Добавить(Новый Структура("text, callback_data", СтрТЗ.Наименование, Команда + " " + СтрТЗ.Наименование));
 КонецЦикла;

 Строки.Добавить(Кнопки);

        клСтруктура.Вставить("inline_keyboard", Строки);
 клСтруктура.Вставить("resize_keyboard", Истина);

 ЗаписьJSON = Новый ЗаписьJSON;
 ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет,,,ЭкранированиеСимволовJSON.Нет));
 ЗаписатьJSON(ЗаписьJSON,клСтруктура,,);
 Клавиатура = ЗаписьJSON.Закрыть();

Не хочет создавать, Заполняю руками создается. Уже всю голову сломал, и помещал создание массива и добавление строк в цикл, и что только не делал. По типам на выходе тоже самое что если и руками задать, И оборачивал в строку, и выносил переменные в отдельные. Самое интересное если создание массива кнопки поместить в запрос то он отрабатывает только для последнего из цикла, это понятно почему. Но почему не отрабатывает так как вам написал не могу понять. Помогите.