Desenvolvimento de código na plataforma
Aqui vamos aprender como desenvolver códigos dentro da plataforma Botmaker.
Aba de código na plataforma
As ações de cliente são uteis para o desenvolvimento de intenções mais complexas ou então quando for desejado adicionar códigos arbitrários em 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 solicitar ao usuário que ele diga uma cor. Após enviada, você pode conectar a Google Translating API para fazer o bot responder a mesma cor em outra língua.

Como disparar um código

Primeiramente, você terá de criar uma Ação de Cliente na tela de Códigos. Veja abaixo:
Criar
Dê um nome à ação (não se esqueça dele), e clique em Salvar.
Na intenção em que a ação deverá ser disparada, clique em "+Ação", escolha "Client Action" e selecione o código a ser executado:
Salvar

Features de código

Suportamos Node.js v6.14.0, juntamente à lista de libraries abaixo:
1
{
2
"@turf/helpers": "^6.1.4", // accessed by "turfHelpers" var
3
"@turf/turf": "^5.1.6", // accessed by "turf" var
4
"bluebird": "^3.5.1", // accessed by "bluebird" var
5
"googleapis": "^32.0.0", // accessed by "google" var
6
"js-sha256": "^0.9.0", // accessed by "sha256" var
7
"jsonwebtoken": "^8.3.0", // accessed by "jwt" var
8
"lodash": "^4.17.10", // accessed by "_" var
9
"md5": "^2.2.1", // accessed by "md5" var
10
"moment": "^2.22.2", // accessed by "moment" var
11
"redis": "^2.8.0",
12
"request": "^2.87.0",
13
"request-promise": "^4.2.2", // accessed by "rp" var
14
"secure-random": "^1.1.1", // accessed by "securedRandom" var
15
"xml2js": "^0.4.19", // accessed by "xml2js" var
16
"aws-sdk": "^2.485.0" // accessed by "awsSdk" var
17
}
Copied!
No caso de você desejar usar outra library, escreva-nos um email para [email protected], e nosso time irá acatar a solicitação!

Input da Ação de Cliente

Quando o código for disparado, toda informação que tivermos do usuário, conversas e configurações gerais serão fornecidas. O json abaixo descreve o input que uma Cloud Function poderá usar.
1
{
2
"context": {
3
"userData": {
4
"CHAT_PLATFORM_ID": "webchat",
5
"CHAT_CHANNEL_ID": "YPDXTZKM8Y3NXLXVQYAN-webchat-null",
6
"PLATFORM_CONTACT_ID": "0BBSX05QRF-3318782UBYKNLUIRBM0KL8XMDTM",
7
"LAST_MODIFICATION": "2018-07-23T03:43:51.243Z",
8
"HAS_TALKED": true,
9
"_id_": "O0IUBYCHJYSA4PNB0QH7",
10
"LAST_SEEN": "2018-07-23T03:43:52.279Z",
11
"variables": {
12
"svar": "sdas"
13
},
14
"tags": [
15
"testtest2"
16
]
17
},
18
19
"message": {
20
"BUSINESS_ID": "YPDXTZKM8Y3NXLXVQYAN",
21
"CREATION_TIME": "2018-07-23T03:43:52.281Z",
22
"FROM_NAME": "Usuario",
23
"CUSTOMER_ID": "O0IUBYCHJYSA4PNB0QH7",
24
"_id_": "LBIJGWZN4SJADFT2HUD2",
25
"FROM": "0BBSX05QRF-3318782UBYKNLUIRBM0KL8XMDTM",
26
"OBJECT_TYPE": "Message",
27
"SESSION_CREATION_TIME": "2018-07-23T03:43:52.281Z",
28
"AUDIOS_URLS": [],
29
"MESSAGE": "test",
30
"CHAT_PLATFORM_ID": "webchat",
31
"CHAT_CHANNEL_ID": "YPDXTZKM8Y3NXLXVQYAN-webchat-null",
32
"LAST_MODIFICATION": "2018-07-23T03:43:52.281Z",
33
"TO": "me",
34
"TAGS": {}
35
},
36
37
"params": {}
38
}
39
}
Copied!

O objeto context

Um objeto somente-leitura que tem informações relevantes que uma ação de código possa requer. Ela fornece:
    userData: toda informação referente a um usuário, incluíndo tags e variáveis - se houver;
    message: informação referente à última mensagem do usuário;
    params: params opcionais que podem ser enviados por uma regra.
Por exemplo:
1
const userFirstName = context.userData.FIRST_NAME;
Copied!

O objeto user

Esse objeto permite ler e escrever variáveis que persistirão ao usuário. É um local muito útil para guardar dados relacionados ao usuário.
Tenha em mente que os valores terão de ser do tipo de string
    Para ler um valor: user.get('valueKey') => retornará uma string com valor ou nula
    Para escrever um valor: user.set('valueKey', 'value')
Por exemplo:
1
if ( !user.get('neverWasHere') )
2
user.set('neverWasHere', 'true');
Copied!
o valor neverWasHere será true para sempre, ou até quando outra ação de cliente configurar um valor diferente
Na seção de configuração de variáveis é possível alterar o tipo de variável e se será visível aos operadores.
Também é possível que a variável expire juntamente com a seção, ou seja, depois de uma hora de inatividade.

