Приветствую Вас на моем блоге. Здесь Вы встретите описание моих наработок, в основном связанных с VoIP на базе asterisk, CUCM. Также увлечение python не будет опущено.

пятница, 23 марта 2018 г.

asterisk callback

В статье приведу простую схему корпоративного callback, которая может быть использована в целях удешевления звонков внутренним абонентам asterisk для сотрудников компании либо для определенных клиентов.
Сотрудник компании делает звонок на определенный номер, asterisk сбрасывает вызов и перезванивает данному сотруднику, где его приветствует IVR c возможностью донабора внутреннего номера
Опишу Вариант статической базы номеров сотрудников (в конфигурационном файле), чтобы не загружать статью описанием реализации этого же функционала с помощью запросов в базу данных. Также в статье будет описана дополнительная проверка подлинности с помощью пароля.

Контекст для входящих звонков с PSTN
[PSTN-IN]
exten => _0XXXXXXXXX,1,NoOp(Callback call); где 0XXXXXXXXX- Ваш номер для callback
same => n,Goto(callback,${EXTEN},1)


[callback]
exten => _0XXXXXXXXX,1,NoOp(== C A L L B A C K ==)
; Перечисляем "Разрешенные номера"
same => n,GotoIf($[ ${CALLERID(num)} = 0960000000 ]?allow);Иванов Иван

same => n,GotoIf($[ ${CALLERID(num)} = 0500000000 ]?allow);Петров Петр
same => n,GotoIf($[ ${CALLERID(num)} = 0630000000 ]?allow);Романов Роман
same => n,Hangup
same => n(allow),NoOp()
same => n,System(/bin/echo "Channel: LOCAL/${CALLERID(num)}@ivr-callback-out\nCallerID:${CALLERID(num)}\nMaxRetries: 0\nRetryTime: 10\nWaitTime: 40\nSET: REXTEN=${REAL_EXTEN}\nContext: ivr-callback-hq\nExtension: 0000001000\nArchive: Yes" > /var/spool/asterisk/callback/callback_${CALLERID(num)}.call)
same => n,System(mv /var/spool/asterisk/callback/callback_${CALLERID(num)}.call /var/spool/asterisk/outgoing/)
same => n,Hangup

Контекст для выхода в PSTN  
[ivr-callback-out]
exten => _0XXXXXXXXX,1,NoOp()
same => n,Dial(SIP/${EXTEN}@YourProvider)
same => n,Hangup



Контекст для IVR 
[ivr-callback]
exten =>
0000001000,1,NoOp()
same => n,Answer()

same => n,Playback(ru/hello)
same => n,Authenticate(2018); Авторизация
same => n(entern),Background(ru/vm-enter-num-to-call)
same => n,Set(LOOPCOUNT=$[${LOOPCOUNT} + 1])
same => n,WaitExten(7)

exten => _1XXX,1,NoOp()
same => n,Dial(SIP/${EXTEN})

same => n,Hangup()

exten => i,1,NoOp()
same => n,Wait(2)
same => n,Playback(ru/privacy-incorrect)

same => n,Goto(0000001000,entern)

exten => t,1,NoOp()
same => n,ExecIf($[ ${LOOPCOUNT} >= 3 ]?Hangup(17))
same => n,Goto(
0000001000,entern)

exten => h,1,NoOp()
same => n,Hangup

 

Внешний абонент звонит на callback номер, если Его номер соответствует одному из разрешенных номеров в конфигурационном файле, создастся .call файл со следующим содержимым:

Channel: LOCAL/0YYYYYYYYY@ivr-callback-out
CallerID:0YYYYYYYYY
MaxRetries: 0
RetryTime: 10
WaitTime: 40
Context: ivr-callback
Extension:
0000001000
Archive: Yes 

, где 0YYYYYYYYY - номер звонившего абонента
 ivr-callback,0000001000 - куда переключить при успешном дозвоне на номер 0YYYYYYYYY.
Далее , данный файл перемещается в папку /var/spool/asterisk/outgoing/, это в свою очередь инициирует звонок с описаннымы в файле инструкциям.
При успешном дозвоне на номер 0YYYYYYYYY происходит соединение его с IVR. Далее, абоненту предлагается ввести пароль (в примере используется пароль 2018), после "авторизации" будет предложено ввести внутренний номер абонента. 
Это наиболее простая схема, можно же направлять абонента на более сложный IVR.

Комментариев нет:

Отправить комментарий