VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Входящая маршрутимация

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Аватара пользователя
SolarW
Сообщения: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Re: Входящая маршрутимация

Сообщение SolarW »

Дык оно и есть.
Прописать первый вариант контекста в extension_custom.conf (не забыв поправить параметры подключения к базе) и завернуть на этот контекст входящую маршрутизацию.

Честно скому... эээ... скопипастим решение на этот форум (чтобы потом не искать)

Код: Выделить всё

[dynamic_did]
exten => _X.,1,Set(CHANNEL(language)=ru)
exten => _X.,n,Set(CALLID=${CALLERID(num):-11}) ;; нормализация номера звонящего, тут каждый под себя строит
exten => _X.,n,MYSQL(Connect connidcdr localhost userdb passworddb asteriskcdrdb utf8) ;; заменить параметры userdb passworddb на свои, например из файла cdr_mysql.conf
;; All CALL (поиск по базе среди всех звонков)
exten => _X.,n,MYSQL(Query resultidcdr ${connidcdr} SELECT * FROM cdr WHERE dst LIKE '%${CALLID}%' ORDER BY calldate DESC)
;; NOANSWER CALL ONLY (поиск по базе среди только неотвеченных звонков)
;;exten => _X.,n,MYSQL(Query resultidcdr ${connidcdr} SELECT * FROM cdr WHERE dst LIKE '%${CALLID}%' AND disposition LIKE 'NO ANSWER' ORDER BY calldate DESC)
;;
exten => _X.,n,MYSQL(Fetch fetchid ${resultidcdr} accid calldate clid src dst)
exten => _X.,n,Set(number=${src})
exten => _X.,n,NoOp(caller --> ${clid} callee --> ${dst})
exten => _X.,n,GOTOIF($["${dst}" = ""]?nodst:dst)
exten => _X.,n(dst),MYSQL(Clear ${resultidcdr})
exten => _X.,n,MYSQL(Disconnect ${connidcdr})
exten => _X.,n,Dial(SIP/${number},20,tT)
exten => _X.,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?nodst)
exten => _X.,n,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?nodst)
exten => _X.,n,GotoIf($["${DIALSTATUS}" = "FAILED"]?nodst)
exten => _X.,n(nodst),MYSQL(Clear ${resultidcdr})
exten => _X.,n,MYSQL(Disconnect ${connidcdr})
exten => _X.,n,Goto(from-trunk,${DID},1) ;; если абонент на которого попытались произвести переключение занят, недоступен, не берет трубку отправить звонок на обычную обработку.
exten => h,1,hangup()
Вариант запроса с поиском по базе за прошлые 120 минут

Код: Выделить всё

SELECT * FROM cdr WHERE dst LIKE '%${CALLID}%' AND calldate >= DATE_SUB(NOW(), INTERVAL 120 MINUTE) ORDER BY calldate DESC;
Вариант запроса с поиском по базе за прошлые 3 часа

Код: Выделить всё

SELECT * FROM cdr WHERE dst LIKE '%${CALLID}%' AND calldate >= DATE_SUB( NOW(), INTERVAL 03 HOUR) ORDER BY calldate DESC;
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: Входящая маршрутимация

Сообщение ded »

Код: Выделить всё

SELECT * FROM cdr WHERE dst LIKE '%${CALLID}%' AND calldate >= DATE_SUB( NOW(), INTERVAL 03 HOUR) ORDER BY calldate DESC
А что если за 3 часа было несколько звонков на выбыираемый моб. номер с разным статусом - ANSWER, BUSY, NOANSWER?
А что если у адресата включается голосвая почта иливторой звонок, который ему пикает в ухо? ? Статус точно будет ANSWER

P.S. SolarW, ты поменялсо на аватарке! Творческий рост, не иначе1
Аватара пользователя
SolarW
Сообщения: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Re: Входящая маршрутимация

Сообщение SolarW »

ded писал(а):А что если...
Значит тот, кто попробует нам потом расскажет что из этого получилось и как это исправить :-)
ded писал(а):P.S. SolarW, ты поменялсо на аватарке! Творческий рост, не иначе1
Скорее творческий возраст :-)
Персонаж на аватарке тот же что и раньше но по прошествии many years...
В таком виде больше соответствует состоянию души...
k291
Сообщения: 6
Зарегистрирован: 15 ноя 2015, 01:30

Re: Входящая маршрутимация

