Skip to content

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.

License

Notifications You must be signed in to change notification settings

luanyata/verto-gateway

Repository files navigation

Verto-gateway

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.

Pré-requisito

ps.: No momemto apenas chamada de audio está implementada.

Instalação:

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:

npm install

ou

YARN:

yarn install

Carregar Dependências:

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>

API:

Tags Audio:

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>

Config:

Start:

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 freeswitch stun: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"
};

Actions:

Contem todas as ações que podem ser feitas na chamada:

import { Actions } from 'verto-gateway';

Call:

Para realizar uma chamada basta chamar a função call() parando dois parametro:

  • Número origin
  • Número destino
Actions.call('8888', '9999');

Answer:

Para atender a chamada basta chamar a função answer():

Actions.answer();

Mute:

Para por seu microfone no mudo basta chamar a função mute():

Actions.mute();

Unmute:

Para retirar seu microfone do mute basta chamar a função unmute():

Actions.unmute();

Hold:

Para por a chamada em espera basta chamar a função hold():

Actions.hold();

Unhold:

Para remover a chamada da espera basta chamar a função unhold():

Actions.unhold();

DTMF:

Para enviar eventos dtmf basta chamar a função dtmf() passando um parametro:

  • Valor a ser passado via DTMF
Actions.dtmf('valorDTMF');

Hangup:

Para desligar a chamada basta chamar a função hangup():

Actions.hangup();

Logout:

Para desregistrar o ramal basta chamar a função logout(). Com isso o a conexão com o socket será finalizada:

Actions.logout();

Auto Atendimento:

Para poder utilizar a função de auto atendimento basta adicionar adicionar a chave autoAnswer com o valor true no localStorage.

Eventos:

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

Estados do Ramal:

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 ou failed-login respectivamente.
  • Desregistar o ramal:
    • retorna a string close quando o ramal realizar o logout no Freeswitch.

Estados da Chamada

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 => {...} )

Chamada Entrante - Inbound:

  • 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
    
  • Estado Answering:

    • Evento ID ANSWERING
    - Informando que o ramal está enviando a resposta para estabelecer a comunicação.
    - Tipo: Boolean
    - Valor: true
    
  • 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
    
  • 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

  • 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
    

Chamada Sainte - Outbound:

  • Estado Trying

    • Evento ID TRYNG:
    - Informa que está tentando/chamando o número destino
    - Tipo: Boolean
    - Valor: true
    
  • 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
    
  • 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

  • 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
    

Licença

MIT License

Copyright (c) 2020 Luan Lima

About

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.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published