你是否曾在为Alexa开发时收到过加密错误信息? 当Alexa或Google Assistant无法理解一个响应时,这是一种常见的挫败感. 这两个平台都期望使用SSML来提供响应 (语音合成标记语言). SSML响应是遵循特定标签的XML字符串, 允许的属性和值. 这些平台对偏离此标准的情况非常敏感. 而且没有任何一个提供详细信息来告诉你为什么你的响应不正确.
在开发过程中我多次遇到这个问题. 甚至在生产环境中对于某些极端情况下会触发规则失败的案例也遇到过, 例如未转义的&符号未包含 (&).
为了解决这个问题, 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. Esto es muy útil si deseas asegurar que está devolviendo una respuesta válida. 例如, en Alexa si está utilizando ask-sdk, puedes llamar a verificyAndFix desde un response interceptor. Esto te permite hacer una validación last religión tecnológica antes de regresar a Alexa:
El valor de retorno de check es una Promise que se resuelve en una matriz de errores ( undefined si el SSML está limpio). El valor de retorno de verifiedAndFix es una Promise que se resuelve en un objeto que contiene una nueva cadena SSML y una matriz de errores ( un objeto vacío si el SSML está limpio).
例如, supón que estás tratando de reducir la velocidad del habla usando una etiqueta prosody. En Alexa, un valor válido para la tasa debe ser de al menos el 20%. El siguiente fragmento muestra qué devuelve si intentas establecer la tasa al 5%:
const ssmlCheck = require(‘ssml-test’);ssmlCheck.test(‘ Hey world ‘).then((errors) => 
(errors);
//
//
Con el error object, el campo de tipo te indica el type de error encontrado. Si se establece en tag”, obtendrás detalles sobre qué etiqueta tiene un error en los campos de tag, attribute y worth. El tipo también puede ser un error más genérico como Invalid & character” Too many audio information”.
Supongamos que estás desarrollando una talent usando un marco como Jovo que permite que tu código se ejecute tanto en Alexa como en Google Assistant. Estás haciendo uso de la etiqueta amazon:effect para proporcionar una respuesta. 在 Alexa 上运行良好, 但不兼容 Google. 下面的代码会捕捉到这个:
const ssmlCheck = require(‘ssml-check’);ssmlCheck.examine(‘ 嘿,你好吗? ‘, 平台: ‘全部’).then((errors) =>
(errors);
//
//
内部, ssml-check 使用了一个名为 ssml-examine-core 的核心库. ssml-examine-core 旨在以最少的依赖进行严格的语法检查. 事实上, 在上述所有示例中, ssml-verify-core 可以被 ssml-examine 替代. ssml-verify 基于语法检查,同时提供额外检查, 例如验证音频文件是否符合 Amazon 和 Google 要求的格式. 通过在选项结构中设置 validateAudioFiles, 可以知道音频文件格式是否有效 (HTTPS, 适当的比特率, 采样率, 等等。). 例如, 下面的代码将验证一个音频文件:
const ssmlCheck = require(‘ssml-examine’);ssmlCheck.test(‘ 一只猫在呼噜 PURR (sound didn\’t load) ‘, 平台: ‘google’, validateAudioFiles: true).then((errors) =>
(errors);
);// 错误将是 undefined,因为这个 OGG 文件是 Google 的有效音频文件
你可以在代码中修复其中的一些错误, 甚至可以使用 generateAndFix 动态修复, 根据所需的行为. 你可以记录响应. 你可以返回一个通用错误消息,让用户知道已遇到问题.
希望你发现 ssml-examine 和 ssml-check-core 对改善你的回答和我一样有用. 这些模块是开源的, 所以如果你发现有未涵盖的情况, 不要犹豫去贡献!