Пропущенные звонки для компании - это всегда плохо, однако полностью избавиться от этого явления практически не возможно. Чтобы повысить уровень обслуживания клиентов правильным решением будет научиться правильно распознавать и реагировать на пропущенные звонки. В компании, где я работаю, для телефонной связи используется ip-АТС Asterisk, а в качестве корпоративного мессенджера - сервис Slack.
Итак, у нас простая задача: отделить звонки, которые мы будем считать пропущенными и отправить о них уведомления в slack в определенный канал.
Пропущенным звонок будем считать, если:
1. клиент позвонил, некоторое время слушал музыку, устал ждать и повесил трубку
2. клиент позвонил, очень долго ждал, после чего звонок завершился по тайм-ауту
Статус звонка будем отслеживать по переменной ${DIALSTATUS}, в которую записывается результат выполнения последней команды Dial, в первом случае ее значение устанавливается в "CANCEL", во втором - "NOANSWER". Время ожидания клиента можно взять из переменной ${CDR(duration)}, которая должна быть в канале при включенной CDR-статистике.
Добавляем обработку екстеншена h в контекст отдела продаж в нашем диалплане:
exten => h,1,NoOp(IVR Sales Hangup) exten => h,n,ExecIf($[$[$["${DIALSTATUS}" = "CANCEL"] & $["${CDR(duration)}" > "25"]] | $["${DIALSTATUS}" = "NOANSWER"]]?AGI(slack_sales_notifications.agi))Теперь если звонку присвоен статус - "отменен" и время ожидания более 25 секунд, либо установлен статус - "не отвечен" => будет выполняться AGI-скрипт для отправки уведомлений.