Skip to content

[v1.2] Document ZCC uses channel_id (not metadata.userName) for speaker identification #126

@MaxMansfield

Description

@MaxMansfield

Context

SDK examples and docs (examples/node.md, examples/python.md) show identifying speakers in on_transcript_data / on_audio_data callbacks via metadata.userName (Node) / metadata.user_name (Python). This field is not present (or not meaningful) for ZCC events. ZCC RTMS streams identify participants via a channel_id on the packet/metadata — see [ADR-2026-05-08 — RTMS audio packet channel ID is ZCC-only].

Customers building ZCC integrations copy-paste the standard example, get None / undefined for the speaker, and assume the SDK is broken.

What to ship

  1. Update examples/python.md — add a ZCC-specific subsection under the audio/transcript callback examples showing the right way to identify a speaker:
@client.on_transcript_data
def _(data, size, ts, metadata):
    speaker = metadata.channel_id        # ZCC routes by channel
    text    = data.decode("utf-8", errors="replace")
    print(f"channel {speaker}: {text}")
  1. Update examples/node.md — same pattern in JS:
client.onTranscriptData((data, size, ts, metadata) => {
    const speaker = metadata.channelId;
    console.log(`channel ${speaker}: ${data.toString()}`);
});
  1. Mark userName / user_name as Optional in type stubs (__init__.pyi Python, rtms.d.ts Node) — document that it's populated only for Zoom Meetings / Webinars streams, not ZCC.

  2. Add channel_id / channelId to type stubs as Optional — populated only for ZCC streams.

  3. Update examples/zcc.md with a cross-link to the new sections in the language guides.

Acceptance criteria

  • ZCC speaker-identification section added to examples/python.md
  • ZCC speaker-identification section added to examples/node.md
  • userName / user_name marked Optional in both type stub sets
  • channel_id / channelId documented in both type stub sets
  • examples/zcc.md cross-links to the new language sections
  • Confirmed with a real ZCC RTMS stream that metadata.channel_id is populated and metadata.user_name is empty

Cross-language parity

  • examples/python.md and examples/node.md updated in the same PR
  • Same structure, same code examples
  • Type stub updates ship together
  • PR description includes "Cross-language parity check" section

Source

Tracked in vault: Projects/RTMS SDK v1.2.md → DEVS-X15. Builds on the 2026-05-08 ADR.

Tracker

Part of the v1.2 milestone. Project: https://github.com/orgs/zoom/projects/11.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationlanguage parityRequires parallel implementation in Node.js and Python with parity check in PRv1.2Part of the v1.2 release

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions