動的変数
実行時の値を渡して、エージェントの動作をパーソナライズします。
動的変数 を使用すると、実行時の値をエージェントのメッセージ、システムプロンプト、ツールに挿入できます。複数のエージェントを作成しなくても、ユーザー固有のデータで各会話をパーソナライズできます。
概要
動的変数は、エージェントのさまざまな要素に組み込めます。
- 動作やコンテキストをカスタマイズする システムプロンプト
- 挨拶をパーソナライズする 最初のメッセージ
- ユーザー固有のデータを渡す ツールパラメータとヘッダー
動的変数が役立つ例をいくつか紹介します。
- ユーザー名を使った 挨拶のパーソナライズ
- 応答への アカウント詳細の追加
- ツール呼び出しへの データの受け渡し
- サブスクリプションプランに応じた 動作のカスタマイズ
- 会話IDや通話時間などの システム情報へのアクセス
動的変数では、3種類の値をサポートしています。
システム動的変数
エージェントは、実行時の設定なしで、すべての会話で組み込みの system__* 変数にアクセスできます。これらの変数には予約済みの system__ 名前空間が付いており、会話の進行に合わせて自動的に更新されます。カスタム動的変数で system__ プレフィックスを使用したり、システム変数を上書きしたりすることはできません。
†が付いた変数はターン間で変化します。プロンプトテキストに配置すると、プロンプトキャッシュが妨げられる場合があります。代替手段については、ベストプラクティスを参照してください。
エージェントと会話の識別情報
時刻とタイムゾーン
テレフォニーとメッセージング
以下の変数は、テレフォニーおよびメッセージングチャネルで該当する場合に設定されます。
ターンごとの会話状態
会話履歴の形式
system__conversation_history 変数には、次の構造を持つJSONオブジェクトが含まれます。
各エントリには role("user"、"agent"、または "tool")と、次のいずれかが含まれます。
message:ターンのテキストコンテンツtool_requests:エージェントが実行したツール呼び出しの配列。解決済みのパラメータ値を含みますtool_results:ツール応答の配列
ツール結果またはパラメータにネストされた会話履歴が含まれる場合、無制限の再帰的な展開を避けるため、プレースホルダー([conversation_history (5 turns)] など)に置き換えられます。
この変数は、会話コンテキストをツール(WebhookやカスタムLLMなど)に渡す場合や、ハンドオフ時にサブエージェントプロンプトへ会話履歴を含める場合に便利です。
シークレット動的変数
シークレット動的変数は通常の動的変数と同じ方法で設定されますが、動的変数ヘッダーでのみ使用し、エージェントのシステムプロンプトや最初のメッセージの一部としてLLMプロバイダーに送信しないことをElevenAgentsに示します。
LLMに送信すべきでない認証トークンや非公開IDには、シークレット動的変数を使用します。シークレット動的変数を作成するには、動的変数に secret__ をプレフィックスとして付けます。
シークレット値はマスキングされて保存されるため、conversations APIでは <REDACTED> として返されます。
通話後の文字起こしWebhookでは元の値が配信されるため、Webhookエンドポイントで
シークレットとして処理してください。conversations APIから読み戻す必要がある値には、secret__ プレフィックスを使用しないでください。
そのような値は通常の動的変数として渡すか、機密性のない識別子を渡して、
自身のシステムで機密値を検索してください。
ツールから動的変数を更新する
ツール呼び出しは、有効なJSONオブジェクトを返す場合、動的変数を作成または更新できます。抽出する内容を指定するには、ドット記法でオブジェクトパスを設定します。フィールドまたはパスが存在しない場合は、何も更新されません。
応答オブジェクトとドット記法の例:
- ステータスは次のパスに対応します:
response.status - users配列内の最初のユーザーのメールアドレスは、次のパスに対応します:
response.users.0.email
動的変数を最初のユーザーのメールアドレスに更新するには、次のように割り当てを設定します。

割り当てはWebhookツールごとに設定します。APIリファレンスのツールの割り当てを参照してください。
ガイド
前提条件:
- ElevenLabsアカウント
- 設定済みのElevenAgentsエージェント(作成するにはクイックスタートを参照)
公開通話ページのインテグレーション
公開通話ページでは、URLパラメータを通じて動的変数をサポートしています。エージェントリンクを共有する際に会話をパーソナライズできます。これは、パーソナライズされたエージェントをウェブサイト、メール、マーケティングキャンペーンに埋め込む場合に特に便利です。
URLパラメータの方法
公開通話ページに動的変数を渡す方法は2つあります。
方法1:Base64エンコードされたJSON
vars パラメータを使用して、Base64エンコードされたJSONオブジェクトとして変数を渡します。
vars パラメータには、Base64エンコードされたJSONが含まれます。
方法2:個別のクエリパラメータ
var_ プレフィックス付きのクエリパラメータを使用して変数を渡します。
パラメータの優先順位
両方の方法を同時に使用すると、競合を防ぐため、個別の var_ パラメータがBase64エンコードされた変数より優先されます。
この例では、user_name は "Jane"(Base64エンコードされた vars から)ではなく、"John"(var_user_name から)になります。
実装例
JavaScriptでのURL生成
PythonでのURL生成
手動でのURL構築
ベストプラクティス
現在時刻をプロンプトに入れる代わりにタイムゾーンを設定する
システムプロンプト、ワークフローノード、プロシージャ内の変数は、ターンごとに解決されます。ターン間で値が変化すると、プロンプトをキャッシュできず、コストとレイテンシーが増加します。{{system__time_utc}} と {{system__time_second}} はターンごとに変化し、{{system__time}} と {{system__time_minute}} は毎分変化します。
エージェントに現在の日付と時刻を伝えるには、プロンプトテキストに {{system__time}} または {{system__time_utc}} を入れる代わりに、システムプロンプトエディターのタイムゾーンボタン(conversation_config.agent.prompt.timezone)でタイムゾーンを設定してください。タイムゾーンを設定すると、プラットフォームはキャッシュされたプロンプトプレフィックスの外側に現在の日付と時刻を追加するため、システムプロンプトはターンをまたいでキャッシュされ続けます。タイムゾーンを設定しない場合、エージェントは現在の日付と時刻を受け取りません。
プロンプト内に日付または時を含める必要がある場合は、{{system__time_date}}、{{system__time_hour}}、{{system__timezone}} を組み合わせてください(例:Today is {{system__time_date}}, hour {{system__time_hour}} ({{system__timezone}}))。これらは最大で1時間に1回しか変化しません。
ライブ状態変数をツールパラメータとヘッダーにバインドする
ツールで†が付いた値が必要な場合は、プロンプトに入れるのではなく、ツールパラメータまたはヘッダーにバインドしてください。ツールパラメータはツールが呼び出されたときにのみ解決されるため、プロンプトキャッシュには影響しません。LLMはすでに会話を認識しているため、{{system__conversation_history}} がプロンプトで必要になることはほとんどありません。
プロンプト内のターンカウンターの代替手段を検討する
プロンプトで {{system__agent_turns}} などのターンカウンターを確認している場合は、以下の代替手段を検討してください。固定の開始時の挨拶や開示には first_message を使用します。
最初の応答時の動作には、会話履歴を軸に指示を記述できます(例:“On your first reply, when you have not yet greeted the caller…”)。これはLLMが指示に従うことに依存するため、使用するモデルでテストし、結果の信頼性が低い場合はターンカウンターを維持してください。
カウンターが分岐またはエスカレーションのタイミングを決めるだけの場合は、ワークフローエッジの式条件または構造化プロシージャのIfステップ式(system__agent_turns >= 5 など)で、プロンプトの外部で処理できます。LLM自体が値を必要とするケースには対応しません。
ツールヘッダー内に留まる値にのみsecret__を使用する
認証トークンとAPIキーには secret__ をプレフィックスとして付け、ツールヘッダーにのみバインドでき、LLMには送信されないようにします。secret__ の値はconversations APIで <REDACTED> としてマスキングされるため(通話後の文字起こしWebhookは元の値を引き続き受け取ります)、conversations APIから読み戻す必要がある値は通常の動的変数として渡すか、機密性のない識別子を渡して自身のシステムで機密値を検索してください。
認証にsystem__user_idを使用しない
system__user_id はトラッキングと分析のためにクライアントから提供されるものであり、ElevenAgentsによって検証されません。アカウントデータを公開する前に、会話開始Webhook、secret__ ヘッダー変数内の署名付きトークン、または検証ツール呼び出しを通じて発信者のIDを検証してください。
テストとプレビュー用のプレースホルダーを設定する
プロンプト、最初のメッセージ、ツールで使用するすべてのカスタム変数について、dynamic_variable_placeholders にデフォルト値を設定してください。ダッシュボードでの会話プレビューとシミュレーションテストでは会話開始Webhookは実行されないため、未設定の変数はテスト中にリテラルの {{variable_name}} プレースホルダーとして残ります。
トラブルシューティング
変数が置換されない
次の点を確認してください:
- 変数名が完全に一致している(大文字と小文字を区別)
- 変数で二重波かっこを使用している:
{{variable_name}} - 変数が
dynamic_variablesオブジェクトに含まれている
型エラー
次の点を確認してください:
- 変数値が想定される型と一致している
- 値が文字列、数値、またはブール値のみである