Usar entidades entityLoader

Quando for feito upload de um arquivo cvs no menu "Registros" da plataforma, as Ações de Cliente terão acesso a ele. Uma lista guardada poderá ser filtrada.
1
/*Entidad cargada:
2
id | name
3
1 | Gabriel
4
2 | Dario
5
*/
6
7
//Utilizar la función entityLoader para leer las entidades cargadas
8
entityLoader('entity name', json => {
9
10
// here you got your entity object loaded as json
11
if (!json) {
12
user.set('error', 'No hay datos');
13
result.done();
14
return;
15
}
16
17
//Buscamos el dato que necesitamos
18
const data = json.find(row => row.id === 2);
19
20
result.text('Muestro el nombre ->' + data.name);
21
22
});
Copied!

O objeto conncetRedis

Uma instância db instance está disponível para ser utilizada com Ações de Clientes. Você pode:
1
const redis = connectRedis();
2
const myKey = redis.get('key');
Copied!
Suporte completo à redis é fornecido. Dê uma olhada no node oficial: redis library.

Resultado de uma Ação de Cliente

Qualquer resultado adicional que uma Ação de Cliente queira criar, precisa ser feito usando o objeto result.
    Para dizer algo ao usuário usando texto: result.text('a message')
    Para mostrar uma imagem ao usuário: result.image('https://example.com/image.jpg')
    Para mostrar um vídeo ao usuário: result.video('https://example.com/video.mp4')
    Para enviar um arquivo ao usuário: result.image('https://example.com/myfile.doc')
    Para enviar um áudio ao usuário: result.audio('https://example.com/audio.mp3')
Também é possível enviar ao usuário um texto com botões de ação.
1
result.buttonsBuilder()
2
.text('select an option')
3
.addURLButton('click me', 'https://www.google.com') // a button that will open a page
4
.addLocationButton() // ask the user for its location using GPSs
5
.quickReplies() // marks the button so it's showed as pills
6
.addPhoneButton('call me', '+11233212312')
7
.addButton('click me', 'rule with name XX') // when user clicks it will fire the rule named XX
8
.send(); // send must by always called to finalize
Copied!

Ir à outra regra

É possível executar uma regra, após finalizada a Ação de Cliente, de forma muito fácil. É útil pois, depois de dizer algo ao usuário, alterar algum dado ou modificar o estado dele, você desejará continuar o fluxo da conversa disparando alguma regra.
1
result.gotoRule('a rule name');
Copied!

Término de Ação de Cliente

result.done() deverá ser executado quando a Ação de Cliente for finalizada.
É muito importante chamar result.done() em todo fluxo que exista uma Ação de Cliente, de modo a finalizar a execução do mesmo
O seguinte código mostra uma Ação de Cliente bem implementada, com o método done() chamado em todo o fluxo.
1
rp({uri: 'https://script.google.com/macros/s/AKfycbyd5AcbAnWi2Yn0xhFRbyzS4qMq1VucMVgVvhul5XqS9HkAyJY/exec?tz=Asia/Tokyo Japan', json: true})
2
.then(json=> {
3
// saying the time
4
result.text('The time in Tokyo is ' + json.fulldate);
5
6
// do not forget to end the execution
7
result.done();
8
})
9
.catch(error => {
10
result.text('Problems: ' + error + '|' + JSON.stringify(error));
11
result.done();
12
});
13
Copied!

Usando listas personalizadas (JSON List)

Se quiser usar opções para uma Question que sejam configuradas dinamicamente e que mudem de acordo com o tempo, é possível adicionar um valor a uma variável especial dentro de uma Client Action.
No código Javascript, precisará ser criada uma lista de objetos, cada um contendo os campos "id" e "name". Você pode adicionar outras chaves a esses objetos, mas não é obrigatório. Veja o exemplo:
1
const COUNTRIES = ['Argentina', 'Bolivia', 'Brazil', 'Chile', 'México', 'Paraguay', 'Perú', 'Uruguay']; let myJSONList = [];
2
3
myJSONList = COUNTRIES.map((country, index) => { return { id: index, name: country }; });
4
5
//result.text(JSON.stringify(myJSONList)); user.set('countries', JSON.stringify(myJSONList));
6
7
result.done();
Copied!
Para usar essa variável em uma intenção, será necessário declarar que os valores válidos para a Question são de uma Custom JSON List e referenciar a variável utilizada no código.
Finalmente, devemos ver algo como:

Criar uma Client Action com parâmetros

Pode ser criada usando a ação "Client Action with params":
Ou desde um código, usando um botão que chama outra Client Action:
1
result.buttonsBuilder()
2
.addClientActionButton('Nombre del boton', //Nombre que aparecerá en el boton
3
'Nombre de la Client Action', //Nombre de la client action
4
{
5
'key': 'valor',
6
'key2': 'otro_valor'
7
}) //Json Object con los parametros que se enviará
8
.buildButtons();
Copied!
Para usar os parâmetros enviadas à Client Action:
1
//En la client action destino
2
const myVar = context.params.key
3
const myVar2 = context.params.key2
Copied!
Last modified 1yr ago