Zum Hauptinhalt springen

Wie man Codebedingungen für Fin Procedures schreibt

Beherrschen Sie Codebedingungen schneller mit Datenattributen, Datumszeit- und Zeitzonenverwaltung, Schleifen und Arrays sowie KI-generierten Codebeispielen.

Verfasst von Beth-Ann Sher

Standardbedingungen funktionieren in den meisten Situationen gut, aber manchmal müssen Sie strengere Regeln erstellen, z. B. prüfen, ob ein Datum genau 30 Tage zurückliegt, oder ob eine Liste einen bestimmten Eintrag enthält.

Die Codeauswertung im Condition step ermöglicht es Ihnen, zuverlässige, deterministische Logik für Ihre Fin Procedures mit Python zu definieren. Wir empfehlen diese Methode für kritische Aktionen, da sie deterministisch und somit zuverlässiger als natürliche Sprache ist.

Profi-Tipp: Die Verwendung von Python-Code in Fin Procedure-Bedingungen bietet präzise, deterministische Logik, die KI-Interpretationen oder Halluzinationen vermeidet. Code läuft schneller als natürliche Sprache, verarbeitet komplexe Vergleiche zuverlässiger und macht Ihre Verzweigungslogik explizit und leichter wartbar.


Die Grundlagen von Codebedingungen

Damit Ihre Logik korrekt ausgeführt wird, muss Ihr Code diese spezifischen Regeln befolgen:

  • Boolesches Ergebnis: Der Ausdruck muss immer zu True oder False ausgewertet werden.

  • Namespace-Zugriff: Sie können Attribute über das inputs-Dictionary abrufen.

Zugriff auf Datenattribute

Sie können Daten aus verschiedenen Quellen mit der spezifischen Namespace-Struktur referenzieren:

  • Firmendaten: inputs["company"]["name"]

  • Benutzerdaten: inputs["user"]["first_name"]

  • Konversationsdaten: inputs["conversation"]["has_attachments"]

  • Temporäre Daten: inputs["temporary"]["order_verified"]

  • Data Connector-Daten: inputs["data_connector"]["Data connector name"]["order_verified"]

Data Connector-Ausgaben

Wenn Sie einen Data Connector in einer Procedure verwenden, referenzieren Sie dessen Ausgaben über die schreibgeschützten Temporary attributes, die aus der Antwort generiert werden. Wir empfehlen die Verwendung von Temporary attributes anstelle eines separaten data_connector-Namespace, um sicherzustellen, dass Ihre Logik deterministisch bleibt.

Hinweis: Attributnamen sollten genau so referenziert werden, wie sie in Ihrem Datenschema erscheinen.


Beispiele für gängige Ausdrücke

Hier sind Standard-Python-Muster, die Sie zum Erstellen Ihrer Bedingungen verwenden können:

Boolesche Prüfungen

Prüfen Sie, ob ein Wert explizit wahr oder falsch ist.

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

String-Vergleiche

Es ist gute Praxis, Strings vor dem Vergleich zu normalisieren (z. B. in Kleinbuchstaben), um Fehler durch Groß-/Kleinschreibung zu vermeiden.

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

Kombinierte Logik

Sie können mehrere Prüfungen mit den Operatoren and / or kombinieren.

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

"Enthält"-Prüfungen

Prüfen Sie, ob ein bestimmter Teilstring in einem größeren String vorhanden ist.

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


Arbeiten mit datetime-Attributen

Codebedingungen haben Zugriff auf das Standard-datetime-Modul von Python, mit dem Sie komplexe zeitbasierte Logik ausführen können.

Verständnis von Zeitzonen und Formatierung

Um Fehler zu vermeiden, ist es entscheidend zu verstehen, wie Intercom verschiedene Arten von Datumsattributen behandelt:

  1. Kunden-definierte Attribute: Attribute, die in Intercom (User, Conversation, Custom oder Standard) gespeichert sind, werden immer als UTC-normalisierte ISO 8601-Strings angezeigt (z. B. 2025-05-27T00:00:00Z).

  2. Data Connector-Attribute: Von externen APIs empfangene Daten werden genau so angezeigt, wie sie empfangen wurden. Es wird keine Normalisierung angewendet. Möglicherweise müssen Sie diese manuell parsen oder in UTC konvertieren, wenn Konsistenz erforderlich ist.