Сообщение k291 »

Попробовал выше описанный контекст с поправкой на доступ к БД.
Входящие принимаю на goip8. В Call In:
CID Forward Mode: Use CID as SIP Caller ID (для передачи GSM номера в SIP)
CID Prefix: +
Call IN via GSM: Enable
Forwarding to VoIP Number: GSM3-life (пере адресация на транк)
В FreePBX - Connectivity - Inbound Routes:
Description: IN-GSM3-life
DID Number: GSM3-life
Set Destination:
Custom Destinations: dynamic_did
В asterisk`е выдает:

Код: Выделить всё

[2015-11-17 02:11:13] NOTICE[15156][C-00000022]: pbx.c:5025 pbx_extension_helper: No such label '' in extension 'dynamic_did' in context 'from-trunk'
[2015-11-17 02:11:13] WARNING[15156][C-00000022]: pbx.c:12656 pbx_parseable_goto: Priority '' must be a number > 0, or valid label
  == Spawn extension (from-trunk, GSM3-life, 12) exited non-zero on 'SIP/GSM3-life-0000000c'
Звонок сбрасывает.
Если _X. заменить на внутренний номер, то звонок поступает, но по задумке входящий с GSM должен попасть на внутренний номер, который ему звонил.
Подскажите как решить проблему.
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: Входящая маршрутимация

Сообщение ded »

по задумке входящий с GSM должен обрабатываться через DID = моб. номеру симки или IMEI а не _Х, как вы там разруливаете. Там точные номера моб. симок, а не 'dynamic_did'.
Смотрите на Goip как настроена регистрация порта на Астериск.
k291
Сообщения: 6
Зарегистрирован: 15 ноя 2015, 01:30

Re: Входящая маршрутимация

Сообщение k291 »

То есть делаем следующее?
В контексте:
1) [dynamic_did] меняем на [+380931112233]
2) _Х. меняем на +380931112233

3) В FreePBX в Admin-Custom Destination добавляем направление:
Custom Destination: +380931112233,s,1
Description: +380931112233
4) В Connectivity-Incoming Routes создаем входящий маршрут:
Description: IN-GSM3-life
DID Number: +380931112233
В секции Set Destination:
Custom Destinations = +380931112233

5) В goip в Configurations-Call In:
CID Forward Mode = Use CID as SIP Caller ID
CID Prefix = +
Call IN via GSM = Enable
Forwarding to VoIP Number = ЧТО ТУТ ПИСАТЬ? при необходимости переадресации на последнего звонившего
GSM Call Waiting = Disable
Hunt Group Mode = Disable
Auto Incoming Call Block = Disable

Попробовал несколько вариантов, но явно чтото не доделываю. Подскажите, что не хватает или не так
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: Входящая маршрутимация

Сообщение ded »

https://www.google.lv/search?q=Asterisk+GoIP
k291 писал(а):Попробовал несколько вариантов, но явно чтото не доделываю.
Очень информативно.
k291
Сообщения: 6
Зарегистрирован: 15 ноя 2015, 01:30

Re: Входящая маршрутимация

Сообщение k291 »

Я искал в гугле))
1) Если в goip в Forwarding to VoIP Number = 202, то переадресация идет на 202 номер. Но по выше описанному контексту, нам надо чтобы входящий с GSM шел на последний звонящий внутренний номер.
2) Forwarding to VoIP Number = оставлял пустым, в этом случае при звонке на GSM, поднимается трубка, слышен шум. В asterisk не чего не происходит.
3) Пробовал в Forwarding to VoIP Number ставить логин транка(GSM3-life) и GSM номер(+380931112233) в ответ от asterisk`а получаю "номер отключен".
4) Forwarding to VoIP Number = 103. В настройка 103 номера в секции Optional Destinations ставил:
No Answer: Custom Destinations = +380931112233
Busy: Custom Destinations = +380931112233
Not Reachable: Custom Destinations = +380931112233
в этом случае звонок сбрасывается и в asterisk`е выдает:

Код: Выделить всё

  == Using SIP RTP TOS bits 184
  == Using SIP RTP CoS mark 5
    -- Executing [103@from-trunk-sip-GSM4-life-2:1] Set("SIP/GSM4-life-2-00000001", "GROUP()=OUT_5") in new stack
    -- Executing [103@from-trunk-sip-GSM4-life-2:2] Goto("SIP/GSM4-life-2-00000001", "from-trunk,103,1") in new stack
    -- Goto (from-trunk,103,1)
    -- Executing [103@from-trunk:1] Set("SIP/GSM4-life-2-00000001", "__RINGTIMER=15") in new stack
    -- Executing [103@from-trunk:2] Macro("SIP/GSM4-life-2-00000001", "exten-vm,103,103,1,1,1") in new stack
    -- Executing [s@macro-exten-vm:1] Macro("SIP/GSM4-life-2-00000001", "user-callerid,") in new stack
    -- Executing [s@macro-user-callerid:1] Set("SIP/GSM4-life-2-00000001", "TOUCH_MONITOR=1448231734.5") in new stack
    -- Executing [s@macro-user-callerid:2] Set("SIP/GSM4-life-2-00000001", "AMPUSER=+380935924214") in new stack
    -- Executing [s@macro-user-callerid:3] GotoIf("SIP/GSM4-life-2-00000001", "0?report") in new stack
    -- Executing [s@macro-user-callerid:4] ExecIf("SIP/GSM4-life-2-00000001", "1?Set(REALCALLERIDNUM=+380739998877)") in new stack
    -- Executing [s@macro-user-callerid:5] Set("SIP/GSM4-life-2-00000001", "AMPUSER=") in new stack
    -- Executing [s@macro-user-callerid:6] GotoIf("SIP/GSM4-life-2-00000001", "0?limit") in new stack
    -- Executing [s@macro-user-callerid:7] Set("SIP/GSM4-life-2-00000001", "AMPUSERCIDNAME=") in new stack
    -- Executing [s@macro-user-callerid:8] GotoIf("SIP/GSM4-life-2-00000001", "1?report") in new stack
    -- Goto (macro-user-callerid,s,15)
    -- Executing [s@macro-user-callerid:15] GotoIf("SIP/GSM4-life-2-00000001", "0?continue") in new stack
    -- Executing [s@macro-user-callerid:16] Set("SIP/GSM4-life-2-00000001", "__TTL=64") in new stack
    -- Executing [s@macro-user-callerid:17] GotoIf("SIP/GSM4-life-2-00000001", "1?continue") in new stack
    -- Goto (macro-user-callerid,s,28)
    -- Executing [s@macro-user-callerid:28] Set("SIP/GSM4-life-2-00000001", "CALLERID(number)=+380739998877") in new stack
    -- Executing [s@macro-user-callerid:29] Set("SIP/GSM4-life-2-00000001", "CALLERID(name)=+380739998877") in new stack
    -- Executing [s@macro-user-callerid:30] Set("SIP/GSM4-life-2-00000001", "CDR(cnum)=+380739998877") in new stack
    -- Executing [s@macro-user-callerid:31] Set("SIP/GSM4-life-2-00000001", "CDR(cnam)=+380739998877") in new stack
    -- Executing [s@macro-user-callerid:32] Set("SIP/GSM4-life-2-00000001", "CHANNEL(language)=ru") in new stack
    -- Executing [s@macro-exten-vm:2] Set("SIP/GSM4-life-2-00000001", "RingGroupMethod=none") in new stack
    -- Executing [s@macro-exten-vm:3] Set("SIP/GSM4-life-2-00000001", "__EXTTOCALL=103") in new stack
    -- Executing [s@macro-exten-vm:4] Set("SIP/GSM4-life-2-00000001", "__PICKUPMARK=103") in new stack
    -- Executing [s@macro-exten-vm:5] Set("SIP/GSM4-life-2-00000001", "RT=15") in new stack
    -- Executing [s@macro-exten-vm:6] ExecIf("SIP/GSM4-life-2-00000001", "0?Macro(vm,103,DIRECTDIAL,)") in new stack
    -- Executing [s@macro-exten-vm:7] ExecIf("SIP/GSM4-life-2-00000001", "0?MacroExit()") in new stack
    -- Executing [s@macro-exten-vm:8] Gosub("SIP/GSM4-life-2-00000001", "sub-record-check,s,1(exten,103,dontcare)") in new stack
    -- Executing [s@sub-record-check:1] GotoIf("SIP/GSM4-life-2-00000001", "0?initialized") in new stack
    -- Executing [s@sub-record-check:2] Set("SIP/GSM4-life-2-00000001", "__REC_STATUS=INITIALIZED") in new stack
    -- Executing [s@sub-record-check:3] Set("SIP/GSM4-life-2-00000001", "NOW=1448231734") in new stack
    -- Executing [s@sub-record-check:4] Set("SIP/GSM4-life-2-00000001", "__DAY=22") in new stack
    -- Executing [s@sub-record-check:5] Set("SIP/GSM4-life-2-00000001", "__MONTH=11") in new stack
    -- Executing [s@sub-record-check:6] Set("SIP/GSM4-life-2-00000001", "__YEAR=2015") in new stack
    -- Executing [s@sub-record-check:7] Set("SIP/GSM4-life-2-00000001", "__TIMESTR=20151122-223534") in new stack
    -- Executing [s@sub-record-check:8] Set("SIP/GSM4-life-2-00000001", "__FROMEXTEN=+380739998877") in new stack
    -- Executing [s@sub-record-check:9] Set("SIP/GSM4-life-2-00000001", "__MON_FMT=wav") in new stack
    -- Executing [s@sub-record-check:10] NoOp("SIP/GSM4-life-2-00000001", "Recordings initialized") in new stack
    -- Executing [s@sub-record-check:11] ExecIf("SIP/GSM4-life-2-00000001", "0?Set(ARG3=dontcare)") in new stack
    -- Executing [s@sub-record-check:12] Set("SIP/GSM4-life-2-00000001", "REC_POLICY_MODE_SAVE=") in new stack
    -- Executing [s@sub-record-check:13] ExecIf("SIP/GSM4-life-2-00000001", "0?Set(REC_STATUS=NO)") in new stack
    -- Executing [s@sub-record-check:14] GotoIf("SIP/GSM4-life-2-00000001", "5?checkaction") in new stack
    -- Goto (sub-record-check,s,17)
    -- Executing [s@sub-record-check:17] GotoIf("SIP/GSM4-life-2-00000001", "1?sub-record-check,exten,1") in new stack
    -- Goto (sub-record-check,exten,1)
    -- Executing [exten@sub-record-check:1] NoOp("SIP/GSM4-life-2-00000001", "Exten Recording Check between +380739998877 and 103") in new stack
    -- Executing [exten@sub-record-check:2] Set("SIP/GSM4-life-2-00000001", "CALLTYPE=internal") in new stack
    -- Executing [exten@sub-record-check:3] ExecIf("SIP/GSM4-life-2-00000001", "0?Set(CALLTYPE=)") in new stack
    -- Executing [exten@sub-record-check:4] Set("SIP/GSM4-life-2-00000001", "CALLEE=dontcare") in new stack
    -- Executing [exten@sub-record-check:5] ExecIf("SIP/GSM4-life-2-00000001", "0?Set(CALLEE=dontcare)") in new stack
    -- Executing [exten@sub-record-check:6] GotoIf("SIP/GSM4-life-2-00000001", "0?callee") in new stack
    -- Executing [exten@sub-record-check:7] GotoIf("SIP/GSM4-life-2-00000001", "1?caller") in new stack
    -- Goto (sub-record-check,exten,13)
    -- Executing [exten@sub-record-check:13] Set("SIP/GSM4-life-2-00000001", "RECMODE=") in new stack
    -- Executing [exten@sub-record-check:14] ExecIf("SIP/GSM4-life-2-00000001", "1?Set(RECMODE=dontcare)") in new stack
    -- Executing [exten@sub-record-check:15] ExecIf("SIP/GSM4-life-2-00000001", "1?Set(RECMODE=dontcare)") in new stack
    -- Executing [exten@sub-record-check:16] Gosub("SIP/GSM4-life-2-00000001", "recordcheck,1(dontcare,internal,103)") in new stack
    -- Executing [recordcheck@sub-record-check:1] NoOp("SIP/GSM4-life-2-00000001", "Starting recording check against dontcare") in new stack
    -- Executing [recordcheck@sub-record-check:2] Goto("SIP/GSM4-life-2-00000001", "dontcare") in new stack
    -- Goto (sub-record-check,recordcheck,3)
    -- Executing [recordcheck@sub-record-check:3] Return("SIP/GSM4-life-2-00000001", "") in new stack
    -- Executing [exten@sub-record-check:17] Return("SIP/GSM4-life-2-00000001", "") in new stack
    -- Executing [s@macro-exten-vm:9] GotoIf("SIP/GSM4-life-2-00000001", "1?macrodial") in new stack
    -- Goto (macro-exten-vm,s,15)
    -- Executing [s@macro-exten-vm:15] GosubIf("SIP/GSM4-life-2-00000001", "0?clrheader,1()") in new stack
    -- Executing [s@macro-exten-vm:16] Macro("SIP/GSM4-life-2-00000001", "dial-one,15,Ttr,103") in new stack
    -- Executing [s@macro-dial-one:1] Set("SIP/GSM4-life-2-00000001", "DEXTEN=103") in new stack
    -- Executing [s@macro-dial-one:2] Set("SIP/GSM4-life-2-00000001", "DIALSTATUS_CW=") in new stack
    -- Executing [s@macro-dial-one:3] GosubIf("SIP/GSM4-life-2-00000001", "0?screen,1()") in new stack
    -- Executing [s@macro-dial-one:4] GosubIf("SIP/GSM4-life-2-00000001", "0?cf,1()") in new stack
    -- Executing [s@macro-dial-one:5] GotoIf("SIP/GSM4-life-2-00000001", "0?skip1") in new stack
    -- Executing [s@macro-dial-one:6] Set("SIP/GSM4-life-2-00000001", "DEXTEN=") in new stack
    -- Executing [s@macro-dial-one:7] Set("SIP/GSM4-life-2-00000001", "DIALSTATUS=BUSY") in new stack
    -- Executing [s@macro-dial-one:8] GotoIf("SIP/GSM4-life-2-00000001", "1?nodial") in new stack
    -- Goto (macro-dial-one,s,49)
    -- Executing [s@macro-dial-one:49] ExecIf("SIP/GSM4-life-2-00000001", "0?Set(DIALSTATUS=NOANSWER)") in new stack
    -- Executing [s@macro-dial-one:50] NoOp("SIP/GSM4-life-2-00000001", "Returned from dial-one with nothing to call and DIALSTATUS: BUSY") in new stack
    -- Executing [s@macro-dial-one:51] MacroExit("SIP/GSM4-life-2-00000001", "") in new stack
    -- Executing [s@macro-exten-vm:17] Set("SIP/GSM4-life-2-00000001", "SV_DIALSTATUS=BUSY") in new stack
    -- Executing [s@macro-exten-vm:18] GosubIf("SIP/GSM4-life-2-00000001", "0?docfu,1()") in new stack
    -- Executing [s@macro-exten-vm:19] GosubIf("SIP/GSM4-life-2-00000001", "0?docfb,1()") in new stack
    -- Executing [s@macro-exten-vm:20] Set("SIP/GSM4-life-2-00000001", "DIALSTATUS=BUSY") in new stack
    -- Executing [s@macro-exten-vm:21] ExecIf("SIP/GSM4-life-2-00000001", "1?MacroExit()") in new stack
    -- Executing [103@from-trunk:3] Set("SIP/GSM4-life-2-00000001", "__PICKUPMARK=") in new stack
    -- Executing [103@from-trunk:4] GotoIf("SIP/GSM4-life-2-00000001", "0?+380931112233,s,1") in new stack
    -- Executing [103@from-trunk:5] GotoIf("SIP/GSM4-life-2-00000001", "1?+380931112233,s,1") in new stack
    -- Goto (+380939964865,s,1)
[2015-11-22 22:35:34] WARNING[2265][C-00000001]: pbx.c:6709 __ast_pbx_run: Channel 'SIP/GSM4-life-2-00000001' sent to invalid extension but no invalid handler: context,exten,priority=+380931112233,s,1
    -- Executing [h@+380931112233:1] Hangup("SIP/GSM4-life-2-00000001", "") in new stack
  == Spawn extension (+380931112233, h, 1) exited non-zero on 'SIP/GSM4-life-2-00000001'

ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: Входящая маршрутимация

Сообщение ded »

k291 писал(а):Я искал в гугле))
Что искали? "Как терминировать мобильные в/на Украине?
Вот сюда посмотрите http://www.voipinfo.ru/forum/viewtopic.php?f=1&t=37691
k291 писал(а):1) Если в goip в Forwarding to VoIP Number = 202, то переадресация идет на 202 номер.
.. а если Forwarding to VoIP Number = +380931112233 то переадресация идет на
+380931112233, то есть обозначеный DID.
k291 писал(а):3) Пробовал в Forwarding to VoIP Number ставить логин транка(GSM3-life) и GSM номер(+380931112233) в ответ от asterisk`а получаю "номер отключен".
Зачем Вы запихиваете приходящий вызов в Custom? Если не понимаете как организовать прохождение этого вызова? Вам в логе Астериск всё рассказывает, а Вы не читаете, а просто публикуете тут "авось кто-то понимает и надоумит"?!
k291 писал(а):Но по выше описанному контексту, нам надо чтобы входящий с GSM шел на последний звонящий внутренний номер.
Я перечитал фразу три раза, но что такое последний звонящий внутренний номер не понял.
Разбейте задачу на подзадачи: а) Принять входящий из мира на внутренний номер; б) Отправить в мир с внутреннего номера.

