Pegar erros no início do desenvolvimento com o novo recurso no Google linter

Aza Tulepbergenov Segue 16 de jul · 3 min ler

Hoje, estamos lançando o Actions on Google linter para Node.js. O linter realiza verificações em tempo de compilação e avisa quando um webhook cria uma resposta que não segue os requisitos documentados . Isso inclui ter muitas bolhas de bate-papo (respostas de texto) ou falta de resposta. Isso economiza seu tempo durante o desenvolvimento, garantindo que seu código cumpra os requisitos de criação de respostas – sem precisar implantar e testar seu webhook.

Por que usar um linter?

Como meu colega Leon mencionou em " Depurando Ações Comuns nos Erros do Google ", erros como

 “MalformedResponse: <detalhes do erro>” 

pode surgir frequentemente durante o teste.

Considere este código que implementa um manipulador de intenção simples:

 app.intent ('my_intent', (conv) => { conv.ask ('primeira bolha de bate-papo'); conv.ask ('segunda bolha de bate-papo'); conv.ask ('terceira bolha de bate-papo'); }); 

Ele produz o seguinte erro MalformedResponse quando um usuário aciona my_intent :

O simulador retorna esse erro porque há três bolhas de bate-papo na resposta do webhook. De acordo com os requisitos documentados , isso constitui uma resposta malformada.

Em geral, gostaria de destacar duas coisas:

  1. Erros de resposta mal formados são comuns
  2. Eles são criados em tempo de execução

Erros de resposta mal formados surgem quando as respostas não seguem os requisitos listados na documentação Ações na Google Answers . A documentação lista as especificações para vários tipos de respostas (como Rich Response, Visual Selection Response e mais). À medida que as conversas se tornam mais complexas, torna-se mais provável ignorar um erro do MalformedResponse.

Para ajudar a automatizar esse processo, você pode usar o Actions on Google linter . O linter varre seu código em busca de requisitos perdidos com base na documentação de Respostas. Isso permite detectar problemas com o seu webhook antes da implantação. Você pode encontrar uma lista completa de regras de suporte em actions-on-google-linter-nodejs no GitHub.

O linter é atualmente implementado como um plugin ESLint para desenvolvedores do Node.js, fornecendo a você um ambiente familiar e consistente. Ele segue os padrões e a arquitetura padrão estabelecidos na comunidade ESLint.

O linter produz a seguinte saída quando comparado com o código para my_intent :

 $ ./node_modules/eslint/bin/eslint.js. Erro 4: 3 No máximo, duas respostas simples são permitidas no Action-on-google / no máximo duas respostas simples 

O linter nos dá o erro e o número da linha do código com falha.

Distribuição e instalação

O linter é distribuído via npm e o código fonte está disponível no GitHub . Você pode ler as instruções de instalação sobre como configurá-lo em seu projeto. Encorajo-o a experimentar o linter nos seus projetos e enviar solicitações de pull para melhorar a cobertura das regras do linter.

Detalhes do Linter

Cada regra funciona com uma árvore de sintaxe abstrata ( AST ) criada pela Espree, o analisador ESLint padrão.

Essa ferramenta processa a AST e identifica os locais onde você faz as chamadas à biblioteca do cliente Ações no Google Node.js que correspondem às respostas do edifício. Esses nós são raízes de subárvores que contêm informações suficientes para identificar violações. Violações incluem quais tipos de respostas e em qual ordem estão sendo construídas.

Para simplificar o processo de análise das chamadas da biblioteca do cliente, também desenvolvemos funções abstratas que classificam as respostas simples, os auxiliares e as chamadas da biblioteca do cliente. Essas funções são reutilizadas pelas regras e facilitam a criação de suas próprias regras.

Obrigado pela leitura! Para compartilhar seus pensamentos ou dúvidas, junte-se a nós no Reddit em r / GoogleAssistantDev .

Siga o @ActionsOnGoogle no Twitter para mais atualizações da nossa equipe, e twitte usando #AoGDevs para compartilhar o seu trabalho. Mal posso esperar para ver o que você constrói!