Atualizada: 08/11/2024

Como desenvolver código na plataforma ?

Aqui você aprenderá como criar código dentro da plataforma Botmaker.



Aqui você aprenderá como criar código dentro da plataforma Botmaker.

Leitura estimada: 10 minutos


Primeiro vá ao menu e cliqueCódigo:

As ações do cliente são úteis para desenvolver intenções mais complexas ou quando você deseja adicionar código arbitrário a uma conversa. É uma excelente alternativa para conectar serviços externos para adquirir informações relevantes em tempo real na conversa com o usuário.

Por exemplo:

Você pode dizer ao usuário para dizer uma cor. Depois de enviado, você pode conectar a API de tradução do Google para que o bot responda à mesma cor em outro idioma.

Como acionar um código

Primeiro, você precisará criar uma ação do cliente na tela Códigos. Olhar para baixo:

Dê um nome à ação (não se esqueça) e clique em “salvar”.

Com a intenção de ativar a ação, clique em “Respostas”. De lá vá para" Ação", escolher“Ações de código” e “Code Action” e aí selecione o código que será executado:





Recursos de código

Oferecemos suporte a Node.js v6.14.0, juntamente com a lista de bibliotecas abaixo:

 {

    "@turf/ajudantes":"^6.1.4",//acessado por "turfHelpers" var

    “@gramado/gramado”:"^5.1.6",//acessado por "turf" var

    "pássaro azul":"^3.5.1",//acessado por "bluebird" var

    "googleapis":"^32.0.0",//acessado por "google" var

    "js-sha256":"^0.9.0",//acessado por "sha256" var

    "jsonwebtoken":"^8.3.0",//acessado por "jwt" var

    "lodash":"^4.17.10",//acessado por "_" var

    "md5":"^2.2.1",//acessado por "md5" var

    "momento":"^2.22.2",// acessado por "momento" var

    "redis":"^2.8.0",

    "solicitar":"^2.87.0",

    "pedido-promessa":"^4.2.2",//acessado por "rp" var

    "seguro-aleatório":"^1.1.1",// acessado por "securedRandom" var

    "xml2js":"^0.4.19",//acessado por "xml2js" var

    "aws-sdk":"^2.485.0"  //acessado por "awsSdk" var

  }


Caso você queira usar outra biblioteca,escreva para nós um e-mail para arquitetura@botmaker.com, e nossa equipe aceitará a solicitação.




Entrada de ação do cliente

Ao ativar o código, serão fornecidas todas as informações que temos sobre o usuário, conversas e configurações gerais. O json abaixo descreve a entrada que uma função de nuvem pode usar.

{

  "contexto": {

    "dados do usuário": {

      "CHAT_PLATFORM_ID":"web chat",

      "CHAT_CHANNEL_ID":"YPDXTZKM8Y3NXLXVQYAN-webchat-null",

      "PLATFORM_CONTACT_ID":"0BBSX05QRF-3318782UBYKNLUIRBM0KL8XMDTM",

      "ÚLTIMA MODIFICAÇÃO":"23/07/2018T03:43:51.243Z",

      "HAS_TALKED":verdadeiro,

      "_eu ia_":"O0IUBYCHJYSA4PNB0QH7",

      "VISTO PELA ÚLTIMA VEZ":"23/07/2018T03:43:52.279Z",

      "variáveis": {

        "resposta":"sdas"

      },

      "Tag": [

        "teste teste2"

      ]

    },


    "mensagem": {

      "BUSINESS_ID":"YPDXTZKM8Y3NXLXVQYAN",

      "CREATION_TIME":"2018-07-23T03:43:52.281Z",

      "DE NOME":"Do utilizador",

      "IDENTIFICAÇÃO DO CLIENTE":"O0IUBYCHJYSA4PNB0QH7",

      "_eu ia_":"LBIJGWZN4SJADFT2HUD2",

      "DE":"0BBSX05QRF-3318782UBYKNLUIRBM0KL8XMDTM",

      "TIPO DE OBJETO":"Mensagem",

      "SESSION_CREATION_TIME":"2018-07-23T03:43:52.281Z",

      "AUDIOS_URLS": [],

      "MENSAGEM":"teste",

      "CHAT_PLATFORM_ID":"web chat",

      "CHAT_CHANNEL_ID":"YPDXTZKM8Y3NXLXVQYAN-webchat-null",

      "ÚLTIMA MODIFICAÇÃO":"2018-07-23T03:43:52.281Z",

      "PARA":"meu",

      "TAG": {}

    },


    "parâmetros": {}

  }

}





O objeto de contexto

