Як надіслати повідомлення з Oracle PL/SQL до корпоративного чату MyChat

Основна база даних у компанії знає про все та про всіх. В 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 дні. Клієнт: ТОВ "Стіна". Сума: 148500. Менеджер: Джон Сноу.

Хороше повідомлення з 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 до сервера, потім уже розбиратися із сертифікатами, проксі та політиками безпеки.

Щоб перевірити, який протокол (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.

Поділитись

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *