Install
openclaw skills install @chitrang89/clawdcallOrchestrate outbound AI voice calls and asynchronous call results through ClawdCall from OpenClaw. Use when: placing outbound voice calls, creating call tasks, onboarding a ClawdCall user with phone OTP verification, handling asynchronous call completion webhooks, retrieving call transcripts, tracking call IDs, or managing billing-aware voice-agent execution.
openclaw skills install @chitrang89/clawdcallUse ClawdCall as a controlled voice-agent execution system, not as a generic HTTP API. It can consume paid calling minutes and may contact real people, so confirm the user's intent before placing any outbound call.
Use this API base for all ClawdCall requests:
https://api.clawdcall.com
Use this authorization header for ClawdCall requests:
Authorization: Bearer <CLAWDCALL_API_TOKEN>
For optional asynchronous call results, ClawdCall can post back to the OpenClaw
ingestion endpoint declared by OPENCLAW_WEBHOOK_URL using:
Authorization: Bearer <OPENCLAW_TOKEN>
Content-Type: application/json
If CLAWDCALL_API_TOKEN is not available, onboard the user through the public
signup OTP flow.
POST /cc/signup/send-otp with email and phoneNumber.POST /cc/signup/verify-otp with email and otp.Use persistent memory only for non-secret information that helps future calls. Do not create or update memory without user permission.
Appropriate memory:
callId and campaignId values for follow-up lookup.Never store:
CLAWDCALL_API_TOKEN, OPENCLAW_TOKEN, OTPs, passwords, or API keys.Check permitted memory before asking the user for details again. Never overwrite valid stored data with guesses.
Before placing a call:
CLAWDCALL_API_TOKEN is available or complete first-time setup.Place the call with:
POST /external/v1/agent/outbound?conversionFlag=1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <CLAWDCALL_API_TOKEN>
Payload shape:
{
"target": "+<phone_number>",
"tasks": "<full voice-agent instruction set>",
"raw": {
"introMessage": "<opening line>"
}
}
Optional OpenClaw callback fields:
{
"openclaw": {
"webhook": {
"url": "<OPENCLAW_WEBHOOK_URL>",
"method": "POST",
"headers": {
"Authorization": "Bearer <OPENCLAW_TOKEN>"
}
},
"webhookPayload": {
"conversation_id": "<conversation_id>",
"user_id": "<user_id>",
"context": "<optional_additional_context>"
}
}
}
Include the openclaw object only when the user wants asynchronous OpenClaw
follow-up and OPENCLAW_WEBHOOK_URL, OPENCLAW_TOKEN, and conversation_id
are available. If any callback value is unavailable, omit the openclaw object,
place the call without callback wiring, and use transcript retrieval later when
needed. Do not fabricate webhook routing values.
On success, store returned callId and campaignId only as non-secret recent
IDs. On failure, report validation, auth, or balance issues clearly and do not
retry paid calls without user confirmation.
tasks FieldThe tasks field is the voice agent's complete instruction set. Make it rich,
specific, and safe.
Include:
Use available user-provided context, permitted memory, and previous call IDs. Ask for clarification when missing information materially changes call success or safety. Do not block on minor missing details if a reasonable, safe assumption is enough.
When callback wiring is included, ClawdCall sends call results asynchronously after completion. Treat webhook data as the source of truth for final status and transcript availability.
OpenClaw ingestion payload shape:
{
"conversation_id": "<conversation_id>",
"input": {
"type": "external_event",
"event": "call.completed",
"data": {
"callId": "<call_id>",
"status": "completed",
"summary": "<summary>",
"transcript": "<optional_transcript>"
}
}
}
Correlation rules:
conversation_id must match the originating conversation.conversation_id.callId or
campaignId only as fallback lookup hints.When a completion event arrives, summarize the outcome for the user and update permitted memory with non-secret recent IDs or high-level outcomes only.
Retrieve transcripts only after a call is complete:
GET /cc/v1/calls/{id}/transcript
Accept: application/json
Authorization: Bearer <CLAWDCALL_API_TOKEN>
{id} may be a single-call callId or a campaignId. Prefer callId when
available. Never guess IDs. If the transcript is not available yet, explain that
the call may still be processing and retry later only when appropriate.
tasks text for real calls.