Biblioteca simplificada de comunicação (chamada de audio, audioconferência, videochamada, videoconferência e troca de mensagem de texto) via browser utilizando Websocket e SIP.
- Servidor Freeswitch configurado com o mod_verto habilitado.
ps.: No momemto apenas chamada de audio está implementada.
O projeto ainda se encontro em processo de desenvolvimento por isso ainda não publicado no NPM. Para usar você deverá puxar a lib do github. Para isso basta adicionar a linha abaixo no seu package.json:
"verto-gateway": "git+https://github.com/luanyata/verto-gateway.git"Em seguida realize a instalação do mesmo com seu gerenciar de pacotes:
npm installou
yarn installAgora carregue os javascripts no seu HTML antes dos seus javascript:
<script src="../node_modules/verto/src/vendor/adapter-latest.js"></script>
<script src="../node_modules/verto/src/vendor/media-device-id.min.js"></script>
<script src="../node_modules/jquery/dist/jquery.min.js"></script>
<script src="../node_modules/jquery-json/dist/jquery.json.min.js"></script>
<script src="../node_modules/verto/src/jquery.verto.js"></script>
<script src="../node_modules/verto/src/jquery.FSRTC.js"></script>
<script src="../node_modules/verto/src/jquery.jsonrpcclient.js"></script>Para que o audio das chamadas sejam executada, é necessario a criação da tag audio seguindo algumas recomendações:
- Deve conter um ID que será utilizado na configuração para reporduzir o audio da chamada
- Deve ter a propriedade autoplay
- Opcionalmente ter a propriedade hidden para que o play de audio não seja exibido na tela
<audio id="call" hidden autoplay></audio>Para que o ramal que recebe a chamada sinalize que está tocando deve ser criada uma tag audio seguindo algumas recomendações:
- Obrigatoriamente deve conter o ID
ring - Opcionalmente ter a propriedade hidden para que o play de audio não seja exibido na tela
srcdeve conter o audio a ser reproduzido
<audio id="ring" hidden src="../sound/ring.mp3"></audio>Resposavel por registrar o ramal
import { Config } from 'verto-gateway';
Config.start('parametro');Parametros:
- agent
- login: usuário do ramal
- passwd: senha do ramal
- wssAddress: endereço do servidor wss
- wsFallbackURL: array de string contendo os endereços de outros servidores wss para ser acionados em casos de falha. Caso nao tenha o valor pode ser omnitido
- useIce: booleano passando
trueserá utilizado o stun do freeswitchstun:stun.freeswitch.org - tag: id da tag audio que será necessaria para reproduzir o audio da chamada
Exemplo Objeto Final:
{
agent: { login: "luan", passwd: "12345" },
wssAddress: "luanyata.com:8082",
wsFallbackURL: ["luan.com:8082","yata.com:8082"],
useIce: true,
tag: "call"
};Contem todas as ações que podem ser feitas na chamada:
import { Actions } from 'verto-gateway';Para realizar uma chamada basta chamar a função call() parando dois parametro:
- Número origin
- Número destino
Actions.call('8888', '9999');Para atender a chamada basta chamar a função answer():
Actions.answer();Para por seu microfone no mudo basta chamar a função mute():
Actions.mute();Para retirar seu microfone do mute basta chamar a função unmute():
Actions.unmute();Para por a chamada em espera basta chamar a função hold():
Actions.hold();Para remover a chamada da espera basta chamar a função unhold():
Actions.unhold();Para enviar eventos dtmf basta chamar a função dtmf() passando um parametro:
- Valor a ser passado via DTMF
Actions.dtmf('valorDTMF');Para desligar a chamada basta chamar a função hangup():
Actions.hangup();Para desregistrar o ramal basta chamar a função logout(). Com isso o a conexão com o socket será finalizada:
Actions.logout();Para poder utilizar a função de auto atendimento basta adicionar adicionar a chave autoAnswer com o valor true no localStorage.
Algumas informações que trafegam pelo websocket se dará acesso através de eventos, sendo eles:
- O estado atual do ramal
- Número do telefone de quem está ligando
- Estado da chamada
Você receberá o estado do ramal através do emissor de evento handleWsState com a classificação wsState.
import { Events } from 'verto-gateway'
Events.handleWsState.on('wsState', state => {...} )Existem tipos de 2 estados:
- Registrar o Ramal: Indica se o ramal efetuou ou não o registro com sucesso
- retorna as strings
loggedoufailed-loginrespectivamente.
- retorna as strings
- Desregistar o ramal:
- retorna a string
closequando o ramal realizar o logout no Freeswitch.
- retorna a string
Em uma chamada existem dois tipos de eventos Inbound e Outbound. Em cada um dos estados do tipo da chamada uma serie de eventos são disparados utilizando o emissor Events.handleCallState.
import { Events } from 'verto-gateway'
Events.handleCallState.on('EVENTO_ID', phoneNumber => {...} )-
Estado Ring:
- Evento ID
BINA:
- Envia o número de quem está ligando. - Tipo: String- Evento ID
RECEIVE_CALL:
- Envia o objeto verto contendo a conversa. - Tipo: Object - Evento ID
-
Estado Answering:
- Evento ID
ANSWERING
- Informando que o ramal está enviando a resposta para estabelecer a comunicação. - Tipo: Boolean - Valor: true - Evento ID
-
Estado Active:
- Evento ID
INBOUND_ACTIVE:
- Informa que a comunicação foi estabelecida entre aos ramais e está em conversação. - Tipo: Boolean - Valor: true - Evento ID
-
Estado Hangup:
- Evento ID
INBOUND_HANGUP_CAUSE:
- Informa o motivo do desligamento da chamada. - Tipo: Stringps.: Todos os motivos dos possiveis desligamentos podem ser obtidos na documentação do Freeswitch
- Evento ID
-
Estado Destroy
- Evento ID
INBOUND_ACTIVE:
- Informando que a chamada foi desligada. - Tipo: Boolean - Valor: false- Evento ID
ANSWERING:
- Reinicia o estado da solicitação da comunicação. - Tipo: Boolean - Valor: false - Evento ID
-
Estado Trying
- Evento ID
TRYNG:
- Informa que está tentando/chamando o número destino - Tipo: Boolean - Valor: true - Evento ID
-
Estado Active
- Evento ID
OUTBOUND_ACTIVE:
- Informa que a comunicação foi estabelecida entre aos ramais e está em conversação. - Tipo: Boolean - Valor: true - Evento ID
-
Estado Hangup:
- Evento ID
OUTBOUND_HANGUP_CAUSE:
- Informa o motivo do desligamento da chamada. - Tipo: Stringps.: Todos os motivos dos possiveis desligamentos podem ser obtidos na documentação do Freeswitch
- Evento ID
-
Estado Destroy
- Evento ID
INBOUND_ACTIVE:
- Informa que os ramais não estão mais ativos para a chamada que estava acontecendo. - Tipo: Boolean - Valor: false - Evento ID
Copyright (c) 2020 Luan Lima