Install
openclaw skills install @robit-man/voxrnPlace phone calls, send SMS, search contacts, and run agent dispatches via Voxrn. Bridges any OpenClaw-bridged chat (Slack, Telegram, iMessage, WhatsApp, Discord, more) to a real PSTN.
openclaw skills install @robit-man/voxrnVoxrn is a browser-native voice + SMS platform with an MCP-driven agent runtime. This skill registers Voxrn as an outbound MCP server in your OpenClaw workspace, so the agent can place calls, send messages, manage contacts, and watch live agent sessions from any bridged chat.
Reach for these tools when the user asks to:
| Tool | Args | Use it for |
|---|---|---|
call.place | { to: E.164, taskBrief?: string, voiceProfileId?: string } | Dial out — agent runs the call following the task brief |
call.list_active | none | Show currently-live calls in the workspace |
call.end | { callSid: string } | Hard-kill an active call by SID |
transcript.stream | { callSid: string } | Subscribe to live captions for a call |
message.send | { to: E.164, body: string } | Send an SMS |
contact.search | { q: string } | Free-text search across name, number, tag |
contact.upsert | { name, number, tags?, notes? } | Create or update a contact |
balance.check | none | Read the workspace balance in USD |
Set these env vars (or use OpenClaw's secrets manager):
export VOXRN_API_KEY="vxk_..." # mint at https://voxrn.com/enterprise/dashboard/agents
export VOXRN_BASE_URL="https://voxrn.com" # optional; defaults to prod
Or:
openclaw config secrets set voxrn_api_key vxk_...
The skill's mcp.json reads ${VOXRN_API_KEY} at MCP-registration time so the secret never reaches the agent's prompt window.
contact.search { q: "Atlas" } and ask which match before placing the call.call.place. Default rate-card multiplier is 1.25× over carrier; international calls can be more. Either ask "ok if this costs ~$X for a 2-minute call?" or run balance.check first.taskBrief. Don't reformat — the brief travels straight to the agent runtime.call.end unless the user explicitly said "kill it now". Action is destructive and audit-logged.${VOXRN_API_KEY} so the agent never sees the secret.User: call my plumber and ask if Thursday morning works for the kitchen sink
agent: contact.search { q: "plumber" }
→ [{ id: "c-12", name: "Atlas Plumbing", number: "+14155551234", tags: ["plumber"] }]
agent: balance.check {}
→ { usd: 23.40 }
agent: "Calling Atlas Plumbing at +1 415 555 1234 to ask about Thursday morning availability. Estimated cost: ~$0.04. Going ahead."
agent: call.place {
to: "+14155551234",
taskBrief: "Call Atlas Plumbing on the user's behalf. Ask if Thursday morning is available to fix a kitchen sink leak. If yes, confirm a 9am window. If no, ask what's their next opening this week."
}
→ { callSid: "CAabc...", reservedUsd: 0.04 }
agent: "Call placed. SID CAabc... — I'll let you know when it ends."
User: kill the call to Mina, the agent's stuck
agent: call.list_active {}
→ [{ callSid: "CAxyz...", to: "+14155557890", durationSeconds: 142, billedUsd: 0.05 }]
agent: "I see one active call to +1 415 555 7890 — duration 2:22, $0.05 spent. End it?"
user: yes
agent: call.end { callSid: "CAxyz..." } → { ok: true }
User: text Mina that the meeting moved to 2pm tomorrow
agent: contact.search { q: "Mina" }
→ [{ id: "c-1", name: "Mina Hart", number: "+14155557890" }]
agent: message.send { to: "+14155557890", body: "Hey Mina — meeting moved to 2pm tomorrow. — Sent via Voxrn" }
→ { messageSid: "SMabc...", segments: 1, billedUsd: 0.0079 }
agent: "Sent."
401 Unauthorized from a Voxrn tool — your API key is wrong, expired, or the workspace it belongs to has been removed. Mint a fresh key at https://voxrn.com/enterprise/dashboard/agents → API keys.caller_audio_failed. Check call.list_active for state. The Voxrn live monitor mirrors this view at https://voxrn.com/enterprise/dashboard/agents.balance.check returns 0 — top up the workspace via Stripe or USDC at https://voxrn.com/account → Billing.