Orientação em uma expressão com now()

Como teste estou escrevendo um expressão num card de mensagem para contato para testar a hora atual e retornar uma string de acordo com a condição, ou seja, if…then…else
O que há de errado nesta expressão?
@(if (format_time(time(now())) > 12), “Boa Tarde”, “'Bom Dia”)
retorna erro de sintaxe na posição do "Boa Tarde
Obrigado pela atenção

1 curtida

Já descobri que tinha um ) a mais. Retirei e mudou o erro. Agora é ‘Error evaluating’ perto de now() > “12:00”.

Olá @kleverson
a melhor forma para você criar os caminhos de respostas de acordo com o horário do usuário é:

  • Usar um cartão split by expression;
  • Usar a expressão: @(format_time(now()),“ttmm”);
  • Assim você irá formatar o horário do cliente no formato númerico: 1200;
  • No split você deve fazer uma divisão pelos horário dos dias como se fossem números, exemplo: 0000 (00:00) ou 2359 (23:59) e definir o caminho que esse horários devem seguir, exemplo: Bom dia, Boa tarde ou Boa noite.

Da seguinte forma:

Me avisa se te ajudou e se possível marca como Solução :wink:
Qualquer coisa, estou à disposição!

1 curtida

segundo o glossário eu não preciso usar a string de formatação, o retorno da função já é “hh:mm”, se eu nao estiver enganado format_time(time, [, format]): formats time as text according to date, porém não estou conseguindo comparar o retorno com uma string fixa, no caso “12:00”

A expressão está assim: @( if (format_time(time now()) > “12:00”), “Boa Tarde”, “Bom Dia”)

@kleverson, essa maneira que você está tentando estamos usando uma variavél em formato de hora e comparando com um numero.

O ideal até na comparação é tranformar seu horario em um numero para fazer comparações numericas, assim você usando o >12 o ieal seria tranformar a hora inteira em um numero de 00 a 23.

No formato sugerido pelo Amorim a gente consegue aumentar o numero e dividir as comparações.

Esse cartão de split usa também uma comparação de expressões, mas que já está dentro do cartão.

2 curtidas

Ohe só, se eu usar as funções:
@(format_time(time(now()))) retorna a hora atual com formato HH:MM → 17:28 [no momento]
@(format_time(“12:00:00.000000”)) transforma a minha string em hora no formato HH:MM → 12:00

seu tento comparar dois retornos de função, que teoricamente seriam do mesmo tipo, dá erro

@(format_time(time(now())) > format_time(“12:00:00.000000”)) deveria ser 17:28 > 12:00 → true

mas apresenta erro: unable to convert “17:28” to a number. O que eu entendo: não é possível comparar duas strings pois tenta converter strings em number, sendo que não estou usando nenhuma função para converter string em number e é totalmente possível comparar strings segundo o glossário. Penso que há um erro na plataforma. Isto faz parte da programação até do Java Script.

Quanto a usar os cards, ok, é uma solução, porém o uso polui a área de trabalho do fluxo, usar as expressões tornaria a área de trabalho de fluxo muito mais limpa, melhor ainda se eu pudesse fazer isso numa globals.

Vou tentar ainda resolver com expressões, estudando mais o glossário, não conseguindo vou usar o exemplo do card (muito contra gosto :smile: ). Fica a dica para os programadores da plataforma melhorarem o uso de expressões . :+1:

Caminhei um pouco mais… usei
@(format_time(time(now()),“tt”) > format_time(“12:00:00.000000”, “tt”)) → true
Agora vou encadear as expressões para chegar ao resultado desejado
:facepunch:

Consegui com essa expressão:
@(if(format_time(now(), “ttmm”)<1200, “Bom Dia”, “Boa Noite”))

Espero que ajude!!

Valeu @wildney.cavalcante e @Amorim, eu consegui o que eu queria, fica assim:
@(if(format_time(time(now()),“tt”) < format_time(“12:00:00.000000”, “tt”), “Bom dia”, if(format_time(time(now()),“tt”) < format_time(“18:00:00.000000”, “tt”), “Boa tarde”, “Boa noite”)))
Apesar do uso de mais codificação, fica mais limpo no editor de fluxo e totalmente transparente para o contato.