cosmobots
Search…
Webview
Para enriquecer a interação com o usuário usamos a Webview, que fica responsável por pegar ou mostrar informações de forma mais eficiente durante o fluxo da conversa. A ideia aqui é que o usuário tenha a experiência de estar numa conversa com o bot e ao mesmo tempo usando recursos de um aplicativo web ou mobile.
A Webview pode ser acionada durante o fluxo da conversa apenas através do botão de uma mensagem do tipo cartão.
Estamos disponibilizando no momento 3 tipos de Webviews: Campos de Formulário, Avançado e URL Externa.

Campos de Formulários

Aqui temos a opção de apresentar um formulário com campos do objeto Usuário para serem preenchidos. Todo o comportamento é controlado pela plataforma CosmoBots.
A Altura da Webview define qual a porcentagem da tela será ocupada pela Webview. É interessante utilizar uma altura que não cubra 100% da tela, assim o usuário perceberá que ainda está no chatbot.
Abaixo segue um exemplo de como fica esta Webview para o usuário:
Após a conclusão da Webview todos os dados do formulário serão salvos na base de dados do CosmoBots.

Avançado

Este tipo de Webview possui mais recursos. E se baseia em diferentes layouts para apresentar a informação ao usuário.
Os layouts precisam ser preenchidos e colocados na variável chamada webview. Abaixo seguem os atributos disponíveis para todos os layouts:
Atributo
Tipo
Descrição
id
String
Identificador do layout. Pode ser definido qualquer String. Obrigatório.
header
String
Cabeçalho do layout. Obrigatório.
buttons
Array
Conjunto de botões para navegação que aparecem ao final do layout. Obrigatório.
Os campos são:
label: rótulo do botão
next_id: caso esteja dentro de um Conjunto de Layouts, define aqui o id do próximo layout
go_back: caso esteja dentro de um Conjunto de Layouts, define se a ação do botão é voltar ao layout anterior
required: indica se é necessário selecionar algum item antes de seguir adiante
save_record: indica se precisa salvar o registro dos dados do layout atual.
options
Object (JSON)
Opções adicionais do layout:
min_select: mínimo de itens a serem selecionados (Número)
max_select: máximo de itens a serem selecionados (Número)
min_item_quantity: quantidade mínima de cada item (Número)
max_item_quantity: quantidade máxima de cada item (Número)
show_limit_select: mostra mensagem sobre o limite de itens a serem selecionados (Booleano)
show_limit_quantity: mostra mensagem sobre o limite da quantidade de cada item a serem selecionados(Booleano)
E agora vamos aos detalhes de cada layout, contendo exemplos de uso:

Lista e Seleciona Item

Abaixo segue os atributos adicionais para este tipo de layout:
Atributo
Tipo
Descrição
type
String
Tipo do layout: select. Obrigatório.
data
Array
Dados que serão usados para montar a lista. Obrigatório.
selected
Array
Itens já selecionados.
response
String
Nome da variável que receberá a resposta do usuário. Exemplo: Caso seja 'itens', ela poderá ser acessada dentro do contexto, usando context.itens. Obrigatório.
fields
Object (JSON)
Nome dos campos usados para mostrar informações sobre cada item. Os campos devem ser valores presentes nos itens exibidos. Obrigatório. As opções são: title, subtitle, price, currency.
Aqui temos um exemplo de como preencher este layout:
1
webview = [{
2
id: 'escolhe_item',
3
type: 'select',
4
header: 'Item',
5
data: itens,
6
selected: itens,
7
response: 'itens',
8
fields: {
9
title: 'nome_produto',
10
subtitle: 'descricao_produto',
11
},
12
options: {
13
show_limit_select: false,
14
min_select: 1,
15
max_select: 1,
16
},
17
buttons: [{
18
label: 'Voltar',
19
next_id: 'total',
20
go_back: true,
21
},{
22
label: 'Confirmar',
23
required: true
24
}]
25
}];
Copied!

Lista e Seleciona Quantidade do Item

Segue os atributos adicionais para este tipo de layout:
Atributo
Tipo
Descrição
type
String
Tipo do layout: select_product_quantity. Obrigatório.
data
Array
Dados que serão usados para montar a lista. Obrigatório.
selected
Array
Itens já selecionados.
response
String
Nome da variável que terá os itens com as quantidades selecionadas após a conclusão da Webview. Obrigatório.
fields
Object (JSON)
Nome dos campos usados para mostrar informações sobre cada item. Obrigatório. As opções são: title, subtitle, quantity, price, currency.
Aqui temos um exemplo de como preencher este layout:
1
webview = [{
2
type: 'select_product_quantity',
3
header: cabecalho,
4
data: lista_produtos,
5
selected: context['itens_pedido'] | [],
6
response: 'itens_pedido',
7
fields: {
8
title: 'nome',
9
subtitle: 'descricao',
10
image_url: 'url_da_imagem',
11
quantity: 'quantidade',
12
price: 'valor',
13
currency: 'BRL',
14
},
15
options: {
16
show_limit_select: false,
17
min_select: 1,
18
max_select: 2,
19
show_limit_quantity: false,
20
min_item_quantity: 1,
21
max_item_quantity: 5,
22
},
23
buttons: [{
24
label: 'Confirmar',
25
required: true
26
}]
27
}];
Copied!

Lista e Seleciona Endereço

Segue os atributos adicionais para este tipo de layout:
Atributo
Tipo
Descrição
type
String
Tipo do layout: select_address. Obrigatório.
data
Array
Dados que serão usados para montar a lista. Obrigatório.
selected
Array
Registro de endereço já selecionado.
response
String
Nome da variável que terá o registro de endereço selecionado após a conclusão da Webview. Obrigatório.
fields
Object (JSON)
Nome dos campos usados para mostrar informações sobre cada registro de endereço. Obrigatório. As opções são: street, number, complement, neighborhood, city, state, zipcode.
Aqui temos um exemplo de como preencher este layout:
1
webview = [{
2
id: 'escolhe_endereco',
3
type: 'select_address',
4
header: '2. Escolhe Endereço',
5
data: enderecos,
6
selected: context ? context['endereco'] : [],
7
response: 'endereco',
8
fields: {
9
street: 'rua',
10
number: 'numero',
11
complement: 'complemento',
12
neighborhood: 'bairro',
13
city: 'cidade',
14
state: 'estado',
15
zipcode: 'cep',
16
},
17
options: {
18
show_limit_select: false,
19
min_select: 1,
20
max_select: 1,
21
},
22
buttons: [{
23
label: 'Voltar',
24
next_id: 'itens_pedido',
25
go_back: true
26
},
27
{
28
label: 'Novo Endereço',
29
next_id: 'novo_endereco'
30
},{
31
label: 'Próximo',
32
next_id: 'total',
33
required: true
34
}]
35
}];
Copied!

Lista Pedidos

Segue os atributos adicionais para este tipo de layout:
Atributo
Tipo
Descrição
type
String
Tipo do layout: list_orders. Obrigatório.
data
Array
Dados que serão usados para montar a lista. Obrigatório.
fields
Object (JSON)
Nome dos campos usados para mostrar informações sobre cada item da lista. Obrigatório. As opções são: order_number, status, confirmation_date, payment_method, subtotal, freight, total, currency.
Aqui temos um exemplo de como preencher este layout:
1
webview = [{
2
type: 'list_orders',
3
header: 'Meus Pedidos',
4
data: pedido__s,
5
fields: {
6
order_number: 'codigo',
7
status: 'status',
8
confirmation_date: 'data_confirmacao',
9
payment_method: 'forma_de_pagamento',
10
subtotal: 'valor_subtotal',
11
freight: 'valor_frete',
12
total: 'valor_total',
13
currency: 'BRL'
14
},
15
buttons: [{
16
label: 'Ok',
17
}]
18
}];
Copied!

Mostra Total

Segue os atributos adicionais para este tipo de layout:
Atributo
Tipo
Descrição
type
String
Tipo do layout: show_total. Obrigatório.
response
String
Nome da variável que terá as informações sobre os valores totais após a conclusão da Webview. Obrigatório.
fields
Object (JSON)
Nome dos campos dos itens selecionados que serão usados para calcular os valores totais. Obrigatório. As opções são: freight, price, quantity, currency.
Aqui temos um exemplo de como preencher este layout:
1
webview = [{
2
id: 'total',
3
type: 'show_total',
4
response: 'total',
5
header: '3. Total',
6
fields: {
7
freight: 15,
8
price: 'valor',
9
quantity: 'quantidade',
10
currency: 'BRL',
11
},
12
buttons: [{
13
label: 'Voltar',
14
next_id: 'escolhe_endereco',
15
go_back: true
16
},
17
{
18
label: 'Próximo',
19
next_id: 'escolhe_pagamento',
20
}]
21
}];
Copied!

Novo Registro

