{"_id":"@apilium/mayros-voice-call","name":"@apilium/mayros-voice-call","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.1":{"name":"@apilium/mayros-voice-call","version":"0.1.1","description":"Mayros voice-call plugin","license":"MIT","type":"module","publishConfig":{"access":"public"},"dependencies":{"@sinclair/typebox":"0.34.48","ws":"^8.19.0","zod":"^4.3.6"},"peerDependencies":{"@apilium/mayros":">=0.1.0"},"mayros":{"extensions":["./index.ts"]},"_id":"@apilium/mayros-voice-call@0.1.1","_integrity":"sha512-viez/Mv9lkztsJI8mRyiC6sB3taWibOAps6VC4NukEy83lgQKi5dgI9K5RUyoQkH6zcX9IEVe/DoEBPu3vx5Zg==","_resolved":"/private/var/folders/_y/k11qcrj94k32_yl6486p9bsc0000gn/T/636cb50c8383c2d882786d46b16d0d56/apilium-mayros-voice-call-0.1.1.tgz","_from":"file:apilium-mayros-voice-call-0.1.1.tgz","_nodeVersion":"24.8.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-viez/Mv9lkztsJI8mRyiC6sB3taWibOAps6VC4NukEy83lgQKi5dgI9K5RUyoQkH6zcX9IEVe/DoEBPu3vx5Zg==","shasum":"e2e69ba13d97764765e53c1eecc265fc5b10652f","tarball":"https://registry.npmjs.org/@apilium/mayros-voice-call/-/mayros-voice-call-0.1.1.tgz","fileCount":50,"unpackedSize":322976,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAFcBc3pn+DG+ouPAch0nR7Ec9cG+WBQhasCJ4PJ2e3TAiBfvk1Dp0ksbux9zhPGIV2vGXYbvB7f8e4hsrUt3rB78Q=="}]},"_npmUser":{"name":"apilium-ai","email":"it@apilium.com"},"directories":{},"maintainers":[{"name":"apilium-ai","email":"it@apilium.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mayros-voice-call_0.1.1_1772217457346_0.3305943191198337"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-27T18:37:37.260Z","0.1.1":"2026-02-27T18:37:37.500Z","modified":"2026-02-27T18:37:37.704Z"},"maintainers":[{"name":"apilium-ai","email":"it@apilium.com"}],"description":"Mayros voice-call plugin","license":"MIT","readme":"# @apilium/mayros-voice-call\n\nOfficial Voice Call plugin for **Mayros**.\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://apilium.com/us/doc/mayros/plugins/voice-call`\nPlugin system: `https://apilium.com/us/doc/mayros/plugin`\n\n## Install (local dev)\n\n### Option A: install via Mayros (recommended)\n\n```bash\nmayros plugins install @apilium/mayros-voice-call\n```\n\nRestart the Gateway afterwards.\n\n### Option B: copy into your global extensions folder (dev)\n\n```bash\nmkdir -p ~/.mayros/extensions\ncp -R extensions/voice-call ~/.mayros/extensions/voice-call\ncd ~/.mayros/extensions/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\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  streaming: {\n    enabled: true,\n    streamPath: \"/voice/stream\",\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- `tunnel.allowNgrokFreeTierLoopbackBypass: true` allows Twilio webhooks with invalid signatures **only** when `tunnel.provider=\"ngrok\"` and `serve.bind` is loopback (ngrok local agent). Use for local dev only.\n\n## Stale call reaper\n\nUse `staleCallReaperSeconds` to end calls that never receive a terminal webhook\n(for example, notify-mode calls that never complete). The default is `0`\n(disabled).\n\nRecommended ranges:\n\n- **Production:** `120`–`300` seconds for notify-style flows.\n- Keep this value **higher than `maxDurationSeconds`** so normal calls can\n  finish. A good starting point is `maxDurationSeconds + 30–60` seconds.\n\nExample:\n\n```json5\n{\n  staleCallReaperSeconds: 360,\n}\n```\n\n## TTS for calls\n\nVoice Call uses the core `messages.tts` configuration (OpenAI or ElevenLabs) for\nstreaming speech on calls. You can override it under the plugin config with the\nsame shape — overrides deep-merge with `messages.tts`.\n\n```json5\n{\n  tts: {\n    provider: \"openai\",\n    openai: {\n      voice: \"alloy\",\n    },\n  },\n}\n```\n\nNotes:\n\n- Edge TTS is ignored for voice calls (telephony audio needs PCM; Edge output is unreliable).\n- Core TTS is used when Twilio media streaming is enabled; otherwise calls fall back to provider native voices.\n\n## CLI\n\n```bash\nmayros voicecall call --to \"+15555550123\" --message \"Hello from Mayros\"\nmayros voicecall continue --call-id <id> --message \"Any questions?\"\nmayros voicecall speak --call-id <id> --message \"One moment\"\nmayros voicecall end --call-id <id>\nmayros voicecall status --call-id <id>\nmayros voicecall tail\nmayros 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- `responseModel` / `responseSystemPrompt` control AI auto-responses.\n- Media streaming requires `ws` and OpenAI Realtime API key.\n","readmeFilename":"README.md","_rev":"1-38e36a2b81e86b0baad6a2406294a168"}