Sejam muito bem-vindos a mais uma postagem do site FreePBX Brasil, esta documentação vai lhe auxiliar a fazer as configurações para uso do ARI no FreePBX.
O intuito deste é contribuir com a comunidade auxiliando para execução discagens via API, um caso comum é quem faz o uso de discadores, que normalmente usam os famosos “aquivo.call” e/ou AMI para efetuar as discagens, ambos funcionam muito bem, mas fazendo uso de RESTful você vai dar um upgrade na sua aplicação.
A Interface RESTful do Asterisk (ARI) é uma API assíncrona que permite aos desenvolvedores construir aplicativos de comunicação no asterisk, fazendo uso de objetos por meio de eventos JSON e WebSocket, o ARI está no asterisk a partir da versão 12.
Antes de seguir, vale ressaltar que se caso identificar algum problema ou erro neste post, não deixe de nos reportar, o feedback é de suma importância para dar ainda mais qualidade aos conteúdos do site.
Laboratório:
- FreePBX 15;
- Asterisk 16;
- Insomnia - Versão free.
Vamos iniciar as configurações no FreePBX, primeiro criar o usuário RESTful.
A seguir será necessário ir nas configurações avançadas para habilitar o WebService do FreePBX para aceitar as requisições para o ARI.
Acima apresenta as configurações avançadas do FreePBX, aonde será configurado habilitando o WebService para as requisições de interação com o nosso core de telefonia, lembrando que estas configurações feitas via GUI do FreePBX são somente para interações com o asterisk. Lembre-se, qualquer alteração via GUI do FreePBX faz necessário logo em seguida salvar e aplicar, usando o "Submit" e o "Apply"!
Agora que já foi criado o usuario da API e habilitado o serviço de WebService, será necessário identificar se de fato temos o ARI ativo em nosso asterisk, vamos ao CLI.
[root@freepbx15 ~]# rasterisk -vvvvvvvcgi Asterisk 16.4.1, Copyright (C) 1999 - 2018, Digium, Inc. and others. Created by Mark SpencerAsterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. This is free software, with components licensed under the GNU General Public License version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type 'core show license' for details. ========================================================================= Connected to Asterisk 16.4.1 currently running on freepbx15 (pid = 2212) freepbx15*CLI> ari show app apps status user users freepbx15*CLI>
No CLI digitando ari show e pressionando a tecla TAB será apresentado algumas opções que estão disponiveis para consulta, a seguir consultaremos os usuarios ativos ARI, status do serviço e se o WebService está ativo.
freepbx15*CLI> ari show users r/o? Username ---- -------- No freepbxuser No kowalski freepbx15*CLI>
freepbx15*CLI> ari show status ARI Status: Enabled: Yes Output format: compact Auth realm: Asterisk REST Interface Allowed Origins: * User count: 2 freepbx15*CLI>
freepbx15*CLI> http show status HTTP Server Status: Prefix: Server: Asterisk/16.4.1 Server Enabled and Bound to 0.0.0.0:8088 Enabled URI's: /httpstatus => Asterisk HTTP General Status /static/... => Asterisk HTTP Static Delivery /ari/... => Asterisk RESTful API /ws => Asterisk HTTP WebSocket Enabled Redirects: None. freepbx15*CLI>
Aqui observamos que nos serviços WEB do asterisk temos o ARI ativo, a linha "/ari/... => Asterisk RESTful API" os demais podemos abordar em um outro post. Idetificado que as configurações estão corretas com o ARI, será necessário agora, no asterisk criar um contexto para os testes.
vim /etc/asterisk/extensions_custom.conf [freepbxbrasil] exten => 1000,1,NoOp( ..:: ------------------------- ) same => n,NoOp( ..:: Comunidade FreePBX Brasil ) same => n,NoOp( ..:: Prof. Kowalski ) same => n,NoOp( ..:: ------------------------- ) same => n,Hangup()
Em seguida saia do vim salvando, vou pode usar o ":wq" ou ":x" que acho mais prático, após contexto criado e salvo, será necessario recarrega-lo , por que até então o asterisk não reconhece o mesmo, no CLI digite dialplan reload, para ter certeza que o contexto existe, certique usando o comando abaixo.
freepbx15*CLI> dialplan show freepbxbrasil [ Context 'freepbxbrasil' created by 'pbx_config' ] '1000' => 1. NoOp( ..:: ------------------------- ) [extensions_custom.conf:3] 2. NoOp( ..:: Comunidade FreePBX Brasil ) [extensions_custom.conf:4] 3. NoOp( ..:: Prof. Kowalski ) [extensions_custom.conf:5] 4. NoOp( ..:: ------------------------- ) [extensions_custom.conf:6] 5. Hangup() [extensions_custom.conf:12] -= 1 extension (5 priorities) in 1 context. =- freepbx15*CLI>
Pronto, agora está certificado que o contexto existe, agora será feito uma requisição API que vamos executa-lo e apresentar essas mensagens no console, para isso vamos usar o Insomnia na versão free, este muito usado para testes de rotas de API, assim como POSTMAN e muitos outros.
Este que será usado uma requisição POST, conforme orienta a documentação oficial do asterisk que ao término deste deixarei explicíto.
Acima em ❶ temos criado a nossa requisição de API do tipo "POST", seguindo a documentação do ari no site oficial do asterisk, que ao final informo o link. Em ❷ a requisição da api com os devidos parâmetros este que detalho a seguir, em ❸ aonde ao clicar será enviado sua requisição, em ❹ é um dos pontos mais importante deste processo, o codigo de retorno HTML, neste caso está como "200 OK" ou seja nossa requisição foi executar e o retorno foi sucesso, se o retorno for direfente disso, valide na documentação da API que na maioria das vezes alguns códigos de retornos são mapeados e documentados para lhe auxiliar em problemas.
Explicando item ❷ , para ficar de facíl entendimento, será colocado a url e vamos particiona-la para explicar cada parte da mesma.
Dados de autentição da API:
User ➜ kowalski
Password ➜ freepbxbrasil
IP do Server ➜ 192.168.200.24
Porta do WebService ➜ 8088
Dados do Asterisk baseado na documentação oficial:
channels ➜ Rota da API ARI
endpoint ➜ O canal usado para comunicação interna com o asterisk
extension ➜ Extensão criada no nosso contexto
freepbxbrasil ➜ Contexto criado para homologação conforme acima.
priority ➜ a nivel de dialplan estamos iniciando nesta posição do contexto
callerid ➜ o callerid que vamos utilizar para essa requisição
Agora com as informações acima validada, já pode ser feita a requisição via insomnia e o retorno deve ser um "200 OK", acompanhe no seu asterisk via terminal (CLI), abaixo um exemplo de quando o asterisk recebe a requisição via ARI.
Acima temos o retorno de quando a requisição foi executada com sucesso, assim como o contexto do asterisk como esperado.
Pronto, agora que você aprendeu o básico de usabilidade do recurso ARI que tem disponível em seu asterisk, aproveite que este assim como muitos outros recursos no asterisk fazem o diferencial na solução de telefonia.
A seguir vou documentar as referências utilizadas nesta documentação, obrigado e até a próxima.
1- Asterisk REST Interface (ARI)
2- Introduction to ARI and Channels
3- Asterisk 16 Channels REST API
4- Local Channel
"Começar é a parte mais importante de qualquer trabalho" - Platão