Коллбак делаеться через .call файлы или через голосовую почту, я делал первым путем. Как это работает - я набираю номер, астериск его сбрасывает и мне приходит звонок, после чего набираю номер/экстеншн и в конце #. через agi скрипт можно делать веб, вап, эмайл и прочие варианты инициации (msn,icq,jabber). как раз над ними работаю.
замеченный баг. если h323 гейт находиться далеко (по пингу), глючит набор дтмф-а. т.е. если я набрал 12345678, астериск может принять 112233455567788. при тестировании с гейтом quintum и пинге 700мс с кодеком 729, наоборот, номер приходил сильно обрезанным, т.е. 12345678 -> 1358. возможно надо настраивать эхо - хотя в голосе эха не было. так и не понял, почему на h323 дублируються дтмф'ы. моя конфигурация проста - астериск и в локальной сетке циска 5350, трафик гоняю по g711, без компрессии. из за внутрифирменной бюрократии не могу на циске сип прописать, приходиться h323 использовать. но проблем нет никаких
Итак, файл /root/callfile:
| Код: |
| Channel: OH323/номер-телефо на@h323-шлюз:1720 Callerid: 100 Context: callback-menu-custom Extension: 100 MaxRetries: 4 Retrytime: 10 WaitTime: 60 Priority: 1 |
extensions_custom.conf (asterisk@home) или externsions.conf:
| Код: |
| [callback-menu-custom] exten => 100,1,Answer exten => 100,2,Wait(1) exten => 100,3,SetVar(TIMEOUT(digit)=7) exten => 100,4,SetVar(TIMEOUT(response)=90) exten => 100,5,Read(DST,telephone-number,0) exten => 100,6,Playback(pls-wait-connect-call) exten => 100,7,Ringing exten => 100,8,Dial(OH323/${DST}@h323-шлюз:1720,60) exten => 100,9,Playback(number-not-answering) exten => 100,10,Playback(please-hang-up-and-try-again) exten => 100,11,Wait(1) exten => 100,12,Hangup exten => 100,108,Playback(the-number-u-dialed) exten => 100,109,Playback(is-curntly-busy) exten => 100,110,Playback(please-hang-up-and-try-again) exten => 100,111,Wait(1) exten => 100,112,Hangup |
вариант2:
| Код: |
| [callback-menu2-custom] exten => _X.,1,Answer exten => _X.,2,Wait(1) exten => _X.,3,SetVar(TIMEOUT(digit)=7) exten => _X.,4,SetVar(TIMEOUT(response)=90) exten => _X.,5,DISA,no-password|callback-dialout-custom exten => _X.,6,Hangup exten => _X.,104,Busy exten => h,1,Hangup [callback-dialout-custom] exten => _X.,1,SetVar(TIMEOUT(digit)=7) exten => _X.,2,SetVar(TIMEOUT(response)=90) exten => _X.,3,SetCallerID(12345) exten => _X.,4,Dial(OH323/${EXTEN}@h323-шлюз:1720,60) exten => _X.,5,Wait(5) exten => _X.,6,Congestion |
теперь самое главное. инит-номер на коллбак. номер я брал на www.stanaphone.com. B asterisk@home надо зароутить DID на custom_application:
| Код: |
| [callback-init-custom] exten => s,1,Wait(1) ;exten => s,2,AGI(callback.agi) exten => s,2,System(cp /root/callfile /var/spool/asterisk/outgoing/) exten => s,3,Wait(2) exten => s,4,SetVar(PRI_CAUSE=21) ; 21 = Call rejected exten => s,5,Hangup |
а в простом варианте в [default] прописать:
| Код: |
| exten => STANAPHONEDID,1,Wait(1) ;exten => STANAPHONEDID,2,AGI(callback.agi) exten => STANAPHONEDID,2,System(cp /root/callfile /var/spool/asterisk/outgoing/) exten => STANAPHONEDID,3,Wait(2) exten => STANAPHONEDID,4,SetVar(PRI_CAUSE=21) ; 21 = Call rejected exten => STANAPHONEDID,5,Hangup |
Дополнение от 24-о мая 2005. Изменил callfile.
| Код: |
| Channel: Local/00мой-мобильник@from-internal Callerid: 100 Context: callback-menu-custom Extension: 100 MaxRetries: 4 Retrytime: 10 WaitTime: 60 Priority: 1 |
Это было для астериск@хоум. на нормальном будет:
| Код: |
| Channel: Local/00мой-мобильник@контекст-на-выход |
Дело в том, что просто звонок через колл файл - не попадает в биллинг. В измененной схеме все в порядке. Кроме этого, можвно контекстом писать разговоры, да и вообще делать, что хочешь