Comandos dialog.*
| Família | Finalidade |
|---|---|
dialog.* |
Ações sobre sessão, mensagens, fluxo, integrações, IA, atendimento humano, sinais, formulários e demais operações do OmniSIGA. |
Regras gerais
- Prefira blocos visuais especializados quando eles já resolverem o comportamento; use caixa de código para regras personalizadas.
- Valide
nulle entradas externas antes de converter, acessar propriedades ou enviar dados. - Os nomes de nós usados em comandos de navegação precisam existir no fluxo.
- Teste caminhos de sucesso, erro, retorno externo e ausência de dados antes de publicar.
- Para ações sobre fluxo/sessão, use as APIs documentadas do OmniSIGA em vez de presumir comportamento de JavaScript moderno.
Como usar
- Use um bloco visual especializado quando ele já resolver o comportamento desejado. A caixa de código é indicada para regras personalizadas.
- Os exemplos usam JavaScript e devem ser colocados no campo correspondente do bloco: entrada, resposta do usuário, saída ou retorno externo.
dialog.*atua sobre a sessão e o fluxo atuais. Os nomes de nós usados emdialog.go(...)e comandos semelhantes precisam existir no fluxo.variables,inputesessionrepresentam dados disponíveis no contexto da execução. Verifique quais deles estão disponíveis no momento em que o código roda.- Teste os caminhos de sucesso, erro, retorno externo e ausência de dados antes de publicar o fluxo.
Navegação
dialog.go(dialogNodeId)
Navega para outro nó do fluxo. O nó destino terá seu onEnter executado normalmente na próxima iteração do motor. Equivalente a redirect().
dialog.go('node-confirmacao');
dialog.redirect(dialogNodeId)
Sinônimo de go(). Prefira go() em novos scripts.
dialog.redirect('node-confirmacao');
dialog.changeFlow(flowId)
Troca o fluxo ativo da sessão para outro fluxo cadastrado na plataforma. Encerra o fluxo atual e inicia o novo do início.
dialog.changeFlow('fluxo-suporte-tecnico');
dialog.resetDialog()
Reinicia o diálogo atual, descartando todas as ações pendentes. Variáveis de sessão e estado de navegação são preservados.
dialog.resetDialog();
dialog.resetDialog(id)
Reinicia um diálogo específico pelo ID.
dialog.resetDialog('outro-dialog-id');
Ciclo de vida
dialog.finishDialog()
Encerra o atendimento com status padrão 'ok'.
dialog.finishDialog();
dialog.finishDialog(status)
Encerra o atendimento com status customizado.
dialog.finishDialog('resolved');
dialog.abandonDialog()
Encerra o atendimento como abandonado sem status.
dialog.abandonDialog();
dialog.abandonDialog(status)
Encerra o atendimento marcando-o como abandonado, com status customizado.
dialog.abandonDialog('sem-resposta');
dialog.missed()
Redireciona para o nó de missed configurado no fluxo. Sinaliza que o bot não conseguiu tratar o input atual.
dialog.missed();
dialog.throwError()
Força um erro de processamento no nó atual. Lança exceção que interrompe a execução do script e dispara o tratamento de erro do motor.
if (!variavelObrigatoria) { dialog.throwError(); }
dialog.assistantLoop()
Inicia o loop de processamento do assistente LLM na sessão atual. Sinaliza ao motor que o assistente deve assumir o controle da conversa.
dialog.assistantLoop();
Mensagens de texto e interação
dialog.say(text)
Envia uma mensagem de texto ao usuário pelo canal da sessão atual.
dialog.say('Olá! Como posso ajudar?');
Formatação do texto
O texto aceita os marcadores de formatação no padrão WhatsApp:
| Marcador | Efeito |
|---|---|
*texto* |
negrito |
_texto_ |
itálico |
~texto~ |
riscado |
__texto__ |
sublinhado |
dialog.say('Olá, *Maria*! Bem-vinda ao _atendimento_.');
Regras práticas:
- O marcador precisa estar colado ao texto:
* negrito *não formata;*negrito*sim; - Para negrito e itálico juntos, combine os marcadores:
*_texto_*; - O comando envia o texto com os marcadores como estão — quem interpreta é o canal ou a borda de exibição:
- WhatsApp renderiza negrito, itálico e riscado nativamente; o canal não tem sublinhado;
- Chat do atendente e respostas rápidas exibem os marcadores convertidos em HTML (
<b>,<i>,<s>,<u>); - Messenger e Instagram não renderizam os marcadores — no envio pelo chat do atendente eles são removidos do texto.
dialog.sendButtons(text, buttons)
Envia botões de resposta rápida. O mapa buttons tem chave = valor retornado ao clicar e valor = label exibido.
dialog.sendButtons('Escolha uma opção:', {'sim': 'Sim', 'nao': 'Não'});
dialog.sendButtons(text, title, buttons)
Versão com título separado do corpo. Útil para canais que exibem título e corpo de forma distinta.
dialog.sendButtons('Corpo da mensagem.', 'Escolha:', {'s': 'Sim', 'n': 'Não'});
dialog.sendInteractiveList(text, buttonText, headerText, footerText, items)
Envia uma lista interativa de itens selecionáveis. Cada item é um mapa com id, title e description.
dialog.sendInteractiveList(
'Selecione o departamento:',
'Ver opções',
null, null,
[{'id': 'fin', 'title': 'Financeiro'}, {'id': 'sup', 'title': 'Suporte'}]
);
dialog.sendLocation(name, address, latitude, longitude)
Envia um ponto geográfico com nome e endereço para exibição no canal.
dialog.sendLocation('Sede Visual', 'Av. Paulista, 1000', -23.5615, -46.6561);
dialog.requestLocation(text)
Solicita ao usuário que compartilhe sua localização. Envia mensagem com botão de compartilhamento.
dialog.requestLocation('Por favor, compartilhe sua localização.');
Templates WhatsApp Business (HSM)
dialog.sendTemplateTextMediaMsg(json)
Envia mensagem usando template de texto/mídia do WhatsApp Business (HSM aprovado). Use para mensagens ativas fora da janela de 24h.
dialog.sendTemplateTextMediaMsg(JSON.stringify(templateObj));
dialog.sendTemplateLocationMsg(input)
Envia template de localização HSM.
dialog.sendTemplateLocationMsg(JSON.stringify(locationTemplateObj));
dialog.sendCarouselTemplateMsg(json)
Envia template de carrossel HSM.
dialog.sendCarouselTemplateMsg(JSON.stringify(carouselObj));
Mídia
dialog.sendFileLink(link, filename, mimeType)
Envia um arquivo para o usuário a partir de uma URL, com nome e tipo MIME.
dialog.sendFileLink('https://example.com/boleto.pdf', 'boleto.pdf', 'application/pdf');
dialog.sendFileLink(link)
Versão simplificada sem nome ou tipo MIME.
dialog.sendFileLink('https://example.com/doc.pdf');
dialog.sendImageLink(link)
Envia uma imagem a partir de uma URL, sem legenda.
dialog.sendImageLink('https://example.com/foto.jpg');
dialog.sendImageLink(link, caption)
Envia uma imagem com legenda.
dialog.sendImageLink('https://example.com/foto.jpg', 'Comprovante de pagamento');
dialog.sendVideoLink(link)
Envia um vídeo a partir de uma URL, sem legenda.
dialog.sendVideoLink('https://example.com/tutorial.mp4');
dialog.sendVideoLink(link, caption)
Envia um vídeo com legenda.
dialog.sendVideoLink('https://example.com/tutorial.mp4', 'Tutorial de instalação');
dialog.sendAudioLink(link)
Envia um áudio a partir de uma URL, sem legenda.
dialog.sendAudioLink('https://example.com/instrucoes.mp3');
dialog.sendAudioLink(link, caption)
Envia um áudio com legenda.
dialog.sendAudioLink('https://example.com/instrucoes.mp3', 'Instruções de uso');
dialog.sendMediaMessage(mediaId, name)
Envia uma mídia já armazenada na plataforma pelo ID interno, sem precisar de URL pública.
dialog.sendMediaMessage(variables.get('mediaId'), 'Documento enviado');
Integrações HTTP
dialog.webhook(headers, url, method, content)
Dispara uma chamada HTTP fire-and-forget. Envia e segue sem aguardar resposta. Use para notificações onde o resultado não é necessário.
dialog.webhook(
{'Content-Type': 'application/json'},
'https://api.example.com/notify',
'POST',
JSON.stringify({evento: 'atendimento-iniciado'})
);
dialog.rest(headers, url, method, content)
Faz uma chamada HTTP e aguarda a resposta. Roteia por faixa de status: 2xx = sucesso, demais = falha. A resposta fica em restResponse (com statusCode e body) via externalSource no nó receptor.
dialog.rest(
{'Authorization': 'Bearer ' + variables.get('token')},
'https://api.example.com/clientes/' + variables.get('cpf'),
'GET',
null
);
dialog.oauthRest(headers, url, method, content, oauthParams)
Idêntico ao rest(), mas gerencia o token OAuth2 (password grant ou client credentials) de forma transparente.
dialog.oauthRest(
{'Content-Type': 'application/json'},
'https://api.example.com/recurso',
'GET', null,
{'clientId': 'abc', 'clientSecret': 'xyz', 'tokenUrl': 'https://auth.example.com/token'}
);
dialog.kbSearch(kbId, query, messages)
Consulta uma base de conhecimento com contexto de histórico.
dialog.kbSearch('kb-suporte', variables.get('perguntaUsuario'), null);
dialog.kbSearch(kbId, query)
Consulta uma base de conhecimento sem histórico.
dialog.kbSearch('kb-faq', variables.get('duvida'));
Inteligência Artificial (inline)
dialog.sentimentAnalysis(text, language)
Analisa o sentimento de um texto via IA. Classifica como POSITIVE, NEGATIVE, NEUTRAL ou MIXED.
dialog.sentimentAnalysis(variables.get('feedbackUsuario'), 'pt');
dialog.chatCompletion(data)
Executa um chat completion via IA. O parâmetro é JSON serializado com os parâmetros do completion.
dialog.chatCompletion(JSON.stringify({prompt: variables.get('contexto')}));
dialog.namedEntities(text, language)
Extrai entidades nomeadas (nomes, datas, locais, organizações) de um texto via IA.
dialog.namedEntities(variables.get('textoCandidato'), 'pt');
dialog.intentClassification(text, list)
Classifica a intenção de um texto contra uma lista de opções via IA.
dialog.intentClassification(variables.get('input'), ['cancelar', 'consultar', 'pagar']);
Variáveis de sessão
dialog.set(variable, content)
Define o valor de uma variável de sessão. Variáveis com prefixo visible também atualizam as variáveis visíveis ao atendente.
dialog.set('cpf', '123.456.789-00');
dialog.set('dadosCliente', {nome: 'João', email: 'joao@email.com'});
dialog.get(variable)
Lê o valor de uma variável de sessão. Retorna null se não existir.
var cpf = dialog.get('cpf');
if (dialog.get('tentativas') > 3) { dialog.go('node-bloqueio'); }
dialog.del(variable)
Remove uma variável de sessão. Útil para limpar dados temporários.
dialog.del('tokenTemporario');
dialog.visible(variable, content)
Define uma variável visível ao atendente humano. Passar null remove a variável visível.
dialog.visible('CPF', variables.get('cpf'));
dialog.visible('Motivo', 'Cancelamento de contrato');
dialog.updateVariable(key, value)
Alias de set(). Prefira set() em novos scripts.
dialog.updateVariable('nome', 'João');
dialog.updateGlobalVariable(key, value)
Define uma variável global, compartilhada entre fluxos e subprocessos ativos. Diferente de set(), que opera apenas no escopo do fluxo atual.
dialog.updateGlobalVariable('idTransacao', txId);
Atendimento humano e ticket
dialog.toHuman()
Transfere a conversa para um agente humano. Muda a situação da sessão para HUMAN. Use visible() antes para preparar os dados que o atendente verá.
dialog.visible('Nome', variables.get('nomeCliente'));
dialog.visible('CPF', variables.get('cpf'));
dialog.toHuman();
dialog.setOnBotReturn(nodeId)
Define o nó para onde o fluxo retorna após o atendimento humano.
dialog.setOnBotReturn('node-pos-atendimento');
dialog.setTicketPriority(priority)
Define a prioridade do ticket de atendimento.
dialog.setTicketPriority('alta');
dialog.setTicketSLA(sla)
Define o SLA do ticket de atendimento.
dialog.setTicketSLA('sla-4h');
dialog.setTicketLabel(label)
Define o label (etiqueta) do ticket de atendimento.
dialog.setTicketLabel('cancelamento');
dialog.getTicketResult()
Lê o resultado do último ticket encerrado na sessão. Disponível após o atendente devolver o controle ao bot.
var resultado = dialog.getTicketResult();
if (dialog.getTicketResult() == 'resolvido') { dialog.go('node-encerramento'); }
Tags da sessão
dialog.addTag(tag)
Adiciona uma tag à sessão atual.
dialog.addTag('cliente-vip');
dialog.removeTag(tag)
Remove uma tag da sessão atual.
dialog.removeTag('em-analise');
dialog.setTags(tags)
Substitui todas as tags da sessão pelo array informado.
dialog.setTags(['suporte', 'urgente', 'plano-pro']);
Analytics e eventos
dialog.emit(event)
Registra um evento de analytics na sessão.
dialog.emit('cpf-validado-com-sucesso');
dialog.emit(event, duration)
Registra um evento de analytics com duração em milissegundos — útil para medir tempo de etapas.
dialog.emit('etapa-coleta-dados', 12000);
Contato (sessão)
dialog.setContact(contactId)
Vincula um contato à sessão pelo ID.
dialog.setContact(variables.get('contatoId'));
dialog.setContact(contact)
Vincula um objeto Contact à sessão e grava o objeto em variables.contact.
dialog.setContact(contatoEncontrado);
// após isso: var nome = dialog.get('contact').name;
Avaliação (NPS / CSAT)
dialog.assess(assessmentId, score)
Registra uma avaliação de atendimento com nota (sem comentário). Marca como closed.
dialog.assess('avaliacao-nps', parseInt(variables.get('nota')));
dialog.assess(assessmentId, score, comment)
Registra avaliação com nota e comentário. Marca como open.
dialog.assess('avaliacao-nps', parseInt(variables.get('nota')), variables.get('comentario'));
dialog.assess(assessmentId, comment)
Registra avaliação somente com comentário (sem nota).
dialog.assess('avaliacao-aberta', variables.get('sugestao'));
Configurações de canal
dialog.setMediaUpload(enabled)
Habilita ou desabilita o upload de mídias pelo usuário no canal.
dialog.setMediaUpload(true);
dialog.setSpeakToText(enabled)
Habilita ou desabilita a transcrição automática de áudio para texto no canal.
dialog.setSpeakToText(true);
Formulários
dialog.clearForm()
Limpa os dados de formulário da sessão atual.
dialog.clearForm();
dialog.createCustomerForm(customerFormDefinitionId, variableName)
Cria um formulário para preenchimento pelo cliente e grava o link na variável especificada.
dialog.createCustomerForm('form-dados-cadastrais', 'linkFormulario');
dialog.say('Preencha o formulário: ' + dialog.get('linkFormulario'));
Controle de Fluxo
dialog.runOnEnter(targetNode)
Força a execução do onEnter do nó destino imediatamente, encadeando-o ao processamento atual. Use para roteamento programático sem aguardar input do usuário.
⚠️ Use com cautela: pode criar loops se o nó destino também redirecionar de volta.
if (variables.cpfInvalido) {
dialog.runOnEnter('node-erro-cpf');
}
Fila e Sessão
dialog.hasAttendants(tags)
Verifica se há atendentes disponíveis em filas filtradas por tags. O resultado fica acessível no contexto para uso por nós subsequentes (ex: decisão).
dialog.hasAttendants(['suporte', 'horario-comercial']);
dialog.hasAttendants()
Verifica disponibilidade sem filtro — olha o total geral em qualquer fila.
dialog.hasAttendants();
dialog.setSessionOption(key, value)
Define uma opção da sessão que terá efeito ao transferir para um humano.
dialog.setSessionOption('prioridade', 'alta');
dialog.setSessionProperty(property, value)
Define uma propriedade arbitrária na sessão. Diferente de variáveis de fluxo, propriedades de sessão são metadados persistentes e podem ser lidos por integrações externas.
dialog.setSessionProperty('cpfValidado', 'true');
Assistente IA
dialog.sendToAssistantV2(assistantId, previousResponseId, callId, message, customInstructions)
Envia uma mensagem ao assistente OpenAI v2 (Responses API), com chaining via previousResponseId. Prefira esta função em novos fluxos.
previousResponseId: null para iniciar nova conversa, ou o ID da última resposta para continuar.callId: correlaciona a resposta retornada com esta chamada.customInstructions: instruções extras válidas só para este turn; null para usar o padrão do assistente.
⚠️ Não misture
sendToAssistant(v1) esendToAssistantV2no mesmo fluxo — são APIs distintas e o estado não é compartilhado.
// Primeiro turn (sem histórico)
dialog.sendToAssistantV2('asst_xyz', null, 'call-1', input.text, null);
// Continuação de conversa anterior
dialog.sendToAssistantV2('asst_xyz', session.lastResponseId, 'call-2', input.text, null);
dialog.sendToAssistant(assistantId, threadId, message, options)
Versão legada v1 (Assistants API — modelo thread/run). Use em fluxos já em produção que dependem desta API.
dialog.sendToAssistant('asst_legacy', session.threadId, input.text, null);
dialog.sendToAssistant(assistantId, threadId, message)
Overload de conveniência sem o parâmetro de opções.
dialog.sendToAssistant('asst_legacy', session.threadId, input.text);
dialog.respondToAssistant(assistantId, threadId, runId, outputs)
Responde a uma tool call iniciada pelo assistente v1, devolvendo o output da função.
var outputs = JSON.stringify([{ tool_call_id: callId, output: result }]);
dialog.respondToAssistant('asst_xyz', threadId, runId, outputs);
Tarefas de IA
dialog.imageAnalysis(mediaId, questions)
Analisa uma imagem já recebida no fluxo (referenciada por mediaId) respondendo a perguntas em linguagem natural.
⚠️ Requer que
mediaIdjá tenha sido produzido por um nó anterior (collectMedia, etc). Não funciona com URLs externas — para isso useimageAnalysisByUrl.
dialog.imageAnalysis(input.mediaId, 'Qual é o número do RG e o nome completo?');
dialog.imageAnalysisByUrl(url, questions)
Analisa uma imagem disponível em URL pública respondendo a perguntas em linguagem natural.
⚠️ A URL precisa ser acessível publicamente pelo provedor de IA. URLs autenticadas ou de redes internas falharão.
dialog.imageAnalysisByUrl(variables.imageUrl, 'Há texto manuscrito na imagem? Qual o conteúdo?');
E-mail e SMS
dialog.sendEmail(domain, templateName, variables)
Envia e-mail usando template registrado, com variáveis para interpolação.
var vars = { nome: variables.nomeCliente, protocolo: variables.protocolo };
dialog.sendEmail('minhaempresa.com.br', 'boas-vindas', vars);
dialog.sendEmail(domain, htmlText)
Envia e-mail com corpo HTML literal (sem template).
dialog.sendEmail('minhaempresa.com.br', '<h1>Olá</h1><p>Protocolo: ' + variables.protocolo + '</p>');
dialog.sendEmail(domain, to, subject, templateName, variables)
Envia e-mail via template para destinatário e assunto explícitos.
dialog.sendEmail('minhaempresa.com.br', variables.email, 'Boas-vindas', 'boas-vindas', {nome: variables.nome});
dialog.sendEmail(domain, to, subject, htmlText)
Envia e-mail HTML literal para destinatário e assunto explícitos.
dialog.sendEmail('minhaempresa.com.br', variables.email, 'Status', '<p>Seu pedido foi enviado.</p>');
dialog.sendEmail(domain, templateName, variables, attachments)
Envia e-mail via template com anexos referenciados por lista de URLs públicas.
dialog.sendEmail('minhaempresa.com.br', 'boas-vindas', {nome: variables.nome}, ['https://example.com/termos.pdf']);
dialog.sendEmail(domain, htmlText, attachments)
Envia e-mail HTML literal com anexos.
dialog.sendEmail('minhaempresa.com.br', '<p>Segue o documento.</p>', ['https://example.com/documento.pdf']);
dialog.sendEmail(domain, to, subject, templateName, variables, attachments)
Combinação completa: template + destinatário + assunto + anexos.
dialog.sendEmail('minhaempresa.com.br', variables.email, 'Contrato', 'contrato', {nome: variables.nome}, ['https://example.com/contrato.pdf']);
dialog.sendEmail(domain, to, subject, htmlText, attachments)
Combinação completa sem template: HTML + destinatário + assunto + anexos.
dialog.sendEmail('minhaempresa.com.br', variables.email, 'Contrato', '<p>Segue o contrato.</p>', ['https://example.com/contrato.pdf']);
dialog.sendSMS(phoneNumber, message, type)
Envia SMS via provedor configurado. O número é normalizado internamente. type deve ser 'Transactional' ou 'Promotional'.
⚠️ Lança RuntimeException se
messagevier vazia. Valide antes de chamar.
dialog.sendSMS(variables.celular, 'Seu código é ' + variables.codigo, 'Transactional');
dialog.sendChatHistoryEmail(domain, to, subject)
Envia por e-mail o histórico de mensagens trocadas na conversa atual. Útil em encerramento de atendimento.
dialog.sendChatHistoryEmail('minhaempresa.com.br', variables.emailCliente, 'Histórico do seu atendimento');
Sinais e Subprocessos
dialog.createSubProcess(channel, gdId, variables, properties, contactId)
Inicia um subprocesso (novo diálogo) em outro canal/contato com variáveis e propriedades pré-carregadas. Cria nova sessão de diálogo independente da atual.
⚠️ Subprocessos rodam em paralelo, fora do controle do fluxo atual.
var vars = { protocolo: variables.protocolo };
var props = { origem: 'callback-pos-atendimento' };
dialog.createSubProcess('whatsapp', 'gd-pesquisa-satisfacao', vars, props, variables.contactId);
dialog.emitSignal(signalName, payload)
Emite um sinal nomeado que acorda outros fluxos aguardando por ele via awaitSignal.
dialog.emitSignal('cpf-validado-' + variables.cpf, JSON.stringify({status: 'ok'}));
dialog.awaitSignal(signalName)
Suspende a execução do fluxo até que um sinal nomeado seja emitido.
⚠️ Sem timeout configurado, o fluxo pode ficar suspenso indefinidamente. Combine com
createNamedTimeout.
dialog.awaitSignal('confirmacao-pagamento-' + variables.protocolo);
dialog.stopAwaitingSignal(signalName)
Cancela a espera por um sinal nomeado (libera o fluxo que estava aguardando).
dialog.stopAwaitingSignal('confirmacao-pagamento-' + variables.protocolo);
dialog.shareMedia(destinationSessionId, sideFilter, mediaIdFilter)
Compartilha mídias da sessão atual com outra sessão. sideFilter limita por lado ('user'/'bot') e mediaIdFilter seleciona uma mídia específica.
dialog.shareMedia(variables.destinationSessionId, 'user', variables.mediaId);
Atendentes
dialog.findUserById(id)
Busca um atendente pelo ID, incluindo suas variáveis adicionais configuradas no cadastro (user.variables). Retorna null se não encontrado.
var atendente = dialog.findUserById('abc-123');
if (atendente != null) {
dialog.variables.set('nomeAtendente', atendente.firstName);
dialog.variables.set('regiao', atendente.variables['regiao']);
}
dialog.findUserByUsername(name)
Busca um atendente pelo username. Retorna apenas os campos base do cadastro — variáveis adicionais não são carregadas (use findUserById para obtê-las).
var atendente = dialog.findUserByUsername('joao.silva');
if (atendente != null) {
dialog.variables.set('grupoAtendente', atendente.groupName);
}
Timeouts Nomeados
dialog.createNamedTimeout(name, timeout, targetNode, sourceCode)
Cria um timeout que dispara após timeout segundos. Ao expirar, vai para targetNode e/ou executa sourceCode JS. Pode ser cancelado via deleteNamedTimeout.
⚠️ O parâmetro
targetNodeestá nomeadotargetNoneno código original — provável typo histórico. Trate como o nó destino.
// Se o usuário não responder em 5 minutos, ir para o nó de despedida
dialog.createNamedTimeout('inatividade', 300, 'node-despedida', null);
dialog.deleteNamedTimeout(name)
Cancela um timeout nomeado previamente agendado. Não-op se o timeout não existir.
dialog.deleteNamedTimeout('inatividade');
Contadores
dialog.incrementCounter(counterName, variable, step)
Incrementa o contador em step unidades e grava o resultado na variável informada. Cria o contador automaticamente na primeira invocação (começando em 0).
dialog.incrementCounter('protocoloAtendimento', 'numProtocolo', 1);
dialog.incrementCounter(counterName, destinationVariable, prefix, step, startAt)
Versão completa: além de incrementar, aplica prefixo ao valor e permite definir valor inicial.
dialog.incrementCounter('protocolo2024', 'protocolo', 'PROT-2024-', 1, 1000);
Validação de Dados — DataValid
dialog.checkPFBasica(cpf, data)
Validação cadastral básica — confronta o CPF com dados cadastrais (nome, data nascimento, etc). Não exige mídias.
var payload = JSON.stringify({nome: variables.nome, dataNascimento: variables.dataNasc});
if (!dialog.checkPFBasica(variables.cpf, payload)) { /* tratar erro */ }
dialog.checkPFCompleta(cpf, data, mediasJson)
Validação cadastral completa com mídias anexas (foto do documento). mediasJson é opcional.
⚠️ Se
mediasJsonfor JSON malformado, retornafalsesilenciosamente.
dialog.checkPFCompleta(variables.cpf, JSON.stringify({nome: variables.nome}), JSON.stringify([variables.mediaDocumento]));
dialog.checkPFDigital(cpf, data, mediasJson)
Validação biométrica digital (impressão digital).
dialog.checkPFDigital(variables.cpf, JSON.stringify({dedo: variables.digital}), JSON.stringify([variables.mediaDigital]));
dialog.checkPFFacial(cpf, data, mediasJson)
Validação facial — confronta selfie do titular com base biométrica facial governamental.
dialog.checkPFFacial(variables.cpf, JSON.stringify({nome: variables.nome}), JSON.stringify([variables.selfie]));
dialog.checkPFFacialDigital(cpf, data, mediasJson)
Validação facial + digital combinada.
dialog.checkPFFacialDigital(variables.cpf, JSON.stringify({nome: variables.nome}), JSON.stringify([variables.selfie, variables.digital]));
dialog.checkPFFacialQrCode(cpf, data, mediasJson)
Validação facial via captura por QR Code (uso típico em desktop/totem que redireciona para o celular do usuário).
dialog.checkPFFacialQrCode(variables.cpf, JSON.stringify({sessao: variables.sessao}), JSON.stringify([variables.qrCode]));
Atendimento por Vídeo
dialog.rejectVideo(reason)
Recusa uma chamada de vídeo em andamento, propagando o motivo para o chamador. Use quando o fluxo identifica que o atendimento por vídeo não pode prosseguir.
dialog.rejectVideo('Fora do horário de atendimento por vídeo.');
Observações finais
- As assinaturas
dialog.sendToAssistant(...)são da integração legada v1; para novos fluxos, prefiradialog.sendToAssistantV2(...)quando o projeto tiver essa integração configurada. - Operações externas, como REST, formulários, sinais, DataValid e assistentes, podem continuar em outro momento. Use a área de retorno externo do bloco para tratar o resultado.
- O catálogo de funções
utils.*econtact.*está na referência completa [[botengine-dsl-catalogo|Botengine — Catálogo DSL]]. Este arquivo lista exclusivamente os comandosdialog.*solicitados para as caixas de código.