Имя: Пароль:
1C
1С v8
Добавление кнопок в Телеграмм-бот из 1с
0 Рафаэль
 
18.09.19
09:46
Добрый день,форумчане!
Подскажите пожалуйста как вывести клавиатуру(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 отвечает за вывод клавиатуры,но как её вывести я так и не понял

Заранее спасибо!
1 dmt
 
18.09.19
10:07
2 Jimmo910
 
18.09.19
13:40
Я делаю так:

Если ЗначениеЗаполнено(ИДСообщения) Тогда
        Ресурс = "bot" + Токен + "/editMessageText?chat_id=" + СтрЗаменить(Формат(idChat, "ЧДЦ=; ЧС=; ЧРГ=."), ".", "")+"&message_id="+ИДСообщения+"&text="+ТекстОтвета+"&reply_markup="+reply_markup;
Иначе
        Ресурс = "bot" + Токен + "/sendMessage?chat_id=" + СтрЗаменить(Формат(idChat, "ЧДЦ=; ЧС=; ЧРГ=."), ".", "") + "&text= "+ТекстОтвета+"&reply_markup="+reply_markup;
КонецЕсли;

    Соединение  =  ПолучитьСоединение();
    Запрос = Новый HTTPЗапрос(Ресурс);
    Ответ = Соединение.Получить(Запрос);

В параметре "reply_markup" находится JSON строка.
3 Рафаэль
 
19.09.19
12:58
Я нашел решение.Кому нужно,вот пример:
Функция ПолучитьСписокСообщений() Экспорт
    Результат = 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);
                КонецЕсли;
                
            КонецЦикла;
            
        КонецЕсли;
    КонецЕсли;                                                                       //показать прайс показать долг сделать заказ
    
    Возврат Результат;
КонецФункции
4 Jimmo910
 
19.09.19
14:04
(3) Ты к стати я вижу Константу перезаписываешь постоянно. Не нужно использовать так Константу.
Константы - это то что редко меняет своё значение.

Запили лучше регистр сведений, там и историю какую сможешь хранить...