Pular para o conteúdo principal

Especificação Detalhada

Nesta seção, estão detalhadas algumas estruturas de dados e formas de retorno, para que possam ser construídos atendimentos mais complexos.

Objeto contexto

O objeto contexto disponibiliza algumas informações sobre o usuário que está realizando o atendimento, bem como as variáveis que foram solicitadas para o usuário ou foram definidas pelo desenvolvedor durante o atendimento. O desenvolvedor não modifica diretamente o contexto. O retorno da crítica (com a lista de variáveis para solicitar) e as entradas do usuário que alteram o estado do contexto.

Tabela 3: Atributos do Contexto

AtributoTipoDescriçãoObrigatórioValor padrão
usuarioMapa (Usuário ver “tabela 4 atributos do usuário”)Usuário do atendimento, com algumas informações adicionais--
licencaMapa (Licença ver “tabela 4B atributos da licença”)Informações da licença, entidade, database, município, etc.--
nome_variavelTipo da variável sendo acessadaPermite acessar o valor de uma variável dentro do contexto. Por exemplo: a variável imovelSelecionado, pode ser acessada com a expressão: contexto.imovelSelecionado
okbooleanÉ um atributo facilitador no momento de verificar se todas as variáveis já foram preenchidas ou é necessário retornar o menu de atendimento.--
@devbooleanSe o usuário está com o modo dev habilitado. Exemplo: contexto['@dev']--

Tabela 4: Atributos do Usuário

AtributoTipoDescrição
usuarioStringid do usuário.
nomeStringPrimeiro nome do usuário.
nomeCompletoStringNome completo do usuário.
cpfStringCPF do usuário (caso verificado ou null quando não verificado)
emailStringE-mail principal do usuário.
celularStringCelular do usuário (com DDD). Pode estar nulo, caso o usuário remova o celular do seu cadastro, ou opte por não cadastrar.
generoStringGênero do usuário (M ou F).

Tabela 4B: Atributos da Licença

AtributoTipoDescrição
licenca.entidade.idintCódigo da Entidade
licenca.entidade.databaseintCódigo do database
licenca.entidade.nomeStringNome da Entidade
licenca.entidade.tipoString(O => oficial, D => demonstracao, C => conversao, P => parceiro ou null)
licenca.entidade.oficialbooleanAtalho para facilitar o "if" se a entidade é do tipo O (Oficial)
licenca.municipio.idintId do município no cadastro da Betha
licenca.municipio.ibgeintCódigo do IBGE do município atual no cadastro da Betha
licenca.municipio.nomeStringNome do município atual no cadastro da Betha
licenca.municipio.ufStringSigla do UF do município atual no cadastro da Betha (exemplo: "SC")

Exemplo de uso:


// Condição baseada se a entidade é oficial
if (contexto.licenca.entidade.oficial) {
// ...
}

// Acessando o código do IBGE, talvez para integrações externas
parametros_chamada_api_governo_federal = [
codigo_municipio: contexto.licenca.municipio.ibge
]

Modo desenvolvedor

O modo desenvolvedor permite que sejam visualizadas mensagens de erro detalhadas, que estão suprimidas por padrão. A premissa da Beth é fornecer um atendimento assertivo para o cidadão, por isso, o cidadão comum não deve se deparar com mensagens como “Tempo limite de operação atingido”, “Erro interno do servidor”, ou o famoso “Nullpointer exception”. No caso de um erro ocorrer, existe um tratamento padrão, que informa que ocorreu um problema durante o atendimento, recomenda que o usuário entre em contato com o município em caso de urgência e encerra o atendimento.

Considere o seguinte cenário para ver o modo desenvolvedor em prática:

  • Existe um atendimento na Beth que utiliza o relatório ”Emissão de Guia de IPTU”. Este atendimento está funcionando normalmente e inicialmente passa dois parâmetros obrigatórios para a extensão. Porém, alguém altera essa extensão, provavelmente numa sexta feira, adicionando um parâmetro obrigatório que não está sendo coletado/passado pela Beth no momento de invocar a extensão.

  • O cidadão verá uma mensagem dizendo:

    • Desculpe, mas ocorreu um erro enquanto realizava seu atendimento. Pedimos que tente novamente mais tarde, ou em caso de urgência, entre em contato com seu município.
  • Se o modo desenvolvedor estiver ativado:

    • Desculpe, mas nem todos os parâmetros obrigatórios para executar a extensão foram preenchidos: nome_parametro_ausente.

Como ativar o modo desenvolvedor:

  • Após o login (caso esteja em um canal interno, como site da Betha/chat no site do município), mande a mensagem:
    • @dev
  • Caso você esteja em um canal externo, onde o contato é o telefone (WhatsApp, Telegram, etc.), você pode mandar a mensagem em qualquer momento após iniciar a conversa.

Figura 4: Habilitando modo desenvolvedor

Beth

Mais detalhes sobre o modo desenvolvedor
  • A Beth armazena esta opção nas preferências do seu usuário;
  • Se você desenvolve scripts para a Beth ou dá suporte para ferramenta, recomenda-se que você mantenha ele ativado;
  • Para desativá-lo, e voltar a ver as mensagens como um cidadão comum, basta mandar a mensagem @devoff;

Comportamentos e características gerais

Aqui estão descritos comportamentos que não necessariamente tem relação com o desenvolvedor, mas são pertinentes para que ele entenda o funcionamento da Beth, principalmente pequenas diferenças que ele encontre nos fluxos de conversação conforme ele realize múltiplos atendimentos.

A Beth possui diferentes mensagens de boas vindas: Existem variações nas mensagens de boas vindas para proporcionar uma experiência agradável. A tendência é que essas mensagens sejam expandidas nas próximas versões. Para alguns canais, como o WhatsApp, é interessante que o usuário saiba o município que ele está conversando. Por isso, a Beth pode avisar no começo da conversa, qual o município atualmente selecionado (ver item: A Beth lembra o último município do atendimento para canais externos).

O atendimento não pode ficar inativo por mais de 15 minutos: Caso o cidadão ficar mais de 15 minutos sem mandar uma mensagem ou se as extensões/retorno da Beth demorarem mais que 15 minutos, a conversa será encerrada. Este tempo é reiniciado toda vez que há uma interação.

A pesquisa de satisfação sempre é exibida no final de um atendimento: No caso do usuário concluir um atendimento com sucesso ou abandonar o atendimento, é exibida uma pergunta se ele deseja avaliar o atendimento. Caso ele não responda, é seguida a regra de inatividade do atendimento. A Beth simplesmente irá encerrar o atendimento com uma mensagem padrão.

Porque a pesquisa de satisfação é exibida quando o usuário abandona um atendimento? Se o usuário optar por abandonar o atendimento, digitando sair, encerrar, etc., ainda assim, ele será questionado se deseja responder a pesquisa de satisfação. Isto é para que ele possa relatar dificuldades/insatisfações com o atendimento que ele estava procurando. Futuramente, estes feedbacks estarão disponíveis dentro da plataforma para análise e o otimização, por parte dos desenvolvedores.

Como a Beth se despede de um atendimento? Quando um atendimento é encerrado pela Beth, por inatividade ou quando o usuário responde a pesquisa de satisfação, a Beth se despede com uma mensagem amigável, podendo referênciar o período do dia, dia da semana, ou data especial. Nos casos onde o atendimento é encerrado pelo desenvolvedor ou em caso de erro, a mensagem de encerramento será uma mensagem padrão da Beth orientando o usuário a tentar novamente, ou a mensagem especificada pelo desenvolvedor. Nestes casos, não é feita a despedida em tom amistoso para evitar a impaciência com usuário ou tirar o foco da mensagem/causa do problema.

A Beth lembra o último município do atendimento para canais externos: Normalmente, o cidadão irá utilizar sempre um único município. Por isso, quando o cidadão completa um atendimento com sucesso, dentro de um canal externo, por padrão, na próxima vez que ele entrar em contato, será exibido o menu de serviços daquele município. O cidadão tem a opção de voltar para a seleção de município e trocar.

Existem mensagens para interações não previstas: Se o usuário mandar uma mensagem enquanto a Beth estiver processando alguma etapa do atendimento (exemplo: solicitando a execução do relatório, consultando, criando usuário, etc.), a Beth irá mandar uma mensagem solicitando que o usuário aguarde o retorno do processamento. Algumas etapas específicas podem apresentar mensagens personalizadas. Por exemplo: enquanto a Beth estiver aguardando o retorno da verificação de identidade via Pix, ela irá dizer que ainda não recebeu o retorno da instituição bancária e que assim que tiver um retorno, irá avisar o usuário.

A conversa pode ser encerrada por questões de segurança: Algumas operações que exigem código de confirmação como o login, verificação de e-mail, telefone, são restritas a 3 tentativas. Caso o usuário entre com os códigos inválidos, a conversa é encerrada. Isto também pode ocorrer durante o atendimento para evitar SPAM ou ataques. Por exemplo, se no atendimento solicitada uma data, após um certo número de tentativas incorretas (sempre no mínimo 3, podendo variar de usuário para usuário), o atendimento é encerrado.

São feitas múltiplas tentativas nos casos de integrações: A Beth foi pensada com o objetivo em dar uma resposta rápida para o cidadão, utilizando de vários mecanismos de otimização. Porém, ela depende de vários componentes externos, como autenticação, extensões, fontes de dados, e até mesmo provedores externos para alguns canais, como o WhatsApp. Eventualmente, você pode se deparar com um aumento no tempo de resposta, às vezes, um processo que normalmente é “instantâneo”, pode levar alguns segundos. Isto pode ser causado pela política de retentativas que está implementada em todas as integrações realizadas pela Beth. Quando é feita uma chamada para uma API, em caso de erro, normalmente são feitas ao menos 3 tentativas, antes de algum erro ser retornado para o usuário:

  • Fontes de Dados
  • Carregar usuário

A Beth depende de provedores de mensageria para alguns canais externos como WhatsApp: Em algumas plataformas como o WhatsApp, a dependência com outros serviços faz com que o tempo de resposta possa variar. Normalmente, é observado um tempo entre 2 ou 3 segundos para receber um retorno. Devido a política de retentativas ou ainda por problemas do próprio provedor, em casos raros, pode acontecer da ordem de uma mensagem variar ou ela ser entregue mais de uma vez. Se você experienciar este problema de forma recorrente, entre em contato para que possamos verificar essa integração.

A Beth tentará atualizar o telefone do usuário em alguns canais: Supondo que o usuário entre em contato com a Beth por um número do WhatsApp que não está vinculado ao seu usuário. Após o login OTP (código de confirmação por e-mail), a Beth irá mandar um SMS para o usuário para que ele confirme o seu novo telefone. Caso ele não queira atualizar, basta que ele digite pular ou palavra similar. Em caso de erro no envio de código ou ainda, caso o número de tentativas seja excedido, o atendimento prosseguirá com uma mensagem amistosa.

A Beth deixará o usuário se cadastrar mesmo sem conrfirmar o telefone: Relacionado com o item anterior, caso o usuário esteja com dificuldades para receber o código SMS (provedores de SMS são conhecidos por terem problemas ou demora em algumas regiões e/ou operadoras), o usuário pode prosseguir para verificação de identidade. Ele poderá atualizar seu telefone quando realizar um acesso por um contato externo que tenha o telefone como contato (exemplo: WhatsApp, Telegram). A atualização do telefone somente ocorrerá após o login OTP. Além disso, ele também pode utilizar a central do usuário.

Variáveis e Tipos

A Beth permite que sejam solicitadas diversos tipos de variáveis para o usuário. Estes tipos possuem validadores específicos que são abstraídos para o desenvolvedor ao codificar o atendimento. Por exemplo: ao especificar uma variável do tipo CPF, a Beth irá validar de forma automática as entradas do usuário, antes de considerar essa variável como preenchida, informando mensagens corretivas para o usuário e solicitando novamente o valor correto.

Para complementar os validadores, existe um outro recurso chamado “Restrições de Variável”, que permite ao desenvolvedor especificar algumas regras pré-definidas que a Beth irá utilizar para validar automaticamente e solicitar ao usuário. Por exemplo: é possível definir o tamanho máximo de caracteres para uma variável do tipo texto ou uma data mínima para uma variável do tipo data.

Mais detalhes sobre o tipo das variáveis

O tipo de uma variável também pode ser entendido de forma automática em algumas situações:

  • Caso não seja especificado um tipo, a variável terá o tipo texto;
  • Caso não seja especificado um tipo, mas existam uma ou mais opções, a variável será entendida como lista;
Rótulos automáticos e mensagem para o usuário

O texto demonstrado para o usuário ao solicitar uma variável pode ser gerado de forma automática, sem a necessidade de especificar o atributo rótulo. Para isso, basta especificar o nome da variável. Por exemplo: uma variável do tipo texto, chamada “nome”. A Beth irá solicitar ao usuário mostrando a seguinte mensagem: “Nome:”.

Para uma variável do tipo lista, supondo que a variável se chame “escola” e seja do tipo lista, a mensagem que a Beth irá montar será: “Selecione uma das opções de Escola:”

Porém, é comum que as variáveis tenham nomes compostos e acentos. Por isso, pode ser especificado o atributo rótulo, que funciona como um rótulo em uma tela de cadastro, podendo conter espaços, acentuação e formatação. Por exemplo, no lugar de “escola”, a variável normalmente se chamaria “estabelecimentoEnsino” e poderia ter o atributo rótulo com o seguinte texto “Estabelecimento de Ensino”. Logo, o usuário veria o seguinte texto: “Selecione uma das opções de Estabelecimento de Ensino:”.

Tabela 5: Atributos de variável

AtributoTipoDescrição
nomeStringNome da variável, é obrigatório, não pode conter espaços/acentos. Este atributo também será o nome pelo qual o valor da variável pode ser acessada dentro do contexto do script.
tipoString (Ver: Tipos de Variáveis)Especificação de um dos tipos de variável. Não é obrigatório e por padrão o valor é “texto”.
restricoesMapa do Tipo Restrição de Variável (Ver: Restrições de Variáveis)Permite especificar um conjunto de regras para validação automática.
rotuloStringPermite definir um rótulo que será utilizado em conjunto para montar a mensagem ao solicitar a variável para o usuário.
valorStringPermite definir um valor fixo para uma variável. Por exemplo: pegar o ano corrente para popular a variável “anoExercicio”. Não é obrigatório, mas caso específicado, a variável é entendida como uma variável interna, que não é solicitada ao usuário, nem é demonstrada no comprovante de atendimento.

Tipos disponíveis

Abaixo, estão os tipos de variáveis disponíveis. Para simplificar a escrita das críticas, existem múltiplas sintaxes para utilizar cada tipo. Recomenda-se que seja adotado um padrão de uso dentro do script, para evitar confusões.

Lembre-se!

💡 Alguns canais, como o WhatsApp, possuem limitação máxima no número de caracteres que podem ser enviados em uma mensagem. Por isso, dentro destes canais, o valor máximo de uma variável do tipo texto será limitado automaticamente à 1.600 caracteres, mesmo que seja definido um valor maior. Este limite afetará somente as plataformas que por ventura sejam mais restritivas.

💡 Os tipos de dados não são case sensitive. Por exemplo, as variações “LISTA” ou “LiStA” correspondem ao tipo de dado “lista”.

💡 Os dados são validados com foco no tipo de dado, não em relação ao formato de entrada do usuário. Os dados serão validados e dentro do script, o valor estará acessível em formato bruto e padrão ao tipo. Por exemplo, para o tipo de dado CEP, o usuário pode digitar de diversas formas, como “88813-700”, “88813700”, “88813 700” ou ele pode escrever “meu cep é 88813 700”. Independente da variação, dentro da crítica, o valor convertido e acessível no contexto será “88813700”.

Legenda dos tipos:

  • Variações aceitas: palavras aceitas na hora de especificar o atributo “tipo”.
  • Validações padrões: validações que serão feitas por padrão para o tipo específico, podendo ou não serem customizadas.

Texto

O tipo texto é o tipo padrão de uma variável.

Variações aceitas:

  • texto
  • text
  • caractere
  • string

Validações padrões:

  • Mínimo de 1 caractere;
  • Máximo de ilimitado;

Lista

O tipo lista exibe uma lista de opções enumeradas para o usuário e solicita que ele escolha uma das opções. A seleção de opção pode ser feita com o número correspondente a opção desejada (Importante: futuramente, será possível selecionar com base no texto das opções.).

Quando o usuário seleciona uma opção, o valor atribuído para a variável será o atributo valor da opção. Por exemplo: ao montar uma lista de opções de imóvel para seleção, provavelmente será passado pelo desenvolvedor para o atributo valor da opção o ID do imóvel, enquanto que na descrição do imóvel (visível ao usuário), estará no atributo TEXTO da opção. Na próxima iteração da crítica (quando a variável estiver preenchida), ao acessar a variável pelo contexto, ela terá como valor do ID da opção selecionada.

Variações aceitas:

  • lista
  • list

Validações padrões:

  • Usuário deve selecionar uma opção;

CEP

O tipo CEP valida que o usuário informe um CEP válido, podendo ou não conter a pontuação.

Variações aceitas:

  • cep

Validações padrões:

  • Valida que o valor informado é um CEP;
  • Validações gerais (exemplo: não pode ser 000000, entre outras combinações inválidas).

CPF

O tipo CPF valida que o usuário informe um CPF válido. Este validador verifica somente o tipo de dado, não valida com a receita federal ou outras bases cadastrais.

Variações aceitas:

  • cpf

Validações padrões:

  • Valida que o valor informado é um CPF;
  • Validações gerais (exemplo: não pode ser 000000, entre outras combinações inválidas).

CNPJ

O tipo CNPJ valida que o usuário informe um CNPJ válido. Este validador verifica somente o tipo de dado, não valida com a receita federal ou outras bases cadastrais.

Variações aceitas:

  • cnpj

Validações padrões:

  • Valida que o valor informado é um CNPJ;
  • Validações gerais (exemplo: não pode ser 000000, entre outras combinações inválidas).

Valor ou Moeda

Serve para entradas que podem ser ponto flutuante, moeda, ou tipos inteiros, dentro dos limites estabelecidos nas restrições. Por exemplo: uma solicitação de ITBI, a variável valor da venda, pode ter um valor mínimo de R$ 0,01 (apenas de exemplo, visto que pode ser zerado) à um valor máximo indefinido. Logo, se o usuário informar um valor no formato “5000” ou “5.000,00”, são considerados valores válidos.

Variações aceitas:

  • valor
  • moeda

Validações padrões:

  • Valida que o valor é maior ou igual a zero (podendo ser customizado pelo desenvolvedor da crítica);

Inteiro

Semelhante ao tipo valor, o tipo inteiro valida uma entrada do usuário de acordo com os valores esperados e possíveis restrições.

Variações aceitas:

  • inteiro
  • numerico
  • integer

Validações padrões:

  • Valida que o valor é maior ou igual a zero (podendo ser customizado pelo desenvolvedor da crítica);

Data

O tipo data permite que seja solicitada uma data que contenha dia, mês e ano.

Variações aceitas:

  • data
  • date

Validações padrões:

  • Valor mínimo: data atual - 100 anos;
  • Valor máximo: data atual + 100 anos;

Data e Hora

O tipo data e hora permite que seja solicitada uma data que contenha dia, mês, ano, hora e minuto.

Variações aceitas:

  • data_hora;
  • datahora;
  • data/hora;
  • data e hora.

Validações padrões:

  • Valor mínimo: data e hora atual - 100 anos;
  • Valor máximo: data e hora atual + 100 anos;
  • Deve conter hora e minuto;

Mês e Ano

O tipo mês e ano permite que seja solicitada uma data composta somente por mês e ano.

Variações aceitas:

  • mes_ano;
  • mesano;
  • mes/ano;
  • mes e ano;
  • mês e ano (e todas as variações com ou sem acento).

Validações padrões:

  • Valor mínimo: mês atual e ano atual - 100 anos;
  • Valor máximo: mês atual e ano atual + 100 anos;
  • Deve conter um mês de 1 à 12 e um ano, no mínimo/máximo o ano atual - ou + 100;

Celular

O tipo celular permite que seja solicitado um telefone com DDD. É obrigatório que existam os 9 dígitos do telefone e os 2 dígitos do DDD.

Variações aceitas:

  • celular;

Validações padrões:

  • Valida que é um telefone com DDD;
  • Não existem customizações possíveis neste tipo de dado.

Nome de pessoa

O tipo nome é um facilitador para os pontos onde é necessário solicitar um nome completo em um atendimento, não bastando o primeiro nome ou abreviações. Também pode ser utilizado o tipo texto caso este validador não atenda. Veja as validações padrões para mais informações.

Variações aceitas:

  • nome;

Validações padrões:

  • Valida que o texto informado contenha ao menos 2 palavras (nome e sobrenome);
  • O tamanho mínimo e máximo podem ser personalizados.

Exemplos válidos:

  • Jó Sá
  • João da Silva

Exemplos inválidos:

  • Bruno B
  • Bruno . .
  • Bruno 2

Arquivo

Este tipo dado permite que sejam solicitados para o usuário arquivos que serão repassados como parâmetro para extensões ou que serão utilizado para processamento por fontes de dados ou no próprio script da crítica.

Sempre que um arquivo é validado e enviado pelo usuário, você terá acesso na variável de contexto à uma URL que contém o arquivo enviado e poderá utilizá-la para integrar com uma fonte dados ou qualquer outra API.

Nos casos onde você está chamando uma extensão que tem o parâmetro do tipo arquivo, esta integração é feita automaticamente pela Beth ao invocar a extensão. Desde que o nome dos parâmetros tenha uma correspondência ou você tenha especificado o "de para", caso os nomes não sejam iguais.

Tipo de arquivo

Você pode restringir o tipo de arquivo aceito utilizando o tipo principal (que engloba uma série de subtipos) ou um subtipo específico. Por exemplo: para não especificar todos os tipos de arquivos compactados possíveis, você pode especificar o tipo como "compactado", e então a Beth irá esperar que o tipo do arquivo seja um dos tipos de arquivo compactado suportados.

Exemplo de solicitação de arquivo sem validações

O tipo padrão é "Todos", não sendo necessário especificar.

...
variaveis: [
[
nome: 'exemploArquivo',
tipo: 'arquivo'
]
]
...

Exemplo de solicitação de arquivo compactado

A variável abaixo aceitará todos os seguintes tipos de arquivo: ".zip", ".rar", ".tar.gz", ".7z".

...
variaveis: [
[
nome: 'exemploArquivo',
tipo: 'arquivo',
restricoes: [
tipo: 'compactado'
]
]
]
...

Exemplo de solicitação de arquivo compactado ou imagem

A variável abaixo permitirá todos os seguintes tipos de arquivo: ".zip", ".rar", ".tar.gz", ".7z", juntamente com os tipos de imagem: ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".svg", ".ico".

...
variaveis: [
[
nome: 'exemploArquivo',
tipo: 'arquivo',
restricoes: [
tipo: [‘compactado’, ‘imagem’]
]
]
]
...

Exemplo de solicitação de arquivo de um subtipo específico

A variável abaixo permitirá somente os tipos ".png" e ", ".svg"

...
variaveis: [
[
nome: 'exemploArquivo',
tipo: 'arquivo',
restricoes: [
tipo: ['png', 'svg']
]
]
]
...
TipoVariações de nomenclaturaExtensões aceitas
todos*.*
documentodoc, pdf.pdf
imagemimg.gif, .svg, .bmp, .ico, .jpg, .jpeg, .png, .tiff
compactado-.7z, .rar, .zip, .tar.gz
planilha-.ods, .xlsx, .xls, .csv
JPG-.jpg
JPEG-.jpeg
PNG-.png
GIF-.gif
BMP-.bmp
TIFF-.tiff
SVG-.svg
ICO-.ico
ZIP-.zip
RAR-.rar
TAR.GZtargz.tar.gz
7zsevenzip.7z
xlsx-.xlsx
xls-.xls
csv-.csv
ods-.ods

💡 Os tipos devem ser passados em áspas simples ou duplas, são case insensitive e não devem iniciar com o "ponto". Por exemplo: "*" para o tipo todos ou "png" para o formato PNG.

