본문으로 건너뛰기
cccskills
무료GitHub에 공개

voice-agent

Zoom AI Services Voice Agent V2 for real-time microphone conversations over WebSocket, including VAD, PCM audio, speech-to-speech or text responses, interruption handling, and function tools. Use for interactive voice agents; not one-shot media summarization or live meeting transcription.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

zoom/skills스타 85(GitHub 85 + cccskills 0)
연동 도구ZoomOpenAI

실행 점수 미검증

설치 방법 보기

포함된 파일(3)

  • SKILL.md7.4 KB
  • examples/node-relay.md2.5 KB
  • references/api-contract.md7.7 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Zoom AI Services Voice Agent

Use Voice Agent for an interactive microphone conversation where the service transcribes speech, runs an AI turn, and streams spoken or text output in real time.

Current API audit: The V2 route, session shape, event stream, and error recovery below were verified against the official sample and live connections on 2026-10-20. The documented V1 surface was verified on the same /v2/ws/ route with a different subprotocol and body.

Routing Guardrail

  • Real-time microphone conversation → use this skill.
  • One uploaded audio/video file needs transcript plus summary → use Speech Summarization.
  • Live meeting audio/video with meeting metadata → use RTMS.
  • One-shot transcription only → use Scribe.
  • Existing transcript text → use Summarizer.
  • Typed classification or routing → use Decisions.

Match the session body to the subprotocol: V2 uses listen / think / speak, while the documented V1 surface uses OpenAI-style audio.input / audio.output. A mismatch returns error.code = shape_switch_not_allowed.

Production Contract

wss://api.zoom.us/v2/ws/aiservices/voice-agent/live
Sec-WebSocket-Protocol: voice-agent.zoom.v2
x-api-key: $ZOOM_AI_SERVICES_API_KEY

Required key scope: aiservices:read:voice-agent:admin.

Two subprotocols are live on that route, and they are not interchangeable:

SurfaceSubprotocolSession bodyServer events
V2, official samplevoice-agent.zoom.v2listen / think / speakflat JSON events
V1, docs live-mode pagevoice-agent.zoom.v1OpenAI-style audio.input / audio.output{type, payload} envelope

The documented upgrade path wss://api.zoom.us/v2/aiservices/voice-agent/live (without /ws/) returned HTTP 404 on 2026-10-20 for every subprotocol tried, including voice-agent.zoom.v1. The OpenAPI catalog lists GET /aiservices/voice-agent/live, but both working sockets are under /v2/ws/aiservices/....

Both surfaces accept Authorization: Bearer with either an API key or a Zoom AI Services JWT; V2 was also verified with x-api-key. The official sample reads the credential from ZOOM_API_KEY; this skill uses ZOOM_AI_SERVICES_API_KEY to distinguish it from Build-platform JWT pairs. Use one name in your deployment.

Keep the key server-side. A browser WebSocket cannot set x-api-key, so use a server-side relay:

browser microphone WebSocket -> trusted /live relay -> api.zoom.us Voice Agent

The relay must validate Origin and Host, request voice-agent.zoom.v2, inject the key upstream, enforce frame-size and backpressure limits, and never expose the key to the browser.

Session Shape

The first upstream client frame must be session.update:

{
  "type": "session.update",
  "session": {
    "type": "realtime",
    "listen": {
      "transcription": { "language": "en" },
      "format": { "type": "pcm16", "rate": 16000 }
    },
    "think": {
      "provider": { "type": "zoom", "model": "gemma-4" },
      "instructions": "You are an AI assistant interacting with a user through spoken conversation."
    },
    "speak": {
      "format": { "type": "pcm16" },
      "voice": "ariel"
    }
  }
}

The official sample uses gemma-4. Treat model availability as deployment-specific and confirm it through session.updated; an unconfigured model returns a non-fatal error event and the socket stays open.

speak is optional; omitting it defaults to voice jenna at 16 kHz. Valid voice IDs are alex, ariel, ava, brooke, hazel, jenna, mark, reid, scott, and tony. Input transcription accepts only en; ja and en-US were both rejected on 2026-10-20.

