Aqui você aprenderá como criar código dentro da plataforma Botmaker.
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.
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:
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.
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": {}
}
}
Um objeto somente leitura que possui informações relevantes que podem exigir ação de código. Fornece:
Por exemplo:
const userFirstName = context.userData.FIRST_NAME;
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
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.
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);
});
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
Quaisquer resultados adicionais que uma ação do cliente queira criar devem ser feitos usando o objeto de resultado.
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
É 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');
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();
});
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:
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();
});
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();
});
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();
const minhaVar = context.params.key
const minhaVar2 = context.params.key2
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:
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