Это старая версия документа!
При пропущено вызове, абонент перезванивает и попадает на сотрудника который ему звонил.
Видя на экране мобильного телефона пропущенный вызов c городского номера у меня практически всегда складывается впечатление что вряд ли я дозвонюсь сотруднику который хотел меня слышать. С учетом, что все звонки попадают на секретаря или группу сотрудников. В лучшем случая я услышу IVR с названием компании и уже смогу представить что и кто меня хотел услышать. Для того что бы в компании где я сейчас работаю не было подобных ситуация я решил внедрить сценарий распределения вызовов на сотрудника который разговаривал или пытался поговорить с клиентом. На хабре меня на это натолкнул один сценарий . Но к нему мы еще вернемся.
Начнем.
Нам понадобиться таблица с полями (порядковый номер, номер на который звонит сотрудник, время, внутренний номер сотрудника)
Для начала создадим табличку с следующими полями (id, number, data, agent)
Ссылка на заготовку таблицы.
Как подключить Asterisk к Mysql.
Далее необходимо настроить запросы из Asterisk в MySql. Это можно сделать двумя способами. Первый все подключение вести в сценарии extension или же как мне больше понравилось задать переменные в файл func_odbc.conf.
; Записываем внутренний номер сотрудника и номер вызываемого абонента при совершении исходящего вызова [SET_DATA_OUT] dsn=aster write=INSERT INTO asterisk.table (number,data,agent) VALUES (${EXTEN},${EPOCH},${CALLERID(num)}) -------------------------------------------------- ; читаем номер вызываемого абонента [GET_DATA_OUT] dsn=aster read=SELECT agent, data, number FROM asterisk.table WHERE number="${EXTEN}" -------------------------------------------------- ; проверка номера при входящем звонке [GET_DATA_IN] dsn=aster read=SELECT agent, data, number FROM asterisk.table WHERE number="${CALLERID(num)}" -------------------------------------------------- ; обновляем время в базе при повторном звонке или при входящем от клиента [UPDATE_TIME_OUT] dsn=aster write=UPDATE asterisk.table SET data=${EPOCH} WHERE number=${CALLERID(num)}
Далее идет настройка Диалплана.
Для начала нужно будет сделать запись в базу при исходящем звонке:
[call-out] exten = _8NXXXXXXXXX,1,Progress() same = n,Set(ARRAY(AGENT,DATA,NUMBER)=${ODBC_GET_DATA_OUT(${EXTEN})}") same = n,GotoIf($["${NUMBER}"!=""]?call:write) same = n(write),Set(ODBC_SET_DATA_OUT()="${CALLERID(num)}","${EPOCH}","${EXTEN}") same = n,Dial(SIP/провейдер/${EXTEN},60,tT) same = n,HangUp() same = n(call),Dial(SIP/провейдер/${EXTEN},60,tT) same = n,HangUp()