В процессе сопровождения крупных или распределенных информационных баз 1С (например, на базе конфигурации «Управление торговлей 10.3») часто возникает необходимость оперативного мониторинга работы системы. Когда служебные сеансы, выполняющие обмен данными в распределенной информационной базе (РИБ) или регламентные задания, сталкиваются с ошибками, администратор должен узнать об этом мгновенно. Идеальным решением является настройка отправки уведомлений в рабочий чат компании в Битрикс24.
В этой статье мы подробно разберем, как реализовать механизм отправки сообщений из 1С в определенный чат Битрикс24, настроить цветовое оформление для разных типов событий (информация, предупреждение, ошибка) и автоматизировать этот процесс.
Для интеграции 1С и Битрикс24 можно использовать полноценные приложения или чат-боты. Однако для простой задачи отправки уведомлений («отправил и забыл») создание полноценного бота избыточно. Оно требует регистрации приложения, поддержки протокола авторизации OAuth 2.0 и постоянного обновления токенов доступа.
Гораздо проще и надежнее использовать входящий вебхук. Этот механизм предоставляет уникальный секретный URL-адрес, отправка запросов на который мгновенно публикует сообщения в портале. Нам не нужно авторизовываться при каждом запросе — достаточно один раз настроить права доступа вебхука в Битрикс24.
Для начала подготовим площадку на стороне Битрикс24. Нам необходимо получить секретный адрес для отправки запросов:
После сохранения система выдаст нам готовый URL для вызова REST API. Он выглядит следующим образом:
https://имя_вашего_портала.bitrix24.ru/rest/ID_ПОЛЬЗОВАТЕЛЯ/СЕКРЕТНЫЙ_КОД/
Для работы в 1С нам понадобятся три составляющие этого адреса:
mycompany.bitrix24.ru1).abcd1234efgh5678).Чтобы сообщение попало в конкретный групповой чат или канал, нам необходимо знать его внутренний уникальный код в Битрикс24 — параметр DIALOG_ID. Выяснить его очень просто:
/getDialogId и отправим сообщение.chat с числовым суффиксом, например, chat125.Если мы хотим отправлять персональные сообщения конкретному сотруднику напрямую, то в качестве DIALOG_ID будет выступать его числовой ID пользователя в системе (например, 45).
Автор исходного запроса справедливо заметил, что важные сообщения должны визуально выделяться, чтобы администратор мог сразу оценить критичность ситуации. Обычный HTML или Markdown в сообщениях чата Битрикс24 не поддерживается, но платформа отлично распознает BB-коды (разметку в квадратных скобках).
Для раскраски текста мы будем использовать тег [COLOR] с указанием HEX-кода цвета:
[COLOR=#FF0000]Текст сообщения[/COLOR][COLOR=#FFA500]Текст сообщения[/COLOR][COLOR=#008000]Текст сообщения[/COLOR]Мы также можем комбинировать оформление, например, выделять важные заголовки жирным шрифтом с помощью тега [B] или делать примечания курсивом через [I].
Перейдем к реализации на стороне 1С. Мы будем отправлять POST-запрос с телом в формате JSON. Это гораздо надежнее GET-запросов, так как исключает проблемы с кодированием длинных русскоязычных строк и спецсимволов при передаче через параметры URL.
Для интеграции нам понадобятся стандартные объекты платформы 1С: HTTPСоединение, HTTPЗапрос и средства работы с JSON (ЗаписьJSON).
Рассмотрим структуру готовой процедуры, которую можно разместить в общем модуле информационной базы (например, в модуле с флагом «Сервер»):
// Процедура отправляет уведомление в указанный чат Битрикс24
//
// Параметры:
// ТекстСообщения - Строка - Содержимое уведомления
// ИдентификаторЧата - Строка - ID получателя (например, "chat125" или "45")
// УровеньВажности - Строка - Варианты: "ИНФО", "ПРЕДУПРЕЖДЕНИЕ", "ОШИБКА"
//
Процедура ОтправитьУведомлениеВБитрикс24(Знач ТекстСообщения, Знач ИдентификаторЧата, Знач УровеньВажности = "ИНФО") Экспорт
// 1. Константы подключения (замените на ваши реальные данные)
АдресПортала = "mycompany.bitrix24.ru";
ИдПользователя = "1";
СекретныйКод = "abcd1234efgh5678";
// 2. Форматируем сообщение в зависимости от важности
ЦветнойТекст = ТекстСообщения;
Если ВРег(УровеньВажности) = "ОШИБКА" Тогда
ЦветнойТекст = "[COLOR=#FF0000][B]КРИТИЧЕСКАЯ ОШИБКА:[/B] " + ТекстСообщения + "[/COLOR]";
ИначеЕсли ВРег(УровеньВажности) = "ПРЕДУПРЕЖДЕНИЕ" Тогда
ЦветнойТекст = "[COLOR=#FFA500][B]ВНИМАНИЕ:[/B] " + ТекстСообщения + "[/COLOR]";
ИначеЕсли ВРег(УровеньВажности) = "ИНФО" Тогда
ЦветнойТекст = "[COLOR=#008000][B]ИНФОРМАЦИЯ:[/B] " + ТекстСообщения + "[/COLOR]";
КонецЕсли;
// Добавим контекст выполнения: имя компьютера и время события
ИмяКомпьютера = ИмяКомпьютера();
ИтоговыйТекст = ЦветнойТекст + Символы.ПС + "[I]Источник: " + ИмяКомпьютера + " | Время: " + ТекущаяДата() + "[/I]";
// 3. Формируем структуру параметров для REST-метода im.message.add
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("DIALOG_ID", ИдентификаторЧата);
ПараметрыЗапроса.Вставить("MESSAGE", ИтоговыйТекст);
ПараметрыЗапроса.Вставить("SYSTEM", "N"); // "Y" убирает аватарку автора вебхука, делая сообщение чисто системным
// Преобразуем структуру параметров в JSON-строку
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ПараметрыЗапроса);
ТелоJSON = ЗаписьJSON.Закрыть();
// 4. Отправка POST-запроса через SSL-соединение
Попытка
// Поскольку Битрикс24 работает по защищенному протоколу HTTPS,
// обязательно инициализируем защищенное соединение OpenSSL
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение(
АдресПортала,
443, // Порт для HTTPS
, , ,
20, // Таймаут ожидания в секундах
ЗащищенноеСоединение
);
ПутьЗапроса = "/rest/" + ИдПользователя + "/" + СекретныйКод + "/im.message.add";
Запрос = Новый HTTPЗапрос(ПутьЗапроса);
Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Запрос.УстановитьТелоИзСтроки(ТелоJSON, КодировкаТекста.UTF8);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
// Анализируем ответ сервера
Если Ответ.КодСостояния <> 200 Тогда
ВызватьИсключение "Код ответа сервера: " + Ответ.КодСостояния + ". Текст ответа: " + Ответ.ПолучитьТелоКакСтроку();
КонецЕсли;
Исключение
// Фиксируем ошибку отправки в Журнале Регистрации 1С,
// чтобы не прерывать выполнение основного бизнес-процесса или фонового задания
ЗаписьЖурналаРегистрации(
"ИнтеграцияБитрикс24.Ошибка",
УровеньЖурналаРегистрации.Ошибка,
, ,
"Не удалось отправить уведомление в чат. Описание ошибки: " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())
);
КонецПопытки;
КонецПроцедуры
Разберем подробнее наиболее важные технологические аспекты представленного кода:
ЗащищенноеСоединениеOpenSSL в конструктор соединения.ЗаписьJSON гарантирует корректную передачу любых специальных символов, переносов строк и кавычек.Попытка ... Исключение. В случае временного отсутствия интернета или недоступности портала Битрикс24, регламентное задание 1С не завершится аварийно — ошибка запишется в Журнал Регистрации, а работа «Робота» успешно продолжится.Проанализируем несколько жизненных ситуаций, в которых данная функция окажется незаменимой помощницей для администратора системы.
Пример 1. Оповещение о старте регламентной обработки робота:
Текст = "Служебный пользователь 'Робот' успешно авторизован. Запущен процесс ночного закрытия смены.";
ОтправитьУведомлениеВБитрикс24(Текст, "chat125", "ИНФО");
Пример 2. Сигнал о проблеме с выгрузкой данных РИБ (Предупреждение):
Текст = "Размер файла обмена превышает установленный лимит в 100 Мб. Возможна задержка синхронизации!";
ОтправитьУведомлениеВБитрикс24(Текст, "chat125", "ПРЕДУПРЕЖДЕНИЕ");
Пример 3. Аварийное завершение критически важной операции (Ошибка):
Текст = "Ошибка при попытке проведения документа 'Реализация товаров и услуг' №УТ-00142. Нарушена последовательность партионного учета!";
ОтправитьУведомлениеВБитрикс24(Текст, "chat125", "ОШИБКА");
Применение этой простой, но эффективной схемы интеграции позволит вам держать руку на пульсе состояния ваших баз 1С, оперативно реагируя на любые сбои и нештатные ситуации прямо из привычного рабочего пространства Битрикс24.