Запис вхідних дзвінків

Кілька місяців тому мій знайомий попросив допомогти вирішити питання із записом вхідних дзвінків. Все необхідне чи було в наявності, чи обіцяв надати.

вхідних

Якщо цікаво, мій досвід реалізації на python разом з кодом під катом. Знакомий надає послуги з технічної підтримки та обслуговування комп'ютерної техніки. Характер роботи співробітників – роз'їзний. Окремого диспетчера немає, всі дзвінки приймають самі співробітники з метою економії. Бувають ситуації, коли співробітник не може відповісти на дзвінок (в дорозі, у діалозі з клієнтом) або на співробітника надходять претензії від клієнта (зробив чи не все, що просили). Такі ситуації треба «розрулювати». Загалом треба було йому якось централізувати прийом дзвінків, не приймаючи на роботу диспетчера.

У знайомого всі інциденти та зміни записуються та керуються відповідно до вимог ITIL. Автоматизовано процеси за допомогою easla.com. Бракувало лише дзвінків.

Ні про який повноцінний call-центр не йшлося, т.к. розбір дзвінків здійснюється постфактум. Тому вимоги були прості:

  • Записувати в базу інформацію про дзвінок (номер, дату, тривалість)
  • Записувати статус дзвінка (відповідь, без відповіді, зайнято)
  • Записувати розмову.

Було прийнято рішення використовувати Twisted як FastAGI сервер, який би отримував інформацію про дзвінок і передавав інформацію в easla.com за допомогою SOAP. Усі процедури описані у посібнику адміністратора системи.

Розмова записується за допомогою команди MixMonitor, як ім'я файлу використовуємо змінну $. Після закінчення розмови зупиняємо запис розмови та передаємо управління FastAGI серверу: exten => h,1,StopMixMonitor exten =>h,n,AGI(agi://127.0.0.1:4573) Для реалізації протоколу FastAGI використовував бібліотеку starpy. Інформацію про тривалість дзвінка отримуємо через CDR-записи. Після отримання всієї необхідної інформації в окремому потоці записуємо її на easla.com.

Після того, як повернули asterisk-у управління дзвінком, можна зайнятися конвертуванням wav в mp3 і відправкою інформації в easla.com. Тут необхідно пояснити, чому не використовуємо MixMonitor для конвертування, як пропонується у багатьох посібниках. MixMonitor запускає сторонні програми окремим процесом і ніяк не інформує FastAGI про те, що програма виконалася, і може статися так, що до моменту відправки інформації про дзвінок не буде доступу до mp3 файлу. Для конвертування використовується бібліотека pydub, а suds як SOAP клієнт.

Роботу модуля вдалося обкатати в перший тиждень експлуатації. Спершу на рахунку не вистачало коштів і успішно перевірили реєстрацію дзвінків зі статусом «Неможливий». Потім рахунок поповнили та перевірили реєстрацію дзвінків з рештою статусів. Виглядає реєстр вхідних дзвінків якось так:

запис

Після початку реєстрації дзвінків вдалося додати ще функцію визначення абонента в реєстрованому дзвінку та створення інциденту на підставі зареєстрованого дзвінка.

Якщо комусь стане в нагоді таке рішення, буду радий.

Хардкорна конфа за С++. Ми запрошуємо лише профі.