{"_id":"@aivibeclaw/voice-call","name":"@aivibeclaw/voice-call","dist-tags":{"latest":"2026.7.2"},"versions":{"2026.7.2":{"name":"@aivibeclaw/voice-call","version":"2026.7.2","description":"AivibeClaw voice-call plugin for Twilio, Telnyx, and Plivo phone calls.","repository":{"type":"git","url":"git+https://github.com/aivibe-org/aivibeclaw.git"},"type":"module","dependencies":{"commander":"14.0.3","typebox":"1.1.39","ws":"8.21.0","zod":"4.4.3"},"devDependencies":{"@aivibeclaw/plugin-sdk":"workspace:*","aivibeclaw":"workspace:*"},"peerDependencies":{"aivibeclaw":">=2026.6.10"},"peerDependenciesMeta":{"aivibeclaw":{"optional":true}},"aivibeclaw":{"extensions":["./index.ts"],"install":{"npmSpec":"@aivibeclaw/voice-call","defaultChoice":"npm","minHostVersion":">=2026.4.10"},"compat":{"pluginApi":">=2026.6.10"},"build":{"aivibeclawVersion":"2026.6.10"},"release":{"publishToClawHub":true,"publishToNpm":true}},"gitHead":"f43268f0541205e95ceecd2e96d6db61415be5c0","_id":"@aivibeclaw/voice-call@2026.7.2","bugs":{"url":"https://github.com/aivibe-org/aivibeclaw/issues"},"homepage":"https://github.com/aivibe-org/aivibeclaw#readme","_nodeVersion":"26.0.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-M2ZePYEpzFoVeTb3r8MWPmkWlgER3lzPjMutE4EBn6SwHTYpxIX8Ta5dDK4EquUueaypIDsBNElZvhWXwdiDxQ==","shasum":"be80ab107a2e057a846218fbc664c83c1fa39479","tarball":"https://registry.npmjs.org/@aivibeclaw/voice-call/-/voice-call-2026.7.2.tgz","fileCount":146,"unpackedSize":1446884,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCVNqSMZtsG3pYSCtRRSwBW/wV9/wl6Hcpbo59qoqE6rwIgYgiag50GHcnBmg8EJM1lqJf6+zlJzexHe5wOv0ghu7I="}]},"_npmUser":{"name":"ajair","email":"aravind@aivibe.in"},"directories":{},"maintainers":[{"name":"ajair","email":"aravind@aivibe.in"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/voice-call_2026.7.2_1782935584352_0.7519770989258046"},"_hasShrinkwrap":true}},"time":{"created":"2026-07-01T19:53:04.184Z","2026.7.2":"2026-07-01T19:53:04.501Z","modified":"2026-07-01T19:53:04.717Z"},"maintainers":[{"name":"ajair","email":"aravind@aivibe.in"}],"description":"AivibeClaw voice-call plugin for Twilio, Telnyx, and Plivo phone calls.","homepage":"https://github.com/aivibe-org/aivibeclaw#readme","repository":{"type":"git","url":"git+https://github.com/aivibe-org/aivibeclaw.git"},"bugs":{"url":"https://github.com/aivibe-org/aivibeclaw/issues"},"readme":"# @aivibeclaw/voice-call\n\nOfficial Voice Call plugin for **Aivibe Claw**.\n\nProviders:\n\n- **Twilio** (Programmable Voice + Media Streams)\n- **Telnyx** (Call Control v2)\n- **Plivo** (Voice API + XML transfer + GetInput speech)\n- **Mock** (dev/no network)\n\nDocs: `https://docs.aivibeclaw.com/plugins/voice-call`\nPlugin system: `https://docs.aivibeclaw.com/tools/plugin`\n\n## Install\n\n```bash\naivibeclaw plugins install @aivibeclaw/voice-call\n```\n\nRestart the Gateway afterwards.\n\n## Local dev install\n\n```bash\nPLUGIN_HOME=~/.aivibeclaw/extensions\nmkdir -p \"$PLUGIN_HOME\"\ncp -R <local-plugin-checkout> \"$PLUGIN_HOME/voice-call\"\ncd \"$PLUGIN_HOME/voice-call\" && pnpm install\n```\n\n## Config\n\nPut under `plugins.entries.voice-call.config`:\n\n```json5\n{\n  provider: \"twilio\", // or \"telnyx\" | \"plivo\" | \"mock\"\n  fromNumber: \"+15550001234\",\n  toNumber: \"+15550005678\",\n  sessionScope: \"per-phone\", // or \"per-call\"\n\n  twilio: {\n    accountSid: \"ACxxxxxxxx\",\n    authToken: \"your_token\",\n  },\n\n  telnyx: {\n    apiKey: \"KEYxxxx\",\n    connectionId: \"CONNxxxx\",\n    // Telnyx webhook public key from the Telnyx Mission Control Portal\n    // (Base64 string; can also be set via TELNYX_PUBLIC_KEY).\n    publicKey: \"...\",\n  },\n\n  plivo: {\n    authId: \"MAxxxxxxxxxxxxxxxxxxxx\",\n    authToken: \"your_token\",\n  },\n\n  // Webhook server\n  serve: {\n    port: 3334,\n    path: \"/voice/webhook\",\n  },\n\n  // Public exposure (pick one):\n  // publicUrl: \"https://example.ngrok.app/voice/webhook\",\n  // tunnel: { provider: \"ngrok\" },\n  // tailscale: { mode: \"funnel\", path: \"/voice/webhook\" }\n\n  outbound: {\n    defaultMode: \"notify\", // or \"conversation\"\n  },\n\n  // Optional response agent workspace. Defaults to \"main\".\n  agentId: \"main\",\n\n  streaming: {\n    enabled: true,\n    // optional; if omitted, Voice Call picks the first registered\n    // realtime-transcription provider by autoSelectOrder\n    provider: \"<realtime-transcription-provider-id>\",\n    streamPath: \"/voice/stream\",\n    providers: {\n      \"<realtime-transcription-provider-id>\": {\n        // provider-owned options\n      },\n    },\n    preStartTimeoutMs: 5000,\n    maxPendingConnections: 32,\n    maxPendingConnectionsPerIp: 4,\n    maxConnections: 128,\n  },\n}\n```\n\nNotes:\n\n- Twilio/Telnyx/Plivo require a **publicly reachable** webhook URL.\n- `mock` is a local dev provider (no network calls).\n- Telnyx requires `telnyx.publicKey` (or `TELNYX_PUBLIC_KEY`) unless `skipSignatureVerification` is true.\n- If older configs still use `provider: \"log\"`, `twilio.from`, or legacy `streaming.*` OpenAI keys, run `aivibeclaw doctor --fix` to rewrite them.\n- advanced webhook, streaming, and tunnel notes: `https://docs.aivibeclaw.com/plugins/voice-call`\n- `responseModel` is optional. When unset, voice responses use the runtime default model.\n- `sessionScope` defaults to `per-phone`, preserving caller memory across calls. Use `per-call` for reception, booking, IVR, and bridge flows where each carrier call should start fresh.\n- `realtime.consultThinkingLevel` is optional. When set, it overrides the thinking level used by the model behind realtime `aivibeclaw_agent_consult` calls.\n- `realtime.consultFastMode` is optional. When set, it toggles fast mode for realtime `aivibeclaw_agent_consult` calls.\n\n## Stale call reaper\n\nSee the plugin docs for recommended ranges and production examples:\n`https://docs.aivibeclaw.com/plugins/voice-call#stale-call-reaper`\n\n## TTS for calls\n\nVoice Call uses the core `messages.tts` configuration for\nstreaming speech on calls. Override examples and provider caveats live here:\n`https://docs.aivibeclaw.com/plugins/voice-call#tts-for-calls`\n\n## CLI\n\n```bash\naivibeclaw voicecall call --to \"+15555550123\" --message \"Hello from Aivibe Claw\"\naivibeclaw voicecall continue --call-id <id> --message \"Any questions?\"\naivibeclaw voicecall speak --call-id <id> --message \"One moment\"\naivibeclaw voicecall end --call-id <id>\naivibeclaw voicecall status --json\naivibeclaw voicecall status --call-id <id>\naivibeclaw voicecall tail\naivibeclaw voicecall expose --mode funnel\n```\n\n## Tool\n\nTool name: `voice_call`\n\nActions:\n\n- `initiate_call` (message, to?, mode?)\n- `continue_call` (callId, message)\n- `speak_to_user` (callId, message)\n- `end_call` (callId)\n- `get_status` (callId)\n\n## Gateway RPC\n\n- `voicecall.initiate` (to?, message, mode?)\n- `voicecall.continue` (callId, message)\n- `voicecall.speak` (callId, message)\n- `voicecall.end` (callId)\n- `voicecall.status` (callId)\n\n## Notes\n\n- Uses webhook signature verification for Twilio/Telnyx/Plivo.\n- Adds replay protection for Twilio and Plivo webhooks (valid duplicate callbacks are ignored safely).\n- Twilio speech turns include a per-turn token so stale/replayed callbacks cannot complete a newer turn.\n- `responseModel` / `responseSystemPrompt` control AI auto-responses.\n- Voice-call auto-responses enforce a spoken JSON contract (`{\"spoken\":\"...\"}`) and filter reasoning/meta output before playback.\n- While a Twilio stream is active, playback does not fall back to TwiML `<Say>`; stream-TTS failures fail the playback request.\n- Outbound conversation calls suppress barge-in only while the initial greeting is actively speaking, then re-enable normal interruption.\n- Twilio stream disconnect auto-end uses a short grace window so quick reconnects do not end the call.\n- Realtime provider selection is generic. Configure `streaming.provider` / `realtime.provider` and put provider-owned options under `providers.<id>`.\n- Runtime fallback still accepts the old voice-call keys for now, but migration is a doctor step and the compat shim is scheduled to go away in a future release.\n","readmeFilename":"README.md","_rev":"1-327fec0b076ec628d1e5327130544c84"}