Вы в 2-х шагах от посылки в платный суппорт. Или справитесь самостоятельно, или туда. Задача тривиальная, неинтересная, не требующая разжёвывания и пережёвывания.
Zebar
Сообщения: 51
Зарегистрирован: 07 сен 2010, 08:54

Re: Входящая маршрутимация

Сообщение Zebar »

SolarW писал(а):Дык оно и есть.
Прописать первый вариант контекста в extension_custom.conf (не забыв поправить параметры подключения к базе) и завернуть на этот контекст входящую маршрутизацию.

Честно скому... эээ... скопипастим решение на этот форум (чтобы потом не искать)

Код: Выделить всё

[dynamic_did]
<порезано>
exten => _X.,n,GOTOIF($["${dst}" = ""]?nodst:dst)
exten => _X.,n(dst),MYSQL(Clear ${resultidcdr})
exten => _X.,n,MYSQL(Disconnect ${connidcdr})
exten => _X.,n,Dial(SIP/${number},20,tT)
exten => _X.,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?nodst)
exten => _X.,n,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?nodst)
exten => _X.,n,GotoIf($["${DIALSTATUS}" = "FAILED"]?nodst)
exten => _X.,n(nodst),MYSQL(Clear ${resultidcdr})
exten => _X.,n,MYSQL(Disconnect ${connidcdr})
exten => _X.,n,Goto(from-trunk,${DID},1) ;; если абонент на которого попытались произвести переключение занят, недоступен, не берет трубку отправить звонок на обычную обработку.
exten => h,1,hangup()
Чисто как программист внесу правку (чтобы будущие использователи могли это учесть)
Если мы идем по ветке "вызов был, но там сейчас никто не берет трубку", то у нас 2 раза очищается и дисконнектится MySQL.
Я у себя так сделал:

