동적 변수
런타임 값을 전달해 에이전트의 동작을 개인화하세요.
동적 변수를 사용하면 런타임 값을 에이전트의 메시지, 시스템 프롬프트, 도구에 삽입할 수 있습니다. 여러 에이전트를 만들지 않고도 사용자별 데이터로 각 대화를 개인화할 수 있습니다.
개요
동적 변수는 에이전트의 여러 요소에 통합할 수 있습니다.
- 동작과 컨텍스트를 맞춤 설정하는 시스템 프롬프트
- 인사말을 개인화하는 첫 메시지
- 사용자별 데이터를 전달하는 도구 파라미터 및 헤더
동적 변수가 유용한 몇 가지 예는 다음과 같습니다.
- 사용자 이름으로 인사말 개인화
- 응답에 계정 세부 정보 포함
- 도구 호출에 데이터 전달
- 구독 등급에 따라 동작 맞춤 설정
- 대화 ID나 통화 시간 같은 시스템 정보 액세스
동적 변수는 세 가지 값 유형을 지원합니다.
시스템 동적 변수
에이전트는 런타임 구성 없이 모든 대화에서 기본 제공 system__* 변수에 액세스할 수 있습니다. 이 변수는 예약된 system__ 네임스페이스 접두사를 사용하며, 대화가 진행되는 동안 자동으로 업데이트됩니다. 사용자 지정 동적 변수에는 system__ 접두사를 사용할 수 없으며 시스템 변수를 재정의할 수도 없습니다.
†로 표시된 변수는 턴 사이에 변경됩니다. 프롬프트 텍스트에 이러한 변수를 넣으면 프롬프트 캐싱이 방지될 수 있습니다. 대안은 모범 사례를 참조하세요.
에이전트 및 대화 식별 정보
시간 및 시간대
전화 및 메시징
이 변수는 전화 및 메시징 채널에 해당하는 경우 채워집니다.
턴별 대화 상태
대화 기록 형식
system__conversation_history 변수에는 다음 구조의 JSON 객체가 포함됩니다.
각 항목에는 role("user", "agent" 또는 "tool")과 다음 중 하나가 포함됩니다.
message: 턴의 텍스트 콘텐츠tool_requests: 에이전트가 수행한 도구 호출 배열이며, 확인된 파라미터 값을 포함합니다.tool_results: 도구 응답 배열
도구 결과 또는 파라미터에 중첩된 대화 기록이 포함된 경우, 무한한 재귀 확장을 방지하기 위해 자리 표시자(예: [conversation_history (5 turns)])로 삭제 처리됩니다.
이 변수는 웹훅이나 사용자 지정 LLM과 같은 도구에 대화 컨텍스트를 전달하거나, 핸드오프 중 하위 에이전트 프롬프트에 대화 기록을 포함하는 데 유용합니다.
비밀 동적 변수
비밀 동적 변수는 일반 동적 변수와 동일한 방식으로 채워지지만, 에이전트의 시스템 프롬프트나 첫 메시지 일부로 LLM 제공업체에 전송되지 않고 동적 변수 헤더에서만 사용되어야 함을 ElevenAgents에 알립니다.
LLM으로 전송해서는 안 되는 인증 토큰이나 비공개 ID에는 비밀 동적 변수를 사용하세요. 비밀 동적 변수를 만들려면 동적 변수 앞에 secret__를 붙이세요.
비밀 값은 삭제 처리된 상태로 저장되므로, conversations API에서는 <REDACTED>로 반환됩니다.
통화 후 전사 웹훅은 원래 값을 전달하므로 웹훅 엔드포인트가 이를 비밀 정보로
처리하도록 하세요. conversations API에서 다시 읽어야 하는 값에는 secret__ 접두사를 사용하지 마세요.
해당 값은 일반 동적 변수로 전달하거나, 민감하지 않은 식별자를 전달한 뒤
자체 시스템에서 민감한 값을 조회하세요.
도구에서 동적 변수 업데이트
도구 호출은 유효한 JSON 객체를 반환하면 동적 변수를 만들거나 업데이트할 수 있습니다. 추출할 항목을 지정하려면 점 표기법을 사용해 객체 경로를 설정하세요. 필드 또는 경로가 존재하지 않으면 업데이트되지 않습니다.
응답 객체와 점 표기법의 예시:
- 상태는 다음 경로에 해당합니다:
response.status - users 배열의 첫 번째 사용자 이메일은 다음 경로에 해당합니다:
response.users.0.email
동적 변수를 첫 번째 사용자의 이메일로 업데이트하려면 다음과 같이 할당을 설정하세요.

