メインコンテンツにスキップ

Fin Proceduresのコード条件の書き方

データ属性、日時とタイムゾーン処理、ループと配列、AI生成コード例でコード条件をより速く習得しましょう。

標準的な条件はほとんどの状況でうまく機能しますが、日付がちょうど30日前かどうかを確認したり、リストに特定の項目が含まれているかを調べたりするような、より厳密なルールを作る必要がある場合もあります。

Condition stepでのコード評価により、Pythonを使ってFin Proceduresの信頼性が高く決定論的なロジックを定義できます。重要なアクションにはこの方法を推奨します。自然言語よりも決定論的で信頼性が高いためです。

プロのヒント:Fin Procedureの条件でPythonコードを使うと、AIの解釈や幻覚を避ける正確で決定論的なロジックが得られます。コードは自然言語評価より高速に動作し、複雑な比較もより確実に処理し、分岐ロジックを明確かつ保守しやすくします。


コード条件の基本

ロジックが正しく動作するために、コードは以下の特定のルールに従う必要があります:

  • ブール結果:式は常にTrueかFalseに評価されなければなりません。

  • 名前空間アクセス:inputs辞書を使って属性にアクセスできます。

データ属性へのアクセス

特定の名前空間構造を使って様々なソースのデータを参照できます:

  • 会社データ:inputs["company"]["name"]

  • ユーザーデータ:inputs["user"]["first_name"]

  • 会話データ:inputs["conversation"]["has_attachments"]

  • 一時データ:inputs["temporary"]["order_verified"]

  • データコネクターデータ:inputs["data_connector"]["Data connector name"]["order_verified"]

データコネクターの出力

ProcedureでData Connectorを使う場合、レスポンスから生成される読み取り専用のTemporary attributesを通じてその出力を参照します。ロジックの決定論性を保つために、別のdata_connector名前空間よりTemporary attributesの使用を推奨します。

注意:属性名はデータスキーマにある通り正確に参照してください。

高度なエラー処理のためのステータスコードの確認

データコネクター呼び出しのstatus_codeは出力属性として公開されます。特定のHTTPレスポンスコードで分岐するためにCondition stepで使用してください。

データコネクターがエラー応答を返したか確認する:

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

特定のエラーコードを処理する:

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


一般的な式の例

条件を作るために使える標準的なPythonパターンを紹介します:

ブールチェック

値が明示的にtrueかfalseかを確認します。

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

文字列比較

大文字小文字の誤りを避けるため、比較前に文字列を正規化(例:小文字化)するのがベストプラクティスです。

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

複合ロジック

and / or演算子を使って複数のチェックを組み合わせることができます。

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

「含む」チェック

特定の部分文字列が大きな文字列内に存在するか確認します。

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


日時属性の扱い

コード条件はPythonの標準datetimeモジュールにアクセスでき、複雑な時間ベースのロジックを実行できます。

タイムゾーンとフォーマットの理解

エラー防止のため、Intercomが異なる種類の日付属性をどのように扱うか理解することが重要です:

  1. 顧客定義属性:Intercomに保存された属性(User、Conversation、Custom、Standard)は常にUTC正規化されたISO 8601文字列(例:2025-05-27T00:00:00Z)として公開されます。

  2. データコネクター属性:外部APIから受け取った日付は受け取ったまま公開されます。正規化はされません。整合性が必要な場合は手動でUTCに変換または解析する必要があります。

注意:Intercomサンドボックス環境内のすべてのコードはデフォルトでUTCベースのタイムゾーンで動作します。datetime.datetime.now()はローカルシステム設定に関係なく常に現在のUTC時間を返します。

datetime.datetime.now()はシミュレーションで設定したシミュレーション時間も無視します。常に実際の現在日時を読み取るため、シミュレーション時間を設定してもコード条件の評価は変わりません。日時ベースのコード分岐をテストするには、分岐が発生する実際の日付でシミュレーションを実行するか、代わりに自然言語条件を使ってください。

日時の例

現在時刻が昨日より後か確認する

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

注文日が過去30日以内か確認する

この例は現在のUTC時刻と一時的な注文日属性を比較しています。


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

注文時間が今日の午後2時(UTC)より前か確認する

この複雑なチェックは特定の締切時間を検証するために日付と時刻の要素を抽出します。


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

ヒント:Finは顧客のタイムゾーンを完全に認識しています。Finが会話中に日時属性を収集すると、その値を顧客の現地タイムゾーンで解釈し、UTCに変換して保存します。


ループと配列

配列(リスト)のデータを繰り返し処理して特定の条件を検証できます。

  • 対応:特定の条件を満たすかどうかを確認するために配列を繰り返し処理できます(例:「このリスト内のどの注文が'fulfilled'ステータスか?」)。

例:特定のfulfilled注文を確認する

このコードは注文リストに特定のIDが存在し、かつその注文がfulfilledかどうかをチェックします。

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


AIでコード生成

Pythonの記述に自信がない場合は、ClaudeやChatGPTのようなLLMを使ってこれらのスニペットを生成できます。以下のプロンプトを使い、Intercomのコード条件の特定制約をAIに理解させてください。

このプロンプトをAIツールにコピー&ペーストしてください:

Fin Procedure /Conditionコード評価式の作成を手伝っています。

あなたの仕事:自然言語で条件を説明したら、TrueかFalseに評価される1行のPython式で応答してください。説明や余計なテキストは不要です。

コンテキスト:

  • これはFin proceduresの/Conditionステップ用です。

  • Finは上から下へ分岐を評価し、最初にTrueとなる条件を実行します。

  • 信頼性のためにAI/自然言語評価よりコード評価(Python)を優先してください。

データモデル:

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

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

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

Pythonルール:

  • 式は有効なPythonであり、ブール値を返す必要があります。

  • 比較、論理演算子、単純なループ/内包表現を使ってください。

  • 日付について:datetimeを使えます。顧客の日時属性はUTC ISO文字列(例:「2025-05-27T00:00:00Z」)です。

出力形式:Python式を1行だけで返信してください。

こちらの回答で解決しましたか?