Tamanho do arquivo

Primeiro é necesário lembrar que a Beth é multi-canal. Ou seja, o tamanho máximo dos arquivos pode depender do canal que o usuário estiver no momento.

O tamanho do arquivo pode ser restringido de duas formas. A primeira e mais simples é utilizando o valor seguido de uma unidade de armazenamento. Por exemplo: '100kb', '3mb' ou '1gb'. A segunda é especificar de forma literal o tamanho em bytes. Por exemplo '100000', equivalente a 100kb.

Restrições de tamanho

💡Valor padrãoValor mínimoValor máximo
tamanhoMaximo20MB5KB1GB
  • O tamanho máximo de um arquivo é 1GB. Atualmente, caso você defina um valor superior a 1GB, a Beth irá ignorar e irá considerar 1GB como valor padrão.
  • O tamanho máximo também será ignorado caso você defina um valor menor que 5KB. Por exemplo, se você definir um tamanho como 0KB ou 1KB, a Beth irá aceitar um arquivo de até 5KB.
Caso seja necessário algum comportamento diferente, deve-se entrar em contato com a equipe de Tecnologia para avaliar a necessidade de alteração.

Exemplo de validação de tamanho do arquivo simplificada

A variável abaixo permitirá somente um PDF com até 2MB.

...
variaveis: [
[
nome: 'exemploArquivo',
tipo: 'arquivo',
restricoes: [
tipo: 'pdf',
tamanhoMaximo: '2mb'
]
]
]
...

Exemplo de validação de tamanho do arquivo literal

A variável abaixo também permitirá somente um PDF com até 2MB.

...
variaveis: [
[
nome: 'exemploArquivo',
tipo: 'arquivo',
restricoes: [
tipo: 'pdf',
tamanhoMaximo: '2000000'
]
]
]
...
Unidade de armazenamentoExemplos de uso (Valores apenas de exemplo)
bytes2000000
kb10kb ou 10KB
mb1mb ou 1MB
gb1gb ou 1GB

Sobre o armazenamento dos arquivos enviados durante o atendimento

Quando você utiliza um arquivo que serve como parâmetro de extensão (scripts ou relatórios), a Plataforma armazenará a execução e os parâmetros de forma temporária (exemplo: 30 dias). Este armazenamento é externo à Beth. Outro cenário é quando o canal do atendimento é externo, por exemplo o WhatsApp. Neste caso, o link do anexo que o usuário envia é gerado pelo próprio provedor (exemplo: Twilio, Zenvia, UltraMsg, etc.). Nestes casos, a Beth apenas transfere o arquivo para a plataforma (caso seja um parâmetro utilizado em uma extensão).

Em resumo:

  • Quando o usuário envia um arquivo, o link estará disponível na variável correspondende durante a execução da crítica de atendimento. Este link também será válido por 30 dias;
  • No e-mail do comprovante de atendimento, o usuário receberá um link válido por 7 dias para cada parâmetro do tipo arquivo que ele tenha enviado naquele atendimento.
  • Caso você precise armazenar por tempo indeterminado um ou mais arquivos enviados, você deve baixá-lo na API/Fonte de dados correspondente.

Exemplo:

  • Supondo que você irá utilizar uma variável do tipo arquivo para uma crítica de atendimento de matrícula online, onde serão enviados alguns documentos do aluno.
  • A fonte de dados da matrícula poderá receber um POST com um ou mais atributos dos anexos onde você pode passar a URL dos anexos.

No exemplo abaixo, supomos que a fonte de dados permite criar uma matrícula e que a API pode receber uma lista de documentos em anexo, onde os documentos possuem o atributo URL e a API irá fazer download dos mesmos para o domínio do sistema.

Dados.educacao.v1.matricula.criar([ 
documentosAluno: [
[
tipo: 'CERTIDAO_NASCIMENTO',
url: contexto.certidaoNascimento // Enviado pelo usuário
],

[
tipo: 'FOTO_ALUNO',
url: contexto.fotoAluno // Enviado pelo usuário
]
]])

Neste outro exemplo, os arquivos recebidos são baixados e enviados para a API. Neste caso, a abordagem utilizada poderia ser:

  • Fonte de dados possui um endereço para upload dos arquivos;
  • Fonte de dados gera um endereço de upload diretamente para o S3 no domínio da aplicação.
urlCertidao = contexto.certidaoNascimento
certidaoBaixada = Http.servico(urlCertidao).GET()

Dados.educacao.v1.matricula.documento.criar(parametros:
[
codigoMatricula: codigoMatricula,
tipoDocumento: 'CERTIDAO_NASCIMENTO',
],
certidaoBaixada // A API receberia um arquivo no body
)

Exemplo básico de crítica com Arquivo

No exemplo abaixo é solicitado ao usuário um PDF de até 250kb. Por fim, é chamado um script que possui um parâmetro do tipo arquivo com o nome "comprovante". A Beth solicita o arquivo, valida o formato e tamanho, faz a integração com scripts e depois trará o resultado retornado no script.

return [
mensagem: 'Para manter seu cadastro de fornecedor ativo no município, envie o comprovante de situação cadastral na Receita Federal.',
variaveis: [
[
nome: 'comprovante',
rotulo: 'Envie o PDF do seu comprovante',
tipo: 'arquivo',
restricoes: [
tipo: pdf,
tamanhoMaximo: '250kb'
]
]
],
encerrar: [
identificador: "ef06906e-9cdb-4476-a9d0-d79737ef677b",
tipo: "script"
]
]

Variáveis Internas / Constantes

É possível definir uma variável com um valor fixo dentro do atendimento. Uma variável interna/fixa pode ser útil para ser posteriormente repassar como um parâmetro para uma extensão. Outro cenário seria armazenar alguma verificação para não precisar refazê-la em um novo momento dentro da crítica (caso sua crítica precise de mais de uma execução).

Uma variável interna é uma variável que além do nome e tipo, o desenvolvedor retorna um valor. Logo, a Beth entende que a variável está preenchida e não solicitará ao usuário. Variáveis internas também estarão disponíveis dentro do objeto contexto durante todo o atendimento.