할당은 각 웹훅 도구에서 구성합니다. API 레퍼런스의 도구 할당을 참조하세요.
가이드
사전 요구 사항:
- ElevenLabs 계정
- 구성된 ElevenAgents 에이전트(생성 방법은 빠른 시작 참조)
공개 대화 페이지 통합
공개 대화 페이지는 URL 파라미터를 통해 동적 변수를 지원하므로, 에이전트 링크를 공유할 때 대화를 개인화할 수 있습니다. 이는 개인화된 에이전트를 웹사이트, 이메일 또는 마케팅 캠페인에 삽입할 때 특히 유용합니다.
URL 파라미터 방식
공개 대화 페이지에 동적 변수를 전달하는 방법은 두 가지입니다.
방법 1: Base64 인코딩 JSON
vars 파라미터를 사용하여 변수를 base64 인코딩된 JSON 객체로 전달합니다.
vars 파라미터에는 base64 인코딩된 JSON이 포함됩니다.
방법 2: 개별 쿼리 파라미터
var_ 접두사가 붙은 쿼리 파라미터를 사용해 변수를 전달합니다.
파라미터 우선순위
두 방법을 동시에 사용하면 충돌을 방지하기 위해 개별 var_ 파라미터가 base64 인코딩 변수보다 우선합니다.
이 예시에서 user_name은 base64 인코딩된 vars의 "Jane" 대신 var_user_name의 "John"이 됩니다.
구현 예시
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}})). 이 값들은 최대 한 시간에 한 번만 변경됩니다.
실시간 상태 변수를 도구 파라미터 및 헤더에 바인딩
도구에 †로 표시된 값이 필요하다면 프롬프트에 넣는 대신 도구 파라미터나 헤더에 바인딩하세요. 도구 파라미터는 도구가 호출될 때만 확인되므로 프롬프트 캐싱에 영향을 주지 않습니다. LLM은 이미 대화를 확인할 수 있으므로, 프롬프트에서 {{system__conversation_history}}가 필요한 경우는 드뭅니다.
프롬프트의 턴 카운터 대안 고려
프롬프트에서 {{system__agent_turns}} 같은 턴 카운터를 확인한다면 다음 대안을 고려해 보세요. 고정된 시작 인사말이나 고지에는 first_message를 사용하세요.
첫 응답 동작에는 대화 기록을 중심으로 지시문을 작성할 수 있습니다(예: “첫 답변에서 아직 발신자에게 인사하지 않았다면…”). 이 방식은 LLM이 지시를 따르는 것에 의존하므로 사용하는 모델로 테스트하고, 결과의 신뢰도가 낮다면 턴 카운터를 유지하세요.
카운터가 분기 또는 에스컬레이션 시점만 결정한다면 워크플로 엣지 표현식 조건 또는 구조화된 절차의 If 단계 표현식(예: system__agent_turns >= 5)으로 프롬프트 외부에서 처리할 수 있습니다. 이는 LLM 자체에 해당 값이 필요한 경우에는 적용되지 않습니다.
도구 헤더에만 유지되는 값에만 secret__ 사용
인증 토큰과 API 키 앞에 secret__를 붙이면 도구 헤더에만 바인딩할 수 있으며 LLM으로 전송되지 않습니다. secret__ 값은 conversations API에서 <REDACTED>로 삭제 처리되므로(통화 후 전사 웹훅은 여전히 원래 값을 수신함), conversations API에서 다시 읽어야 하는 값은 일반 동적 변수로 전달하거나 민감하지 않은 식별자를 전달한 후 자체 시스템에서 민감한 값을 조회하세요.
인증에 system__user_id를 사용하지 않기
system__user_id는 추적 및 분석을 위해 클라이언트가 제공하는 값이며 ElevenAgents에서 검증하지 않습니다. 계정 데이터를 노출하기 전에 대화 시작 웹훅, secret__ 헤더 변수의 서명된 토큰 또는 검증 도구 호출을 통해 발신자 신원을 확인하세요.
테스트 및 미리보기를 위한 자리 표시자 구성
프롬프트, 첫 메시지, 도구에서 사용하는 모든 사용자 지정 변수에 대해 dynamic_variable_placeholders에 기본값을 설정하세요. 대시보드의 대화 미리보기와 시뮬레이션 테스트는 대화 시작 웹훅을 실행하지 않으므로, 설정되지 않은 변수는 테스트 중 리터럴 {{variable_name}} 자리 표시자로 남습니다.
문제 해결
변수가 대체되지 않음
다음을 확인하세요.
- 변수 이름이 정확히 일치하는지 확인하세요(대소문자 구분)
- 변수가 이중 중괄호를 사용하는지 확인하세요:
{{variable_name}} - 변수가
dynamic_variables객체에 포함되어 있는지 확인하세요
유형 오류
다음을 확인하세요.
- 변수 값이 예상 유형과 일치하는지 확인하세요
- 값이 문자열, 숫자 또는 불리언만으로 구성되는지 확인하세요




