Passar para o conteúdo principal

Como escrever condições de código para Fin Procedures

Domine condições de código mais rápido com atributos de dados, manipulação de datetime e timezone, loops e arrays, e exemplos de código gerados por IA.

Condições padrão funcionam bem para a maioria das situações, mas às vezes você precisa criar regras mais rigorosas, como verificar se uma data é exatamente 30 dias atrás ou se uma lista contém um item específico.

A avaliação de código no passo de Condição permite definir lógica confiável e determinística para seus Fin Procedures usando Python. Recomendamos usar este método para ações críticas porque é determinístico e, portanto, mais confiável que linguagem natural.

Dica profissional: Usar código Python nas condições do Fin Procedure oferece lógica precisa e determinística que evita interpretação ou alucinação da IA. O código roda mais rápido que avaliação em linguagem natural, lida com comparações complexas de forma mais confiável e torna sua lógica de ramificação explícita e mais fácil de manter.


O básico das condições de código

Para garantir que sua lógica funcione corretamente, seu código deve seguir estas regras específicas:

  • Resultado booleano: A expressão deve sempre avaliar para True ou False.

  • Acesso ao namespace: Você pode acessar atributos usando o dicionário inputs.

Acessando atributos de dados

Você pode referenciar dados de várias fontes usando a estrutura específica do namespace:

  • Dados da empresa: inputs["company"]["name"]

  • Dados do usuário: inputs["user"]["first_name"]

  • Dados da conversa: inputs["conversation"]["has_attachments"]

  • Dados temporários: inputs["temporary"]["order_verified"]

  • Dados do Data Connector: inputs["data_connector"]["Data connector name"]["order_verified"]

Saídas do Data connector

Ao usar um Data Connector em um Procedure, referencie suas saídas via os atributos temporários somente leitura gerados a partir da resposta. Recomendamos usar atributos temporários em vez de um namespace data_connector separado para garantir que sua lógica permaneça determinística.

Nota: Os nomes dos atributos devem ser referenciados exatamente como aparecem no seu esquema de dados.

Verificando códigos de status para tratamento avançado de erros

O status_code de uma chamada do data connector é exposto como um atributo de saída. Use-o em um passo de Condição para ramificar em códigos HTTP específicos para tratamento avançado de falhas.

Verifique se um data connector retornou uma resposta de erro:

inputs["data_connector"]["Your connector name"]["status_code"] >= 400

Trate um código de erro específico:

inputs["data_connector"]["Your connector name"]["status_code"] == 404


Exemplos comuns de expressões

Aqui estão padrões padrão de Python que você pode usar para construir suas condições:

Verificações booleanas

Verifique se um valor é explicitamente verdadeiro ou falso.

inputs["temporary"]["order_verified"] == False

Comparações de strings

É prática recomendada normalizar strings (por exemplo, torná-las minúsculas) antes de compará-las para evitar erros de sensibilidade a maiúsculas e minúsculas.

inputs["temporary"]["order_fulfillment_status"].lower() == "partial"

Lógica combinada

Você pode combinar várias verificações usando os operadores and / or.

inputs["temporary"]["order_verified"] == True and inputs["temporary"]["order_fulfillment_status"].lower() == "partial"

Verificações de "Contém"

Verifique se uma substring específica existe dentro de uma string maior.

"uk" in inputs["temporary"]["url"].lower()


Trabalhando com atributos datetime

Condições de código têm acesso ao módulo padrão datetime do Python, permitindo realizar lógica complexa baseada em tempo.

Entendendo fusos horários e formatação

Para evitar erros, é fundamental entender como o Intercom lida com diferentes tipos de atributos de data:

  1. Atributos definidos pelo cliente: Atributos armazenados no Intercom (Usuário, Conversa, Personalizado ou Padrão) são sempre expostos como strings ISO 8601 normalizadas em UTC (ex.: 2025-05-27T00:00:00Z).

  2. Atributos do data connector: Datas recebidas de APIs externas são expostas exatamente como recebidas. Nenhuma normalização é aplicada. Pode ser necessário analisar ou converter manualmente para UTC se for necessária consistência.