Dica de uso: Outro cenário interessante é só solicitar uma informação para o usuário no caso da informação não existir (no usuário ou dentro de um chamada a fonte de dados). Por exemplo: supondo que dentro da crítica de atendimento seja necessário um telefone de contato para o usuário. O desenvolvedor da crítica, poderia tentar utilizar o celular dentro do objeto usuário e/ou quem sabe de um registro que ele irá carregar via fonte de dados, por exemplo, se você carregar o contribuinte cadastrado no Tributos, ele pode ou não ter o telefone. O trecho abaixo possibilita este comportamento:

variaveis: [
[
nome: "telefoneContato",
rotulo: "Telefone de contato",
tipo: "celular",
// Caso o celular não exista no usuário, o valor será null.
// Logo, a Beth vai solicitar a variável para o usuário normalmente. Caso exista, o usuário não será questionado.
valor: contexto.usuario.celular
]
]

Se a variável interna for uma variável que você tem certeza que não será solicitada para o usuário, a declaração fica ainda mais simples, podendo ser omitido o rótulo e até mesmo o tipo. Por exemplo, se o ano do exercício for fixo no atendimento:

variaveis: [
[
nome: "anoExercicio",
valor: Datas.ano(Datas.hoje())
]
]

O exemplo anterior funcionará mesmo que o parâmetro no relatório seja do tipo inteiro (na crítica, como o tipo não foi especificado a variável é do tipo texto por padrão). A Beth irá converter automaticamente o valor do anoExercicio ao invocar a extensão. Porém, você também pode declarar explicitamente o tipo da variável interna, neste caso, ela poderia ser do tipo inteiro.

Lembre-se!

💡Uma variável fixa pode ser redefinida posteriormente. Basta que você retorne novamente uma outra variável com o mesmo nome e outro valor.

💡Não há limite de variáveis fixas. Porém, recomenda-se que sejam armazenadas somente informações relevantes em algum momento do atendimento.

Restrições de Variável

O atributo restrições permite definir de forma simplificada, diversas validações comuns, informando apenas alguns valores. As mensagens de validação também serão montadas conforme os valores especificados.

Lembre-se!

💡Validações inválidas são ignoradas. Desta forma, em caso de dúvida, recomenda-se que sejam testadas as validações criadas. Um exemplo de validação inválida é definir um valor máximo menor que o valor mínimo. No caso da variável possuir um tipo específico, como por exemplo: CPF, os limites de caracteres ou valores mínimos e máximos serão ignorados.

💡Algumas restrições podem ser especificadas em cima dos tipos de dados da variável ou em formato de texto. Por exemplo, para definir o valor mínimo para uma variável que seja do tipo mês e ano, pode ser especificada diretamente uma string como “01/2023”. A alternativa é utilizar a API de datas para criar/somar o valor máximo/mínimo possível e depois formatar o valor como string, colocando como valor máximo/mínimo. No caso de uma variável do tipo inteiro ou moeda, os valores podem ser um número ou uma string com os respetivos valores desejados.

Mínimo de Caracteres

minimoCaracteres: Permite definir o número mínimo de caracteres para solicitar ao usuário.

Máximo de Caracteres

maximoCaracteres: Permite definir o número máximo de caracteres para solicitar ao usuário.

[
nome: "descricaoProblema",
rotulo: "Descrição do problema no seu bairro (entre 100 e 500 caracteres)",
restricoes: [
minimoCaracteres: 100,
maximoCaracteres: 500
]
]

Restrição de Mínimos e Máximos

É possível definir valores mínimos e máximos de acordo com o tipo de variável. Por exemplo: Se variável for do tipo inteiro ou moeda, o seu valor mínimo e máximo será um número. Caso seja do tipo data, por exemplo, seu valor mínimo e máximo deverá ser uma data.

Os valores máximo e mínimo podem ser utilizados de forma individual (pode ser especificado só o valor mínimo ou só o valor máximo).

Valor Mínimo

valorMinimo: Permite definir um valor mínimo para o valor que é solicitado para solicitar ao usuário.

Valor Máximo

valorMaximo: Permite definir um valor mínimo para o valor que é solicitado para solicitar ao usuário.

[
nome: "dataNascimentoDependente",
rotulo: "Data de nascimento do seu dependente",
restricoes: [
valorMaximo: Datas.adicionaMeses(Datas.hoje(), -192), // Valida que o dependente tenha no máximo 16 anos
]
],
[
nome: "valorParcela",
rotulo: "Valor da parcela mensal que você pode pagar",
restricoes: [
valorMinimo: 100,
valorMaximo: valorRendaInformadaCadastro * 0.3, // Demonstra uma validação que pode ser construída com base em um parâmetro carregado. Deixando dinâmica a validação para outros usuários. Neste caso, o valor da parcela deve ser menor que 30% da renda informada.
]
]

Palavras Reservadas

Os seguintes nomes de variáveis são reservados e não podem ser utilizados dentro das críticas de atendimento:

  • usuario
  • contexto
  • licenca
  • ok
  • @dev

Formatação de Mensagens

A Beth precisa trabalhar com múltiplos canais, logo, é necessário adotar um padrão que possa ser traduzido para os diversos canais. Seria inviável que o desenvolvedor criasse uma mensagem especificamente para cada canal. Logo, o padrão adotado foi o padrão utilizado pelo WhatsApp e outros canais de mensageria. Ele é derivado do markdown, mas não estão disponíveis todos os recursos. As próprias plataformas restringem muito as formatações possíveis. Abaixo, estão as formatações disponíveis para a Beth.

Atenção!

O uso de alguma formatação não disponível, poderá comprometer a experiência do usuário.

Tabela 6: Formatadores Disponíveis

FormatadorCaractere
Quebra de Linha\n
Destaque / Negritoparte do texto para destacar
Espaço\s OU Simplesmente colocar o espaço desejado: “Esta mensagem terá um espaço entre A B.”

Utilizando Extensões

Agora você pode utilizar extensões de outros sistemas!

Na listagem de extensões, na tela "Portal do Desenvolvedor", é possível listar também extensões de outros sistemas, para utilizar nos atendimentos da Beth.

