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

Fin手続きのコード条件の書き方

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

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

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

プロのコツ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"]

データコネクターの出力

ProcedureData 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に保存された属性(ユーザー、会話、カスタム、または標準)は常にUTC正規化されたISO 8601文字列(例:2025-05-27T00:00:00Z)として公開されます。

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

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

日時の例

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

(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手続きの/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行でのみ返信してください。

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