项目作者: luanyata

项目描述 :
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.
高级语言: JavaScript
项目地址: git://github.com/luanyata/verto-gateway.git
创建时间: 2020-03-18T13:45:29Z
项目社区:https://github.com/luanyata/verto-gateway

开源协议:MIT License

下载


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:

  1. "verto-gateway": "git+https://github.com/luanyata/verto-gateway.git"

Em seguida realize a instalação do mesmo com seu gerenciar de pacotes:

NPM:

  1. npm install

ou

YARN:

  1. yarn install

Carregar Dependências:

Agora carregue os javascripts no seu HTML antes dos seus javascript:

  1. <script src="../node_modules/verto/src/vendor/adapter-latest.js"></script>
  2. <script src="../node_modules/verto/src/vendor/media-device-id.min.js"></script>
  3. <script src="../node_modules/jquery/dist/jquery.min.js"></script>
  4. <script src="../node_modules/jquery-json/dist/jquery.json.min.js"></script>
  5. <script src="../node_modules/verto/src/jquery.verto.js"></script>
  6. <script src="../node_modules/verto/src/jquery.FSRTC.js"></script>
  7. <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
  1. <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
  1. <audio id="ring" hidden src="../sound/ring.mp3"></audio>

Config:

Start:

Resposavel por registrar o ramal

  1. import { Config } from 'verto-gateway';
  2. 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:

  1. {
  2. agent: { login: "luan", passwd: "12345" },
  3. wssAddress: "luanyata.com:8082",
  4. wsFallbackURL: ["luan.com:8082","yata.com:8082"],
  5. useIce: true,
  6. tag: "call"
  7. };

Actions:

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

  1. 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
  1. Actions.call('8888', '9999');

Answer:

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

  1. Actions.answer();

Mute:

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

  1. Actions.mute();

Unmute:

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

  1. Actions.unmute();

Hold:

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

  1. Actions.hold();

Unhold:

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

  1. Actions.unhold();

DTMF:

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

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

Hangup:

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

  1. Actions.hangup();

Logout:

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

  1. 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.

  1. import { Events } from 'verto-gateway'
  2. 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.

  1. import { Events } from 'verto-gateway'
  2. Events.handleCallState.on('EVENTO_ID', phoneNumber => {...} )

Chamada Entrante - Inbound:

  • Estado Ring:

    • Evento ID BINA:
    1. - Envia o número de quem está ligando.
    2. - Tipo: String
    • Evento ID RECEIVE_CALL:
    1. - Envia o objeto verto contendo a conversa.
    2. - Tipo: Object
  • Estado Answering:

    • Evento ID ANSWERING
    1. - Informando que o ramal está enviando a resposta para estabelecer a comunicação.
    2. - Tipo: Boolean
    3. - Valor: true
  • Estado Active:

    • Evento ID INBOUND_ACTIVE:
    1. - Informa que a comunicação foi estabelecida entre aos ramais e está em conversação.
    2. - Tipo: Boolean
    3. - Valor: true
  • Estado Hangup:

    • Evento ID INBOUND_HANGUP_CAUSE:
    1. - Informa o motivo do desligamento da chamada.
    2. - Tipo: String

    ps.: Todos os motivos dos possiveis desligamentos podem ser obtidos na documentação do Freeswitch

  • Estado Destroy

    • Evento ID INBOUND_ACTIVE:
    1. - Informando que a chamada foi desligada.
    2. - Tipo: Boolean
    3. - Valor: false
    • Evento ID ANSWERING:
    1. - Reinicia o estado da solicitação da comunicação.
    2. - Tipo: Boolean
    3. - Valor: false

Chamada Sainte - Outbound:

  • Estado Trying

    • Evento ID TRYNG:
    1. - Informa que está tentando/chamando o número destino
    2. - Tipo: Boolean
    3. - Valor: true
  • Estado Active

    • Evento ID OUTBOUND_ACTIVE:
    1. - Informa que a comunicação foi estabelecida entre aos ramais e está em conversação.
    2. - Tipo: Boolean
    3. - Valor: true
  • Estado Hangup:

    • Evento ID OUTBOUND_HANGUP_CAUSE:
    1. - Informa o motivo do desligamento da chamada.
    2. - Tipo: String

    ps.: Todos os motivos dos possiveis desligamentos podem ser obtidos na documentação do Freeswitch

  • Estado Destroy

    • Evento ID INBOUND_ACTIVE:
    1. - Informa que os ramais não estão mais ativos para a chamada que estava acontecendo.
    2. - Tipo: Boolean
    3. - Valor: false

Licença

MIT License

Copyright (c) 2020 Luan Lima