클라이언트-서버 이벤트

클라이언트에서 컨텍스트 정보를 전송하여 대화형 애플리케이션을 실시간으로 개선하세요.

클라이언트-서버 이벤트는 대화 중 추가 컨텍스트를 제공하기 위해 애플리케이션에서 서버로 선제적으로 전송하는 메시지입니다. 이러한 이벤트를 사용하면 대화 흐름을 방해하지 않고 관련 정보를 추가하여 대화를 개선할 수 있습니다.

서버에서 클라이언트로 전송하는 이벤트에 관한 정보는 클라이언트 이벤트 문서를 참조하세요.

개요

애플리케이션은 대화 중 언제든지 서버로 컨텍스트 정보를 전송하여 대화의 품질과 관련성을 높일 수 있습니다. 이는 서버에서 수신한 클라이언트 이벤트에 대한 응답일 필요는 없습니다. 특히 음성으로 직접 전달되지 않을 수 있는 UI 상태, 사용자 작업 또는 기타 환경 데이터를 공유하는 데 유용합니다.

SDK는 이러한 이벤트를 전송하는 헬퍼 메서드를 제공하지만, 맞춤 구현과 고급 사용 사례를 위해서는 기본 프로토콜을 이해하는 것이 유용합니다.

이벤트 유형

컨텍스트 업데이트

컨텍스트 업데이트를 사용하면 애플리케이션에서 대화를 방해하지 않는 백그라운드 정보를 전송할 수 있습니다.

주요 특징:

  • 업데이트는 대화 내 백그라운드 정보로 반영됩니다.
  • 현재 대화 흐름을 방해하지 않습니다.
  • UI 상태, 사용자 작업 또는 환경 데이터를 전송하는 데 유용합니다.
// Contextual update event structure
{
"type": "contextual_update",
"text": "User appears to be looking at pricing page"
}
// Example sending contextual updates
function sendContextUpdate(information) {
websocket.send(
JSON.stringify({
type: "contextual_update",
text: information,
})
);
}
// Usage examples
sendContextUpdate("Customer status: Premium tier");
sendContextUpdate("User navigated to Help section");
sendContextUpdate("Shopping cart contains 3 items");

사용자 메시지

사용자 메시지를 사용하면 사용자가 직접 말한 것처럼 텍스트를 대화에 전송할 수 있습니다. 텍스트 기반 상호작용이나 특정 텍스트를 대화 흐름에 삽입하려는 경우에 유용합니다.

주요 특징:

  • 텍스트는 대화의 사용자 입력으로 처리됩니다.
  • 음성 사용자 입력과 동일한 응답 흐름을 트리거합니다.
  • 텍스트 기반 인터페이스 또는 프로그래밍 방식의 사용자 입력에 유용합니다.
// User message event structure
{
"type": "user_message",
"text": "I would like to upgrade my account"
}
// Example sending user messages
function sendUserMessage(text) {
websocket.send(
JSON.stringify({
type: "user_message",
text: text,
})
);
}
// Usage examples
sendUserMessage("I need help with billing");
sendUserMessage("What are your pricing options?");
sendUserMessage("Cancel my subscription");

사용자 활동

사용자 활동 이벤트는 에이전트의 중단을 방지하는 신호 역할을 합니다.

주요 특징:

  • 턴 타임아웃 타이머를 재설정합니다.
  • 대화 콘텐츠나 흐름에 영향을 주지 않습니다.
  • 침묵 기간 동안 장시간 대화를 유지하는 데 유용합니다.
// User activity event structure
{
"type": "user_activity"
}
// Example sending user activity
function sendUserActivity() {
websocket.send(
JSON.stringify({
type: "user_activity",
})
);
}
// Usage example - send activity ping every 30 seconds
setInterval(sendUserActivity, 30000);

모범 사례

  1. 컨텍스트 업데이트

    • 관련성은 높되 간결한 컨텍스트 정보를 전송하세요.
    • 너무 많은 업데이트로 LLM에 과부하를 주지 마세요.
    • 대화 흐름에 영향을 주거나 음성 에이전트가 접근할 수 없는 UI 활동에서 중요한 컨텍스트가 되는 정보에 집중하세요.
  2. 사용자 메시지

    • 오디오를 사용할 수 없거나 적절하지 않을 때 텍스트 기반 사용자 입력에 사용하세요.
    • 텍스트 콘텐츠가 명확하고 잘 형식화되어 있는지 확인하세요.
    • 프로그래밍 방식의 메시지를 삽입할 때 대화 컨텍스트를 고려하세요.
  3. 사용자 활동

    • 세션을 유지하기 위해 사용자 상호작용 중에 활동 핑을 전송하세요.
    • 불필요한 네트워크 트래픽을 피하려면 적절한 간격(예: 30~60초)을 사용하세요.
    • 실제 사용자 참여(마우스 움직임, 타이핑 등)를 기반으로 활동 감지를 구현하세요.
  4. 타이밍 고려 사항

    • 적절한 시점에 업데이트를 전송하세요.
    • 여러 컨텍스트 업데이트를 하나의 업데이트로 그룹화하는 것을 고려하세요(작은 변경 사항마다 별도로 전송하는 대신).
    • 세션 유지와 과도한 메시지 전송 방지 사이의 균형을 맞추세요.

자세한 구현 예시는 SDK 문서를 확인하세요.