동적 변수는 특정 통화에서 에이전트에 데이터를 삽입할 수 있도록 해주는 특수 문법입니다.
이를 통해 대화의 핵심 흐름을 유지하면서도 에이전트의 응답을 개인화할 수 있습니다. 동적 변수는 인사말을 맞춤화하거나, 특정 정보를 참조하거나, 상황에 따라 응답을 조정하는 데 적합합니다.
1. 사용 가능한 영역
동적 변수는 다음과 같은 영역에서 사용할 수 있습니다:
2. 동적 변수 추가 및 테스트
프롬프트에 동적 변수 추가
동적 변수는 중괄호({{ }}
)로 둘러싸인 자리 표시자입니다. 예를 들어:
"안녕하세요 {{user_name}}님, 최근 {{product_name}} 상품을 구매하신 것으로 확인됩니다. 오늘 어떻게 도와드릴까요?"
동적 변수 테스트
배포 전에 대시보드에서 동적 변수를 테스트합니다. 테스트를 통해 동적 변수의
올바른 작동을 확인할 수 있습니다.
테스트 프리셋에서 설정한 동적 변수는 웹에서 테스트 용도로만 사용됩니다. 실제
인바운드 콜의 경우 다음 스텝을 참조하여 인바운드 웹훅 서버를 구성하시기
바랍니다.
프로덕션에 구현
대시보드에서 [웹훅 설정] 탭의 인바운드 웹훅 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 주소를 확인하고 허용 목록에 추가하여 보안을 강화할 수 있습니다.
webhook_server.py
webhook_server.js
# 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" : {}
}
}
자체 서버를 구축하여 웹훅을 처리할 수 있습니다. Python FastAPI나 Node.js 등을 사용할 수 있습니다.
[ Whitelist IP 주소 = 34.123.198.226 ] VoxAI IP 주소를 확인하고 허용 목록에 추가하여 보안을 강화할 수 있습니다.
webhook_server.py
webhook_server.js
# 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" : {}
}
}
Make.com은 코드 작성 없이 웹훅을 설정할 수 있는 노코드 플랫폼입니다.
주요 장점
코드 없이 직관적인 웹훅 설정 가능
외부 서비스와의 손쉬운 통합
실시간 모니터링 및 확장성
구현 예시 아래는 Make.com을 활용한 웹훅 구현 예시입니다:
위 시나리오는 발신번호(call_from)를 기준으로 사용자 정보를 조회하여 webhook 응답을 생성하는 과정을 보여줍니다.
설정 단계
새로운 시나리오 생성
Webhooks 트리거 설정
발신번호 기반 조건부 라우팅 구성
응답 JSON 포맷 설정
Webhooks 응답 처리
도움이 필요하신가요?