Introdução ao NX Voicebot
O NX Voicebot consiste em um assistente virtual de voz ligado ao callcenter.
Principais Funcionalidades
-
👨👧👦 "Humanizado": A voz é gravada em estúdio com entonação e frases coerentes com o público alvo, proporcionado assim uma experiência menos robotizada.
-
🦸🏽 Múltiplos propósitos: De cobrança até oferecer uma triagem inicial em clínicas, o
Voicebotpossui flexibilidade para atuar em diversos contextos. -
📈 Produtividade: Em alguns clientes quase 80% do número de promessas vinda dos clientes é originada do voicebot, demonstrando ser muito eficaz.
Tecnologias e Ferramentas
- Python: 3.4.10
- Repositório git: automacao/automacao
- Jira board: [P] Voicebots e [S] Voicebots
- MySQL: 5.6
- Flask: 1.0.2
Visão Geral
O NX Voicebot está vinculado localmente ao Callcenter e ao seu discador e assim como eles pode ser encontrado em Cloud na AWS ou Under, além de servidores físicos.
Início: a necessidade de negócio
Em alguns momentos o negócio precisa que os clientes sejam abordados por um canal de voz e não possui agentes disponíveis. Nessas horas o Voicebot é uma opção extremamente importante pelo seu custo benefício e a capacidade de abordar o público de forma veloz e eficiente.
As demandas se dividem em duas categorias:
-
Novas funcionalidades: Serão agregadas novas funções ao robô que ele não possui ainda, como por exemplo uma integração com API de terceiros.
-
Criação/Alteração de voicebot: Com as funcionalidades já existentes, será desenvolvido e/ou modificado um voicebot personalizado para o contexto do cliente.
No primeiro caso, as demandas são abertas no quadro do JIRA denominado [P] Voicebot.
No segundo caso, as solicitações vem com o fluxo e detalhes do voicebot e é criado a tarefa no quadro [S] Voicebot.
Controle e versionamento de código
Com a tarefa em mãos cria-se uma nova branch no repositório git do produto. Esse repositório está localizado dentro do workspace SMARTNX e do projeto automacao, com o nome de automacao.
Dentro do repositório temos duas branches importantes:
-
develop: Onde está o código de homologação. As novas funcionalidades passam pelo processo de merge nesta branch para serem aprovadas.
-
master: Onde está o código de produção. As novas funcionalidades uma vez homologadas e aprovadas na develop vem para cá.
Todas as contribuições ao projeto são feitas utilizando o workflow Gitflow. Já as tags de versão criadas a partir desse fluxo geram um versionamento semântico, detalhado no item Versionamento.
Interações com o Callcenter
O NX Voicebot apesar de ser um serviço rodando em paralelo utiliza-se da estrutura do Callcenter de relatórios e discador para funcionar efetivamente.
Setup
É recomendado a utilização de algum servidor de homologação do Callcenter para utilização do Voicebot. Após o setup do git e bitbucket faça o clone do repositório na máquina de destino:
git clone git@bitbucket.org:devsmartnx/automacao.git
Entre na pasta automacao:
cd automacao
Crie a venv para isolar as dependências do projeto:
python -m venv ./venv
Ative a venv:
source ./venv/bin/activate
Instale as dependências:
pip install -r requirements.txt
Atualize o banco de dados:
flask db upgrade
Configurando para iniciar junto ao servidor:
chkconfig automacao on
Mover o .conf do asterisk para a pasta do sistema:
cp /automacao/scripts/extensions_inc_robo.conf
/etc/asterisk/extensions_inc_robo.conf
Descompactar audios para o Asterisk
mkdir /var/lib/asterisk/sounds/tts
cd /automacao/tts
tar xf audios.tar.gz -C /var/lib/asterisk/sounds/tts
Os próximos passos consistem em configurações adicionais em outros pontos do Callcenter e API Gateway.
Fluxo de trabalho
Configurações do API GW
- Verificar Integrações do ambiente do cliente com o API GW
Caminho: Administração > Configurações > Variáveis do sistema
-
Verificar se variáveis
f_url_apismartnxef_key_apismartnxestão configuradas. -
Verificar registro do ambiente do cliente no API GW
Caminho: Administração > Integrações
-
Verificar campos da área
Gestão Token NX Call Center -
Criar chave de acesso Google e adicionar ao GW:
Acessar Google Cloud (cloud.google.com).
Caminho: Console (canto superior direito) > Selecione um projeto > NOVO PROJETO
Defina o nome > Criar
Selecione o projeto e ative os serviço Speech to Text
Caminho: Menu > APIs e serviços > Painel > + ATIVAR APIS E SERVIÇOS > Cloud Speech-to-Text API > ATIVAR
Crie as credenciais (Utilizando a ajuda do Google)
Caminho: CRIAR CREDENCIAIS > (Escolha...) Cloud Speech-to-Text API > Não, nenhum > Preciso de quais credenciais?
Nome da conta de serviço:
ID da conta de serviço: id_nomeDoCliente@dadosDoGoogle
Tipo de chave: JSON
Continuar (Criar sem papel)
Fazer o download do json gerado e renomear para id_nome do cliente.json e subir no projeto webhook (API GW SNX).
- Ativar armazenamento de dados
Geração de registros de dados > ATIVAR A GERAÇÃO DE REGISTROS DE DADOS
- Criar integração com o cliente no API GW
Pegar o nome do json que é gerado ao criar uma conta de serviço, adicionar uma nova integração no webhook user =
id_nome do cliente.jsone service_id = 13
Configurações do Callcenter
1 - Criar variável global de referência
Caminho: PBX > Conf. Avançadas > Variável Global
Variável: URL_API = 127.0.0.1:5000
2 - Criar tabulações do voicebot no Callcenter
Caminho: Callcenter > Configurações > Tabulação Lead
Criar as tabulações: ‘Robo - Abandonada por falta de robo disponivel’ e a ‘Robo - Nao Interagiu’
3 - Importar áudios para o servidor
Caminho: Callcenter > Configurações > Áudios
Obs: pelo menos um áudio deve ser adicionado através do sistema
4 - Criar Ura e vincular o áudio criado
Caminho: Callcenter > Configurações > URA
Obs: não é necessário criar opções para a ura
5 - Validar opção de timeout da Ura
Caminho: Callcenter > Configurações > URA
Configurar a opção timeout para a ação “TERMINAR“
6 - Criar campanha e vincular URA
Caminho: Callcenter > Campanhas > Campanhas
Selecionar a ura criada e configurar o Tipo campanha = Robo
Configurar Plano de Horário com datas válidas
Adicionar as tabulações criadas no Plano de Tabulação
7 - Incluir redirecionamento para o robo no extension
Caminho: PBX > Conf. Avançadas > Arquivos de Configuração
Editar arquivo extensions_inc_custom.conf
Incluir linhas no início do arquivo para redirecionar as chamadas para o robo e para testes:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INICIO - CONFIGURACAO ROBO ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#include extensions_inc_robo.conf
[ura-<NOME DA URA>]
exten => s,1,NoOp(===Iniciando voicebot===)
same => n,MSet(idTabulacaoPadrao=<ID DA TABULAÇÃO 'Robo - Nao interagiu'>,idTabRoboIndisponivel=<ID DA TABULAÇÃO 'Robo - Abandonada por falta de robo disponivel'>)
same => n,Goto(voicebotContext,voicebot,1)
same => n,Hangup()
[from-internal]
exten => teste,1,NoOp(===Teste voicebot===)
; same => n,Macro(gravar,3232320000,${EXTEN},VOICEBOT)
same => n,MSet(TELEFONE=3232320000,NOME=<NOME DE TESTE>,ID_CAMPANHA=<ID DA CAMPANHA DO ROBO>,DATA1=2020-12-31 00:00:00,VALOR1=999.99,idTabulacaoPadrao=<ID DA TABULAÇÃO 'Contato Inicial'>,idTabRoboIndisponivel=<ID DA TABULAÇÃO 'Robo - Abandonada por falta de robo disponivel'>,ID_CARGA=0)
same => n,Goto(voicebotContext,voicebot,1)
same => n,Hangup()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FINAL - CONFIGURACAO ROBO ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Tabelas
O campo extra_conf da tabela automacao.voicebot deve conter um json como o modelo:
{"decision_storage":0,"automated_actions":0,"request_error_tolerance":"1.0","packet_loss_tolerance":"1.0","latency_tolerance":"1.0","rtt_tolerance":"1.0"[,"tivea_negotiation":"0123456789012345678"]}
Registro e Comunicação
1 - Registrar novo robô
Registrar na planilha de Controle do Robô. Link: https://docs.google.com/spreadsheets/d/1YNZxClzuiqO57zqqja5fetUJfpCQ8HCgSUbW9dYqH2o/edit?usp=sharing
2 - Comunicar ao setor de Infra o monitoramento do novo serviço.
Criar ticket no Helpdesk (Ponto ainda a ser esclarecido junto com o setor de Infraestrutura)
REGISTRAR CONFIGURAÇÕES NO SCHEMA AUTOMACAO
1 - Registrar Voicebot na tabela automacao.voicebot (v 1.1)
2 - Criar configuração dos contextos na tabela automacao.ura_robo
3 - Criar grupo de respostas na tabela automcao.ura_resposta
4 - Criar decisões do voicebot na tabela automacao.ura_interacao
5 - Criar base de conhecimento (expressões conhecidas) na tabela automacao.ura_faq
Extensions
O extension do agente virtual (ou voicebot) foi construído em blocos ou contextos com funções determinadas. Essa seção descreve a função de cada bloco e detalha seu funcionamento passo a passo.
Estrutura básica de um contexto
Além do exten principal, os contextos possuem três exten especiais (i, h e talk) e outros três exten recorentes, todos descritos abaixo:
- i: exten chamado caso as funções Background() ou WaitExten() não localize o destino no contexto atual
- h: quando uma chamada é desligada o Asterisk executa o exten h do contexto atual. Esse exten é utilizado para imprimir as variáveis da chamada (uniqueid, id do lead, id da carga etc.) e facilitar o debug. Além disso é chamado a rota
POST/voicebot/end-callspara realizar os provedimentos de finalização da chamada (gravação de variáveis, tabulação etc.) - talk: exten chamado quando a função BackgroundDetect() é interrompida conforme descrito no site asterisk.org. Esse exten inicia a gravação da voz do interlocutor e retorna para o exten principal definido no código como BLOCO.
- tts: exten utilizado para verbalizar variáveis do mailing através da rota
POST/google/ttse retornando para o exten principal definido no código como BLOCO. - datahumanizada: esse exten é chamado para verbalizar datas do mailing no formato dia/mês/ano utilizando da rota
POST/voicebot/datese retornando para o exten principal definido no código como BLOCO. - valorhumanizado: exten utilizado para verbalizar valores monetários utilizando a rota
GET/ura/currency/namee retornando para o exten principal definido no código como BLOCO.
Abaixo a descrição dos contextos presentes no no extension do agente virtual.
voicebotContext
O contexto voicebot é o primeiro contexto a ser chamado dentro da atuação do agente virtual. Esse contexto é utilizado para realizar validações do início da chamada e preparar algumas variáveis do mailing para utilização do voicebot.
Ações realizadas no contexto
- A edição no nome do cliente é realizada através da rota
GET/voicebot/names. Apenas o primeiro nome é utilizado em formato capitalizado no agente virtual. - As datas do mailing são editadas para a utilização do voicebot. A rota
GET/voicebot/datesé utilizada para formatar os campos de data de YYYY-mm-DD HH:MM para YYYY-mm-DD. - Formatação dos campos string pela rota
GET/voicebot/strings. Todos os campos são capitalizados. - Busca das configurações do agente virtual através da rota
GET/voicebot/decisions. Essa chamada retorna as variáveis de configuração contidas na tabela automacao.voicebot e busca o contexto para continuar a execução do voicebot. - Buscar permissão para execução através da rota
POST/voicebot/cma. A rota verifica se existe agentes virtuais disponíveis para a execução na campanha, caso negativo a ligação é desligada. - Força início da gravação com a função MixMonitor() do asterisk, após a definição de algumas variáveis.
greetingContext
O contexto greeting é utilizado para comprimentar o interlocutor e utilizar a frase completa de saudação, gravada em estúdio.
Ações realizadas no contexto
- Comprimenta o interlocutor com uma das frases: 'bom dia', 'boa tarde' ou 'boa noite'.
- Busca e reproduz a saudação inicial gravada em estúdio, quando houver no servidor. Através da rota
GET/ura/name/<NOME>o voicebot busca a frase completa 'Gostaria de falar com<NOME>é você?' gravada em estúdio é buscada no servidor, se ela existir com o nome do mailing a frase é reproduzida, caso contrário o agente segue para o contexto configurado.
baseContext
O contexto base é o principal do agente virtual, ele é responsável para fazer uma pergunta para o interlocutor e tomar uma decisão de acordo com a resposta recebida.
Ações realizadas no contexto
- Busca das configurações do contexto com a rota
GET/voicebot/config. - Execução de áudios configurados no contexto. Alguns campos do mailing podem ser configurados nas variáveis leitura_tts_0? do contexto e os exten datahumanizada, valorhumanizado ou tts são utilizados na verbalização quando necessário.
| Ordem | Configuração do contexto |
|---|---|
| 1 | audio_01 |
| 2 | audio_02 |
| 3 | leitura_tts_01 |
| 4 | audio_03 |
| 5 | leitura_tts_02 |
| 6 | audio_04 |
| 7 | leitura_tts_03 |
| 8 | audio_05 |
| 9 | audio_06 |
| 10 | regra_dia |
| 11 | grupo_dia |
| 12 | audio_07 |
a. O audio_07 é reproduzido com BackgroundDetect(). Essa função do asterisk permite a interrupção do áudio e iniciar imediatamente a gravação da resposta do interlocutor. Nesse caso o exten talk é acionado.
- Gravação da resposta do interlocutor. A resposta é gravada em um arquivo temporário em
/tmpcom o nome igual ao uniqueid da chamada. O tempo máximo da gravação é configurado na variável tempo_gravacao, o mínimo é sempre de 2 segundos. - O áudio gravado é transcrito pelo google utilizando a rota
POST/google/speech. - Reprodução dos últimos áudios configurados para o contexto.
| Ordem | Configuração do contexto |
|---|---|
| 13 | audio_08 |
| 14 | audio_09 |
- Decide o destino do fluxo do agente virtual. A rota
GET/ura/ngramé utilizada para decidir o destino do fluxo a partir da resposta reconhecida no item 4. Em caso de falha na identificação da resposta ou do destino de exceção é utilizado.
rtspContext (beta)
Esse contexto ainda não foi completamente testado. O contexto rtsp funciona como o contexto base com a diferença de não gravar o áudio mas enviar para o Google por streaming.
Ações realizadas no contexto
- Busca das configurações do contexto com a rota
GET/voicebot/config. - Execução de áudios configurados no contexto. Alguns campos do mailing podem ser configurados nas variáveis leitura_tts_0? do contexto e os exten datahumanizada, valorhumanizado ou tts são utilizados na verbalização quando necessário.
| Ordem | Configuração do contexto |
|---|---|
| 1 | audio_01 |
| 2 | audio_02 |
| 3 | leitura_tts_01 |
| 4 | audio_03 |
| 5 | leitura_tts_02 |
| 6 | audio_04 |
| 7 | leitura_tts_03 |
| 8 | audio_05 |
| 9 | audio_06 |
| 10 | regra_dia |
| 11 | grupo_dia |
| 12 | audio_07 |
- Envio da resposta para o Google por streaming.
- O áudio gravado é transcrito pelo google utilizando a rota
POST/google/speech. - Reprodução dos últimos áudios configurados para o contexto (audio_08 e audio_09).
dtmfContext
O contexto dtmf funciona de forma semelhante ao baseContext mas a decisão no fluxo é determinada com a digitação dos números 1 ou 2.
Ações realizadas no contexto
- Busca das configurações do contexto com a rota
GET/voicebot/config. - Execução de áudios configurados no contexto. Alguns campos do mailing podem ser configurados nas variáveis leitura_tts_0? do contexto e os exten datahumanizada, valorhumanizado ou tts são utilizados na verbalização quando necessário.
| Ordem | Configuração do contexto |
|---|---|
| 1 | audio_01 |
| 2 | audio_02 |
| 3 | leitura_tts_01 |
| 4 | audio_03 |
| 5 | leitura_tts_02 |
| 6 | audio_04 |
| 7 | leitura_tts_03 |
| 8 | audio_05 |
| 9 | audio_06 |
| 10 | regra_dia |
| 11 | grupo_dia |
| 12 | audio_07 |
- Aguarda dígito para determinar o fluxo do agente virtual. O máximo de tempo esperado é 7 segundos. A digitação do número 1 força uma resposta 'sim' para a etapa 5, o número 2 força a resposta 'nao'.
- Decide o destino do fluxo do agente virtual. A rota
GET/ura/ngramé utilizada para decidir o destino do fluxo a partir da resposta reconhecida no item 3. Em caso de outro dígito ser utilizado o destino de exceção é utilizado.
queueContext
O objetivo do contexto queue é transferir a chamada para uma fila determinada. A fila é configurada como o exten do contexto.
Ações realizadas no contexto
- Busca das configurações do contexto com a rota
GET/voicebot/config. - Execução de áudios configurados no contexto. Alguns campos do mailing podem ser configurados nas variáveis leitura_tts_0? do contexto e os exten datahumanizada, valorhumanizado ou tts são utilizados na verbalização quando necessário.
| Ordem | Configuração do contexto |
|---|---|
| 1 | audio_01 |
| 2 | audio_02 |
| 3 | leitura_tts_01 |
| 4 | audio_03 |
| 5 | leitura_tts_02 |
| 6 | audio_04 |
| 7 | leitura_tts_03 |
| 8 | audio_05 |
| 9 | audio_06 |
| 10 | regra_dia |
| 11 | grupo_dia |
| 12 | audio_07 |
| 13 | audio_08 |
| 14 | audio_09 |
- Envia informações para tabular a ligação através da rota
POST/voicebot/end-calls. A ligação é tabulada caso haja problema na transferência para a fila (item 4). - Transfere ligação para a fila configurada na linha
same => n,Goto(to-fila,${EXTEN},1).
hangupContext
O contexto hangup é utilizado quando a ligação chega ao fim do fluxo e deve ser desligada.
Ações realizadas no contexto
- Busca das configurações do contexto com a rota
GET/voicebot/config. - Execução de áudios configurados no contexto. Alguns campos do mailing podem ser configurados nas variáveis leitura_tts_0? do contexto e os exten datahumanizada, valorhumanizado ou tts são utilizados na verbalização quando necessário.
| Ordem | Configuração do contexto |
|---|---|
| 1 | audio_01 |
| 2 | audio_02 |
| 3 | leitura_tts_01 |
| 4 | audio_03 |
| 5 | leitura_tts_02 |
| 6 | audio_04 |
| 7 | leitura_tts_03 |
| 8 | audio_05 |
| 9 | audio_06 |
| 10 | regra_dia |
| 11 | grupo_dia |
| 12 | audio_07 |
| 13 | audio_08 |
| 14 | audio_09 |
- Encerra a chamada com o contexto h.
passbyContext
O contexto passby é utilizado quando o fluxo segue para apenas um destino. O destino do fluxo é configurado no contexto e ao final da execução do passby ela é direcionada para o contexto configurado.
Ações realizadas no contexto
- Busca das configurações do contexto com a rota
GET/voicebot/config. - Execução de áudios configurados no contexto. Alguns campos do mailing podem ser configurados nas variáveis leitura_tts_0? do contexto e os exten datahumanizada, valorhumanizado ou tts são utilizados na verbalização quando necessário.
| Ordem | Configuração do contexto |
|---|---|
| 1 | audio_01 |
| 2 | audio_02 |
| 3 | leitura_tts_01 |
| 4 | audio_03 |
| 5 | leitura_tts_02 |
| 6 | audio_04 |
| 7 | leitura_tts_03 |
| 8 | audio_05 |
| 9 | audio_06 |
| 10 | regra_dia |
| 11 | grupo_dia |
| 12 | audio_07 |
| 13 | audio_08 |
| 14 | audio_09 |
- Segue o fluxo para o contexto e exten configurado.
confirmationContext
O contexto confirmaion é utilizado para perguntar ao interlocutor e confirmar a resposta com um campo presente no mailing.
Ações realizadas no contexto
- Busca das configurações do contexto com a rota
GET/voicebot/config. - Execução de áudios configurados no contexto. Alguns campos do mailing podem ser configurados nas variáveis leitura_tts_0? do contexto e os exten datahumanizada, valorhumanizado ou tts são utilizados na verbalização quando necessário.
| Ordem | Configuração do contexto |
|---|---|
| 1 | audio_01 |
| 2 | audio_02 |
| 3 | leitura_tts_01 |
| 4 | audio_03 |
| 5 | leitura_tts_02 |
| 6 | audio_04 |
| 7 | leitura_tts_03 |
| 8 | audio_05 |
| 9 | audio_06 |
| 10 | regra_dia |
| 11 | grupo_dia |
| 12 | audio_07 |
a. O audio_07 é reproduzido com BackgroundDetect(). Essa função do asterisk permite a interrupção do áudio e iniciar imediatamente a gravação da resposta do interlocutor. Nesse caso o exten talk é acionado.
- Gravação da resposta do interlocutor. A resposta é gravada em um arquivo temporário em
/tmpcom o nome igual ao uniqueid da chamada. O tempo máximo da gravação é configurado na variável tempo_gravacao, o mínimo é sempre de 2 segundos. - O áudio gravado é transcrito pelo google utilizando a rota
POST/google/speech. - Reprodução dos últimos áudios configurados para o contexto (audio_08 e audio_09).
- Realizado a confirmação da transquição com o campo do mailing configurado através da rota
GET/voicebot/field-confirmations. - Decide o destino do fluxo do agente virtual através da rota
GET/voicebot/field-confirmations.
validationContext
O contexto validation é utilizado para testar se os campos do mailing foram preenchidos. Esse contexto pode deinir vários destinos de acordo com a presença de valores nos campos configurados.
Ações realizadas no contexto
- Busca das configurações do contexto com a rota
GET/voicebot/config. - Execução de áudios configurados no contexto. Alguns campos do mailing podem ser configurados nas variáveis leitura_tts_0? do contexto e os exten datahumanizada, valorhumanizado ou tts são utilizados na verbalização quando necessário.
| Ordem | Configuração do contexto |
|---|---|
| 1 | audio_01 |
| 2 | audio_02 |
| 3 | audio_03 |
| 4 | audio_04 |
| 5 | audio_05 |
| 6 | audio_06 |
| 7 | audio_07 |
| 8 | audio_08 |
| 9 | audio_09 |
- Decide o destino do fluxo do agente virtual através da rota
GET/voicebot/lead-validationsde acordo com os campos do mailing recebidos e as configurações do contexto.
Versionamento
v1.0.0
27/04/2020 - Commit: b119155
Versão inicial do voicebot Smart NX.
v1.0.1
07/07/2020 - Commit: dba0d1f
Hotfix: Gravação da ligação não é iniciada se houver erro na busca do início do voicebot.
v1.0.2
09/07/2020 - Commit: 9b2df30
Hotfix: Regra para a execução da cron somente se a data de atualização não for o dia atual.
v1.0.3
10/07/2020 - Commit: ff1b1da
Hotfix: Adicionando coluna de data de início da cron.
v1.0.4
14/08/2020 - Commit: 8074933
Hotfix: Contenção de erro na rota de envio de áudio.
v1.1.0
05/10/2020 - Commit: a2c5c24
Features:
- Criação da tabela voicebot para armazenar as configurações gerais do voicebot.
- Configuração que permite gravar as tabulações intermediárias do voicebot fornecendo uma lista de tabulações utilizadas pelo voicebot em cada ligação.
- Configuração que permite gravar
- Criação do módulo info com rota para informar a versão do voicebot.
- Criação do módulo page fornecendo uma página web com informações básicas e configurações gerais do voicebot.
- Criação do contexto request com integração de tabulação Tivea específico para cliente.
- Humanização dos valores monetários e datas em todos os contextos.
- Atualização da base de conhecimento da instalação.
Refactor:
- Otimização dos logs da tabela request_log na tabela vb_compiled_log.
- Otimização de acesso ao banco com o cálculo dos dias de vencimento.
- Refatoração e limpeza de códigos não utilizados.
- Padronização das ações de finalização de chamadas na rota /end-calls.
- Padronização de retorno para o asterisk. Todas as rotas devem retornar a variável status=ok.
Documents: Atualização do README.ME.
v1.1.1
20/10/2020 - Commit: b586795
Hotfix: Correção dos minutos no registro das promessas.
v1.1.2
20/10/2020 - Commit: 65d045c
Hotfix: Define valores padrões para os recursos de gravar decisões e ações automáticas.
v1.1.3
28/10/2020 - Commit: 2405cd3
Hotfix: Atualização do conjunto de áudios do robô para eliminar nome errado.
v1.1.4
23/12/2020 - Commit: ad1a52f
Hotfix: Seleção redundante de crons a serem executadas, tratando as duplicatas.
v1.1.5
28/12/2020 - Commit: 36073c9
Hotfix: Campo do início da execução das crons iniciado automaticamente, quando nulo.
v1.1.6
22/02/2021 - Commit: 4930fc4
Hotfix: Correção na validação de campos inteiro e string.
v1.1.7
23/03/2021 - Commit: 00cefc8
Hotfix: Tratamento de dígito inválido no DMTF.
v1.1.8
08/04/2021 - Commit: 7d91002
Hotfix: Inclusão da variável DATA4 (e_data4) na verbalização humanizada do robô.
v1.1.9
09/04/2021 - Commit: 51bf44f
Hotfix: Inclusão da data de hoje na validação.
v1.1.10
12/05/2021 - Commit: ebd1a6a
Hotfix: Melhora no tratamento de erro das funções de finalização de chamada e tratamento da função de gravar decisões intermediárias.
v1.2.0
14/06/2021 - Commit: 96d2b94
Feature: Disponibiliza rota de fornecimento de logs de reconhecimento do robô.
Refactor: Refatoração de códigos.
v1.2.1
15/06/2021 - Commit: 87acdc0
Hotfix: Inclusão da variável VALOR4 (e_monetario4) na verbalização humanizada do robô.
v1.3.0
24/06/2021 - Commit: bd7cc43
Feature:
- Adicionado integração dinâmica (requestContext) suportando Tivea e Wedoo.
- Adição do contexto de confirmação de CPF (cpfContext).
- Adição do contexto de NPS por dígito (npsContext).
- Adição do tempo máximo de ligação do robô. Padrão: 6 minutos. Hotfix: Correção no envio de variáveis na confirmação de campos do lead (confirmationContext). Refactor:
- Correção na impressão de requisições do Asterisk para auxiliar no debug.
- Eliminação de contexto depreciado: dtmfMultimaisContext
- Eliminação de módulos depreciados
- PBX
- CronJob
v1.3.1
15/06/2021 - Commit: 43febcc
Hotfix: Correção na tabulação automática do parceiro Tivea utilizado com o contexto de request.
