Aplicações do Dialplan do Asterisk 21
Comando:
Dial()
Sinopse:
Tenta conectar a outro dispositivo ou endpoint e estabelecer uma ponte de chamada.
Descrição:Esta aplicação realiza chamadas para um ou mais canais especificados. Assim que um dos canais solicitados atender, o canal de origem é atendido, caso ainda não tenha sido. Esses dois canais ficam então ativos em uma chamada em ponte. Todos os outros canais solicitados são então desligados.
Salvo se um tempo limite for especificado, a aplicação Dial aguardará indefinidamente até que um dos canais chamados atenda, o usuário desligue ou se todos os canais chamados estiverem ocupados ou indisponíveis. A execução do dialplan continuará se nenhum dos canais solicitados puder ser chamado ou se o tempo limite expirar. Esta aplicação reportará terminação normal se o canal de origem desligar ou se a chamada estiver em ponte e uma das partes na ponte encerrar a chamada.
Se a variável OUTBOUND_GROUP estiver definida, todos os canais peer criados por esta aplicação serão colocados nesse grupo (como em 'Set(GROUP()=...)'). Se a variável OUTBOUND_GROUP_ONCE estiver definida, todos os canais peer criados por esta aplicação serão colocados nesse grupo (como em 'Set(GROUP()=...)'). Ao contrário de OUTBOUND_GROUP, no entanto, a variável será desdefinida após o uso.
Exemplos:same => n,Dial(PJSIP/alice,30)
Dial com 30 segundos de timeoutsame => n,Dial(PJSIP/alice&PJIP/bob,45)
Dial paralelo com 45 segundos de timeoutsame => n,Dial(PJSIP/alice,,g)
Dial com opções de continuação 'g'same => n,Log(NOTICE, Alice call result: ${DIALSTATUS})
same => n,Dial(PJSIP/alice,,TX)
Dial com recursos de transferência/gravação para a parte chamadorasame => n,Dial(PJSIP/alice,,L(60000:30000:10000))
Dial com limites de duração da chamadasame => n,Dial(PJSIP/alice&PJSIP/bob,,Q(NO_ANSWER))
Dial alice e bob e envie NO_ANSWER para bob em vez de ANSWERED_ELSEWHERE quando alice atendersame => n,Dial(PJSIP/alice,,b(default^called_channel^1(my_gosub_arg1^my_gosub_arg2))B(default^callee_channel^1(my_gosub_arg1^my_gosub_arg2)))
Dial com sub-rotinas pré-dialsame => n,Hangup()
same => n,Dial(PJSIP/alice,,U(my_gosub_routine^my_gosub_arg1^my_gosub_arg2))
Dial com sub-rotina pós-resposta executada no canal de saídasame => n,Hangup()
same => n,Dial(PJSIP/alice,,G(jump_to_here))
Dial para ConfBridge usando opções 'G'same => n(jump_to_here),Goto(confbridge)
same => n,Goto(confbridge)
same => n(confbridge),ConfBridge(${EXTEN})
Variáveis de Ambiente:- DIALEDTIME - Tempo desde o início da discagem de um canal até o seu desligamento.
- DIALEDTIME_MS - Versão em milissegundos da variável DIALEDTIME.
- ANSWEREDTIME - Tempo da chamada propriamente dita.
- ANSWEREDTIME_MS - Versão em milissegundos da variável ANSWEREDTIME.
- RINGTIME - Tempo desde a criação do canal até o primeiro evento RINGING recebido. Vazio se não houve toque.
- RINGTIME_MS - Versão em milissegundos da variável RINGTIME.
- PROGRESSTIME - Tempo desde a criação do canal até o primeiro evento PROGRESS recebido. Vazio se não houve tal evento.
- PROGRESSTIME_MS - Versão em milissegundos da variável PROGRESSTIME.
- DIALEDPEERNAME - O nome do canal de saída que atendeu a chamada.
- DIALEDPEERNUMBER - O número discado para o canal de saída que atendeu.
- FORWARDERNAME - Se ocorreu um desvio de chamada, o nome do canal desviado.
- DIALSTATUS - O status da chamada
Códigos de Status (DIALSTATUS):- CHANUNAVAIL - O peer discado existe, mas não está atualmente acessível (ex: endpoint não registrado) ou uma tentativa foi feita para chamar um local inexistente (ex: hostname DNS inexistente).
- CONGESTION - Congestionamento de canal ou de comutação ocorreu durante o roteamento da chamada.
- NOANSWER - A parte chamada não atendeu.
- BUSY - A parte chamada estava ocupada.
- ANSWER - A chamada foi atendida.
- CANCEL - A discagem foi cancelada antes que a chamada fosse atendida.
- DONTCALL - Para os Modos de Privacidade e Screening. Será definido se a parte chamada escolher enviar a parte chamadora para o script 'Go Away'.
- TORTURE - Para os Modos de Privacidade e Screening. Será definido se a parte chamada escolher enviar a parte chamadora para o script 'torture'.
- INVALIDARGS - A discagem falhou devido à sintaxe inválida.
Sintaxe:
same => n,Dial(PJSIP/alice,30)
same => n,Dial(PJSIP/alice&PJIP/bob,45)
same => n,Dial(PJSIP/alice,,g)
same => n,Log(NOTICE, Alice call result: ${DIALSTATUS})
same => n,Dial(PJSIP/alice,,TX)
same => n,Dial(PJSIP/alice,,L(60000:30000:10000))
same => n,Dial(PJSIP/alice&PJSIP/bob,,Q(NO_ANSWER))
[default]
exten => callee_channel,1,NoOp(ARG1=${ARG1} ARG2=${ARG2})
same => n,Log(NOTICE, I'm called on channel ${CHANNEL} prior to it starting the dial attempt)
same => n,Return()
exten => called_channel,1,NoOp(ARG1=${ARG1} ARG2=${ARG2})
same => n,Log(NOTICE, I'm called on outbound channel ${CHANNEL} prior to it being used to dial someone)
same => n,Return()
exten => _X.,1,NoOp()
same => n,Dial(PJSIP/alice,,b(default^called_channel^1(my_gosub_arg1^my_gosub_arg2))B(default^callee_channel^1(my_gosub_arg1^my_gosub_arg2)))
same => n,Hangup()
[my_gosub_routine]
exten => s,1,NoOp(ARG1=${ARG1} ARG2=${ARG2})
same => n,Playback(hello)
same => n,Return()
[default]
exten => _X.,1,NoOp()
same => n,Dial(PJSIP/alice,,U(my_gosub_routine^my_gosub_arg1^my_gosub_arg2))
same => n,Hangup()
same => n,Dial(PJSIP/alice,,G(jump_to_here))
same => n(jump_to_here),Goto(confbridge)
same => n,Goto(confbridge)
same => n(confbridge),ConfBridge(${EXTEN})
Dial(Technology/Resource&[Technology2/Resource2[&...]],[timeout,[options,[URL]]]])
same => n,Dial(DAHDI/g1/5551212)
same => n,Dial(DAHDI/4r2)
same => n,Dial(DAHDI/3c/5551212)
same => n,Dial(WebSocket/connection1/c(sln16))
same => n,Dial(WebSocket/connection1/c(opus))
same => n,Dial(WebSocket/INCOMING/n)
same => n,Dial(WebSocket/connection1/v(${URIENCODE(vari able)}=${URIENCODE(${CHANNEL})},variable2=$(URIENCODE(${EXTEN})}))
Fonte: Asterisk Wiki