Segue os atributos adicionais para este tipo de layout:
Atributo
Tipo
Descrição
type
String
Tipo do layout: new_record. Obrigatório.
response
String
Nome da variável que terá as informações do novo registro após a conclusão da Webview. Obrigatório.
fields
Object (JSON)
Nome dos campos do novo registro a ser criado. Obrigatório. As opções dependem quais campos você deseja que o usuário preencha. Como exemplo de criar um novo endereço, os campos seriam: street, number, complement, neighborhood, city, state, zipcode.
Aqui temos um exemplo de como preencher este layout:
1
webview = [{
2
id: 'novo_endereco',
3
type: 'new_record',
4
object: 'endereco',
5
header: 'Novo Endereço',
6
response: 'endereco',
7
fields: {
8
street: 'rua',
9
number: 'numero',
10
complement: 'complemento',
11
neighborhood: 'bairro',
12
city: 'cidade',
13
state: 'estado',
14
zipcode: 'cep',
15
},
16
buttons: [{
17
label: 'Voltar',
18
next_id: 'escolhe_endereco',
19
go_back: true
20
},{
21
label: 'Próximo',
22
next_id: 'total',
23
save_record: true,
24
required: true
25
}]
26
}];
Copied!

Conjunto de Layouts

E finalmente, temos a opção de definir um Conjunto de Layouts. Seria como um passo a passo que o usuário precisa seguir para concluir a Webview. Para isso basta adicionar cada layout dentro da variável webview a ordem que você deseja que as mesmas aparecem para o usuário.
Segue um exemplo, onde o cenário aqui seria para finalizar uma compra:
1
webview = [{
2
id: 'itens_pedido',
3
type: 'select_product_quantity',
4
header: '1. Itens do Pedido',
5
data: context['itens_pedido'] | [],
6
selected: context['itens_pedido'] | [],
7
response: 'itens_pedido',
8
fields: {
9
title: 'nome',
10
subtitle: 'descricao',
11
image_url: 'url_da_imagem',
12
quantity: 'quantidade',
13
price: 'valor',
14
currency: 'BRL',
15
},
16
options: {
17
show_limit_select: false,
18
min_select: 1,
19
max_select: 10,
20
show_limit_quantity: false,
21
min_item_quantity: 0,
22
max_item_quantity: 5,
23
},
24
buttons: [{
25
label: 'Próximo',
26
next_id: 'escolhe_endereco',
27
required: true
28
}]
29
},
30
{
31
id: 'escolhe_endereco',
32
type: 'select_address',
33
header: '2. Escolhe Endereço',
34
data: enderecos,
35
selected: context['endereco'] | [],
36
response: 'endereco',
37
fields: {
38
street: 'rua',
39
number: 'numero',
40
complement: 'complemento',
41
neighborhood: 'bairro',
42
city: 'cidade',
43
state: 'estado',
44
zipcode: 'cep',
45
},
46
options: {
47
show_limit_select: false,
48
min_select: 1,
49
max_select: 1,
50
},
51
buttons: [{
52
label: 'Voltar',
53
next_id: 'itens_pedido',
54
go_back: true
55
},
56
{
57
label: 'Novo Endereço',
58
next_id: 'novo_endereco'
59
},{
60
label: 'Próximo',
61
next_id: 'total',
62
required: true
63
}]
64
},
65
{
66
id: 'novo_endereco',
67
type: 'new_record',
68
object: 'endereco',
69
header: '2. Novo Endereço',
70
response: 'endereco',
71
fields: {
72
street: 'rua',
73
number: 'numero',
74
complement: 'complemento',
75
neighborhood: 'bairro',
76
city: 'cidade',
77
state: 'estado',
78
zipcode: 'cep',
79
},
80
options: {
81
},
82
buttons: [{
83
label: 'Voltar',
84
next_id: 'escolhe_endereco',
85
go_back: true
86
},{
87
label: 'Próximo',
88
next_id: 'total',
89
save_record: true,
90
required: true
91
}]
92
},
93
{
94
id: 'total',
95
type: 'show_total',
96
response: 'total',
97
header: '3. Total',
98
fields: {
99
freight: 15,
100
price: 'valor',
101
quantity: 'quantidade',
102
currency: 'BRL',
103
},
104
buttons: [{
105
label: 'Voltar',
106
next_id: 'escolhe_endereco',
107
go_back: true
108
},
109
{
110
label: 'Próximo',
111
next_id: 'escolhe_pagamento',
112
}]
113
},
114
{
115
id: 'escolhe_pagamento',
116
type: 'select',
117
header: '4. Pagamento',
118
data: forma_de_pagamentos,
119
selected: context['pagamento'] | [],
120
response: 'pagamento',
121
fields: {
122
title: 'label',
123
},
124
options: {
125
show_limit_select: false,
126
min_select: 1,
127
max_select: 1,
128
},
129
buttons: [{
130
label: 'Voltar',
131
next_id: 'total',
132
go_back: true,
133
},{
134
label: 'Confirmar',
135
required: true
136
}]
137
},
138
];
Copied!

URL Externa

Existe a opção também de a Webview ter sua origem em alguma URL externa ao CosmoBots. Portanto o controle não estaria na plataforma do CosmoBots mas poderia usar uma etapa seguinte a esta para, por exemplo, chamar uma API para consultar ou atualizar informações do contexto da conversa.
Last modified 3mo ago