標準的な条件はほとんどの状況でうまく機能しますが、日付がちょうど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"]
データコネクターの出力
Data ConnectorをProcedureで使う場合、レスポンスから生成された読み取り専用のTemporary attributesを通じてその出力を参照します。ロジックの決定論的な動作を保証するために、別のdata_connector名前空間よりもTemporary attributesの使用を推奨します。
注意:属性名はデータスキーマにある通り正確に参照してください。
一般的な式の例
条件を作成するために使える標準的な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が異なる種類の日付属性をどのように扱うかを理解することが重要です:
顧客定義属性:Intercomに保存された属性(ユーザー、会話、カスタム、または標準)は常にUTC正規化されたISO 8601文字列(例:
2025-05-27T00:00:00Z)として公開されます。データコネクタ属性:外部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行で返信してください。
