
Compartilhar:
Sou desenvolvedor de JavaScript e instrutor de desenvolvimento na Vonage. Ao longo dos anos, tenho me interessado muito por modelos, Node.js, aplicativos web progressivos e estratégias “offline-first”, mas o que sempre adorei de verdade é uma API útil e bem documentada. Meu objetivo é tornar a sua experiência com nossas APIs a melhor possível.
Melhore seu reconhecimento automático de fala: melhores práticas para sistemas IVR
Tempo de leitura: 3 minutos
Se você deseja tornar o menu do seu call center mais fácil de usar, substituir o DTMF (opções numeradas digitadas pelo teclado) pelo IVR (Resposta Interativa de Voz) pode ser um bom ponto de partida. Mas se você já se sentiu constrangido ao gritar algo como “Pagar minha conta” no telefone, com frustração crescente, também sabe que o IVR não é perfeito. Ao implementar o IVR com a Voice API da Vonage, há algumas medidas que você pode tomar para melhorar a experiência.
Forneça o contexto
Você captura as entradas do usuário por meio do ASR (Reconhecimento Automático de Fala) da Vonage criando uma ação de entrada em um Objeto de Controle de Chamada (NCCO). Um NCCO básico com um prompt de voz tem a seguinte aparência:
const ncco = [{
action: 'talk',
text: 'Thank you for calling the North Pole. Have you been naughty or nice?'
}
];Você pode coletar respostas à sua solicitação usando o ASR. Para usar o ASR, você deve adicionar speech como um valor na type matriz e também definir uma speech propriedade com a configuração. Em speech.context, você pode fornecer uma matriz de respostas prováveis.
const ncco = [{
action: 'talk',
text: 'Thank you for calling the North Pole. Have you been naughty or nice?',
},
{
action: 'input',
type: ['speech'],
eventUrl: [`https://${process.env.PROJECT_DOMAIN}.glitch.me/nice`],
speech: {
context: ['naughty','nice'],
endOnSilence: 1,
language: "en-US"
}
}
];Quando o interlocutor responder a uma solicitação, o ASR retornará uma matriz de sugestões. Cada resposta possível terá um índice de confiança, e as sugestões serão classificadas por ordem de confiança:
[ { confidence: '0.5399828', text: 'naughty' },
{ confidence: '0.51581204', text: 'Eddie' },
{ confidence: '0.51581204', text: 'honey' },
{ confidence: '0.51581204', text: 'buddy' },
{ confidence: '0.51581204', text: 'Eddy' } ]Você pode testar o efeito respondendo com um homônimo de uma das palavras da sua context lista. O que você realmente disse ainda deve aparecer com maior confiança, mas você vai perceber que os homônimos costumam ter o mesmo nível de confiança, e fornecer palavras no contexto ajuda a garantir que aquelas nas quais você está interessado sejam incluídas na lista:
[ { confidence: '0.5402811', text: 'howdy' },
{ confidence: '0.51581204', text: 'naughty' } ] Antecipar erros
A inteligência artificial ainda está, na verdade, em sua infância e tende a ficar frustrada e a fazer birras. É muito fácil acabar com a paciência de quem está ligando ao presumir que você obterá resultados úteis do reconhecimento de fala (ASR).
Quando você usa o Vonage para fazer o reconhecimento automático de fala (ASR), os resultados serão apresentados em request.body.speech.results. No entanto, o results matriz se comporta caso haja um erro pode não ser o que você espera. Em vez de ter comprimento 0, results ele simplesmente fica indefinido. Portanto, a verificação que você precisará fazer é em relação a uma propriedade separada, request.body.speech.error. Sua existência serve como um indicador para o seu código de que você não tem informações sobre o que fazer a seguir:
if (req.body.speech.error) {
res.json([{
action: 'talk',
text: 'We could not understand your request. Santa will bring you socks.'
}]);
} Observação: erros repetidos
Depois de iniciar o processo de ASR, você não é obrigado a continuar nele. Se for necessário pedir para o interlocutor repetir o que disse, ele pode ficar frustrado. Pior ainda: em um sistema complexo, cada erro representa uma nova possibilidade de que algo não esteja sendo tratado adequadamente, e seu interlocutor está prestes a ser desconectado depois de passar cinco minutos gritando com um robô.
A Vonage oferece as ferramentas necessárias para rastrear a qual conversa uma resposta se refere. No corpo das solicitações enviadas aos seus endpoints, você encontrará um UUID para identificar de forma exclusiva um chamador e uma chamada. No entanto, como os endpoints não mantêm estado, você precisaria armazenar informações sobre a conversa e o nível de sucesso que o chamador estava obtendo para utilizar o UUID.
Em comparação com o gerenciamento de um repositório de dados, os NCCOs são muito simples e podem se tornar ainda mais leves por meio da abstração de propriedades repetidas:
function sendNCCO(res, prompt, endpoint, context) {
const ncco = [{
action: 'talk',
text: prompt,
},
{
action: 'input',
type: ['speech'],
eventUrl: [`https://${process.env.PROJECT_DOMAIN}.glitch.me/${endpoint}`],
speech: {
context: context,
endOnSilence: 1,
language: "en-US"
}
}];
res.json(ncco);
}Você pode criar quantos endpoints quiser, para lidar com o número de erros que achar que os usuários podem tolerar. Eles precisam conter apenas dados específicos para esse cenário:
app.post('/nice_error', function(req, res) {
if (req.body.speech.error) {
sendNCCO(
res,
`We still couldn't understand you. Please say "naughty" or "nice".`,
'nice_repeat_error',
['naughty','nice']
);
} else {
// branches for naughty or nice
}
});Nos casos em que você sentir que é hora de desistir, pode optar pelo DTMF ou por um atendente ao vivo.
Saiba mais
Para começar a criar menus de IVR, você pode consultar nossa documentação sobre ASR e as configurações detalhadas de reconhecimento de fala. Você pode visualizar e reeditar um projeto IVR de exemplo no Glitch.
Estamos sempre dispostos a discutir seu caso de uso e ajudar na solução de problemas em nosso canal da Comunidade no Slack.
Compartilhar:
Sou desenvolvedor de JavaScript e instrutor de desenvolvimento na Vonage. Ao longo dos anos, tenho me interessado muito por modelos, Node.js, aplicativos web progressivos e estratégias “offline-first”, mas o que sempre adorei de verdade é uma API útil e bem documentada. Meu objetivo é tornar a sua experiência com nossas APIs a melhor possível.