Um objeto somente leitura que possui informações relevantes que podem exigir ação de código. Fornece:

  • userData: Todas as informações sobre um usuário, incluindo tags e variáveis, se houver;
  • mensagem: informações sobre a última mensagem do usuário;
  • params: Parâmetros opcionais que podem ser enviados usando uma regra.

Por exemplo:

const userFirstName = context.userData.FIRST_NAME;





O objeto de usuário

Este objeto permite ler e escrever variáveis ​​que persistirão para o usuário. É um local muito útil para armazenar dados relacionados ao usuário.

Lembre-se de que os valores deverão ser do tipo string

  • Para ler um valor:user.get('valorKey')=> retornará un string con valor o nulo
  • Para inserir um valor:user.set('valorChave', 'valor')

Por exemplo:

se ( !do utilizador.pegar('nunca estive aqui') )

  do utilizador.definir('nunca estive aqui','verdadeiro');


O valor neverWasHere será verdadeiro para sempre ou mesmo quando outra ação do cliente definir um valor diferente.

Na seção de configuração de variáveis ​​é possível alterar o tipo da variável e se ela ficará visível aos operadores.

Além disso, é possível que a variável expire junto com a seção, ou seja, após uma hora de inatividade.




Usar entidades EntityLoader

Quando um arquivo cvs for carregado no menu “registros” da plataforma, as ações do cliente terão acesso a ele. Você pode filtrar uma lista salva.

/*Entidade carregada:

identificação | nome

 1 | Gabriel

 2 | Dário

*/

//Use a função EntityLoader para ler as entidades carregadas

EntityLoader('nome da entidade', json => {

  // aqui você carregou seu objeto de entidade como json

  se (!json) {

    do utilizador.definir('erro','Não há dados');

    resultado.feito();

    retornar;

  }

  //Procure os dados que você precisa

  const dados = json.encontrar(linha => linha.id ===2);

  

  resultado.texto('Eu mostro o nome ->' + dados.nome);

    

});





O objeto conceptRedis

Uma instância de banco de dados está disponível para uso com ações do cliente. Você pode:

const redis =conectarRedis();

const minhaChave = redis.pegar('chave');





Suporte completo ao redis é fornecido. Confira o modo oficial:Biblioteca Redis




Resultado de uma ação do cliente

Quaisquer resultados adicionais que uma ação do cliente queira criar devem ser feitos usando o objeto de resultado.

  • Para dizer algo ao usuário usando texto:`resultado.text('uma mensagem')`
  • Para mostrar uma imagem ao usuário:`resultado.imagem ('https://example.com/image.jpg')` `
  • Para mostrar um vídeo ao usuário:`resultado.video ('https://example.com/video.mp4')`
  • Para enviar um arquivo ao usuário:`resultado.arquivo ('https://example.com/meuarquivo.doc')`
  • Para enviar áudio ao usuário:`resultado.audio ('https://example.com/audio.mp3')`
  • Também é possível enviar ao usuário um texto com botões de ação.

resultado.construtor de botões()

  .texto('selecione uma opção')

  .adicionarURLButton('clique em mim','https://www.google.com')// um botão que abrirá uma página

  .addLocationButton()//pede ao usuário sua localização usando GPSs

  .respostas rápidas()// marca o botão para que ele seja mostrado como comprimidos

  .addPhoneButton('liga para mim','+11233212312')

  .adicionarBotão('clique em mim','regra com nome XX')// quando o usuário clicar, a regra chamada XX será acionada

  .enviar();// send deve ser sempre chamado para finalizar





Vá para a outra regra

É possível executar uma regra, após completar a ação do cliente, com muita facilidade. Isso é útil porque depois de dizer algo ao usuário, alterar alguns dados ou modificar seu status, você desejará continuar o fluxo da conversa acionando uma regra.

result.gotoRule('um nome de regra');

Rescisão da ação do cliente

resultado.feito() Deve ser executado quando a ação do cliente for concluída.

É muito importante ligarresultado.feito() `em cada fluxo que possui uma ação do cliente, para finalizar sua execução

O código a seguir mostra uma ação de cliente bem implementada, com o método done() chamado em todo o fluxo.

rp({tipo:'https://script.google.com/macros/s/AKfycbyd5AcbAnWi2Yn0xhFRbyzS4qMq1VucMVgVvhul5XqS9HkAyJY/exec?tz=Ásia/Tóquio Japão',JSON:verdadeiro})

    .então(json=> {

        //dizendo a hora

        resultado.texto('A hora em Tóquio é' + json.fulldate);

        //não esqueça de finalizar a execução

        resultado.feito();

    })

    .pegar(erro => {

        resultado.texto('Problemas:' + erro +'|' +JSON.restringir(erro));

        resultado.feito();

    });





