
¿Vives en Moscú y conduces tu coche? Si es así, ¿cómo paga el estacionamiento? ¿Enviar SMS? ¿Pagar a través de la aplicación de estacionamiento de Moscú? ¿Usar el bot en Telegram? "Todo esto es incómodo", decidí, y creé mi habilidad para que Alice pagara el estacionamiento por voz. Además, Alice ya está integrada en Yandex.Navigator. Ahora puede decirle al Navegador algo como "Alice, pedirle a
Moscú Parking que pague el estacionamiento 3209 por 30 minutos ".
¿Qué encontré al desarrollar una habilidad?
La sesión
Para comenzar la habilidad de un desarrollador externo, Alice necesita decir "Alice, lanza la habilidad de manera regular". Esto es bueno y conveniente si tienes una larga comunicación con la habilidad, por ejemplo, el juego comienza. Si necesita decir una frase, obtener una respuesta y eso es todo, entonces "ingresar una habilidad" es un inconveniente: con esta entrada, cuando termine de trabajar con una habilidad, deberá "salir" de ella.
Para una frase, hay una solución de los desarrolladores de Alice: debe decir: "Alice pide la habilidad para
hacer tal y tal ". Sin embargo, el
ejemplo de Python de los desarrolladores de Alice no admite ese lanzamiento de habilidades:
if req['session']['new']:
Cada vez que se lanza una habilidad, incl. y con el comando "Alice pide una
habilidad ...", el valor de
session.new es
True . Por lo tanto, todo el código de procesamiento adicional no se ejecutará. La solución es verificar el texto de
session.command : debe estar vacío.
Por cierto, si "ingresó" una habilidad, entonces, de manera predeterminada, para todas las habilidades Alice admite frases de salida: "Alice, deténgala" y "Alice, regrese". Si desea finalizar la sesión con fuerza con la habilidad, debe pasar
end_session igual a
True en la respuesta. Pero esto solo funciona con Yandex.Station: en otros dispositivos, salir de la habilidad en este caso no funciona.
Trabajar con números
Mi habilidad es trabajar con números: primero reconozca el número de teléfono del usuario, luego reconozca el número de estacionamiento.
En el ejemplo anterior de Yandex utilizado
req['request']['original_utterance'].lower()
para trabajar con una solicitud del usuario. Primero, usé este campo de la solicitud. Para reconocer el número de teléfono del usuario, tuve que pedirle al usuario que nombrara cada dígito del número por separado, por ejemplo, "nueve uno seis uno dos tres cuatro cinco seis siete". Y en el código, reemplace los valores de texto ("nueve") con numérico (9). Resultó aún más divertido con el código de estacionamiento: llamé al código "3209" como "treinta dos cero nueve", había muchos reemplazos en el código como
s.replace(' ', '32').replace(' ', '31').replace('', '0')
Dado que, en base al texto de solicitud en el código de habilidad, traté de entender lo que el usuario quiere (la máquina de estado no se usa en la habilidad), tuve que hacer esta conversión con casi cada (!) Solicitud de usuario.
Resultó que los servidores de Alice ya están haciendo todo por usted (e incluso más). En lugar de
request.original_utterance , debe usar
request.command . Sí, esto se indica en la documentación. En la información sobre herramientas en el ejemplo de respuesta.
Campo de servicio: solicitud de usuario convertida para el procesamiento interno de Alice. Durante la conversión, el texto, en particular, se borra de los signos de puntuación, y los números se convierten en números.
Es extraño que en el ejemplo de los desarrolladores de Alice (enlace de arriba) se use el texto original (
request.original_utterance ). De hecho, se está haciendo aún más en
request.command (que no se describe en la documentación). Por ejemplo, un número de teléfono se convierte al formato
(916) 123-45-67 ; ahora el usuario que yo
sepa puede llamar al teléfono en cualquier formato que le
resulte conveniente. Además, las frases "Alicia, pide tal y tal habilidad", los mensajes de "Alicia" se cortan, los errores tipográficos se corrigen.
Del lado de Alice, partes individuales de las solicitudes (números, nombres, direcciones, fechas) se pueden convertir en
Entidades nombradas . Pero funciona raro. Solicite
79161234567 1234 , en entidades con nombre convertidas a dos números:
791612345 70 y
1234 . Por qué el primer número resulta ser diferente, no fue posible averiguarlo. El soporte de Yandex.Dialog todavía está pensando en la respuesta.
Tiempo de respuesta de habilidad
Alice espera una respuesta de la habilidad en 3 segundos (Google tiene este límite:
5/10 segundos ). Mi habilidad es acceder a servidores de terceros para iniciar y finalizar el estacionamiento. Responden lentamente. A veces en 3 segundos mi habilidad no tiene tiempo para dar una respuesta. Individualmente, no fue posible aumentar el tiempo de respuesta de la habilidad. Por lo tanto, en algunos casos, era necesario sacrificar la conveniencia; por ejemplo, al comienzo del estacionamiento, la habilidad no solicita el automóvil real especificado en el perfil de la aplicación de estacionamiento de Moscú, sino que utiliza el que retuvo durante la autorización del usuario.
Bueno, sobre los derechos de "I am PR";) -