Asterisk та інформація про вхідні дзвінки у браузері через Notifications
Для зручності співробітників та можливості персоналізованої відповіді було впроваджено систему розпізнавання вхідного дзвінка по внутрішній базі клієнтів.
Так як cron завдання були б дуже рідкісними (максимум 1 раз на секунду), то за основу було взято демон на php, який сканує канали та відправляє інформацію про дзвінок у тимчасове сховище. Для тимчасового сховища був використаний memcached.
Версія Asterisk'a, що використовується, — 11.15.1. В якості API зв'язки php і Asteriska'a - модуль PAMI.
Основний клас демона прослуховування:
Існує два можливі варіанти розпізнавання: прослуховування подій каналів та ручний розбір інформації в CoreShowChannel, розглянемо все по порядку.
Прослуховування подій
У конструктор демона додаємо ініціалізацію слухача подій AsteriskEventListener:
І відповідно сам клас прослуховування та роботи з тимчасовим сховищем:
У цьому варіанті можливі проблеми під час створення каналів. Справа в тому, що коли відбувається перенаправлення дзвінка між співробітниками або перенаправлення з call-центру на співробітника обидва канали будуть створені у зв'язку з тим, хто перенаправляв, і жодної інформації про результуючу зв'язку оператора та клієнта не буде.
Ручний аналіз інформації CoreShowChannel
Для роботи даного способу необхідно дещо модифікувати демон, викликаємо подію CoreShowChannel примусово, оскільки сам Asterisk його не генерує:
Обробка події розриву з'єднання:
У результаті виявилося, що другий спосіб є більш ефективним, оскільки при роботі з подіями астеріск часто падав, і, в результаті, губилися деякі дзвінки. Так само в першому способі не розпізнавались дзвінки при перенаправленні з call-центру, оскільки номер співробітника та клієнта були врізних каналах (Перший канал пов'язує call-центр та співробітника, другий канал пов'язує call-центр та клієнта).
Інформація про дзвінок через Notifications
Для отримання інформації про вхідні дзвінки було використано плагін event-source-polyfill та long-pull запити на сервер. Нагадаю ми зберігаємо вхідні дзвінки у memcached.
Практика показала, що якщо співробітник відкриває багато вкладок, то генерується велика кількість запитів. Для запобігання цьому був використаний плагін wormhole, який передає інформацію про канал між вкладками.
Вийшов наступний скрипт:
І власне сам обробник запитів:
Підсумки впровадження
- Досить цікавий досвід роботи з Asterisk і системою Notifications для різних браузерів.
- Персоналізація вхідних дзвінків.
- Миттєвий пошук номера в базі та можливість швидко перейти до картки клієнта.
- Співробітники отримали корисний сервіс оповіщення про вхідні дзвінки.