Funções utils.*
| Família | Finalidade |
|---|---|
utils.* |
Funções auxiliares para cálculo, transformação, comparação, data/hora, codificação e criptografia. |
Como usar
- As funções
utils.*normalmente calculam ou transformam um valor; elas não enviam mensagens nem mudam o fluxo sozinhas. - Combine o resultado com comandos
dialog.*, por exemplodialog.set(...),dialog.say(...)oudialog.go(...). - Datas e horários usam timestamps em milissegundos quando a assinatura recebe
timestamp. - Informe o fuso como identificador IANA, por exemplo
America/Sao_Paulo. - As funções de comparação podem receber valores vindos de variáveis de sessão e ajudam a evitar comparações inconsistentes entre texto, número e booleano.
- A função de criptografia 3DES depende de uma chave configurada no ambiente. Não coloque chaves ou segredos diretamente na caixa de código.
Tempo
utils.nowInSeconds()
Retorna o timestamp atual em segundos (epoch UTC).
var agora = utils.nowInSeconds();
utils.now()
Retorna o timestamp atual em milissegundos (epoch UTC).
var agora = utils.now();
utils.hourOfDay()
Retorna a hora atual (0–23) no fuso UTC.
if (utils.hourOfDay() < 8 || utils.hourOfDay() >= 18) { dialog.go('node-fora-de-horario'); }
utils.hourOfDay(timezone)
Retorna a hora atual (0–23) no fuso informado.
var hora = utils.hourOfDay('America/Sao_Paulo');
utils.minutesOfHour()
Retorna os minutos do horário atual (0–59) em UTC.
var minuto = utils.minutesOfHour();
utils.minutesOfHour(timezone)
Retorna os minutos do horário atual (0–59) no fuso informado.
var minuto = utils.minutesOfHour('America/Sao_Paulo');
utils.getDayOfTheWeek()
Retorna o dia da semana atual em America/Sao_Paulo. 1=segunda … 7=domingo (ISO-8601).
if (utils.getDayOfTheWeek() >= 6) { dialog.go('node-fim-de-semana'); }
utils.getDayOfTheWeek(timestamp)
Dia da semana para timestamp em milissegundos, no fuso America/Sao_Paulo.
var dia = utils.getDayOfTheWeek(Date.now());
utils.getDayOfTheWeek(timezone)
Dia da semana atual no fuso informado.
var dia = utils.getDayOfTheWeek('America/Sao_Paulo');
utils.getDayOfTheWeek(timestamp, timezone)
Dia da semana para timestamp + fuso explícitos.
var dia = utils.getDayOfTheWeek(Date.now(), 'America/Sao_Paulo');
utils.todayAsString(timezone)
Retorna a data atual como string 'yyyy/MM/dd' no fuso informado.
var hoje = utils.todayAsString('America/Sao_Paulo');
utils.nowAsString(timezone, format)
Retorna o momento atual como string no formato e fuso informados.
var agora = utils.nowAsString('America/Sao_Paulo', 'dd/MM/yyyy HH:mm');
utils.compareDates(d1, d2, format)
Compara duas strings de data no formato especificado. Retorna negativo se d1 < d2, zero se iguais, positivo se d1 > d2.
if (utils.compareDates(variables.get('dataVenc'), utils.todayAsString('America/Sao_Paulo'), 'yyyy/MM/dd') < 0) {
dialog.go('node-vencido');
}
utils.getGreetings(language, fuso)
Retorna saudação contextualizada ('Bom dia', 'Boa tarde' ou 'Boa noite') com base na hora e fuso (offset em horas relativo ao UTC, ex: -3 para BRT).
dialog.say(utils.getGreetings('pt', -3) + ', ' + variables.get('nome') + '!');
Comparação e matching
utils.inputMatches(text, patterns)
Verifica se um texto corresponde a algum dos padrões, com tolerância a erros de digitação (Levenshtein normalizado + regex). Remove acentos antes de comparar.
if (utils.inputMatches(input.text, ['sim', 's', 'yes'])) { dialog.go('node-sim'); }
utils.insensitiveInputMatches(text, patterns)
Semelhante ao inputMatches, mas sem normalização de acentos e sem fuzzy. Faz match case-insensitive por regex simples.
if (utils.insensitiveInputMatches(input.text, ['SIM', 'sim', 'Sim'])) { dialog.go('node-confirmado'); }
utils.inputDistance(text, patterns, isOneOf)
Retorna a distância de edição (Levenshtein) entre o texto e a lista de padrões.
isOneOf=true: retorna a menor distância encontrada (positivo = match próximo, -1 = nenhum).isOneOf=false: retorna a menor distância negada (negativo = match próximo, 0 = nenhum).
var dist = utils.inputDistance(input.text, ['cancelar', 'cancel'], true);
if (dist >= 0) { dialog.go('node-cancelamento'); }
utils.equals(value, comparator)
Verifica igualdade com aware de tipo: String por igualdade, Number por valor numérico, Boolean por parse. Use no lugar de === quando o valor pode vir de variáveis de sessão com tipo incerto.
if (utils.equals(variables.get('status'), 'ativo')) { dialog.go('node-ativo'); }
utils.greaterThan(value, comparator)
Verifica se value > comparator (numérico ou string).
if (utils.greaterThan(variables.get('tentativas'), '3')) { dialog.go('node-bloqueio'); }
utils.lessThan(value, comparator)
Verifica se value < comparator.
if (utils.lessThan(variables.get('tentativas'), '3')) { dialog.go('node-tentar-novamente'); }
utils.greaterThanOrEquals(value, comparator)
Verifica se value >= comparator.
if (utils.greaterThanOrEquals(variables.get('idade'), '18')) { dialog.go('node-maior'); }
utils.lessThanOrEquals(value, comparator)
Verifica se value <= comparator.
if (utils.lessThanOrEquals(variables.get('idade'), '17')) { dialog.go('node-menor-idade'); }
utils.contains(text, matcher)
Verifica se um texto contém uma substring.
if (utils.contains(input.text, 'cancelar')) { dialog.go('node-cancelamento'); }
utils.startsWith(text, matcher)
Verifica se um texto começa com uma string específica.
if (utils.startsWith(input.text, '/')) { dialog.go('node-comando'); }
utils.endsWith(text, matcher)
Verifica se um texto termina com uma string específica.
if (utils.endsWith(input.text, '.pdf')) { dialog.go('node-recebeu-pdf'); }
Aleatoriedade
utils.choose(options)
Escolhe aleatoriamente uma opção do array informado (usa SecureRandom). Retorna null se o array for nulo ou vazio.
var saudacao = utils.choose(['Olá!', 'Oi!', 'Bem-vindo!']);
dialog.say(saudacao);
String
utils.truncate(text, maxLength, reverse)
Trunca um texto ao número máximo de caracteres. Com reverse=true mantém os últimos caracteres.
var resumo = utils.truncate(variables.get('descricao'), 100, false);
var sufixo = utils.truncate(variables.get('cpf'), 3, true);
utils.truncate(text, maxLength)
Versão sem reverse — sempre mantém os primeiros maxLength caracteres.
var resumo = utils.truncate(variables.get('descricao'), 100);
Codificação
utils.toBase64(str)
Codifica uma string em Base64 (UTF-8).
var encoded = utils.toBase64(variables.get('payload'));
utils.fromBase64(b64)
Decodifica uma string Base64 para texto. Retorna null se a entrada for nula ou exceder 32 KB.
var decoded = utils.fromBase64(variables.get('payloadBase64'));
Criptografia
utils._3DESEncrypt(message)
Criptografa uma mensagem com 3DES/CBC/PKCS5 usando a chave configurada em env.properties (three-des-key e three-des-iv). Retorna a mensagem cifrada em Base64.
var cifrado = utils._3DESEncrypt(variables.get('dado'));
utils._3DESDecrypt(message)
Descriptografa uma mensagem 3DES/CBC/PKCS5 (a entrada deve ser a saída de _3DESEncrypt).
var original = utils._3DESDecrypt(variables.get('dadoCifrado'));