Function tools are declared under think.tools as OpenAI-compatible function definitions. Tool results are returned with conversation.item.create using item.type = "function_call_output", followed by response.create.

Wire Lifecycle

  1. Wait for session.created.
  2. Send session.update and wait for session.updated before sending audio.
  3. Stream input_audio_buffer.append frames containing base64 PCM16 LE mono audio. The official sample sends 20 ms frames at 16 kHz.
  4. Consume transcript, response, tool-call, and audio events.
  5. On input_audio_buffer.speech_started, stop local playback, send response.cancel with the active response.id, then send conversation.item.truncate with item_id and audio_end_ms. Verified: cancel produces response.done with status cancelled.
  6. On response.done, inspect response.status; cancelled, failed, and incomplete responses must not be treated as successful playback.
  7. A bare response.create with no audio produces a spoken turn, which is useful for a connectivity check.

Important server events include:

  • session.created, session.updated
  • input_audio_buffer.speech_started
  • conversation.item.input_audio_transcription.delta
  • conversation.item.input_audio_transcription.completed
  • response.created
  • response.output_item.added
  • conversation.item.added
  • response.content_part.added / .done
  • response.output_audio_transcript.delta / .done
  • response.output_audio.delta / .done
  • response.output_item.done
  • conversation.item.done
  • response.function_call_arguments.done
  • response.done
  • error

V1 emits the same concepts inside a {type, payload} envelope and adds input_audio_buffer.speech_stopped, input_audio_buffer.timeout_triggered, and response.output_text.delta for text-only sessions.

Audio deltas contain base64 PCM16. Read the output rate from the updated session; the official sample defaults to 16 kHz. Maintain a small playback lead, schedule buffers sequentially, and carry odd bytes across chunk boundaries.

Failure Handling

  • 404 on the upgrade: wrong path or missing entitlement. Both surfaces use /v2/ws/aiservices/...; the documented /v2/aiservices/... path returns 404.
  • 401 / 403: invalid key, missing aiservices:read:voice-agent:admin, or relay auth failure.
  • 426: the client did not request a WebSocket upgrade.
  • 429: rate limited; retry with backoff.
  • 503: service unavailable.
  • error with invalid_request_error: model, voice, language, format, or first-frame violation. The socket stays open; correct the setting and resend session.update.
  • error.code = shape_switch_not_allowed: the session body does not match the negotiated subprotocol.
  • Audio before session.update returns first event must be a session.update carrying a realtime session; the socket stays open.

References

Sources

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Zoom Contact Center skill pack for Contact Center apps, web embeds, and native mobile SDK integrations. Use for lifecycle patterns, engagement context/state handling, campaigns, callbacks, and version-drift troubleshooting.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

zoom/skills852026년 10월 20일 업데이트

Zoom Contact Center SDK for Android. Use for native Android chat/video/ZVA/scheduled callback integrations, campaign mode, service lifecycle, and rejoin handling.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

zoom/skills852026년 10월 20일 업데이트

Zoom Contact Center SDK for iOS. Use for native iOS chat/video/ZVA/scheduled callback integrations, app lifecycle bridging, rejoin flow, and callback handling.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

zoom/skills852026년 10월 20일 업데이트

Zoom Contact Center SDK for Web. Use for web chat/video/campaign embeds, engagement event handling, app-context integrations, and Smart Embed postMessage workflows.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

zoom/skills852026년 10월 20일 업데이트

decisions

무료

Zoom AI Services Decisions for typed predicates, constrained classification, ordered scoring, probability-aware routing, and inline image comparison. Use when building or debugging Decisions requests, production x-api-key authentication, standard/pro model selection, Boolean choices, or score-label normalization.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

zoom/skills852026년 10월 20일 업데이트

Zoom Meeting SDK for Linux - C++ headless meeting bots with raw audio/video access, transcription, recording, and AI integration for server-side automation

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

zoom/skills852026년 10월 20일 업데이트

zoom의 스킬 모두 보기

이 스킬의 문제 신고