Код: Выделить всё

exten => _X.,n,NoOp(____BEGIN DYNAMIC DID ________)
;; exten => _X.,n,Set(CALLID=${CALLERID(num):-11}) ;; нормализация номера звонящего, тут каждый под себя строит
exten => _X.,n,MYSQL(Connect connidcdr localhost freepbxuser <password> asteriskcdrdb utf8) ;; заменить параметры userdb passworddb на свои, например из файла cdr_mysql.conf
;; All CALL (поиск по базе среди всех звонков)
exten => _X.,n,MYSQL(Query resultidcdr ${connidcdr} SELECT calldate,src,dst FROM cdr WHERE dst = '${CALLERID(num)}' ORDER BY calldate DESC limit 2)
exten => _X.,n,MYSQL(Fetch fetchid ${resultidcdr} calldate src dst)
exten => _X.,n,Set(number=${src})
exten => _X.,n,NoOp(caller --> ${src} callee --> ${dst}  Date --> ${calldate})

exten => _X.,n,MYSQL(Clear ${resultidcdr})
exten => _X.,n,MYSQL(Disconnect ${connidcdr}) ;; Сразу освободим ресурсы MySql, и только потом будем рутить.

exten => _X.,n,GOTOIF($["${dst}" = ""]?nodst:dst)
exten => _X.,n(dst),NoOp(Called number found)
exten => _X.,n,Dial(SIP/${number},20,tT)
exten => _X.,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?nodst)
exten => _X.,n,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?nodst)
exten => _X.,n,GotoIf($["${DIALSTATUS}" = "FAILED"]?nodst)
exten => _X.,n(nodst),NoOp(Default route)
exten => _X.,n,Goto(from-trunk,9992,1) ;; если абонент на которого попытались произвести переключение занят, недоступен, не берет трубку отправить звонок на обычную обработку.
exten => h,1,hangup()
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH