Comandos dialog.*

Prev Next

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 null e 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 em dialog.go(...) e comandos semelhantes precisam existir no fluxo.
  • variables, input e session representam 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) e sendToAssistantV2 no 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 mediaId já tenha sido produzido por um nó anterior (collectMedia, etc). Não funciona com URLs externas — para isso use imageAnalysisByUrl.

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 message vier 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 targetNode está nomeado targetNone no 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 mediasJson for JSON malformado, retorna false silenciosamente.

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, prefira dialog.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.* e contact.* está na referência completa [[botengine-dsl-catalogo|Botengine — Catálogo DSL]]. Este arquivo lista exclusivamente os comandos dialog.* solicitados para as caixas de código.