AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Обратный звонок определенному оператору (howto)

Newbies/FAQ Forum 3 сообщений -
#1

Обратный звонок определенному оператору (howto)


Задача: Звонит оператор на определённый номер, разговаривает. Через время этот номер перезванивает и нужно, чтоб он переводился сразу на оператора, который ранее уже набирал этот номер, а не случайному
Очень упрощенный вариант:

http://awsswa.livejournal.com/12073.html

Задача: Звонит оператор на определённый номер, разговаривает. Через время этот номер перезванивает и нужно, чтоб он переводился сразу на оператора, который ранее уже набирал этот номер, а не случайному.

Условния: Внутренея сеть начинается трехзначная на 1XX. Городская на 2XXXXXX. Разрешено сотовые и межгород без ограничений.
Подключены к zadarma.ru, все звонки через него (номер телефона 499-1234567 ).

===========================================================================================================
[from-local] ; Внутренние звонки и звонки наружу
exten = > _1XX,1,Dial(SIP/${EXTEN},,tT)
exten = > _1XX,n,HangUP

exten = > _2XXXXXX,1,Dial(SIP/zadarma.ru/${EXTEN})
exten = > _2XXXXXX,n,HangUp

exten = > _8X.,1,Dial(SIP/zadarma.ru/${EXTEN})
exten = > _8X.,n,HangUP

[from-exten] ; Сюда приходят звонки с наружи ( с zadarma.ru )

exten = > 4991234567,1,Dial(SIP/101&SIP/102&SIP/103,,tT) ; без затей звоним сразу на три номера
exten = > 4991234567,n,HangUp
===========================================================================================================
Модифицирем контекст [from-local] чтоб заносить звонки во внутренею базу

; так как звоним по 7 значному номеру, а приходит 10 значный, добиваем до 10 знаков добавляя код города (342)
exten = > _2XXXXXX,1,Set(DB(vipclient/342${EXTEN})=${CUT(CUT(CHANNEL,/,2),-,1)}
exten = > _2XXXXXX,n,Dial(SIP/zadarma.ru/${EXTEN})
exten = > _2XXXXXX,n,HangUp

; так как звоним через 8, а номер приходит без цифры 8 в начале, отрезаем первую цифру
exten = > _8X.,1,Set(DB(vipclient/${EXTEN:1})=${CUT(CUT(CHANNEL,/,2),-,1)}
exten = > _8X.,n,Dial(SIP/zadarma.ru/${EXTEN})
exten = > _8X.,n,HangUp

делаем звонок и потом идем консоль asterisk
CLI>database show
среди списка находим строку, название нашей базы (vipclient) , номер куда мы звонили, номер с которого звонили
/vipclient/9078775982 : 125
/vipclient/3423343432 : 125
=========================================================================================================
С записью в базу номеров на которые мы позвонили, мы разобрались.
Этап второй, разбираем со входящими звонками.

[from-exten] ; Сюда приходят звонки с наружи ( с zadarma.ru )

exten = > 4991234567,1,GotoIf(${DB_EXISTS(vipclient/${CALLERID(number)})}?nashelnomer) ; Поиск по базе
exten = > 4991234567,n,NoOp(== Номер не найден ==)
exten = > 4991234567,n,Goto(no-prozvon-nomera)
exten = > 4991234567,n(nashelnomer),Set(vnutr-nomer=${DB(vipclient/${CALLERID(number)})}) ; Получаем внутренний номер
exten = > 4991234567,n,NoOp(== ${vnutr-nomer} ==)
exten = > 4991234567,n,Dial(SIP/${vnutr-nomer},20,tT) ;Звоним на него 20 секунд
....
.... тут устраиваем большие разборки, занят ли номер, если да проговариваем различные вариант
.... типа "ваш персональный оператор занят" если будете ждать нажмите 1 если, если не нажали гоним звонок далее
....
exten = > 4991234567,n(no-prozvon-nomera),NoOp(== Поехали по старому плану ==)
exten = > 4991234567,n,Dial(SIP/101&SIP/102&SIP/103,,tT) ; без затей звоним сразу на три номера
exten = > 4991234567,n,HangUp
===========================================================================================================
Этап третий, заключительный - а как очистить базу ?
Ведь рано или поздно база тупо забьется номерами телефонов
Варинт ручками
CLI>database deltree vipclient
107 database entries removed.
А автоматом ?
в cron засунуть строку
8 8 * * * root asterisk -rx "database deltree vipclient"
==========================================================================================================
Тут показан самый простой вариант, вполне возможны синтакситеческие ошибки потому как вырезалось с реально плана в почти в 200 строк

Вопрос: а если несколько операторов позвонят на один и тот же номер телефона кому придет звонок ?
Ответ: звонок придет последнему позвонившему.
#2

подобие Dynamic Clip Routing Smile
#3

Очень интересный пост, спасибо.

Но для себя предпочел прописывать в CID личные номера мобильников наших менеджеров.

Во-первых - человек не обязательно перезвонит со своего номера, это характерно для производств и многих регионов с дорогой связью.
Во-вторых - на мобильные перезванивают чаще, это из личной статистики людей, делающих по 150 звонков в день.

К сожалению далеко не все VOIP-операторы позволяют подставлять CID.