Skip to content

Latest commit

 

History

History
151 lines (91 loc) · 6.76 KB

samples.rst

File metadata and controls

151 lines (91 loc) · 6.76 KB

Примеры использования

slack bot

Пример реализации бота, который получает сообщений, отправленные пользователями в Slack [Подробнее](https://api.slack.com/rtm)

Для реализации требуется token Slack (подробнее на просторах интернета)

При подключении бот отправляет приветственное сообщение и отображает в 1С сообщения из чата.

_static/slack.gif

.. index:: slack
.. function:: SlackBot()

    Описание: Пример бота Slack с постоянным подключения и отслеживанием событий

 // Запустить процедуру отправить сообщение в канал
 Процедура SlackBot()

     ПутьККомпоненте = "c:/RP1C_Win_32.dll";
     ИДКанала = "C23535436TR";
     ТокенСлак = "xora-3234234324....";

     Заголовки = Новый Соответствие;
     Заголовки.Вставить("Authorization", "Bearer " + ТокенСлак);

     Запрос = Новый HTTPЗапрос("api/rtm.connect", Заголовки);

     Соединение = Новый HTTPСоединение("slack.com",,,,,, Новый ЗащищенноеСоединениеOpenSSL);

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

     Если НЕ Ответ.КодСостояния = 200 Тогда
         ВызватьИсключение "Не верный ответ";
     КонецЕсли;

     Данные =  ПолучитьЗначениеИзОтветаJSON(Ответ.ПолучитьТелоКакСтроку());

     урл = Данные.Получить("url");

     Если НЕ ЗначениеЗаполнено(урл) Тогда
         ВызватьИсключение "Нет адреса подключения";
     КонецЕсли;

     #Если Не Сервер Тогда
     //УстановитьВнешнююКомпоненту(ПутьККомпоненте);
     #КонецЕсли

     Если НЕ ПодключитьВнешнююКомпоненту(ПутьККомпоненте, "WebSocket", ТипВнешнейКомпоненты.Native) Тогда
         СисИнфо = Новый СистемнаяИнформация;
         ОписаниеОшибки = НСтр("ru='Ошибка подключения компоненты ('") + СисИнфо.ТипПлатформы + "):
         |" + ОписаниеОшибки();

         ВызватьИсключение ОписаниеОшибки;
     КонецЕсли;

     Клиент = Новый("AddIn.WebSocket.Client");

     ТекстСообщения = ПолучитьСтрокуJSON(Новый Структура("type, channel, text", "message", ИДКанала, "Listen for 1C Enterprise"));

     Попытка
         Клиент.Подключиться(урл);
     Исключение

         Описание = ОписаниеОшибки();
         ТекстОшибки =  Клиент.ОписаниеОшибки();

         ТекстОписания = Описание + ": " + ТекстОшибки;

         ВызватьИсключение ТекстОписания;

     КонецПопытки;

     Данные = "";

     Клиент.Принять(1000, Данные);

     Клиент.Отправить(ТекстСообщения);

     Пока Клиент.Принять(0, Данные) Цикл

         Значение = ПолучитьЗначениеИзОтветаJSON(Данные);

         Текст = Значение.Получить("text");

         Если Текст = Неопределено ИЛИ НЕ Значение.Получить("reply_to") = Неопределено Тогда
             Продолжить;
         КонецЕсли;

         Если НРег(Текст) = НРег("go away!") ИЛИ НРег(Текст) = НРег("11") Тогда

             ТекстСообщения = ПолучитьСтрокуJSON(Новый Структура("type, channel, text", "message", ИДКанала, "ok. bye-bye )))"));
             Клиент.Отправить(ТекстСообщения);

             Сообщить("Меня отключили");
             Прервать;

         КонецЕсли;

         Сообщить(Текст);

         ТекстСообщения = ПолучитьСтрокуJSON(Новый Структура("type, channel, text", "message", ИДКанала, "Получил: "+ Текст));
         Клиент.Отправить(ТекстСообщения);

     КонецЦикла;

     Клиент.Отключиться();

     //Клиент = Неопределено;


 КонецПроцедуры


 Функция ПолучитьЗначениеИзОтветаJSON(ТекстJSON) Экспорт

     ЧтениеJSON      = Новый ЧтениеJSON;

     ЧтениеJSON.УстановитьСтроку(ТекстJSON);

     Значение        = ПрочитатьJSON(ЧтениеJSON, Истина);

     Возврат Значение;

 КонецФункции

 Функция ПолучитьСтрокуJSON(Значение) Экспорт

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

     Возврат ЗаписьJSON.Закрыть();

 КонецФункции