
Partager:
Je suis développeur JavaScript et éducateur de développeurs chez Vonage. Au fil des ans, j'ai été très intéressé par les modèles, Node.js, les applications Web progressives et les stratégies offline-first, mais ce que j'ai toujours aimé, c'est une API utile et bien documentée. Mon objectif est de faire en sorte que votre expérience de l'utilisation de nos API soit la meilleure possible.
Améliorez votre reconnaissance vocale automatique : Meilleures pratiques pour les SVI
Temps de lecture : 3 minutes
Si vous souhaitez rendre le menu de votre centre d'appels plus convivial, le remplacement du DTMF (options numérotées saisies au clavier) par le SVI (réponse vocale interactive) peut être un bon point de départ. Mais si vous avez déjà eu l'impression de vous faire remarquer en criant quelque chose comme "Payez ma facture" dans votre téléphone avec une frustration croissante, vous savez aussi que le SVI n'est pas parfait. Lorsque vous utilisez la RVI avec l'API Voice de Vonage, il y a plusieurs choses que vous pouvez faire pour améliorer l'expérience.
Contexte
Vous saisissez les données de l'utilisateur avec la reconnaissance vocale automatique (ASR) de Vonage en créant une action d'entrée dans un objet de contrôle d'appel (NCCO). Un NCCO de base avec une invite vocale ressemble à ceci :
const ncco = [{
action: 'talk',
text: 'Thank you for calling the North Pole. Have you been naughty or nice?'
}
];Vous pouvez collecter les réponses à vos questions avec ASR. Pour utiliser l'ASR, vous devez ajouter speech comme valeur dans le tableau type et fournir une propriété speech avec la configuration. Dans speech.contextvous pouvez fournir un tableau de réponses probables.
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"
}
}
];Lorsque l'appelant répond à une invite, l'ASR renvoie un tableau de suppositions. Chaque réponse possible est assortie d'un indice de confiance, et les suppositions sont classées par ordre de confiance :
[ { 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' } ]Vous pouvez tester l'effet en répondant par un homonyme de l'un des mots de votre tableau. context dans votre tableau. Ce que vous avez réellement dit devrait toujours apparaître avec un degré de confiance plus élevé, mais vous remarquerez que les homonymes ont souvent le même degré de confiance et que le fait de fournir des mots dans le contexte permet de garantir que ceux qui vous intéressent sont inclus dans la liste :
[ { confidence: '0.5402811', text: 'howdy' },
{ confidence: '0.51581204', text: 'naughty' } ] Anticiper les erreurs
L'intelligence artificielle n'en est qu'à ses débuts et a tendance à se frustrer et à piquer des crises. Vous pouvez très facilement vous débarrasser de votre interlocuteur en supposant que vous obtiendrez des résultats exploitables avec l'ASR.
Lorsque vous utilisez Vonage pour faire de l'ASR, vos résultats vous parviendront en . request.body.speech.results. La façon dont le tableau results en cas d'erreur n'est pas forcément celle à laquelle vous vous attendez. Au lieu d'avoir une longueur de 0, results est tout simplement indéfini. La vérification que vous devez effectuer porte donc sur une propriété distincte, request.body.speech.error. Son existence sert à signaler à votre code que vous n'avez pas d'informations sur ce qu'il faut faire ensuite :
if (req.body.speech.error) {
res.json([{
action: 'talk',
text: 'We could not understand your request. Santa will bring you socks.'
}]);
} Noter les erreurs répétées
Une fois que vous vous engagez sur la voie de la RPA, vous n'êtes pas obligé de vous y tenir. Si l'on demande à l'appelant de se répéter, il risque d'être frustré. Pire encore, dans un système complexe, chaque erreur est une nouvelle possibilité que quelque chose ne soit pas traité et votre interlocuteur est sur le point de se faire larguer après avoir passé cinq minutes à hurler à un robot.
Vonage vous offre les outils nécessaires pour déterminer à quelle conversation appartient une réponse. Dans le corps des demandes adressées à vos points d'extrémité, vous trouverez un UUID permettant d'identifier de manière unique un appelant et un appel. Cependant, comme les points d'accès sont sans état, vous devez stocker des informations sur la conversation et le niveau de réussite de l'appelant pour utiliser l'UUID.
Par rapport à la gestion d'un magasin de données, les NCCO sont très simples et peuvent être encore plus légers en faisant abstraction des propriétés répétées :
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);
}Vous pouvez créer autant de points de terminaison que vous le souhaitez, pour gérer le nombre d'erreurs que vous pensez que les appelants peuvent tolérer. Ils ne doivent contenir que des données spécifiques à ce scénario :
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
}
});Pour les points d'extrémité où vous sentez qu'il est temps d'abandonner, vous pouvez passer au DTMF ou à un opérateur en chair et en os.
En savoir plus
Pour commencer à créer des menus IVR, vous pouvez consulter notre documentation sur l'ASR et les paramètres détaillés de la reconnaissance vocale. Vous pouvez consulter et remixer un exemple de projet IVR sur Glitch.
Nous sommes toujours heureux de discuter de votre cas d'utilisation et de vous aider à résoudre les problèmes dans notre canal Slack de la communauté.
Partager:
Je suis développeur JavaScript et éducateur de développeurs chez Vonage. Au fil des ans, j'ai été très intéressé par les modèles, Node.js, les applications Web progressives et les stratégies offline-first, mais ce que j'ai toujours aimé, c'est une API utile et bien documentée. Mon objectif est de faire en sorte que votre expérience de l'utilisation de nos API soit la meilleure possible.