{
  "schemaVersion": "1.0",
  "item": {
    "slug": "phone-voice",
    "name": "Phone Voice Integration",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/cortexuvula/phone-voice",
    "canonicalUrl": "https://clawhub.ai/cortexuvula/phone-voice",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/phone-voice",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=phone-voice",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/phone-voice"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/phone-voice",
    "agentPageUrl": "https://openagent3.xyz/skills/phone-voice/agent",
    "manifestUrl": "https://openagent3.xyz/skills/phone-voice/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/phone-voice/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Phone Voice Integration",
        "body": "Turn your OpenClaw into a phone-callable assistant with ElevenLabs Agents + Twilio.\n\nWhat you get:\n\n📞 Call your bot from any phone\n🔐 Caller ID authentication + voice PIN security\n🛡️ Call screening (whitelist-based)\n🧠 Full memory context (loads MEMORY.md, USER.md)\n💰 Cost tracking per call\n📝 Call transcripts with summaries\n⏱️ Rate limiting\n🌐 Permanent tunnel (Cloudflare) or temporary (ngrok)"
      },
      {
        "title": "Architecture",
        "body": "Phone → Twilio → ElevenLabs Agent → Your Bridge → Anthropic Claude → OpenClaw Tools\n                                          ↓\n                                    Memory Context\n                                    (MEMORY.md, USER.md)\n\nFlow:\n\nCaller dials your Twilio number\nTwilio routes to ElevenLabs Agent\nAgent sends chat completions to your bridge (mimics OpenAI API)\nBridge translates to Anthropic, injects context from memory files\nClaude response → ElevenLabs TTS → caller hears it"
      },
      {
        "title": "Prerequisites",
        "body": "OpenClaw installed and running\nElevenLabs account + API key\nTwilio account + phone number\nAnthropic API key\nCloudflare tunnel or ngrok (for exposing localhost)"
      },
      {
        "title": "1. Enable Chat Completions in OpenClaw",
        "body": "Not needed for this skill — the bridge bypasses OpenClaw and calls Claude directly. This gives you more control over memory injection and cost tracking."
      },
      {
        "title": "2. Create the Bridge Server",
        "body": "The bridge is a FastAPI server that:\n\nAccepts OpenAI-compatible /v1/chat/completions requests from ElevenLabs\nInjects memory context (MEMORY.md, USER.md, live data)\nCalls Anthropic Claude API\nStreams responses back in OpenAI format\nLogs costs and transcripts\n\nKey files:\n\nserver.py — FastAPI app with /v1/chat/completions endpoint\nfred_prompt.py — System prompt builder (loads memory files)\n.env — Secrets (API keys, tokens, whitelist)\ncontacts.json — Caller whitelist for screening"
      },
      {
        "title": "3. Set Up Cloudflare Tunnel (Recommended)",
        "body": "Permanent, secure alternative to ngrok:\n\n# Install cloudflared\nbrew install cloudflare/cloudflare/cloudflared\n\n# Login and configure\ncloudflared tunnel login\ncloudflared tunnel create <tunnel-name>\n\n# Run the tunnel\ncloudflared tunnel --url http://localhost:8013 run <tunnel-name>\n\nAdd a CNAME in Cloudflare DNS:\n\nvoice.yourdomain.com → <tunnel-id>.cfargotunnel.com\n\nOr use ngrok (temporary):\n\nngrok http 8013"
      },
      {
        "title": "4. Configure ElevenLabs Agent",
        "body": "Option A: Manual (UI)\n\nGo to ElevenLabs dashboard → Conversational AI\nCreate new agent\nUnder LLM settings → Custom LLM\nSet URL: https://voice.yourdomain.com/v1/chat/completions\nAdd header: Authorization: Bearer <YOUR_BRIDGE_TOKEN>\n\nOption B: Programmatic (API)\n\n# Step 1: Store your bridge auth token as a secret\ncurl -X POST https://api.elevenlabs.io/v1/convai/secrets \\\n  -H \"xi-api-key: YOUR_ELEVENLABS_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"type\": \"new\",\n    \"name\": \"bridge_auth_token\",\n    \"value\": \"YOUR_BRIDGE_AUTH_TOKEN\"\n  }'\n\n# Response: {\"secret_id\": \"abc123...\"}\n\n# Step 2: Create the agent\ncurl -X POST https://api.elevenlabs.io/v1/convai/agents/create \\\n  -H \"xi-api-key: YOUR_ELEVENLABS_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"conversation_config\": {\n      \"agent\": {\n        \"language\": \"en\",\n        \"prompt\": {\n          \"llm\": \"custom-llm\",\n          \"prompt\": \"You are a helpful voice assistant.\",\n          \"custom_llm\": {\n            \"url\": \"https://voice.yourdomain.com/v1/chat/completions\",\n            \"api_key\": {\"secret_id\": \"abc123...\"}\n          }\n        }\n      }\n    }\n  }'"
      },
      {
        "title": "5. Connect Twilio Phone Number",
        "body": "In ElevenLabs agent settings:\n\nGo to Phone section\nEnter Twilio Account SID and Auth Token\nSelect your Twilio phone number\nSave\n\nDone! Your bot now answers that phone number."
      },
      {
        "title": "Caller ID Authentication",
        "body": "Recognizes whitelisted numbers automatically:\n\n// contacts.json\n{\n  \"+12505551234\": {\n    \"name\": \"Alice\",\n    \"role\": \"family\"\n  }\n}"
      },
      {
        "title": "Voice PIN Challenge",
        "body": "For unknown callers or high-security actions:\n\nVOICE_PIN = \"banana\"  # Set in .env\n\nCaller must say the PIN to proceed."
      },
      {
        "title": "Call Screening",
        "body": "Unknown numbers get a receptionist prompt:\n\n\"This is Fred's assistant. I can take a message or help with general questions.\""
      },
      {
        "title": "Rate Limiting",
        "body": "Configurable per-hour limits:\n\nRATE_LIMIT_PER_HOUR = 10\n\nPrevents abuse and runaway costs."
      },
      {
        "title": "Memory Injection",
        "body": "The bridge auto-loads context before each call:\n\nFiles read:\n\nMEMORY.md — Long-term facts about user, projects, preferences\nUSER.md — User profile (name, location, timezone)\nRecent call transcripts (cross-call memory)\n\nLive data injection:\n\nCurrent time/date\nWeather (optional, via API)\nCalendar events (optional, via gog CLI)\n\nAll injected into the system prompt before Claude sees the conversation."
      },
      {
        "title": "Cost Tracking",
        "body": "Every call logs to memory/voice-calls/costs.jsonl:\n\n{\n  \"call_sid\": \"CA123...\",\n  \"timestamp\": \"2026-02-03T10:30:00\",\n  \"caller\": \"+12505551234\",\n  \"duration_sec\": 45,\n  \"total_cost_usd\": 0.12,\n  \"breakdown\": {\n    \"twilio\": 0.02,\n    \"elevenlabs\": 0.08,\n    \"anthropic\": 0.02\n  }\n}\n\nRun analytics on the JSONL to track monthly spend."
      },
      {
        "title": "Usage Example",
        "body": "Call your bot:\n\nDial your Twilio number\nIf you're whitelisted → casual conversation starts\nIf you're unknown → receptionist mode\nAsk it to check your calendar, send a message, set a reminder, etc.\n\nOutbound calling (optional):\n\ncurl -X POST https://voice.yourdomain.com/call/outbound \\\n  -H \"Authorization: Bearer <BRIDGE_TOKEN>\" \\\n  -d '{\"to\": \"+12505551234\", \"message\": \"Reminder: dentist at 3pm\"}'"
      },
      {
        "title": "Configuration Options",
        "body": "Environment variables (.env):\n\nANTHROPIC_API_KEY=sk-ant-...\nELEVENLABS_API_KEY=sk_...\nELEVENLABS_AGENT_ID=agent_...\nTWILIO_ACCOUNT_SID=AC...\nTWILIO_AUTH_TOKEN=...\nTWILIO_NUMBER=+1...\nLLM_BRIDGE_TOKEN=<random-secure-token>\nVOICE_PIN=<your-secret-word>\nCLAWD_DIR=/path/to/clawd\n\nWhitelist (contacts.json):\n\n{\n  \"+12505551234\": {\"name\": \"Alice\", \"role\": \"family\"},\n  \"+12505555678\": {\"name\": \"Bob\", \"role\": \"friend\"}\n}"
      },
      {
        "title": "Advanced: Office Hours",
        "body": "Restrict calls to business hours:\n\n# In server.py\nOFFICE_HOURS = {\n    \"enabled\": True,\n    \"timezone\": \"America/Vancouver\",\n    \"weekdays\": {\"start\": \"09:00\", \"end\": \"17:00\"},\n    \"weekends\": False\n}\n\nOutside hours → voicemail prompt."
      },
      {
        "title": "Debugging",
        "body": "Test the bridge directly:\n\ncurl -X POST https://voice.yourdomain.com/v1/chat/completions \\\n  -H \"Authorization: Bearer <BRIDGE_TOKEN>\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"model\": \"claude-sonnet-4\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}],\n    \"stream\": false\n  }'\n\nCheck logs:\n\ntail -f ~/clawd/memory/voice-calls/bridge.log\n\nVerify Twilio webhook:\n\nCall your number\nCheck Twilio console → Call logs → Webhook status\nShould see 200 responses from ElevenLabs"
      },
      {
        "title": "Cost Estimates",
        "body": "Per-minute breakdown:\n\nTwilio: ~$0.01/min (inbound) + carrier fees\nElevenLabs TTS: ~$0.05/min (varies by voice quality)\nAnthropic Claude: ~$0.01/min (depends on token usage)\nTotal: ~$0.07-0.10/min (~$4-6/hour of talk time)\n\nUse rate limiting and call screening to control costs."
      },
      {
        "title": "Comparison: This vs Basic Tutorial",
        "body": "ElevenLabs official tutorial:\n\n✅ Basic integration\n❌ No security\n❌ No memory persistence\n❌ No cost tracking\n❌ Temporary ngrok URL\n\nThis skill (Phone Voice v2.0):\n\n✅ All of the above\n✅ Caller ID + PIN security\n✅ Cross-call memory\n✅ Cost tracking & analytics\n✅ Permanent tunnel (Cloudflare)\n✅ Rate limiting\n✅ Call screening\n✅ Transcript logging"
      },
      {
        "title": "Links",
        "body": "ElevenLabs Agents: https://elevenlabs.io/conversational-ai\nTwilio: https://www.twilio.com/\nCloudflare Tunnels: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/\nReference implementation: (Available on request — DM @FredMolty)"
      },
      {
        "title": "License",
        "body": "MIT — use freely, credit appreciated.\n\nBuilt by Fred (@FredMolty) — running on OpenClaw since 2026."
      }
    ],
    "body": "Phone Voice Integration\n\nTurn your OpenClaw into a phone-callable assistant with ElevenLabs Agents + Twilio.\n\nWhat you get:\n\n📞 Call your bot from any phone\n🔐 Caller ID authentication + voice PIN security\n🛡️ Call screening (whitelist-based)\n🧠 Full memory context (loads MEMORY.md, USER.md)\n💰 Cost tracking per call\n📝 Call transcripts with summaries\n⏱️ Rate limiting\n🌐 Permanent tunnel (Cloudflare) or temporary (ngrok)\nArchitecture\nPhone → Twilio → ElevenLabs Agent → Your Bridge → Anthropic Claude → OpenClaw Tools\n                                          ↓\n                                    Memory Context\n                                    (MEMORY.md, USER.md)\n\n\nFlow:\n\nCaller dials your Twilio number\nTwilio routes to ElevenLabs Agent\nAgent sends chat completions to your bridge (mimics OpenAI API)\nBridge translates to Anthropic, injects context from memory files\nClaude response → ElevenLabs TTS → caller hears it\nPrerequisites\nOpenClaw installed and running\nElevenLabs account + API key\nTwilio account + phone number\nAnthropic API key\nCloudflare tunnel or ngrok (for exposing localhost)\nSetup\n1. Enable Chat Completions in OpenClaw\n\nNot needed for this skill — the bridge bypasses OpenClaw and calls Claude directly. This gives you more control over memory injection and cost tracking.\n\n2. Create the Bridge Server\n\nThe bridge is a FastAPI server that:\n\nAccepts OpenAI-compatible /v1/chat/completions requests from ElevenLabs\nInjects memory context (MEMORY.md, USER.md, live data)\nCalls Anthropic Claude API\nStreams responses back in OpenAI format\nLogs costs and transcripts\n\nKey files:\n\nserver.py — FastAPI app with /v1/chat/completions endpoint\nfred_prompt.py — System prompt builder (loads memory files)\n.env — Secrets (API keys, tokens, whitelist)\ncontacts.json — Caller whitelist for screening\n3. Set Up Cloudflare Tunnel (Recommended)\n\nPermanent, secure alternative to ngrok:\n\n# Install cloudflared\nbrew install cloudflare/cloudflare/cloudflared\n\n# Login and configure\ncloudflared tunnel login\ncloudflared tunnel create <tunnel-name>\n\n# Run the tunnel\ncloudflared tunnel --url http://localhost:8013 run <tunnel-name>\n\n\nAdd a CNAME in Cloudflare DNS:\n\nvoice.yourdomain.com → <tunnel-id>.cfargotunnel.com\n\n\nOr use ngrok (temporary):\n\nngrok http 8013\n\n4. Configure ElevenLabs Agent\nOption A: Manual (UI)\nGo to ElevenLabs dashboard → Conversational AI\nCreate new agent\nUnder LLM settings → Custom LLM\nSet URL: https://voice.yourdomain.com/v1/chat/completions\nAdd header: Authorization: Bearer <YOUR_BRIDGE_TOKEN>\nOption B: Programmatic (API)\n# Step 1: Store your bridge auth token as a secret\ncurl -X POST https://api.elevenlabs.io/v1/convai/secrets \\\n  -H \"xi-api-key: YOUR_ELEVENLABS_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"type\": \"new\",\n    \"name\": \"bridge_auth_token\",\n    \"value\": \"YOUR_BRIDGE_AUTH_TOKEN\"\n  }'\n\n# Response: {\"secret_id\": \"abc123...\"}\n\n# Step 2: Create the agent\ncurl -X POST https://api.elevenlabs.io/v1/convai/agents/create \\\n  -H \"xi-api-key: YOUR_ELEVENLABS_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"conversation_config\": {\n      \"agent\": {\n        \"language\": \"en\",\n        \"prompt\": {\n          \"llm\": \"custom-llm\",\n          \"prompt\": \"You are a helpful voice assistant.\",\n          \"custom_llm\": {\n            \"url\": \"https://voice.yourdomain.com/v1/chat/completions\",\n            \"api_key\": {\"secret_id\": \"abc123...\"}\n          }\n        }\n      }\n    }\n  }'\n\n5. Connect Twilio Phone Number\n\nIn ElevenLabs agent settings:\n\nGo to Phone section\nEnter Twilio Account SID and Auth Token\nSelect your Twilio phone number\nSave\n\nDone! Your bot now answers that phone number.\n\nSecurity Features\nCaller ID Authentication\n\nRecognizes whitelisted numbers automatically:\n\n// contacts.json\n{\n  \"+12505551234\": {\n    \"name\": \"Alice\",\n    \"role\": \"family\"\n  }\n}\n\nVoice PIN Challenge\n\nFor unknown callers or high-security actions:\n\nVOICE_PIN = \"banana\"  # Set in .env\n\n\nCaller must say the PIN to proceed.\n\nCall Screening\n\nUnknown numbers get a receptionist prompt:\n\n\"This is Fred's assistant. I can take a message or help with general questions.\"\n\nRate Limiting\n\nConfigurable per-hour limits:\n\nRATE_LIMIT_PER_HOUR = 10\n\n\nPrevents abuse and runaway costs.\n\nMemory Injection\n\nThe bridge auto-loads context before each call:\n\nFiles read:\n\nMEMORY.md — Long-term facts about user, projects, preferences\nUSER.md — User profile (name, location, timezone)\nRecent call transcripts (cross-call memory)\n\nLive data injection:\n\nCurrent time/date\nWeather (optional, via API)\nCalendar events (optional, via gog CLI)\n\nAll injected into the system prompt before Claude sees the conversation.\n\nCost Tracking\n\nEvery call logs to memory/voice-calls/costs.jsonl:\n\n{\n  \"call_sid\": \"CA123...\",\n  \"timestamp\": \"2026-02-03T10:30:00\",\n  \"caller\": \"+12505551234\",\n  \"duration_sec\": 45,\n  \"total_cost_usd\": 0.12,\n  \"breakdown\": {\n    \"twilio\": 0.02,\n    \"elevenlabs\": 0.08,\n    \"anthropic\": 0.02\n  }\n}\n\n\nRun analytics on the JSONL to track monthly spend.\n\nUsage Example\n\nCall your bot:\n\nDial your Twilio number\nIf you're whitelisted → casual conversation starts\nIf you're unknown → receptionist mode\nAsk it to check your calendar, send a message, set a reminder, etc.\n\nOutbound calling (optional):\n\ncurl -X POST https://voice.yourdomain.com/call/outbound \\\n  -H \"Authorization: Bearer <BRIDGE_TOKEN>\" \\\n  -d '{\"to\": \"+12505551234\", \"message\": \"Reminder: dentist at 3pm\"}'\n\nConfiguration Options\n\nEnvironment variables (.env):\n\nANTHROPIC_API_KEY=sk-ant-...\nELEVENLABS_API_KEY=sk_...\nELEVENLABS_AGENT_ID=agent_...\nTWILIO_ACCOUNT_SID=AC...\nTWILIO_AUTH_TOKEN=...\nTWILIO_NUMBER=+1...\nLLM_BRIDGE_TOKEN=<random-secure-token>\nVOICE_PIN=<your-secret-word>\nCLAWD_DIR=/path/to/clawd\n\n\nWhitelist (contacts.json):\n\n{\n  \"+12505551234\": {\"name\": \"Alice\", \"role\": \"family\"},\n  \"+12505555678\": {\"name\": \"Bob\", \"role\": \"friend\"}\n}\n\nAdvanced: Office Hours\n\nRestrict calls to business hours:\n\n# In server.py\nOFFICE_HOURS = {\n    \"enabled\": True,\n    \"timezone\": \"America/Vancouver\",\n    \"weekdays\": {\"start\": \"09:00\", \"end\": \"17:00\"},\n    \"weekends\": False\n}\n\n\nOutside hours → voicemail prompt.\n\nDebugging\n\nTest the bridge directly:\n\ncurl -X POST https://voice.yourdomain.com/v1/chat/completions \\\n  -H \"Authorization: Bearer <BRIDGE_TOKEN>\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"model\": \"claude-sonnet-4\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}],\n    \"stream\": false\n  }'\n\n\nCheck logs:\n\ntail -f ~/clawd/memory/voice-calls/bridge.log\n\n\nVerify Twilio webhook:\n\nCall your number\nCheck Twilio console → Call logs → Webhook status\nShould see 200 responses from ElevenLabs\nCost Estimates\n\nPer-minute breakdown:\n\nTwilio: ~$0.01/min (inbound) + carrier fees\nElevenLabs TTS: ~$0.05/min (varies by voice quality)\nAnthropic Claude: ~$0.01/min (depends on token usage)\nTotal: ~$0.07-0.10/min (~$4-6/hour of talk time)\n\nUse rate limiting and call screening to control costs.\n\nComparison: This vs Basic Tutorial\n\nElevenLabs official tutorial:\n\n✅ Basic integration\n❌ No security\n❌ No memory persistence\n❌ No cost tracking\n❌ Temporary ngrok URL\n\nThis skill (Phone Voice v2.0):\n\n✅ All of the above\n✅ Caller ID + PIN security\n✅ Cross-call memory\n✅ Cost tracking & analytics\n✅ Permanent tunnel (Cloudflare)\n✅ Rate limiting\n✅ Call screening\n✅ Transcript logging\nLinks\nElevenLabs Agents: https://elevenlabs.io/conversational-ai\nTwilio: https://www.twilio.com/\nCloudflare Tunnels: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/\nReference implementation: (Available on request — DM @FredMolty)\nLicense\n\nMIT — use freely, credit appreciated.\n\nBuilt by Fred (@FredMolty) — running on OpenClaw since 2026."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/cortexuvula/phone-voice",
    "publisherUrl": "https://clawhub.ai/cortexuvula/phone-voice",
    "owner": "cortexuvula",
    "version": "2.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/phone-voice",
    "downloadUrl": "https://openagent3.xyz/downloads/phone-voice",
    "agentUrl": "https://openagent3.xyz/skills/phone-voice/agent",
    "manifestUrl": "https://openagent3.xyz/skills/phone-voice/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/phone-voice/agent.md"
  }
}