Основная база данных в компании знает обо всём и про всех. В Oracle уже есть заказы, остатки, платежи, статусы документов, журналы обмена, сервисные заявки и результаты ночных заданий. Но пока кто-то не откроет отчет или не проверит лог, эта информация остается внутри базы.

Отсюда частый практический вопрос: как отправить сообщение из Oracle PL/SQL в чат, мессенджер или webhook, чтобы люди получили уведомление сразу?

В этой статье покажем такой сценарий на примере корпоративного мессенджера MyChat. База данных Oracle в PL/SQL формирует JSON, отправляет HTTP POST через UTL_HTTP, а MyChat показывает сообщение пользователю или в конференции. Для сотрудника это выглядит как обычное сообщение в корпоративном чате, на компьютере или в смартфоне. Для Oracle-специалиста — как небольшой PL/SQL-пакет, ACL и вызов REST API. Максимально компактно и практично.

Почему это нужно не только администраторам Oracle

Уведомления из базы данных нужны не ради красивой интеграции. Они нужны, чтобы важные события не терялись между отчетами, почтой и ручными проверками.

Примеры из обычной корпоративной жизни:

  • товар на складе опустился ниже минимального остатка;
  • заказ клиента завис на согласовании;
  • платеж по счету просрочен;
  • ночной импорт из внешней системы завершился с ошибкой;
  • регламентное задание Oracle отработало дольше обычного;
  • появилась сервисная заявка с высоким приоритетом;
  • документ нужно подписать сегодня, но ответственный еще не открыл систему;
  • операция в ERP, CRM или на сайте-магазине вернула ошибку.


Во всех этих случаях можно отправить email. Но email часто превращается в склад непрочитанных писем. К тому же есть шанс попасть в спам, если вы не контролируете почтовый ящик получателя. А короткое сообщение в рабочий чат обычно замечают быстрее, особенно если оно попадает не всем подряд, а в правильную конференцию или ответственному человеку в приват.

Чем сложнее и больше система — тем важнее оперативные уведомления в чат. Очень тоскливо прийти на работу в понедельник и увидеть, что бекап начался в пятницу ночью и застрял, потому что закончилось свободное место на диске (реальный кейс из жизни).

Почему MyChat, а не Slack, Teams или Telegram

Если искать в интернете похожие задачи, чаще всего встречаются запросы вроде Oracle PL/SQL Slack webhook, send Teams notification from Oracle, PL/SQL Telegram sendMessage, UTL_HTTP webhook. Это понятный класс задач: событие в базе данных превращается в HTTP-запрос, а на другой стороне появляется сообщение.

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

MyChat в этом сценарии удобен тем, что сервер мессенджера устанавливается внутри вашей инфраструктуры. Сообщения остаются в корпоративном контуре, а уведомления попадают туда, где сотрудники уже работают: в приват, отдел продаж, складскую конференцию, технический канал или чат дежурной смены. Не в чужое облако в интернете, а на ваш self-hosted сервер, который вы контролируете. Он тоже может быть в облаке, не обязательно в LAN. Но в вашем облаке, под вашим контролем.

Как выглядит уведомление для пользователя

Пользователь не видит всех этих UTL_HTTP, JSON и Oracle ACL. Он получает понятное сообщение:

Склад: остаток товара "Картридж X-120" ниже минимума. Осталось: 4 шт. Минимум: 10 шт. Склад: Центр, Основной. Ответственный: отдел закупок.

Или такое:

Финансы: счет № INV-2026-01845 просрочен на 3 дня. Клиент: ООО "Стена". Сумма: 148 500. Менеджер: Джон Сноу.

Хорошее уведомление из Oracle Database в мессенджер должно отвечать на четыре вопроса: что произошло, где произошло, насколько это важно и кто должен действовать.

Сообщение в корпоративный чат MyChat, отправленное из Oracle PL/SQL

Реальные кейсы для Oracle Database

Низкие остатки на складе
В Oracle есть таблица остатков и минимальных норм. DBMS_SCHEDULER раз в час запускает PL/SQL-процедуру, которая ищет позиции ниже порога. Если товар обычный, сообщение уходит в конференцию закупок. Если товар критичный, Oracle дополнительно отправляет приватное сообщение ответственному менеджеру.

Зависший заказ клиента
Заказ создан, сумма большая, но статус «ожидает согласования» не меняется больше двух часов. PL/SQL-процедура отправляет руководителю отдела продаж сообщение с номером заказа, клиентом, суммой и ответственным согласующим.

Ошибка ночного обмена
Каждую ночь база принимает данные из внешней системы: цены, накладные, остатки, платежи. Если пакет обмена завершился с ошибкой, техническая конференция MyChat получает сообщение: имя задания, время, код ошибки и ссылка на внутренний журнал.

