https://d226lax1qjow5r.cloudfront.net/blog/blogposts/improve-your-automatic-speech-recognition-best-practices-for-ivrs/ivr_asr-1.png

Mejore su reconocimiento automático de voz: Buenas prácticas para IVR

Publicado el December 11, 2021

Tiempo de lectura: 3 minutos

Si quiere que el menú de su centro de llamadas sea más fácil de usar, sustituir DTMF (opciones numeradas que se teclean) por IVR (respuesta de voz interactiva) puede ser un buen punto de partida. Pero si alguna vez se ha sentido visible gritando al teléfono algo como "Pague mi factura" con creciente frustración, también sabrá que la IVR no es perfecta. Cuando realizas IVR con Voice API de Vonage, hay algunas cosas que puedes hacer para mejorar la experiencia.

Contexto

Puedes capturar la entrada del usuario con ASR (reconocimiento automático de voz) con Vonage creando una acción de entrada en un objeto de control de llamadas (NCCO). Un NCCO básico con una solicitud de voz tiene el siguiente aspecto:

const ncco = [{
      action: 'talk',
      text: 'Thank you for calling the North Pole. Have you been naughty or nice?'
    }
  ];

Puede recopilar respuestas a su pregunta con ASR. Para utilizar ASR, deberá añadir speech como un valor en el array type y también una propiedad speech con la configuración. En speech.contextpuedes proporcionar un array de respuestas 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"
      }
    }
  ];

Cuando la persona que llama responde a una pregunta, ASR devuelve una serie de conjeturas. Cada respuesta posible tendrá un índice de confianza, y las conjeturas se clasificarán por confianza:

[ { 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' } ]

Puede probar el efecto respondiendo con un homónimo de una de las palabras de su context matriz. Lo que has dicho en realidad debería seguir apareciendo con mayor confianza, pero te darás cuenta de que los homónimos suelen tener el mismo índice de confianza y proporcionar palabras en el contexto ayuda a garantizar que las que te interesan se incluyan en la lista:

[ { confidence: '0.5402811', text: 'howdy' },
  { confidence: '0.51581204', text: 'naughty' } ]

Anticiparse a los errores

La inteligencia artificial aún está en pañales y es propensa a frustrarse y a las rabietas. Es muy fácil echar a la persona que llama de una llamada dando por hecho que obtendrá resultados ASR utilizables.

Cuando utilices Vonage para hacer ASR, los resultados te llegarán en request.body.speech.results. Sin embargo, el comportamiento de la matriz results si se produce un error puede no ser la que esperas. En lugar de tener una longitud de 0 results es simplemente indefinido. Así que la comprobación que tendrás que hacer es para una propiedad separada, request.body.speech.error. Su existencia sirve como una bandera para su código que no tiene información sobre qué hacer a continuación:

if (req.body.speech.error) {
    res.json([{
      action: 'talk',
      text: 'We could not understand your request. Santa will bring you socks.'
    }]);
  }

Nota Errores repetidos

Una vez que se inicia el camino de la ASR, no hay que comprometerse a permanecer en él. Si a la persona que llama se le pide que repita lo que ha dicho, puede sentirse frustrada. Peor aún, en un sistema complejo cada error es una nueva posibilidad de que algo no se esté gestionando y tu interlocutor está a punto de ser abandonado tras pasar cinco minutos gritándole a un robot.

Vonage te brinda las herramientas para rastrear a qué conversación pertenece una respuesta. En el cuerpo de las solicitudes a tus puntos finales encontrarás un UUID para identificar de manera única a la persona que llama y la llamada. Sin embargo, debido a que los puntos finales no tienen estado, tendrías que almacenar información sobre la conversación y el nivel de éxito de la persona que llama para usar el UUID.

En comparación con la gestión de un almacén de datos, las OCNN son muy sencillas, y pueden aligerarse aún más abstrayendo las propiedades 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);
}

Puede crear tantos puntos finales como desee, para gestionar cualquier número de errores que crea que los usuarios pueden tolerar. Sólo necesitan contener datos específicos para ese escenario:

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
  }
});

En los puntos finales en los que considere que ha llegado el momento de rendirse, puede cambiar a DTMF o a un operador en directo.

Más información

Para empezar a crear menús IVR, puede consultar nuestra documentación sobre ASR y la configuración detallada del reconocimiento de voz. Puedes ver y remezclar un proyecto IVR de ejemplo en Glitch.

Estaremos encantados de hablar con usted sobre su caso de uso y ayudarle a solucionar problemas en nuestro canal de canal Slack de la comunidad.

Compartir:

https://a.storyblok.com/f/270183/250x250/f231d97f1b/garann-means.png
Garann MeansDesarrollador Educador

Soy desarrollador de JavaScript y educador de desarrolladores en Vonage. A lo largo de los años me han entusiasmado las plantillas, Node.js, las aplicaciones web progresivas y las estrategias offline-first, pero lo que siempre me ha encantado es una API útil y bien documentada. Mi objetivo es hacer que tu experiencia usando nuestras APIs sea la mejor posible.