asterisk-11.8.1
Код: Выделить всё
[macro-dial] ; Немного расширенная комманда Dial()
; Macro(dial,SIP/0000&IAX/0000,120,Ttrg)
exten = s,1,NoOp()
same = n,Macro(monitor)
same = n,ChanIsAvail(${ARG1},t)
same = n,Dial(${AVAILORIGCHAN},${ARG2},${ARG3})
same = n,Goto(STATUS-${DIALSTATUS},1)
same = n,Macro(hangup)
exten = STATUS-CANCEL,1,Macro(hangup) ; Вызов отменен
exten = STATUS-ANSWER,1,Macro(hangup) ; На вызов был получен ответ
exten = STATUS-NOANSWER,1,Macro(hangup) ; На вызов не ответили
exten = STATUS-BUSY,1,Macro(hangup) ; Получен сигнал занято
exten = STATUS-CONGESTION,1,Macro(hangup) ; Канал перегружен
exten = STATUS-CHANUNAVAIL,1,Macro(hangup) ; Канал не доступен
exten = _STATUS-.,1,Macro(hangup) ; Неизвестно что
exten = i,1,Macro(hangup)
exten = h,1,Macro(hangup)
Код: Выделить всё
-- Executing [0088@from_phones:5] Macro("IAX2/0055-15536", "dial,SIP/0088&IAX2/0088,120,trg") in new stack
Код: Выделить всё
-- Executing [s@macro-dial:4] ChanIsAvail("IAX2/0055-15536", "SIP/0088&IAX2/0088,t") in new stack
== Begin MixMonitor Recording IAX2/0055-15536
[2014-05-09 01:39:24] WARNING[31082][C-000004b1]: chan_sip.c:6162 create_addr: Purely numeric hostname (0088), and not a peer--rejecting!
[2014-05-09 01:39:24] ERROR[31082][C-000004b1]: netsock2.c:269 ast_sockaddr_resolve: getaddrinfo("0088", "(null)", ...): Name or service not known
[2014-05-09 01:39:24] WARNING[31082][C-000004b1]: acl.c:833 resolve_first: Unable to lookup '0088'
[2014-05-09 01:39:24] WARNING[31082][C-000004b1]: chan_iax2.c:4640 create_addr: No such host: 0088
-- Executing [s@macro-dial:5] Dial("IAX2/0055-15536", ",120,trg") in new stack
[2014-05-09 01:39:24] WARNING[31082][C-000004b1]: app_dial.c:2141 dial_exec_full: Dial requires an argument (technology/resource)
Выдержка из мануала
ChanIsAvail([Technology2/Resource2[&...]][,options])
Опции
a: Check for all available channels, not only the first one
s: Consider the channel unavailable if the channel is in use at all
t: Simply checks if specified channels exist in the channel list
В идеале хотелось бы отловить ошибку и сообщить пользователю о невозможности дозвониться.
Получается придется делать не очень красиво с функциями IAXPEER() и SIPPEER()?