Просроченный платеж
Финансовый модуль видит, что счет не оплачен в срок. Менеджеру уходит приватное сообщение, а руководитель получает только крупные просрочки выше заданного порога. Так чат не превращается в шум, но важные деньги не выпадают из внимания.

Критичная сервисная заявка
В таблице заявок появляется обращение с приоритетом «критично». Oracle отправляет сообщение в конференцию дежурных инженеров: номер заявки, объект обслуживания, город, клиент и краткое описание проблемы.

Oracle PL/SQL webhook: как это устроено

Технически это похоже на обычный webhook, только инициатором выступает Oracle Database. В базе происходит событие, PL/SQL формирует JSON, затем выполняется HTTP POST на REST API MyChat.

В примере используются стандартные механизмы Oracle:

  • UTL_HTTP — отправка HTTP/HTTPS-запроса из PL/SQL;
  • JSON_OBJECT — аккуратная сборка JSON без ручного склеивания строк;
  • UTL_I18N.STRING_TO_RAW — отправка тела запроса в UTF-8, чтобы можно было писать на национальных языках, а не только на английском;
  • Oracle ACL — разрешение конкретной схеме подключаться к host-у MyChat-сервера;
  • DBMS_SCHEDULER — запуск регулярных проверок и отправка уведомлений по расписанию.


Oracle отправляет JSON методом POST на MyChat Server через его Integration API.

Что умеет пакет MYCHAT_API

В нашем примере создается PL/SQL-пакет MYCHAT_API. Он закрывает две самые частые операции:

  • отправить приватное сообщение пользователю;
  • отправить сообщение в текстовую конференцию.


Ключ Integration API и базовый URL сервера мессенджера MyChat сохраняются внутри отдельной Oracle-схемы. Рабочая схема приложения может получить только право execute на пакет. Это удобнее, чем разбрасывать ключ API по процедурам, триггерам и job-ам. Ключевое правило — не хардкодим. Настройки должны быть в одном месте и их легко изменять.

В MyChat есть основные две сущности, это пользователи и конференции. У кадого пользователя есть уникальный номер, UIN. А у конференции — UID. На них можно опираться, это удобные числовые идентификаторы. Их можно увидеть в админке сервера в списке пользователей и в списке активных конференций.

Пример: отправить приватное сообщение из Oracle

После установки пакета можно выполнить запрос прямо из SQL*Plus, SQL Developer, PL/SQL-процедуры или job-а:

select dbms_lob.substr(
         mychat_api.send_private_message(
           p_user_to => '6',
           p_msg     => 'Тестовое сообщение из Oracle PL/SQL'
         ),
         4000,
         1
       ) as response
from dual;
В реальном сценарии вместо тестового текста обычно подставляют данные из таблиц:

Заказ № 15842 ожидает согласования больше 2 часов. Клиент: ООО "Стена". Сумма: 248 000.

Так Oracle может отправить сообщение из процедуры, job-а или прикладного PL/SQL-пакета без отдельного внешнего сервиса.

Пример: отправить сообщение в конференцию MyChat

Если уведомление нужно не одному человеку, а отделу или дежурной группе, удобнее отправлять его в конференцию:

select dbms_lob.substr(
         mychat_api.send_conference_message(
           p_uid => 2,
           p_msg => 'Тестовое сообщение из Oracle PL/SQL'
         ),
         4000,
         1
       ) as response
from dual;

p_uid — это UID текстовой конференции MyChat. Такой формат подходит для складских уведомлений, технических ошибок, событий продаж, бухгалтерии и дежурных смен.

SQL-запрос и ответ MyChat Server на отправку сообщения в конференцию
Отправка сообщения из Oracle PL/SQL в конференцию корпоративного мессенджера MyChat

Где лучше запускать отправку

Есть три типовых варианта.

Ручная проверка из SQL*Plus или SQL Developer
Так удобно убедиться, что Oracle видит MyChat Server, ACL настроен, ключ Integration API правильный, а русский текст не превращается в кракозябры.

Вызов из существующей PL/SQL-процедуры
Если бизнес-событие уже обрабатывается процедурой, можно добавить вызов MYCHAT_API рядом с существующей логикой. Например, после смены статуса заказа или после завершения обмена.

Регулярное задание через DBMS_SCHEDULER
Для большинства уведомлений это самый спокойный вариант. Oracle выбирает события, по которым еще не было сообщения, отправляет уведомления в MyChat и помечает записи как обработанные.

Триггеры тоже возможны, но с ними лучше осторожно. HTTP-запрос внутри триггера может замедлить транзакцию и привязать бизнес-операцию к доступности сети. Часто надежнее записать событие в таблицу очереди, а отправку делать отдельным job-ом.

Частые технические проблемы: ACL, HTTPS и кодировка

Когда люди ищут Oracle ACL UTL_HTTP, обычно они уже столкнулись с ошибкой вроде:

ORA-24247: network access denied by access control list