A principal vantagem é não ter de replicar/flexibilizar para a Beth a extensão e suas dependências, como fontes dinâmicas e até mesmo componentes, que podem conter uma grande quantidade de regras de negócio.

Como utilizar extensões de outros sistemas na Beth?

Supondo que a extensão que você queira utilizar seja o relatório "Informe de Rendimentos" que está no sistema "Minha Folha".

No Gerenciador de Relatórios, na entidade e no sistema Minha Folha, localize a extensão que você quer utilizar na Beth e inclua uma tag chamada @beth.

Na sequência, na Beth, acesse a tela "Portal do Desenvolvedor", ao lado do campo de busca, escolha o sistema "Minha Folha" e localize a extensão desejada.

Nota: Optamos por não listar todas as extensões de outros sistemas para melhor organização. Alguns sistemas possuem um alto número de extensões, além de várias versões similares da mesma extensão, como "cópia", "v1", "v2", etc. Com as tags, a lista de extensões para a Beth fica mais organizada, além de você saber no sistema de origem (por meio da Tag), se aquela extensão está em uso na Beth.

Alguns detalhes
  • Só são listados sistemas que possuem licença ativa para a entidade que você está configurando a Beth. Por exemplo, se a extensão Informe de Rendimentos está no sistema Minha Folha, na entidade "PM - Criciúma", voê só conseguirá listar esta extensão no sistema Beth, dentro da entidade "PM - Criciúma".
  • Ao utilizar na Beth uma extensão que já é utilizada dentro do sistema para outras rotinas, esteja ciente que atualizações nesta extensão poderão impactar os atendimentos.
    • Na tela "Dashboard", você poderá ver alguns alertas referentes a extensões.

Visualizando alertas sobre extensões

Os atendimentos da Beth são compostos de vários componentes, entre eles, extensões. Inicialmente, existem 2 tipos de alertas que podem ser gerados caso ocorra algum problema com uma extensão em uso no atendimento:

  • Extensão não encontrada: Quando uma extensão definida no atendimento não foi encontrada. A causa pode ser um erro de codifiacação na crítica do atendimento. Por exemplo: você editou a crítica e informou um identificador inválido, ou ainda, uma extensão em uso foi removida/desflexibilizada.
  • Erro ao executar extensão: É gerado quando ocorre algum erro ao executar a extensão. Pode ser causado por um erro na configuração dos parâmetros na extensão ou caso a extensão seja removida enquanto existe um atendimento em andamento.
Sobre os alertas

Imagine que você tenha um atendimento que possa ser executado 10, 20 ou até mesmo 1.000 vezes em um único dia. Agora pense no caso de ser gerado um alerta de erro/notificação para cada atendimento que falhou por causa de uma extensão ou outro motivo. Será um volume muito grande de notificações repetidas.

Pensando nisso, os alertas vão aparecer na listagem agrupados, de forma que existirá apenas um alerta por: Dia, para cada Tipo de Alerta e Extensão. Enquanto o problema está ocorrendo, o alerta apenas é atualizado, com o total de ocorrências e qual a ocorrênia mais recente.

Supondo que tenha sido um erro de codificacão na crítica de atendimento, onde foi informada uma extensão inexistente. Após corrigir a crítica, você pode marcar o alerta como "Resolvido". Quando você Resolve o alerta, ele será removido da listagem de alertas em aberto. Caso ele ocorra novamente, será reaberto.

Em casos extremos, como de indisponibilidade temporária, podem ser gerados alguns alertas de falha. Isto ocorre, pois em alguns casos, não é possível saber se a API de extensões está retornando 404 pela extensão não existir ou pela API estar com problemas.

Não é obrigatório Resolver os alertas, você sempre verá os alertas mais recentes. É recomendável resolvê-los apenas por organização. Por exemplo: durante a codificação, você informou uma extensão que não existe e gerou um erro, que você percebeu antes de liberar o atendimento. De qualquer forma, existirá um alerta registrado no Dashboard da entidade. Neste caso, é válido você resolvê-lo, apenas para não ficar um alerta registrado "para sempre", pois você sempre vê os alertas mais recentes em aberto.

Geralmente, os alertas serão resolvidos automaticamente em até 72 horas da última ocorrência. Porém, no caso da entidade não possuir um alto volume de alertas, eles podem ficar disponíveis por um tempo maior (indeterminado). Esta retenção maior é adotada para evitar que não sejam vistos problemas em atendimentos que não são utilizados com muita frequência.

Listagem de alertas no Dashboard

Beth

Encerrando atendimento com uma extensão

A utilização de extensões em conjunto com as críticas de atendimento da Beth se dá como uma forma de concluir o atendimento. O atendimento pode ser finalizado:

  • Sem nenhuma extensão (encerrar = true e uma mensagem);
  • Uma única extensão (encerrar = mapa com informações para executar a extensão)
  • Mais de uma extensão (encerrar = lista de mapas com informações para executar cada extensão)

Tabela N: Mapa do Tipo Encerrar

AtributoTipoDescrição
identificadorStringIdentificador de integração da extensão - ATENÇÃO: Atualmente, o identificador de integração não é o identificador do script/relatório disponível na tela do gerenciador de extensões. Para obter o identificador do script desejado, veja a seção “Identificador de Integração de uma Extensão”
tipoStringTipo da extensão: RELATORIO ou R para um relatório SCRIPT ou S se a extensão for um Script
parametrosMapaDê para dos parâmetros da extensão solicitada. Por exemplo: se a extensão possui como parâmetro o “cpfContribuinte”: parametros: { cpfContribuinte: contexto.usuario.cpf }
solicitadoString ou Mensagem MulticanalPermite definir uma mensagem que é enviada para o usuário assim que a extensão é solicitada para execução. Opcional, a mensagem padrão é: “Ok, estou solicitando para você.” Também é possível definir uma mensagem por canal.
concluidoString ou Mensagem MulticanalPermite definir uma mensagem que é enviada para o usuário junto com o resultado da extensão. Opcional, a mensagem padrão é: “Aqui está seu PDF:” ou “Aqui está o link para download < LINK >” Também é possível definir uma mensagem por canal.
erroString ou Mensagem MulticanalPermite definir uma mensagem que é enviada para o usuário somente se ocorrer um erro ao solicitar a extensão. Por exemplo: imagine a extensão em uso no atendimento é responsável por registrar uma vaga na fila para uma consulta médica. Neste caso, pode ser interessante dar uma mensagem para o usuário procurar o município o mais breve possível. Opcional, a mensagem padrão é: “Desculpe, ocorreu um erro enquanto processava seu atendimento. Peço que tente novamente mais tarde ou em caso de urgência, entre em contato com seu município.” Também é possível definir uma mensagem por canal.
condicoesMapa ou Lista de Condições de Execução de ExtensãoPermite definir uma ou mais condições para executar ou não uma extensão. Por exemplo: imagine um atendimento onde o usuário pode solcitar um script que devolve os códigos para pagamento ou o PDF da Guia. A extensão que devolve o PDF pode ter uma condição para a variável “formatoRetorno” igual a “pdf”. Enquanto que a extensão com o código de pagamento tem a condição para o formato ser igual a “codigoBarras”. Opcional, caso nenhuma condição especificada, é considerada que a extensão sempre será executada.
resultadoMapaPermite que seja definido um formato de resultado para cada canal. Opcional: Formatos de Retorno para Cada Canal.

