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 install
ou
yarn install
Agora 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
src
deve 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
true
será 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
logged
oufailed-login
respectivamente.
- retorna as strings
- Desregistar o ramal:
- retorna a string
close
quando 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: String
ps.: 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: String
ps.: 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