Nota: Todo código dentro do ambiente sandbox do Intercom opera em um fuso horário baseado em UTC por padrão. A função datetime.datetime.now() sempre retorna a hora atual em UTC, independentemente das configurações do seu sistema local.

Exemplos de datetime

Verifique se o horário atual é maior que ontem

(datetime.datetime.now() > datetime.datetime.now() - datetime.timedelta(days=1)) and len(inputs["temporary"]["Get movies"]) > 0

Verifique se a data de um pedido está dentro dos últimos 30 dias

Este exemplo compara o horário UTC atual com um atributo temporário de data do pedido.


current_time = datetime.datetime.now(datetime.timezone.utc)

order_date = datetime.datetime.fromisoformat(
inputs["temporary"]["order_date"]
)

difference = current_time - order_date

difference.days <= 30

Verifique se o horário de um pedido é antes das 14h de hoje (UTC)

Esta verificação complexa extrai os componentes de data e hora para verificar uma janela de corte específica.


d = datetime.datetime.now(datetime.timezone.utc).date()

start_of_day = datetime.datetime.combine(
d,
datetime.time(0, tzinfo=datetime.timezone.utc),
)

end_time = datetime.datetime.combine(
d,
datetime.time(14, 0, tzinfo=datetime.timezone.utc),
)

order_time = datetime.datetime.fromisoformat(
inputs["temporary"]["order_time"]
)

start_of_day < order_time < end_time

Dica: Fin está totalmente ciente do fuso horário do cliente. Quando o Fin coleta um atributo datetime durante uma conversa, ele interpreta o valor no fuso horário local do cliente, converte para UTC e armazena.


Loops e arrays

Você pode iterar sobre arrays (listas) de dados para validar condições específicas.

  • Suportado: Você pode iterar sobre um array para verificar se uma condição específica é atendida (por exemplo, "Algum pedido nesta lista tem status 'fulfilled'?" ).

Exemplo: Verifique um pedido específico cumprido

Este código verifica uma lista de pedidos para ver se um ID específico existe E se esse pedido está cumprido.

any(str(o["id"]) == "4308316520546" and o.get("fulfillment_status") == "fulfilled" for o in inputs["data_connector"] ["DC name"] ["…"])


Gerar código com IA

Se você não se sente confortável escrevendo Python, pode usar um LLM (como Claude ou ChatGPT) para gerar esses trechos para você. Use o prompt abaixo para garantir que a IA entenda as restrições específicas das condições de código do Intercom.

Copie e cole este prompt na sua ferramenta de IA:

Você está me ajudando a escrever expressões de avaliação de código para Fin Procedure /Condition.

Sua tarefa: Quando eu descrever uma condição em linguagem natural, responda com uma expressão Python de uma linha que avalie para True ou False. Não forneça explicações ou texto extra.

Contexto:

  • Estas são para passos /Condition em procedimentos Fin.

  • Fin avalia os ramos de cima para baixo e executa a primeira condição que for True.

  • Prefira avaliação de código (Python) em vez de avaliação por IA/linguagem natural para maior confiabilidade.

Modelo de dados:

  • inputs["user"]["first_name"], inputs["company"]["name"]

  • inputs["conversation"]["has_attachments"]

  • inputs["temporary"]["order_verified"]

Regras do Python:

  • A expressão deve ser Python válido e retornar um booleano.

  • Use comparações, operadores lógicos e loops/compreensões simples.

  • Para datas: Você pode usar datetime. Atributos datetime do cliente são strings ISO UTC (ex.: "2025-05-27T00:00:00Z").

Formato de saída: Responda apenas com a expressão Python em uma linha.

Respondeu à sua pergunta?