Hinweis: Der gesamte Code innerhalb der Intercom-Sandbox-Umgebung arbeitet standardmäßig in einer UTC-basierten Zeitzone. Die Funktion datetime.datetime.now() gibt immer die aktuelle UTC-Zeit zurück, unabhängig von Ihren lokalen Systemeinstellungen.

Beispiele für datetime

Prüfen, ob die aktuelle Zeit größer als gestern ist

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

Prüfen, ob ein Bestelldatum innerhalb der letzten 30 Tage liegt

Dieses Beispiel vergleicht die aktuelle UTC-Zeit mit einem temporären Bestelldatum-Attribut.


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

Prüfen, ob eine Bestellzeit vor 14 Uhr heute (UTC) liegt

Diese komplexe Prüfung extrahiert die Datums- und Zeitkomponenten, um ein bestimmtes Zeitfenster zu überprüfen.


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

Tipp: Fin ist sich der Zeitzone eines Kunden vollständig bewusst. Wenn Fin während einer Konversation ein datetime-Attribut sammelt, interpretiert es den Wert in der lokalen Zeitzone des Kunden, konvertiert ihn in UTC und speichert ihn.


Schleifen und Arrays

Sie können über Arrays (Listen) von Daten iterieren, um bestimmte Bedingungen zu validieren.

  • Unterstützt: Sie können über ein Array iterieren, um zu prüfen, ob eine bestimmte Bedingung erfüllt ist (z. B. "Hat eine Bestellung in dieser Liste den Status 'fulfilled'?" ).

  • Nicht unterstützt: Sie können nicht über ein Array iterieren, um für jedes Element einen Workflow-Schritt auszuführen. Codebedingungen dienen ausschließlich der Auswertung, nicht der Ausführung von Aktionen.

Beispiel: Prüfen auf eine bestimmte erfüllte Bestellung

Dieser Code prüft eine Liste von Bestellungen, ob eine bestimmte ID existiert UND ob diese Bestellung erfüllt ist.

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


Code mit KI generieren

Wenn Sie sich mit Python nicht wohlfühlen, können Sie ein LLM (wie Claude oder ChatGPT) verwenden, um diese Snippets für Sie zu generieren. Verwenden Sie die folgende Eingabeaufforderung, um sicherzustellen, dass die KI die spezifischen Einschränkungen der Intercom-Codebedingungen versteht.

Kopieren und fügen Sie diese Eingabeaufforderung in Ihr KI-Tool ein:

Sie helfen mir, Fin Procedure /Condition Codeausdrucksauswertungen zu schreiben.

Ihre Aufgabe: Wenn ich eine Bedingung in natürlicher Sprache beschreibe, antworten Sie mit einem einzeiligen Python-Ausdruck, der zu True oder False ausgewertet wird. Geben Sie keine Erklärungen oder zusätzlichen Text an.

Kontext:

  • Diese sind für /Condition-Schritte in Fin Procedures.

  • Fin wertet Verzweigungen von oben nach unten aus und führt die erste Bedingung aus, die True ist.

  • Bevorzugen Sie Codeauswertung (Python) gegenüber KI-/natürlicher Sprachevaluation für Zuverlässigkeit.

Datenmodell:

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

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

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

Python-Regeln:

  • Der Ausdruck muss gültiger Python-Code sein und einen booleschen Wert zurückgeben.

  • Verwenden Sie Vergleiche, logische Operatoren und einfache Schleifen/List Comprehensions.

  • Für Daten: Sie können datetime verwenden. Kunden-datetime-Attribute sind UTC-ISO-Strings (z. B. "2025-05-27T00:00:00Z").

Ausgabeformat: Antworten Sie nur mit dem Python-Ausdruck in einer Zeile.

Hat dies deine Frage beantwortet?