동적 변수는 특정 통화에서 에이전트에 데이터를 삽입할 수 있도록 해주는 특수 문법입니다.
이를 통해 대화의 핵심 흐름을 유지하면서도 에이전트의 응답을 개인화할 수 있습니다. 동적 변수는 인사말을 맞춤화하거나, 특정 정보를 참조하거나, 상황에 따라 응답을 조정하는 데 적합합니다.


1. 사용 가능한 영역

동적 변수는 다음과 같은 영역에서 사용할 수 있습니다:

  • 프롬프트
  • 첫 메시지

2. 동적 변수 추가 및 테스트

1

프롬프트에 동적 변수 추가

동적 변수는 중괄호({{ }})로 둘러싸인 자리 표시자입니다. 예를 들어:

"안녕하세요 {{user_name}}님, 최근 {{product_name}} 상품을 구매하신 것으로 확인됩니다. 오늘 어떻게 도와드릴까요?"
2

동적 변수 테스트

배포 전에 대시보드에서 동적 변수를 테스트합니다. 테스트를 통해 동적 변수의 올바른 작동을 확인할 수 있습니다.

테스트 프리셋에서 설정한 동적 변수는 웹에서 테스트 용도로만 사용됩니다. 실제 인바운드 콜의 경우 다음 스텝을 참조하여 인바운드 웹훅 서버를 구성하시기 바랍니다.

3

프로덕션에 구현

대시보드에서 [웹훅 설정] 탭의 인바운드 웹훅 URL 필드를 사용하여 웹훅 URL을 설정합니다. 웹훅은 다음과 같은 payload로 POST 요청을 처리하도록 구성합니다:

{
  "event": "call_inbound",
  "call_inbound": {
    "from_number": "+12137771234",
    "to_number": "+12137771235"
  }
}

응답 json에 동적 변수를 반환합니다:

  • dynamic_variables: 인바운드 콜에 대한 동적 변수를 설정하고자 할 때 사용합니다.
  • metadata: 인바운드 콜에 대한 메타데이터를 설정하고자 할 때 사용합니다. 통화와 관련된 내부 고객 ID와 같은 정보를 저장할 수 있습니다. 이 데이터는 통화 데이터 웹훅(webhook)에서 그대로 반환됩니다.
{
  "call_inbound": {
    "dynamic_variables": {
      "user_name": "김철수",
      "product_name": "아이폰 16 프로"
    },
    "metadata": {
      "user_id": "1a7d632b-76fe-4326-90dc-487935g59212"
    }
  }
}

Tip: payload는 고정값으로 변경할 수 없으며, 응답 json은 사용하는 동적변수에 맞게 수정 가능합니다. 응답 json의 key값이 프롬프트의 동적변수와 일치하면 자동으로 채워집니다.

프롬프트: "안녕하세요 {{user_name}}님, 오늘 어떻게 도와드릴까요?"
결과: "안녕하세요 김철수님, 오늘 어떻게 도와드릴까요?"

3. 예외 상황

동적 변수에 값이 할당되지 않은 경우, 출력에서 변수가 그대로 유지됩니다.

프롬프트: "안녕하세요 {{user_name}}님, 오늘 어떻게 도와드릴까요?"
결과: "안녕하세요 {{user_name}}님, 오늘 어떻게 도와드릴까요?"

이는 누락된 변수가 빈 문자열로 대체되거나 오류가 발생하는 대신 원래 형태({{변수이름}})로 표시됨을 의미합니다.


4. 웹훅 서버 설정 방법

자체 서버를 구축하여 웹훅을 처리할 수 있습니다. Python FastAPI나 Node.js 등을 사용할 수 있습니다.

[ Whitelist IP 주소 = 34.123.198.226 ] VoxAI IP 주소를 확인하고 허용 목록에 추가하여 보안을 강화할 수 있습니다.

# Python FastAPI
from fastapi import FastAPI, Request

app = FastAPI()

@app.post("/check-caller")
async def check_caller(post_body: dict):
    try:
        call_from = post_body.get("call_from")
        if not call_from:
            raise ValueError("Missing 'call_from' in request body")

        dynamic_variables = {}
        if call_from == "+821012345678":
            dynamic_variables["customer_name"] = "김철수"
        elif call_from == "+821087654321":
            dynamic_variables["customer_name"] = "손예진"
        else:
            raise ValueError(f"Unrecognized call_from number: {call_from}")

        return {
            "call_inbound": {
                "dynamic_variables": dynamic_variables
            }
        }
    except ValueError as ve:
        print(f"Value error: {ve}")
    except Exception as err:
        print(f"Unexpected error: {err}")
    return {
        "call_inbound": {
            "dynamic_variables": {}
        }
    }

도움이 필요하신가요?