Aplicações do Dialplan do Asterisk 20
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 então ficam 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 for 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 naquele 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 naquele grupo (como em 'Set(GROUP()=...)'). Diferentemente de `OUTBOUND_GROUP`, no entanto, a variável será desdefinida após o uso.
**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 ou indicou um status de ocupado.
* `ANSWER` - A chamada foi atendida.
* `CANCEL` - A discagem foi cancelada antes que a chamada fosse atendida ou atingisse outro evento de terminação.
* `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})}))
same => n,Dial(WebSocket/connection1/f(json))
Fonte: Asterisk Wiki