¿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, créé un module NPM appelé ssml-verify Ssml-check prend une réponse SSML et recherche des formats, étiquettes et valeurs valides. Prend en charge des balises spécifiques à Alexa et Google Assistant, et vous indiquera également si une réponse fonctionnera sur les deux plateformes. Vous pouvez consulter ce module en action en entrant des chaînes SSML à ce lien
Demande de vérification SSML
Intégrer ssml-check dans votre code est facile. La bibliothèque expose deux fonctions verify et verifyAndFix Vous devez fournir le texte SSML et une structure optionnelle indiquant la plateforme à vérifier. La vérification validera votre SSML, tandis que verifyAndFix fournira en plus une chaîne SSML corrigée. 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, le code suivant vérifiera un fichier 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!