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.

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.

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:

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:
webview = [{
id: 'escolhe_item',
type: 'select',
header: 'Item',
data: itens,
selected: itens,
response: 'itens',
fields: {
title: 'nome_produto',
subtitle: 'descricao_produto',
},
options: {
show_limit_select: false,
min_select: 1,
max_select: 1,
},
buttons: [{
label: 'Voltar',
next_id: 'total',
go_back: true,
},{
label: 'Confirmar',
required: true
}]
}];

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:
webview = [{
type: 'select_product_quantity',
header: cabecalho,
data: lista_produtos,
selected: context['itens_pedido'] | [],
response: 'itens_pedido',
fields: {
title: 'nome',
subtitle: 'descricao',
image_url: 'url_da_imagem',
quantity: 'quantidade',
price: 'valor',
currency: 'BRL',
},
options: {
show_limit_select: false,
min_select: 1,
max_select: 2,
show_limit_quantity: false,
min_item_quantity: 1,
max_item_quantity: 5,
},
buttons: [{
label: 'Confirmar',
required: true
}]
}];

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:
webview = [{
id: 'escolhe_endereco',
type: 'select_address',
header: '2. Escolhe Endereço',
data: enderecos,
selected: context ? context['endereco'] : [],
response: 'endereco',
fields: {
street: 'rua',
number: 'numero',
complement: 'complemento',
neighborhood: 'bairro',
city: 'cidade',
state: 'estado',
zipcode: 'cep',
},
options: {
show_limit_select: false,
min_select: 1,
max_select: 1,
},
buttons: [{
label: 'Voltar',
next_id: 'itens_pedido',
go_back: true
},
{
label: 'Novo Endereço',
next_id: 'novo_endereco'
},{
label: 'Próximo',
next_id: 'total',
required: true
}]
}];

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:
webview = [{
type: 'list_orders',
header: 'Meus Pedidos',
data: pedido__s,
fields: {
order_number: 'codigo',
status: 'status',
confirmation_date: 'data_confirmacao',
payment_method: 'forma_de_pagamento',
subtotal: 'valor_subtotal',
freight: 'valor_frete',
total: 'valor_total',
currency: 'BRL'
},
buttons: [{
label: 'Ok',
}]
}];

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:
webview = [{
id: 'total',
type: 'show_total',
response: 'total',
header: '3. Total',
fields: {
freight: 15,
price: 'valor',
quantity: 'quantidade',
currency: 'BRL',
},
buttons: [{
label: 'Voltar',
next_id: 'escolhe_endereco',
go_back: true
},
{
label: 'Próximo',
next_id: 'escolhe_pagamento',
}]
}];

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:
webview = [{
id: 'novo_endereco',
type: 'new_record',
object: 'endereco',
header: 'Novo Endereço',
response: 'endereco',
fields: {
street: 'rua',
number: 'numero',
complement: 'complemento',
neighborhood: 'bairro',
city: 'cidade',
state: 'estado',
zipcode: 'cep',
},
buttons: [{
label: 'Voltar',
next_id: 'escolhe_endereco',
go_back: true
},{
label: 'Próximo',
next_id: 'total',
save_record: true,
required: true
}]
}];

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:
webview = [{
id: 'itens_pedido',
type: 'select_product_quantity',
header: '1. Itens do Pedido',
data: context['itens_pedido'] | [],
selected: context['itens_pedido'] | [],
response: 'itens_pedido',
fields: {
title: 'nome',
subtitle: 'descricao',
image_url: 'url_da_imagem',
quantity: 'quantidade',
price: 'valor',
currency: 'BRL',
},
options: {
show_limit_select: false,
min_select: 1,
max_select: 10,
show_limit_quantity: false,
min_item_quantity: 0,
max_item_quantity: 5,
},
buttons: [{
label: 'Próximo',
next_id: 'escolhe_endereco',
required: true
}]
},
{
id: 'escolhe_endereco',
type: 'select_address',
header: '2. Escolhe Endereço',
data: enderecos,
selected: context['endereco'] | [],
response: 'endereco',
fields: {
street: 'rua',
number: 'numero',
complement: 'complemento',
neighborhood: 'bairro',
city: 'cidade',
state: 'estado',
zipcode: 'cep',
},
options: {
show_limit_select: false,
min_select: 1,
max_select: 1,
},
buttons: [{
label: 'Voltar',
next_id: 'itens_pedido',
go_back: true
},
{
label: 'Novo Endereço',
next_id: 'novo_endereco'
},{
label: 'Próximo',
next_id: 'total',
required: true
}]
},
{
id: 'novo_endereco',
type: 'new_record',
object: 'endereco',
header: '2. Novo Endereço',
response: 'endereco',
fields: {
street: 'rua',
number: 'numero',
complement: 'complemento',
neighborhood: 'bairro',
city: 'cidade',
state: 'estado',
zipcode: 'cep',
},
options: {
},
buttons: [{
label: 'Voltar',
next_id: 'escolhe_endereco',
go_back: true
},{
label: 'Próximo',
next_id: 'total',
save_record: true,
required: true
}]
},
{
id: 'total',
type: 'show_total',
response: 'total',
header: '3. Total',
fields: {
freight: 15,
price: 'valor',
quantity: 'quantidade',
currency: 'BRL',
},
buttons: [{
label: 'Voltar',
next_id: 'escolhe_endereco',
go_back: true
},
{
label: 'Próximo',
next_id: 'escolhe_pagamento',
}]
},
{
id: 'escolhe_pagamento',
type: 'select',
header: '4. Pagamento',
data: forma_de_pagamentos,
selected: context['pagamento'] | [],
response: 'pagamento',
fields: {
title: 'label',
},
options: {
show_limit_select: false,
min_select: 1,
max_select: 1,
},
buttons: [{
label: 'Voltar',
next_id: 'total',
go_back: true,
},{
label: 'Confirmar',
required: true
}]
},
];

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.
Copy link
On this page
Campos de Formulários
Avançado
Lista e Seleciona Item
Lista e Seleciona Quantidade do Item
Lista e Seleciona Endereço
Lista Pedidos
Mostra Total
Novo Registro
Conjunto de Layouts
URL Externa