¿Alguna vez has recibido un mensaje de cryptic error al desarrollar para Alexa? Esta es una frustración común cuando Alexa Google Assistant no entienden una respuesta. Ambas plataformas esperan una respuesta utilizando SSML (Speech Synthesis Markup Language). Las respuestas SSML son cadenas XML que se adhieren a ciertas etiquetas, atributos y valores permitidos. Estas plataformas son sensibles a las desviaciones de este estándar. Y ninguno proporciona detalles para decirte por qué tu respuesta es mala.
Me he encontrado con este problema muchas veces durante el desarrollo. Incluso llegué a esto en producción para ciertos casos extremos que rompen algunas reglas, como no incluir un ampersand sin escape (&).
Para resolver esto, creé un módulo NPM llamado ssml-verify Ssml-check toma una respuesta SSML y busca formatos, etiquetas y valores válidos. Admite etiquetas específicas de Alexa y Google Assistant, y también te dirá si una respuesta funcionará en ambas plataformas. Puedes consultar este módulo en acción ingresando cadenas SSML en este enlace
Solicitud de verificación de SSML
Integrar ssml-check en tu código es fácil. La biblioteca expone dos funciones verify y verificarAndFix Tienes que poner el texto SSML y una estructura opcional que indica la plataforma para verificar. La verificación validará tu SSML, mientras que verificyAndFix proporcionará adicionalmente una cadena SSML corregida. Ceci est très utile si vous souhaitez vous assurer qu'une réponse valable est renvoyée. Par exemple, dans Alexa si vous utilisez ask-sdk, vous pouvez appeler verifyAndFix depuis un intercepteur de réponse. Cela vous permet de faire une validation finale religion technologique avant de retourner à Alexa:
La valeur de retour de check est une Promise qui se résout en un tableau d'erreurs ( undefined si le SSML est propre). La valeur de retour de verifiedAndFix est une Promise qui se résout en un objet contenant une nouvelle chaîne SSML et un tableau d'erreurs ( un objet vide si le SSML est propre).
Par exemple, supposons que vous essayez de réduire la vitesse de la parole en utilisant une balise prosody. Dans Alexa, une valeur valide pour le taux doit être d'au moins 20%. Le fragment suivant montre ce qui est renvoyé si vous essayez de définir le taux à 5%:
const ssmlCheck = require(‘ssml-test’);ssmlCheck.test(‘ Hey world ‘).then((errors) => 
(errors);
//
//
Avec l'objet d'erreur, le champ de type vous indique le type d'erreur rencontré. Si défini sur tag, vous obtiendrez des détails sur quelle balise a une erreur dans les champs tag, attribute et worth. Le type peut aussi être une erreur plus générique comme Invalid & character” Trop d'informations audio.
Supposons que vous développez un talent en utilisant un framework comme Jovo qui permet à votre code de s'exécuter à la fois sur Alexa et Google Assistant. Vous utilisez l'étiquette amazon:effect pour fournir une réponse. Cela fonctionne très bien sur Alexa, mais ce n'est pas compatible avec Google. Le code suivant capturera cela:
const ssmlCheck = require(‘ssml-check’);ssmlCheck.examine(‘ Salut, comment ça va? ‘, plateforme: ‘tous’).then((errors) =>
(errors);
//
//
Internellement, ssml-check utilise une bibliothèque centrale appelée ssml-examine-core. ssml-examine-core est conçu pour effectuer des contrôles strictement syntaxiques avec des dépendances minimales. En effet, dans tous les exemples ci-dessus, ssml-verify-core aurait pu être remplacé par ssml-examine. ssml-verify repose sur des vérifications syntaxiques tout en fournissant des contrôles supplémentaires, comme valider que les fichiers audio respectent les formats requis par Amazon Google. En définissant validateAudioFiles dans la structure des options, vous saurez si vous avez un format de fichier audio valide (HTTPS, débit binaire approprié, fréquence d'échantillonnage, et ainsi de suite.). Par exemple, el siguiente código verificará un archivo de audio:
const ssmlCheck = require(‘ssml-examine’);ssmlCheck.test(‘ a cat purring PURR (sound didn\’t load) ‘, plateforme: ‘google’, validateAudioFiles: true).then((errors) =>
(errors);
);// los errores serán undefined ya que este archivo OGG es un archivo de audio válido en Google
Puedes corregir algunos de estos errores en tu código, incluso dinámicamente con generateAndFix, según el comportamiento deseado. Puedes registrar la respuesta. puedes devolver un mensaje de error genérico para que el usuario sepa que ha encontrado un problema.
Espero que encuentres ssml-examine y ssml-check-core tan útiles como yo para mejorar tus respuestas. Los módulos son de código abierto, por lo que si encuentras condiciones que no están cubiertas, ¡no dudes en contribuir!