В одной из задач понадобилось отправлять сообщения на портал Б24, а потом читать пришедший ответ.
Быстро нашла методы и решила поделиться с вами, небольшая шпаргалка для начинающих свой путь взаимодействия с битрикс 24 с помощью вебхуков.
Первое, что нужно сделать, это создать вебхук на стороне битрикс, который будет содержать в себе права на наши методы. Нас интересует метод "im", пример настройки отправляю ниже:
При настройке вебхука стоит учитывать, что сгенерированный токен, "привязан" к пользователю, который его создает (это правило работает и для генерации токенов в приложениях для взаимодействия 1С и Б24 от вендоров). Поэтому для генерации вебхука рекомендую использовать технического пользователя.
В нашем случае, от пользователя, сгенерировавшего вебхук, будут приходить сообщения из 1С.
Для подключения забираем адрес портала и токен:
Теперь время открыть прикрепленную к статье обработку и пробовать отправлять сообщения :)
Внутри обработки нужно будет заполнить адрес подключения, токен и ID получателя.
ID получателя можно получать различными методами, самый простой - зайти в его карточку на сайте и посмотреть адрес, последние цифры адреса карточки будут являться его ID.
Использование простое, набираете сообщение - нажимаем кнопку "отправить сообщение".
Чтобы получить ответ от пользователя, который он написал в битрикс 24, нажимаем "получить ответ".
Прикрепляю код отправки и принятия сообщений.
Обработка создавалась для Документооборота 2.1 (версия БСП 3.1.2.343), однако данные методы можно использовать на любой конфигурации 8.3 с БСП
Код отправки сообщения:
&НаСервере
Процедура ОтправитьСообщениеНаСервере()
ssl = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаWindows(),
Новый СертификатыУдостоверяющихЦентровWindows());
Соединение = Новый HTTPСоединение(АдресПодключения,,,,,5,ssl);
DIALOG_ID = "DIALOG_ID="+Получатель; //ID получателя сообщения
MESSAGE = "MESSAGE="+ТекстСообщения; //текст сообщения
SYSTEM = "SYSTEM="+"Y"; //параметр отвечает за отображение сообщения как системного,
//значения - "N" как ложь и "Y" как истина
ТекстHTTPЗапроса = Строка(Токен + "/im.message.add?" + DIALOG_ID + "&" + MESSAGE + "&" + SYSTEM);
HTTPЗапрос = Новый HTTPЗапрос(ТекстHTTPЗапроса);
РезультатHTTPЗапроса = Соединение.Получить(HTTPЗапрос);
ТелоРезультата = РезультатHTTPЗапроса.ПолучитьТелоКакСтроку();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТелоРезультата);
СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON);
Если СтруктураОтвета.Свойство("error") Тогда
ОбщегоНазначения.СообщитьПользователю("Сообщение не отправлено по причине:"+СтруктураОтвета.error_description);
Возврат;
КонецЕсли;
IDОтправленногоСообщения = СтрЗаменить(Строка(СтруктураОтвета.result),Символы.НПП,"");//сохраним ID отправленного сообщения, для получения ответа
ОтображениеЧата = ОтображениеЧата + Символы.ПС + "Отправленное сообщение: "+ТекстСообщения;
ТекстСообщения = "";
КонецПроцедуры
Код получения ответа:
Процедура ПолучитьОтветНаСервере()
ssl = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаWindows(),
Новый СертификатыУдостоверяющихЦентровWindows());
Соединение = Новый HTTPСоединение(АдресПодключения,,,,,5,ssl);
DIALOG_ID = "DIALOG_ID="+Получатель; //ID получателя сообщения
FIRST_ID = "FIRST_ID="+IDОтправленногоСообщения; //передаем сохраненный ID отправленного сообщения
//чтобы получить все сообщения, отправленные в чат после нашего
ТекстHTTPЗапроса = Строка(Токен + "/im.dialog.messages.get?" + DIALOG_ID + "&" + FIRST_ID);
HTTPЗапрос = Новый HTTPЗапрос(ТекстHTTPЗапроса);
РезультатHTTPЗапроса = Соединение.Получить(HTTPЗапрос);
ТелоРезультата = РезультатHTTPЗапроса.ПолучитьТелоКакСтроку();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТелоРезультата);
СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON);
Если СтруктураОтвета.Свойство("error") Тогда
ОбщегоНазначения.СообщитьПользователю("Сообщение не получено по причине:"+СтруктураОтвета.error_description);
Возврат;
КонецЕсли;
МассивСообщений = СтруктураОтвета.result.messages;
Для каждого Строка из МассивСообщений Цикл
ОтображениеЧата = ОтображениеЧата + Символы.ПС + "Полученное сообщение: "+Строка.text
КонецЦикла;
КонецПроцедуры