Это значит, что Oracle не разрешает текущей схеме сетевой доступ к нужному host-у. Для отправки сообщений в MyChat нужно выдать схеме право connect через DBMS_NETWORK_ACL_ADMIN.

Вторая частая зона — HTTPS. UTL_HTTP умеет работать с HTTPS, но в некоторых конфигурациях может понадобиться Oracle Wallet и сертификаты. В локальных тестах проще сначала проверить обычный GET/POST к серверу, затем уже разбираться с сертификатами, proxy и политиками безопасности.

Чтобы проверить, какой протокол (HTTP или HTTPS) и порт использует ваш MyChat Server — загляните в админку.

Третья проблема — кодировка. Если сообщение содержит национальные символы UNICODE, тело JSON надо отправлять в UTF-8. В нашем пакете это делается через UTL_I18N.STRING_TO_RAW(…, ‘AL32UTF8’).

Почему не просто email

Email остается хорошим каналом для документов, отчетов и длинных уведомлений. Но для оперативных событий он часто слишком тяжелый.

Чат лучше подходит, когда нужно быстро привлечь внимание: «остаток ниже минимума», «обмен упал», «заказ завис», «платеж просрочен», «критичная заявка создана», «регламентное задание не завершилось».

Сообщение в MyChat можно сразу обсудить с коллегами, переслать ответственному, закрепить контекст в конференции или использовать как старт разговора внутри отдела.

Как не превратить чат в помойку

Главное правило: отправлять только то, что требует реакции.

Плохое уведомление:

В таблице ORDERS есть свежие заказы.

Хорошее уведомление:

Продажи: заказ № 15842 ожидает согласования больше 2 часов. Клиент: ООО "Стена". Сумма: 248 000. Ответственный: Джон Сноу.

Лучше меньше сообщений, но каждое по делу. Тогда сотрудники начинают доверять автоматическим уведомлениям и не раздражаются, а наоборот, привыкают к удобству и надёжности.

Что получает компания

Интеграция Oracle с корпоративным мессенджером дает быстрый эффект без больших усилий:

  • ответственные узнают о проблемах раньше;
  • руководители видят зависшие процессы без ручной проверки отчетов;
  • склад реагирует на критичные остатки;
  • техподдержка получает ошибки обменов сразу после сбоя;
  • внутренние данные остаются в корпоративной инфраструктуре;
  • база данных становится активным участником процесса, а не молчаливым архивом.


Если сформулировать совсем коротко: Oracle не должна ждать, пока человек сам придет за информацией. Если событие важно, Oracle может отправить сообщение в MyChat сам. Все в выигрыше, и администраторы, и менеджеры, и исполнители.

Если вы искали Slack, Teams или Telegram

Эта статья может быть полезна и тем, кто искал:

  • Oracle send message to chat;
  • PL/SQL send webhook notification;
  • Oracle PL/SQL Slack webhook;
  • Oracle PL/SQL Telegram sendMessage;
  • Oracle send Teams notification;
  • UTL_HTTP POST JSON example.


Общая архитектура похожа: PL/SQL формирует JSON и отправляет HTTP-запрос. Отличие MyChat в том, что это корпоративный мессенджер, который можно держать на своем сервере и использовать для внутренних уведомлений без внешнего SaaS. Но вы вполне можете просто взять пакет по ссылке в конце статьи и переиначить его на свой лад, схема работы останется +/- очень близкой.

Короткие шаблоны сообщений

Начинать лучше с двух-трех понятных сценариев: низкие остатки, ошибки обмена, просроченные платежи. Если эти уведомления помогают людям работать быстрее, дальше станет ясно, какие события стоит подключать следующими.

Склад

Склад: остаток товара "{Товар}" ниже минимума. Осталось: {Остаток}, минимум: {Минимум}. Склад: {Склад}.

Финансы

Финансы: счет № {Номер} просрочен на {Дней} дн. Клиент: {Клиент}. Сумма: {Сумма}.

Техподдержка

Oracle: задание "{JobName}" завершилось с ошибкой {Код}. Время: {Время}. Подробности в журнале импорта.

Продажи

Продажи: заказ № {Номер} ожидает согласования больше {Часы} ч. Клиент: {Клиент}. Сумма: {Сумма}.

Скачать готовый пакет для DBA-админов

MyChat Integration API позволяет отправлять сообщения из Oracle PL/SQL в корпоративный чат. Для пользователя это обычное уведомление в MyChat. Для разработчика или DBA — PL/SQL-пакет, UTL_HTTP, JSON POST и ACL.

Скачать пакет mychat-oracle.zip (readme, sql-скрипты и cmd-установщик). Пакет тестировался в SQL*Plus: Release 23.26.1.0.0 на Oracle AI Database 26ai Free Release.

Такая интеграция полезна не потому, что база «умеет писать в чат», а потому что важные события начинают доходить до людей вовремя.

Берите, пробуйте, пишите ваши впечатления и вопросы на официальном форуме поддержки MyChat.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *