Context
The SDK currently bundles its own webhook HTTP server (http.server.BaseHTTPRequestHandler in Python; stock Node http module in Node.js). Apps that already use aiohttp / Flask / FastAPI / Express / Lambda have to choose:
- Run TWO HTTP servers in the same process (the SDK's + their own), or
- Abandon
@rtms.on_webhook_event and reimplement webhook routing themselves
Neither is acceptable for production deployments at scale. SQS-replay failover (the canonical production pattern) specifically needs the webhook ingest layer to be Lambda or aiohttp, decoupled from the RTMS client lifecycle.
What to ship
Opt-in factory pattern. App provides its own HTTP router; the SDK exposes a callable that the app mounts at the webhook path:
# Python — FastAPI integration example
from fastapi import FastAPI, Request
app = FastAPI()
handler = rtms.webhook_handler(on_event=my_callback)
@app.post("/webhook")
async def webhook(request: Request):
payload = await request.json()
return await handler(payload, request.headers)
// Node.js — Express integration example
const handler = rtms.webhookHandler({ onEvent: myCallback });
app.post("/webhook", express.json(), (req, res) => handler(req.body, req.headers, res));
The existing @rtms.on_webhook_event + rtms.run() path stays for the simple/quickstart case. The factory is the production path.
Acceptance criteria
Cross-language parity
Source
Tracked in vault: Projects/RTMS SDK v1.2.md → DEVS-X6.
Tracker
Part of the v1.2 milestone. Project: https://github.com/orgs/zoom/projects/11.
Context
The SDK currently bundles its own webhook HTTP server (
http.server.BaseHTTPRequestHandlerin Python; stock Nodehttpmodule in Node.js). Apps that already use aiohttp / Flask / FastAPI / Express / Lambda have to choose:@rtms.on_webhook_eventand reimplement webhook routing themselvesNeither is acceptable for production deployments at scale. SQS-replay failover (the canonical production pattern) specifically needs the webhook ingest layer to be Lambda or aiohttp, decoupled from the RTMS client lifecycle.
What to ship
Opt-in factory pattern. App provides its own HTTP router; the SDK exposes a callable that the app mounts at the webhook path:
The existing
@rtms.on_webhook_event+rtms.run()path stays for the simple/quickstart case. The factory is the production path.Acceptance criteria
rtms.webhook_handler(...)returns an async callablertms.webhookHandler(...)returns a request handler compatible with Express middleware shapeexamples/python.mdexamples/node.md@rtms.on_webhook_eventquickstart path continues to work unchangedCross-language parity
Source
Tracked in vault:
Projects/RTMS SDK v1.2.md→ DEVS-X6.Tracker
Part of the v1.2 milestone. Project: https://github.com/orgs/zoom/projects/11.