Как настроить отправку цветных сообщений из 1С в чат Битрикс24?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

В процессе сопровождения крупных или распределенных информационных баз 1С (например, на базе конфигурации «Управление торговлей 10.3») часто возникает необходимость оперативного мониторинга работы системы. Когда служебные сеансы, выполняющие обмен данными в распределенной информационной базе (РИБ) или регламентные задания, сталкиваются с ошибками, администратор должен узнать об этом мгновенно. Идеальным решением является настройка отправки уведомлений в рабочий чат компании в Битрикс24.

В этой статье мы подробно разберем, как реализовать механизм отправки сообщений из 1С в определенный чат Битрикс24, настроить цветовое оформление для разных типов событий (информация, предупреждение, ошибка) и автоматизировать этот процесс.

Почему вебхук — это оптимальное решение?

Для интеграции 1С и Битрикс24 можно использовать полноценные приложения или чат-боты. Однако для простой задачи отправки уведомлений («отправил и забыл») создание полноценного бота избыточно. Оно требует регистрации приложения, поддержки протокола авторизации OAuth 2.0 и постоянного обновления токенов доступа.

Гораздо проще и надежнее использовать входящий вебхук. Этот механизм предоставляет уникальный секретный URL-адрес, отправка запросов на который мгновенно публикует сообщения в портале. Нам не нужно авторизовываться при каждом запросе — достаточно один раз настроить права доступа вебхука в Битрикс24.

Шаг 1. Создание и настройка входящего вебхука в Битрикс24

Для начала подготовим площадку на стороне Битрикс24. Нам необходимо получить секретный адрес для отправки запросов:

  1. Перейдем в главное меню вашего портала Битрикс24 и выберем раздел Приложения, далее перейдем на вкладку Разработчикам.
  2. Выберем пункт Другое и найдем там вариант Входящий вебхук.
  3. В открывшейся карточке укажем понятное наименование, например: «Робот-оповещатель из 1С». Это имя будет отображаться в качестве автора сообщений, если мы не переопределим его.
  4. В разделе Настройка прав нажмем кнопку «Добавить» и в списке найдем пункт Чат и уведомления (im). Это критически важно, так как без этих прав вебхук не сможет использовать API для отправки сообщений в чаты.
  5. Нажмем кнопку Сохранить.

После сохранения система выдаст нам готовый URL для вызова REST API. Он выглядит следующим образом:

https://имя_вашего_портала.bitrix24.ru/rest/ID_ПОЛЬЗОВАТЕЛЯ/СЕКРЕТНЫЙ_КОД/

Для работы в 1С нам понадобятся три составляющие этого адреса:

Шаг 2. Определение идентификатора чата (DIALOG_ID)

Чтобы сообщение попало в конкретный групповой чат или канал, нам необходимо знать его внутренний уникальный код в Битрикс24 — параметр DIALOG_ID. Выяснить его очень просто:

  1. Откроем нужный групповой чат в интерфейсе Битрикс24.
  2. Напишем в этот чат специальную сервисную команду /getDialogId и отправим сообщение.
  3. Система автоматически пришлет в ответ сообщение с идентификатором чата. Для групповых чатов он обычно выглядит как chat с числовым суффиксом, например, chat125.

Если мы хотим отправлять персональные сообщения конкретному сотруднику напрямую, то в качестве DIALOG_ID будет выступать его числовой ID пользователя в системе (например, 45).

Шаг 3. Цветовое форматирование с помощью BB-кодов

Автор исходного запроса справедливо заметил, что важные сообщения должны визуально выделяться, чтобы администратор мог сразу оценить критичность ситуации. Обычный HTML или Markdown в сообщениях чата Битрикс24 не поддерживается, но платформа отлично распознает BB-коды (разметку в квадратных скобках).

Для раскраски текста мы будем использовать тег [COLOR] с указанием HEX-кода цвета:

Мы также можем комбинировать оформление, например, выделять важные заголовки жирным шрифтом с помощью тега [B] или делать примечания курсивом через [I].

Шаг 4. Программный код отправки в 1С

Перейдем к реализации на стороне 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.Ошибка",
            УровеньЖурналаРегистрации.Ошибка,
            , ,
            "Не удалось отправить уведомление в чат. Описание ошибки: " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())
        );
    КонецПопытки;

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

Анализ ключевых моментов программного решения

Разберем подробнее наиболее важные технологические аспекты представленного кода:

Примеры вызова разработанной функции

Проанализируем несколько жизненных ситуаций, в которых данная функция окажется незаменимой помощницей для администратора системы.

Пример 1. Оповещение о старте регламентной обработки робота:


Текст = "Служебный пользователь 'Робот' успешно авторизован. Запущен процесс ночного закрытия смены.";
ОтправитьУведомлениеВБитрикс24(Текст, "chat125", "ИНФО");

Пример 2. Сигнал о проблеме с выгрузкой данных РИБ (Предупреждение):


Текст = "Размер файла обмена превышает установленный лимит в 100 Мб. Возможна задержка синхронизации!";
ОтправитьУведомлениеВБитрикс24(Текст, "chat125", "ПРЕДУПРЕЖДЕНИЕ");

Пример 3. Аварийное завершение критически важной операции (Ошибка):


Текст = "Ошибка при попытке проведения документа 'Реализация товаров и услуг' №УТ-00142. Нарушена последовательность партионного учета!";
ОтправитьУведомлениеВБитрикс24(Текст, "chat125", "ОШИБКА");

Применение этой простой, но эффективной схемы интеграции позволит вам держать руку на пульсе состояния ваших баз 1С, оперативно реагируя на любые сбои и нештатные ситуации прямо из привычного рабочего пространства Битрикс24.

← На главную