Skip to content
Back to skills

Didww To Openai Realtime

ASecurity

Point a DIDWW phone number directly at OpenAI's Realtime API over SIP, with a generated webhook backend for call control. Use whenever the user wants gpt-realtime answering a real phone number via DIDWW, mentions sip.api.openai.com, realtime.call.incoming webhooks, Realtime SIP, or debugging calls between DIDWW and OpenAI. This is the developer-grade pairing: the agent behavior is code the user owns.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 2, 2026
ai-agentstestingdebuggingapibackendsecurity

Works with

  • api
  • mcp

Security analysis

A100/100

Pro scans all 11 files and shows the line behind each finding

Scanned October 2, 2026

npx -y skills add didww/ai --skill didww-to-openai-realtime --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Didww To Openai Realtime?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Didww To Openai Realtime
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/didww-didww-to-openai-realtime/badge)](https://www.skillsdirectory.com/skills/didww-didww-to-openai-realtime)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: didww-to-openai-realtime
description: >
  Point a DIDWW phone number directly at OpenAI's Realtime API over SIP,
  with a generated webhook backend for call control. Use whenever the
  user wants gpt-realtime answering a real phone number via DIDWW,
  mentions sip.api.openai.com, realtime.call.incoming webhooks, Realtime
  SIP, or debugging calls between DIDWW and OpenAI. This is the
  developer-grade pairing: the agent behavior is code the user owns.
---

# DIDWW to OpenAI Realtime

The most direct wiring in the family: the DIDWW trunk points straight at
OpenAI, no platform in between. The tradeoff is that there is no agent
object to configure; every incoming call fires a webhook and YOUR code
accepts it with instructions. This skill therefore generates that
backend (`scripts/webhook_server.py`) rather than pretending
configuration exists. Not a no-code path; say so in intake and offer the
hosted platforms if the user has no way to run a small public HTTPS
endpoint.

## The flow

1. **Confirm in one message:** number (or country to buy), what the
   agent should do (becomes the instructions), transfer target, where
   the webhook backend will run (any host that can serve public HTTPS:
   a five-dollar VPS, a serverless function, a tunnel for testing).
2. **OpenAI side:** in platform settings, create a project webhook for
   `realtime.call.incoming` pointing at the backend URL; note the
   webhook secret. The project ID (`proj_...`) becomes the SIP address.
3. **DIDWW side (MCP, OAuth):** inbound trunk with destination
   `sip:{project_id}@sip.api.openai.com;transport=tls`, port 5061,
   TLS signaling and SRTP media (both REQUIRED; EU data residency uses
   `sip-eu.api.openai.com`). Attach the DID. Note: no digest auth
   exists on OpenAI's ingress; the webhook's accept/reject decision IS
   the auth gate, so the generated server rejects calls to unknown DIDs
   by default.
4. **Deploy the backend:** `scripts/webhook_server.py` is a stdlib-only
   starting point: verifies the webhook signature, accepts calls with
   the model and instructions, exposes the transfer via the refer
   endpoint (`POST /v1/realtime/calls/{call_id}/refer` with
   `tel:` target). Adapt, deploy, set `OPENAI_API_KEY` and
   `OPENAI_WEBHOOK_SECRET` in its environment.
5. **Verify:** inbound call from a mobile; watch the server log accept
   the call; test the transfer phrase. Outbound calls are not part of
   OpenAI's SIP interface as of August 2026; originate outbound from the
   DIDWW side or a platform if needed.

## Failure map

- Call rings once and dies: TLS or SRTP not set on the DIDWW trunk
  (both are mandatory), or the project ID in the SIP address is wrong.
- Webhook never fires: webhook not configured for the project, or the
  backend URL is not publicly reachable HTTPS.
- Call connects then silence: the accept API call failed; check the
  server log, the API key, and that the accept happens within seconds.
- Anyone can ring the URI: expected; keep the unknown-DID rejection in
  the server, it is the security model.

## Panel map and money

OpenAI keys: `platform.openai.com/api-keys`; webhooks (required here):
`platform.openai.com/settings/project/webhooks`, copy the signing
secret at creation. Billing: prepaid credits under Settings, Billing
(minimum 5 USD); auto-recharge defaults to ON during setup and credits
EXPIRE after one year, non-refundable: say both out loud. Realtime
bills in audio tokens, not minutes; a typical phone conversation lands
around 0.05 to 0.10 USD/min of model cost depending on talk ratio.
DIDWW side: prepaid; top-up, Auto-charge and Low Balance Notification
(OFF by default) in Billing, Payment Methods.

---

Built around [DIDWW](https://www.didww.com/?ref=didww-to-openai) SIP
trunking and OpenAI's Realtime SIP guide; verified August 2026. xAI's
Grok voice offers a near-identical interface (`sip.voice.x.ai`); the
didww-to-xai skill covers it.

Files in this skill

  • .npmignore66 B
  • LICENSE1.1 KB
  • README.md1.3 KB
  • SKILL.md3.8 KB
  • bin/install.js3.6 KB
  • install.sh1.1 KB
  • package.json906 B
  • publish.sh450 B
  • scripts/webhook_server.py4.1 KB
  • test.sh488 B
  • tests/test_webhook.py4.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.