voip.ms AI Agent — audrey customer support line (parked 2026-05-14)
DARE.CO.UK · PARKED SKETCH · 2026-05-18
Mirrored from ~/.claude/.../memory/project_voipms_ai_agent_audrey_support_parked.md. This is a design sketch parked for future build — read for context, not as a current deliverable.
voip.ms AI Agent beta is inbound-only (confirmed via FAQ); CLAUDE.md’s original outbound-callback frame doesn’t fit; the right use case is an audrey customer support line answering inbound calls at a DID; parked until audrey has a published support DID + real FAQ/shipping/returns content for the agent’s knowledge base
The voip.ms AI Agent feature (BETA) is inbound-only — confirmed unambiguously by the official FAQ: “AI Agents are designed for inbound calls only. They answer calls made to your DID; they cannot initiate outbound calls.” This means the CLAUDE.md follow-up frame (“fire a voip.ms AI-voice call to the user when contact form pref=phone”) cannot be implemented with this beta. Reframing required.
The right use case (reframed): audrey customer support line. Customer calls audrey’s published phone number → AI Agent answers → handles common queries (orders, returns, shipping, sizing, gift wrap) → transfers to Dan when human help is needed. Plays to inbound-only; fits the audrey commercial surface; beta pricing is well-suited to low-volume customer support.
Source documentation: https://wiki.voip.ms/article/AI_agents (full content saved as PDF reference 2026-05-14).
Cost model
| Period | Per agent | Per minute |
|---|---|---|
| Beta (current) | $10/month | $0.25/min |
| Post-beta | $25/month | TBD |
Per-minute covers STT + TTS + LLM end-to-end (no separate AI-services bill). For a low-volume support line averaging, say, 20 mins/day = 600 mins/month = $150/month + $10 rental ≈ $160/month all-in. Compare to a human-staffed support hour or a SaaS support tool — cheap floor.
Configuration shape (Simple Voice Agent, when we build)
Wiki documents a 5-step wizard:
- Basic Configuration — Name
audrey-support. Description “Audrey support agent — orders, returns, shipping, gift wrap.” Voice: pick a female voice with preview (not all voices currently have preview, per wiki note). - Personality and Tone — Language English (Spanish + French also supported). Tone: warm + concise (default: Short and Concise). Agent Personality: “You are Audrey’s customer support agent. Be friendly, brief, and route to a human when the customer asks for one or when you don’t have the information.”
- Purpose & Communication — Purpose: Troubleshooting Common Issues. Greeting: “Hi, this is Audrey support. How can I help you today?”
- Call Routing & Transfer Options — Enable “Allow AI agent to transfer calls to specific destinations”. Add destination labelled
Dan→ his phone (Extension or Phone Number). - Knowledgebase — URLs to seed:
audreyinc.com/shipping,/returns,/faq,/gift-cards,/sizing(whichever exist). Enable “Allow web search for additional information” as backup.
Advanced Voice Agent surface (per wiki) adds: TTS model selection, LLM model selection, background audio, MCP servers (coming soon), webhook tools (coming soon), custom parameters. MCP support is the interesting future thread — could let the agent pull live order status from a Shopify call mid-conversation. Park until generally available.
Linking flow (post-creation)
Per wiki: DID Numbers → Manage DIDs → Edit the target DID → routing destination dropdown → AI Voice Agent → choose the audrey agent → Apply. The DID then answers all inbound calls with the AI Agent.
Resume conditions
Build when all three land:
1. A published audrey customer support number (DID provisioned + listed on audreyinc.com). Today there’s no public support DID; before that exists, an AI agent has no traffic to answer.
2. Real knowledge-base content on audreyinc.com: a FAQ page, a shipping/returns page, sizing guidance. Pointing the agent at empty/thin pages makes it sound bad and trains customers to bypass it.
3. Audrey commercial readiness (per project_audrey_agent_discoverability — “Don’t ship until audrey has a polished product line, designer story, inventory management, and press/social proof”). The support line should mirror that bar; customers calling a stub experience is worse than no support line.
Foothold complete — credentials verified 2026-05-14
The voip.ms REST/JSON API credentials are wired end-to-end:
- 1Password item in Code Shared, category Password, title
voip.ms api. Clean op:// references:op://Code Shared/voip.ms api/{api_username,api_password,account_id,endpoint} - Fields populated:
api_username=dan@gf.cx(account email, not handle — this was the initial confusion),api_password(32 chars),account_id=343341,endpoint=https://voip.ms/api/v1/rest.php - Portal settings: API enabled; IP allowlist contains Dan’s residential IP (was
108.52.141.41on 2026-05-14; dynamic — may need re-adding if ISP reassigns) - Live API verified:
getBalancereturnssuccesswith current balance ~$35.30;getDIDsInforeturns 1 existing DID (the London UK number447400880760, currently Dan’s personal line routed to343341_dan)
Lesson worth memorialising:
- voip.ms api_username is the account email, not a separate username/handle. Easy first-time confusion.
- voip.ms api_password is a separate value from the portal login password (you set it on the API config page specifically).
- voip.ms IP allowlist defaults to empty = block-all, not “empty = allow all” (paranoid default; differs from most APIs).
IP allowlist constraint for future production integration:
| Caller location | IP nature | voip.ms compatibility |
|---|---|---|
| Local Mac | Residential, dynamic | Works; re-add on ISP reassignment |
| CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Worker | Shared CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF egress pool | Not workable — can’t allowlist CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF’s whole IP space |
| GHA Runner | Rotating Ubuntu-latest pool | Not workable for similar reason |
| Cloud Run + Cloud NAT + static IP | Single dedicated IP | Works — extra GCP setup needed |
| Self-hosted on known IP | Single dedicated IP | Works |
For the audrey AI-agent use case specifically, this doesn’t matter — inbound calls to a DID get answered by the AI Agent server-side at voip.ms; no outbound API call from our infrastructure is involved. The IP allowlist matters only if we want programmatic API access (CDR queries, DID management automation, etc.) from somewhere other than Dan’s Mac.
What this means for the CLAUDE.md “AI-voice callback for contact form” follow-up
Reframe required. Three options for the contact form’s pref=phone flow:
| Option | Shape | Verdict |
|---|---|---|
| A. Surface a phone number in the confirmation; user calls; AI Agent answers with FAQ-level context | Plays to inbound-only beta; works today | Recommended if dare needs a phone callback channel at all |
| B. SMS with click-to-call link; tap dials AI Agent’s DID | Same end-state as A; mobile-friendly UX | Equivalent to A; SMS layer is the only addition |
| C. Wait for outbound API at voip.ms (likely post-beta) | Matches original CLAUDE.md spec | Indefinite parking |
Update the CLAUDE.md follow-up wording to reflect that the outbound-AI-callback isn’t possible with this beta; reframe as inbound or park.
Pairs with
project_dare_messaging_service_v1_built.md— sibling messaging-service ship; Pushover for outbound alerts to Dan; voip.ms AI is for inbound customer calls — different layers, complementaryproject_audrey_agent_discoverability.md— both are audrey commercial-readiness moves; support line + agent-discoverable content compoundfeedback_just_in_time_permission_grants.md— credential foothold tonight is fine; integration build defers until audrey readiness justifiesfeedback_park_with_resume_conditions.md— three named resume conditions abovefeedback_layered_guardrail_stack.md— when credentials land, they go in Code Shared (SA-reachable); per-DID scope is the resource-layer guard railproject_dare_messaging_service_parked.md(superseded) — voip.ms was the “voice” channel candidate; now confirmed as inbound-only, fits a different shape entirely- CLAUDE.md “AI-voice callback for the contact form” follow-up — needs reframing per above