Каталог решений - Как программно обрабатывать сообщения обсуждений системы взаимодействия 1С

Как программно обрабатывать сообщения обсуждений системы взаимодействия 1С

Как программно обрабатывать сообщения обсуждений системы взаимодействия 1С

В наличии

Программно перехватываем сообщения обсуждений системы взаимодействия 1С, например, для параллельной отправки сообщений в Telegram.

Категория:

Описание

Главное, что нужно понимать, — перехватить сообщение обсуждения системы взаимодействия 1С можно только с помощью обработчика, который ожидает событие отправки сообщения:

СистемаВзаимодействия.ПодключитьОбработчикПослеОтправкиСообщения(ОписаниеОповещения)

В данном примере делаем на форме документа "Заказ клиента".

Предварительно создаём реквизит "расш_TelegramID" у справочника "Пользователи". Его нужно вывести на форме элемента справочника "Пользователи".

По-хорошему, процедуру, отправляющую сообщения в Telegram, нужно разместить в общем модуле.

А токен Telegram бота организации хранить в регистре сведений.

Я сделал всё прямо на форме документа, потому что моя конкретная задача вряд ли когда-нибудь будет масштабироваться.

На форме документа создаём следующий код:

&НаКлиенте
Процедура расш_ПриОткрытииПосле(Отказ) 

    расш_ПерехватитьСообщениеОбсуждения();
    
КонецПроцедуры

&НаКлиенте
Процедура расш_ПерехватитьСообщениеОбсуждения() Экспорт  
    
    расш_оп_ОбработкаОтправкиСообщения = Новый ОписаниеОповещения("расш_ОбработкаОтправкиСообщения", ЭтотОбъект);
    СистемаВзаимодействия.ПодключитьОбработчикПослеОтправкиСообщения(расш_оп_ОбработкаОтправкиСообщения);  
    
КонецПроцедуры 

&НаКлиенте
Процедура расш_ОбработкаОтправкиСообщения(расш_Сообщение, расш_Обсуждение, расш_ДопПараметры) Экспорт 
    
    СписокПолучателей = Новый СписокЗначений; 
    Для каждого ТекПолучатель Из расш_Сообщение.Получатели Цикл 
        СписокПолучателей.Добавить(ТекПолучатель); 
    КонецЦикла;                                          
    
    расш_ОтправитьСообщениеTelegram(расш_Обсуждение.Заголовок, расш_Сообщение.Текст, СписокПолучателей);
    
КонецПроцедуры  

&НаСервере
Процедура расш_ОтправитьСообщениеTelegram(Заголовок, ТекстСообщения, СписокПолучателей) Экспорт   
    
    ТекстДляОтправки = Заголовок + Символы.ПС + ТекстСообщения;
    
    Для каждого ТекПолучатель Из СписокПолучателей Цикл   
        ИдентификаторПользователяИБ = СистемаВзаимодействия.ПолучитьИдентификаторПользователяИнформационнойБазы(ТекПолучатель.Значение);
        UserTelegramID = расш_ПолучитьTelegramID(ИдентификаторПользователяИБ); 
        Если ЗначениеЗаполнено(UserTelegramID) Тогда
            ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
            TokenTelegram = "9999999999:F4OMATVxAAEB4WC_GTaPsBqcHGPH40T0bQk";  
            ТекстЗапросаHTTP = "bot" + TokenTelegram + "/sendMessage?chat_id=" + СтрЗаменить(Формат(UserTelegramID, "ЧДЦ=; ЧС=; ЧРГ=."), ".", "") + "&text=" + ТекстДляОтправки;
            Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,,ЗащищенноеСоединение);
            ЗапросHTTP = Новый HTTPЗапрос(ТекстЗапросаHTTP);
            ОтветHTTP = Соединение.Получить(ЗапросHTTP);  
            Если ОтветHTTP.КодСостояния = 200 Тогда
                Тест = 1;
            Иначе
                Тест = 2;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры        

&НаСервереБезКонтекста
Функция расш_ПолучитьTelegramID(ИдентификаторПользователяИБ)          
    
    TelegramID = "";
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Пользователи.Ссылка КАК Ссылка,
        |    Пользователи.ИдентификаторПользователяИБ КАК ИдентификаторПользователяИБ,
        |    Пользователи.расш_TelegramID КАК TelegramID
        |ИЗ
        |    Справочник.Пользователи КАК Пользователи
        |ГДЕ
        |    Пользователи.ИдентификаторПользователяИБ = &ИдентификаторПользователяИБ";
    Запрос.УстановитьПараметр("ИдентификаторПользователяИБ", ИдентификаторПользователяИБ);
    Выборка = Запрос.Выполнить().Выбрать(); 
    
    Если Выборка.Следующий() Тогда 
        TelegramID = Выборка.TelegramID;                
    КонецЕсли;
    
    Возврат TelegramID; 
    
КонецФункции

 

has been added to your cart:
Оформление заказа