Отправка уведомлений о пропущенных звонках из Asterisk
В данном посте я расскажу вам о возможностях отправки уведомлений о пропущенных звонках с помощью Asterisk. Я постараюсь привести простые примеры конфигурации и подробнее раскрыть данную тему, далее вы можете экспериментировать по своему усмотрению или потребностям. Asterisk предлагает довольно широкие возможности для решения различных задач, поэтому одну и ту же задачу можно решать по разному, главное результат — стабильная работа ваших сервисов.Отправка отчета о пропущенном звонке на email Что имеем: Входящая многоканальная линия с номером +7 (495) 1234567, IVR, 4 оператора в очереди вызова.Задачи: 1. Отправлять отчет о пропущенном звонке, с указанием номера звонящего, времени поступления звонка и времени ожидания на линии. 2. Если абонент ждал на линии более 10 секунд и по какой-либо причине положил трубку, не дождавшись ответа оператора — отправляем отчет о пропущенном звонке. 3. Заносить в БД (в текущем примере MySQL) данные о том, какой оператор в очереди ответил звонок и фиксируем время в которое разговор был завершен. В качестве решения приведу пример конфигурации (один из возможных вариантов решения), с комментариями на самых интересных по-моему мнению моментах. Вот так выглядит конфигурация IVR рабочего времени + очереди вызова:[globals] CIDFILE=/etc/asterisk/inc-calls/call-noanswer SQLHOST=db.domain.ru SQLUSER=asterisksql SQLPASS=Gt6Rju8FkS SQLDB=asteriskdb IVRWORK=custom/IVR_company_wav
[incoming-74951234567] exten => h,1, Set (WAITTIME=10) exten => h, n, Set (CTALL=$[${CDR (duration)}]) exten => h, n, Set (CTANSWER=$[${CDR (billsec)}]) exten => h, n, Set (CTDTIME=$[${CTALL}-${CTANSWER}]) exten => h, n, NoOP (${CDR (disposition)}) exten => h, n, NoOP (${CTDTIME}) exten => h, n, GotoIf ($[»${CDR (disposition)}» = «NO ANSWER»]? timecheck: n1) exten => h, n (n1), GotoIf ($[»${CDR (disposition)}» = «BUSY»]? timecheck: n2) exten => h, n (n2), GotoIf ($[»${CDR (disposition)}» = «FAILED»]? timecheck: n3) exten => h, n (n3), GotoIf ($[»${CDR (disposition)}» = «ANSWERED»]? n4: misscall) exten => h, n (n4), MYSQL (Connect connid ${SQLHOST} ${SQLUSER} ${SQLPASS} ${SQLDB}) exten => h, n, MYSQL (Query resultid ${connid} UPDATE office_calls SET active=0 WHERE asterisk_id='${QID}') exten => h, n, MYSQL (Clear ${resultid}) exten => h, n, MYSQL (Disconnect ${connid}) exten => h, n (hang), Hangup () exten => h, n (timecheck), GotoIf ($[${CTDTIME} > ${WAITTIME}]? misscall: hang) exten => h, n (misscall), Goto (noanswer, s,1) exten => s,1, NoOp (${CALLERID (num)}) exten => s, n, Set (CALLID=74951234567) exten => s, n, Set (CALLER=${CALLERID (num)}) exten => s, n, Set (__QID=${CDR (uniqueid)}) exten => s, n (begin), GotoIfTime (10:00–22:00, mon-sat,*,*? workdays: outofoffice) exten => s, n (workdays), NoOp (Incoming CALL from ${CALLERID (num)} to ${EXTEN}) exten => s, n, Answer () exten => s, n, ResetCDR (w) exten => s, n, Wait (1) exten => s, n, Background (${IVRWORK}) exten => s, n, Queue (operators, t,,,300,, startflag1) exten => s, n, NoOp (${DIALSTATUS}) exten => s, n, Goto (noanswer, s,1) exten => s, n, Hangup () Читать дальше →