Uso de listas personalizadas (Lista JSON)

Se você quiser usar opções para uma pergunta que é configurada dinamicamente e muda ao longo do tempo, é possível adicionar um valor a uma variável especial dentro de uma ação do cliente.

No código Javascript será necessário criar uma lista de objetos, cada um com os campos “id” e “nome”. Você pode adicionar outras chaves a esses objetos, mas isso não é obrigatório. Olhe para o exemplo:

const PAÍSES = ['Argentina','Bolívia','Brasil','Chile','México','Paraguai','Peru','Uruguai'];deixar minhaJSONList = [];

minhaJSONList =PAÍSES.mapa((país, índice) => {retornar {eu ia: índice,nome: país }; });

//resultado.text(JSON.stringify(myJSONList)); user.set('países', JSON.stringify(myJSONList));

resultado.feito();


Para usar esta variável em um intent, você precisará declarar que os valores válidos para a pergunta são de uma Lista JSON customizada e referenciar a variável usada no código.

Finalmente, você deverá ver algo como:




Integrar com um serviço REST

Esses tipos de integrações geralmente são usados ​​para obter ou enviar dados por meio de uma API. Se necessário, os dados podem ser salvos no bot usando variáveis. Veja como chamar um serviço REST externo para obter ou enviar informações no exemplo a seguir.

 rp({tipo:'https://httpbin.org/anything',JSON:verdadeiro})

.então(resposta => {

   //Você pode obter/definir variáveis ​​de usuário

   do utilizador.definir('dados', resposta.dados);

  

resultado.texto('Chamada bem sucedida para serviço remoto!: ' +JSON.restringir(resposta));

resultado.feito();

}) .pegar(erro => {

resultado.texto('Problemas!:' + err.mensagem);

resultado.feito();

});





Integrar com um serviço SOAP

Esses tipos de integrações geralmente são usados ​​para obter ou enviar dados por meio de uma API. Se necessário, os dados podem ser salvos no bot usando variáveis. Veja abaixo como chamar um serviço SOAP externo para obter ou enviar informações.

const solicitação =`<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">

<soapenv:Cabeçalho/>

<soapenv:Corpo>

   <tem:itemData>

      <tem:dataOne>MeusDados</tem:strUser>

   </tem:itemData>

</soapenv:Body>

</soapenv:Envelope>`;


 rp({tipo:`https://www.custom-service.com/myService.asmx`,

     método:'PUBLICAR',

     cabeçalhos: {

         'Tipo de conteúdo':'texto/xml',

         'SOAPAção':'http://tempuri.org/MyAction',

         'Comprimento do conteúdo':Amortecedor.comprimento de byte(solicitar)

     },

     corpo: solicitar

           })

     .então(resposta => {

   

         xml2js.analisarString(resposta, (err, parsedResponse) => {

           

            //Você pode obter/definir variáveis ​​de usuário

            do utilizador.definir('dados', parsedResponse.responseResult);

           

  resultado.texto('Chamada bem sucedida para serviço remoto!: ' +JSON.restringir(parsedResposta));

            resultado.feito();

         });

     }).pegar(erro => {

         do utilizador.definir('erro',`Erro rp SOAP${err}`);

         resultado.feito();

     });






Crie uma ação do cliente com parâmetros

Pode ser criado usando a ação “Ação do Cliente com Parâmetros”:

Ou a partir do código, usando um botão que chama outra Ação do Cliente:

resultado.construtor de botões()

.addClientActionButton('Nome do botão',//Nome que aparecerá no botão

'Número de ações do cliente',//Número de ações do cliente

{

'chave':'valor',

'chave2':'outro_valor'

})//Objeto JSON com os parâmetros a serem enviados

  .construirButtons();


Para usar parâmetros enviados para Client Action:

const minhaVar = context.params.key

const minhaVar2 = context.params.key2





Crie uma biblioteca de utilitários usando ações de código

Na biblioteca de utilitários você pode criar funções que deseja reutilizar para encontrá-las rapidamente. Dessa forma você evita código duplicado e agiliza o processo.

Então eles podem chamá-lo de qualquer outro código da seguinte maneira. O nome deve ser exatamente o mesmo:

Execute uma consulta a uma API externa a partir de uma ação do cliente Botmaker

Para executar uma consulta a uma API externa a partir de uma ação do cliente Botmaker, consulte o exemplo a seguir:


Escrito por: Equipe Botmaker

Atualizado: 25/02/2024