Algumas características do desenvolvimento de habilidades para Alice



Você mora em Moscou e dirige seu carro? Em caso afirmativo, como você paga pelo estacionamento? Enviar SMS? Pagar através do aplicativo Moscow Parking? Use o bot no Telegram? "Isso é tudo desconfortável", decidi, e criei minha habilidade para Alice pagar pelo estacionamento por voz. Além disso, Alice já está embutida no Yandex.Navigator. Agora você pode simplesmente dizer ao Navegador algo como "Alice, peça ao Moscow Parking para pagar o estacionamento 3209 por 30 minutos ".

O que eu encontrei ao desenvolver uma habilidade?

A sessão


Para iniciar a habilidade de um desenvolvedor de terceiros, Alice precisa dizer "Alice, inicie a habilidade mais ou menos". Isso é bom e conveniente se você tiver uma longa comunicação com a habilidade - por exemplo, o jogo inicia. Se você precisar dizer uma frase, obter uma resposta e isso é tudo, então "inserir uma habilidade" é inconveniente. Com essa entrada, quando você terminar de trabalhar com uma habilidade, precisará "sair" dela.

Para uma frase, há uma solução dos desenvolvedores de Alice - você precisa dizer: "Alice pede a habilidade para fazer isso e aquilo ". No entanto, o exemplo de python dos desenvolvedores de Alice não suporta esse lançamento de habilidade:

if req['session']['new']: # -  return 

Cada vez que uma habilidade é lançada, incl. e com o comando "Alice pede uma habilidade ...", o valor de session.new é True . Portanto, todo o código de processamento adicional não será executado. A solução é verificar o texto do session.command - ele deve estar vazio.

A propósito, se você "inseriu" uma habilidade, por padrão, para todas as habilidades, Alice suporta frases de saída - "Alice, pare com isso" e "Alice, volte". Se você deseja finalizar forçosamente a sessão com a habilidade, precisará passar end_session igual a True na resposta. Mas isso só funciona com o Yandex.Station - em outros dispositivos, sair da habilidade nesse caso não funciona.

Trabalhar com números


Minha habilidade é trabalhar com números - primeiro reconheça o número de telefone do usuário e depois reconheça o número de estacionamento.

No exemplo acima, do Yandex usado

 req['request']['original_utterance'].lower() 

para trabalhar com uma solicitação do usuário. Primeiro, usei esse campo da solicitação. Para reconhecer o número de telefone do usuário, tive que pedir ao usuário que nomeiasse cada dígito do número separadamente - por exemplo, "nove um seis um dois três quatro cinco seis sete". E no código - substitua os valores de texto ("nove") por numérico (9). Ficou ainda mais engraçado com o código de estacionamento - chamo o código de "3209" como "trinta e dois zero nove", o código tinha várias substituições de tipo

 s.replace(' ', '32').replace(' ', '31').replace('', '0') 

Considerando que, com base no texto da solicitação no código da habilidade, tentei entender o que o usuário deseja (a máquina de estado não é usada na habilidade), essa conversão teve que ser feita com quase todas as solicitações de usuário (!).

Os servidores de Alice já estão fazendo tudo por você (e até mais). Apenas em vez de request.original_utterance, você precisa usar request.command . Sim, isso é afirmado na documentação. Na dica de ferramenta no exemplo de resposta.
Campo de serviço: solicitação do usuário convertida para o processamento interno de Alice. Durante a conversão, o texto, em particular, é limpo de sinais de pontuação e os numerais são convertidos em números.
É estranho que, no exemplo dos desenvolvedores de Alice (link acima), o texto original seja usado ( request.original_utterance ). De fato, ainda mais está sendo feito no request.command (que não está descrito na documentação). Por exemplo, um número de telefone é convertido para o formato (916) 123-45-67 - agora o usuário com minhas habilidades pode ligar para o telefone em qualquer formato conveniente para ele. Além disso, as frases “Alice, solicite tal e tal habilidade”, as mensagens “Alice” são cortadas, os erros de digitação são corrigidos.

No lado de Alice, partes individuais de consultas (números, nomes, endereços, datas) podem ser convertidas em entidades nomeadas . Mas funciona estranho. Solicite 79161234567 1234 , nas entidades nomeadas, convertidas em dois números - 791612345 70 e 1234 . Por que o primeiro número é diferente, não foi possível descobrir - esses. O suporte ao Yandex.Dialog ainda está pensando na resposta.

Tempo de resposta da habilidade


Alice aguarda uma resposta da habilidade em 3 segundos (o Google tem esse limite - 5/10 segundos ). Minha habilidade é acessar servidores de terceiros para iniciar e terminar o estacionamento. Eles respondem devagar. Às vezes, em 3 segundos, minha habilidade não tem tempo para dar uma resposta. Individualmente, não foi possível aumentar o tempo para a resposta da habilidade. Portanto, em alguns casos, era necessário sacrificar a conveniência - por exemplo, no início do estacionamento, a habilidade não solicita o carro real especificado no perfil do aplicativo Moscow Parking, mas usa o que foi retido durante a autorização do usuário.

Bem, sobre os direitos de "eu sou PR";) -

Source: https://habr.com/ru/post/pt471388/


All Articles