Identificador de Integração de uma Extensão

A Beth sabe qual extensão executar com base no atributo identificador e no tipo da extensão, dentro da especificação de encerramento de um atendimento. O identificador de integração de uma extensão pode ser facilmente obtido através do sistema Beth, na tela “Portal do Desenvolvedor”, na listagem “Consulta rápida de extensões”. Localize a extensão pelo campo de busca e clique no botão “Copiar”, para copiar o identificador para a área de transferência.

Beth

Parâmetros da Extensão vs. Variáveis do Atendimento

Normalmente, a crítica de atendimento possuirá extesões para enriquecer o atendimento. Estas extensões, por sua vez, possuem parâmetros. Ao declarar uma extensão como parte do encerramento de um atendimento, é possível definir manualmente o valor de cada parâmetro que será passado para a extensão. Porém, nos casos onde o nome do parâmetro é igual ao nome de uma variável na crítica do atendimento e os tipos são compatíveis (é igual ou é possível converter), não é necessário redeclarar o “de para” para o parâmetro da extensão.

O exemplo abaixo mostra uma crítica de atendimento resumida para simplificar a visualização. Ela se integra com um relatório que possui um parâmetro do tipo Número, chamado “codigoEconomico”. Como existe na crítica uma variável chamada codigoEconomico, não seria necessário passar explicitamente o valor no mapa de parâmetros da extensão:

[
[
...
nome: "codigoEconomico",
rotulo: "Empresa em sua titularidade",
tipo: "texto",
opcoes: ...
]
]
...
tipo: "relatorio",
identificador: "8f77fa00-bd1f-11ed-afa1-0242ac120002",
parametros: [
// Não é necessário, a Beth irá identificar que existe um parâmetro na extensão que bate com uma variável específicada no atendimento
codigoEconomico: contexto.codigoEconomico
],
...
Mais detalhes sobre a integração com extensões:
  • Se a extensão possui um parâmetro e ele não foi informado pelo desenvolvedor e não existe uma variável correspondente no atendimento, mas existe um valor padrão na extensão, será utilizado o valor padrão da extensão;
  • Se o parâmetro é obrigatório e não foi definido pelo desenvolvedor, nem existe uma variável correspondente na crítica e não há valor padrão, será entregue uma mensagem de erro;
  • A ordem de prioridade ao definir um valor de parâmetro ao chamar uma extensão é:
    • Desenvolvedor define um valor explicitamente no mapa de parâmetros;
    • Variável na crítica, com mesmo nome e tipo compatível;
    • Valor padrão do parâmetro definido na extensão (Caso houver).

Exemplos de uso dos parâmetros de Relatórios e Scripts

Abaixo, alguns exemplos de como definir alguns parâmetros do tipo lista, lista simples ou múltipla, lista dinâmica, etc.

// ... Alguns atributos omitidos para visualização
tipo: "relatorio",
identificador: "8f77fa00-bd1f-11ed-afa1-0242ac120002",
parametros: [
nomeParametroListaSimples: ['valorA'],
nomeParametroListaMultipla: [1, 2],
nomeParametroListaMultiplaDinamica: [
[
valor: "valorDesajadoParametro",
descricao:"Descritivo do valor no registro da execução"
]
],
nomeParametroListaDinamica: [
valor: "valorDesajadoParametro",
descricao:"Descritivo do valor no registro da execução"
],
nomeParametroListaMultiplaValorEstatico: 'valorA'
],
// ... Alguns atributos omitidos para visualização

Importante:
  • No caso de listas estáticas o valor passado na execução será validado de acordo com os valores possíveis;

Personalizando Retorno das Extensões Por Canal

Para maior conveniencia ao cidadão, foi adotado um padrão para cada canal ao retornar uma extensão. Por exemplo: se o cidadão está no WhatsApp, e solicita uma guia de IPTU, ele receberá por padrão um PDF. Também é possível que o desenvolvedor da crítica retorne um código copiável junto com a mensagem, mas sobre o retorno da extensão, queremos dizer o PDF ou link.

Se o cidadão estiver realizando o mesmo atendimento, só que via site beth.chat, ele irá receber como retorno um link para abrir/baixar o PDF.

Este comportamento pode ser customizado para cada canal, seja por comodidade do cidadão/processo, ou pelo fato da extensão retornar um PDF muito grande, não suportado por uma plataforma, por exemplo.

Tabela 7: Formatos de Retorno para Cada Canal

CanalFormato de retorno padrão
WhatsAppPDF
Site beth.chatLink para download
Site da Prefeitura (webchat)Link para donwload

Nota: Canais ainda não suportados estão omitidos e serão adicionados posteriormente.

Customizando o Retorno para um Canal pelo Atributo “RESULTADO”

...
tipo: "relatorio",
...
resultado: [
// Para o WhatsApp, será entregue o link, canais não especificados, será mantido o comportamento padrão para o respectivo canal
whatsapp: "link"
],
concluido: [
// Também é possível customizar o texto da mensagem para cada canal
whatsapp: "Aqui está o link do seu PDF"
]
...