{"id":"c1ba6acc-73bd-4baa-b700-67636dc7da81","entityType":"agent","slug":"clawhub-sameersribot-agentline-telephone","name":"Agentline.cloud","canonicalUrl":"https://www.xpersona.co/agent/clawhub-sameersribot-agentline-telephone","canonicalPath":"/agent/clawhub-sameersribot-agentline-telephone","generatedAt":"2026-10-11T11:24:25.491Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:27:48.925Z","emptyReason":null},"description":"Make phone calls, view received SMS, provision numbers, manage agents, and track billing through the AgentLine telephony API. Use when the user asks to call...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17c067jp9kzfqn3egqq86v8n5872xcr:agentline-telephone","sourceUrl":"https://clawhub.ai/sameersribot/agentline-telephone","homepage":"https://clawhub.ai/sameersribot/skills/agentline-telephone","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/sameersribot/agentline-telephone","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/sameersribot/skills/agentline-telephone","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Agentline.cloud technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:27:48.925Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:27:48.925Z","emptyReason":null},"stars":null,"forks":null,"downloads":1100,"packageName":null,"latestVersion":"1.0.5","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:27:48.913Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T09:27:48.925Z","lastCrawledAt":"2026-10-11T09:27:48.913Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T09:27:48.913Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.5","createdAt":"2026-06-17T09:24:36.337Z","changelog":"agentline-telephone 1.0.5 - Removed the skill-card.md file. - Updated initial skill setup instructions for clarity and stricter order of setup steps. - Made area code selection and voice selection separate explicit steps, with canned prompts. - Added instructions for mandatory background event polling (for calls and inbound SMS), including sample scripts for both Bash and PowerShell. - Clarified that inbound SMS can only be viewed — outbound SMS is not allowed. - Improved explanations for events, call handling, transcript retrieval, and voice configuration.","fileCount":3,"zipByteSize":6166},{"version":"1.0.4","createdAt":"2026-05-28T08:42:51.133Z","changelog":"**Outbound SMS is now disabled; new voice selection and event mailbox features added.** - Outbound SMS/MMS sending has been removed; you can now only view inbound SMS messages. - Added instructions and parameters for selecting an agent's voice (male/female) and setting via the API. - Outbound/inbound call transcripts must always be retrieved and shared after each call. - Introduced the Events Mailbox: poll `/v1/events` to receive and manage inbound call completion and transcript events. - Updated documentation to clarify required usage patterns and supported features.","fileCount":3,"zipByteSize":6416},{"version":"1.0.3","createdAt":"2026-05-21T12:28:37.707Z","changelog":"- Updated the API base URL from https://agentphone-production.up.railway.app to https://api.agentline.cloud. - No other changes detected; documentation and usage instructions remain the same.","fileCount":3,"zipByteSize":4686},{"version":"1.0.2","createdAt":"2026-05-20T12:42:33.332Z","changelog":"Initial release of AgentLine — a full-featured AI telephony skill for phone calls, SMS, and phone number management. - Make and manage AI-driven phone calls, including call initiation, hangup, and transcript retrieval. - Send and list SMS/MMS messages through a simple API. - Provision, list, and release US phone numbers for agents. - Manage agent settings, system prompts, and agent details. - Track account billing, expenditure, and available balance. - Requires an API key for use; onboarding instructions included.","fileCount":2,"zipByteSize":3404}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17c067jp9kzfqn3egqq86v8n5872xcr:agentline-telephone","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17c067jp9kzfqn3egqq86v8n5872xcr:agentline-telephone` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/sameersribot/agentline-telephone before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-sameersribot-agentline-telephone/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-sameersribot-agentline-telephone/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-sameersribot-agentline-telephone/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-sameersribot-agentline-telephone/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-sameersribot-agentline-telephone/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-sameersribot-agentline-telephone/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T11:24:25.490Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-sameersribot-agentline-telephone/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-sameersribot-agentline-telephone/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-sameersribot-agentline-telephone/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-sameersribot-agentline-telephone/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:27:48.925Z","emptyReason":null},"readme":"Skill: Agentline.cloud\n\nOwner: sameersribot\n\nSummary: Make phone calls, view received SMS, provision numbers, manage agents, and track billing through the AgentLine telephony API. Use when the user asks to call...\n\nTags: latest:1.0.5\n\nVersion history:\n\nv1.0.5 | 2026-06-17T09:24:36.337Z | user\n\nagentline-telephone 1.0.5\n\n- Removed the skill-card.md file.\n- Updated initial skill setup instructions for clarity and stricter order of setup steps.\n- Made area code selection and voice selection separate explicit steps, with canned prompts.\n- Added instructions for mandatory background event polling (for calls and inbound SMS), including sample scripts for both Bash and PowerShell.\n- Clarified that inbound SMS can only be viewed — outbound SMS is not allowed.\n- Improved explanations for events, call handling, transcript retrieval, and voice configuration.\n\nv1.0.4 | 2026-05-28T08:42:51.133Z | user\n\n**Outbound SMS is now disabled; new voice selection and event mailbox features added.**\n\n- Outbound SMS/MMS sending has been removed; you can now only view inbound SMS messages.\n- Added instructions and parameters for selecting an agent's voice (male/female) and setting via the API.\n- Outbound/inbound call transcripts must always be retrieved and shared after each call.\n- Introduced the Events Mailbox: poll `/v1/events` to receive and manage inbound call completion and transcript events.\n- Updated documentation to clarify required usage patterns and supported features.\n\nv1.0.3 | 2026-05-21T12:28:37.707Z | user\n\n- Updated the API base URL from https://agentphone-production.up.railway.app to https://api.agentline.cloud.\n- No other changes detected; documentation and usage instructions remain the same.\n\nv1.0.2 | 2026-05-20T12:42:33.332Z | user\n\nInitial release of AgentLine — a full-featured AI telephony skill for phone calls, SMS, and phone number management.\n\n- Make and manage AI-driven phone calls, including call initiation, hangup, and transcript retrieval.\n- Send and list SMS/MMS messages through a simple API.\n- Provision, list, and release US phone numbers for agents.\n- Manage agent settings, system prompts, and agent details.\n- Track account billing, expenditure, and available balance.\n- Requires an API key for use; onboarding instructions included.\n\nArchive index:\n\nArchive v1.0.5: 3 files, 6166 bytes\n\nFiles: skill-card.md (2455b), SKILL.md (10592b), _meta.json (138b)\n\nFile v1.0.5:SKILL.md\n\n---\nname: agentline\ndescription: Make phone calls, view received SMS, provision numbers, manage agents, and track billing through the AgentLine telephony API. Use when the user asks to call someone, check transcripts, view text messages, manage phone agents, buy numbers, or check account balance.\nmetadata:\n  openclaw:\n    emoji: \"📞\"\n    requires:\n      env:\n        - AGENTLINE_API_KEY\n    primaryEnv: AGENTLINE_API_KEY\n---\n\n# AgentLine — AI Telephony Skill\n\nGive your AI agent a real phone number and voice calls — no servers, no webhooks, no infrastructure.\n\n## First-Time Setup\n\n**Follow these steps IN ORDER when setting up AgentLine for the first time:**\n\n1. **Check for `AGENTLINE_API_KEY`** (starts with `sk_live_`) — this is required.\n   - **If you do NOT have this key**, stop and ask the human to sign up or log in at **https://agentline.cloud** to get their API key. Do NOT proceed without it.\n\n2. **Check for `AGENTLINE_AGENT_ID`** (starts with `agt_`) — this is optional.\n   - **If you already have one**, use it and skip to step 3.\n   - **If you do NOT have one**, create a new agent now by calling `POST /v1/agents` with `{\"name\": \"My Agent\"}`. Save the returned agent ID.\n\n3. **Ask for area code and provision the number** — **Always ask the human:**\n   > \"What area code would you like for your phone number? (e.g. 212 for NYC, 415 for SF, 313 for Detroit)\"\n   - Once they give an area code, call `POST /v1/numbers` with `{\"agent_id\": \"...\", \"area_code\": \"XXX\"}`\n   - If it succeeds, confirm the provisioned number to the human\n   - If it fails (no numbers available for that area code), tell them and ask for a different area code\n\n4. **Ask for voice preference** — **Always ask the human:**\n   > \"Would you like your agent to have a **male** or **female** voice?\"\n   - If **female**: set `voice_id` to `\"female-1\"` (or `\"female-2\"` for warmer tone)\n   - If **male**: set `voice_id` to `\"male-1\"`\n   - Apply via `PATCH /v1/agents/$AGENTLINE_AGENT_ID` with `{\"voice_id\": \"chosen_preset\"}`\n   - Available presets: `female-1`, `female-2`, `male-1` — or any Cartesia voice UUID\n\n5. **Start the background event poller** — This is **MANDATORY**. Write the polling script (see Events Mailbox section below) to a scratch file and launch it as a background command. Without this, you will miss all inbound calls and SMS messages.\n\n> ⚠️ **Do NOT skip ANY steps.** Steps 1-4 set up the agent. Step 5 keeps it alive and aware of incoming calls/texts.\n   - Write the polling script (Bash for Linux/macOS, PowerShell for Windows) from the Events Mailbox section below\n   - Launch it as a background process with `terminal(background=true)`\n   - Verify it's running\n\n> ⚠️ **Do NOT skip steps or change the order.** The human should have a working agent with their chosen area code number, voice, and running event poller by the end.\n\n---\n\n## Authentication\n\nEvery request: `Authorization: Bearer $AGENTLINE_API_KEY` + `Content-Type: application/json`\n\nBase URL: `https://api.agentline.cloud`\n\n---\n\n## How Calls Work (Hosted Mode)\n\nAgentLine runs in **Hosted Mode** — the server runs the AI voice conversation autonomously. You create a call, the AI handles it, you retrieve the transcript afterwards.\n\n### System Prompts\n\n- **Dynamic prompt** — `system_prompt` field in `POST /v1/calls`. Overrides default for that call only.\n- **Default prompt** — stored on agent via `PATCH /v1/agents/{agent_id}`. Used for all inbound calls and outbound calls without a dynamic prompt.\n\n> ⚠️ **`system_prompt` is a FULL REPLACE, not append.** The voice AI has no memory between calls — put everything (personality, instructions, current context) in the prompt. Update it whenever your context changes.\n\n---\n\n## Make an Outbound Call\n\n```bash\ncurl -X POST $AGENTLINE_URL/v1/calls \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"agent_id\": \"$AGENTLINE_AGENT_ID\", \"to_number\": \"+1XXXXXXXXXX\", \"system_prompt\": \"...\", \"initial_greeting\": \"...\", \"voice_id\": \"female-1\"}'\n```\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| `agent_id` | Yes | Your agent ID |\n| `to_number` | Yes | E.164 phone number to call |\n| `system_prompt` | No | Dynamic prompt for this call only (overrides default) |\n| `initial_greeting` | No | What the agent says first when the person picks up |\n| `voice_id` | No | `\"female-1\"`, `\"female-2\"`, `\"male-1\"`, or Cartesia UUID |\n\n**After every outbound call:** Poll `GET /v1/calls/<call_id>` every ~10s until `status=completed`, then `GET /v1/calls/<call_id>/transcript`. Summarize and share with human. Never consider a call \"done\" without the transcript.\n\n**If you get 400 \"Agent has no active phone number\"**, provision one first.\n\n---\n\n## End a Call\n\n`POST /v1/calls/<call_id>/hangup`\n\n---\n\n## Get Call Transcript\n\n`GET /v1/calls/<call_id>/transcript` — Returns `[{role, text, timestamp}, ...]`\n\n---\n\n## Events Mailbox\n\nEvents are pushed when someone calls or texts your agent's number. **You MUST poll regularly.**\n\n**Event types:** `call.received` (inbound call started), `call.completed` (call ended, includes transcript), `sms.received` (inbound SMS)\n\n### ⚡ MANDATORY — Background Event Polling\n\n> ⚠️ **Do NOT use `schedule`/cron to poll.** Use the background script approach — it only wakes you when events exist.\n\n**Setup:** Write the polling script to a scratch file, then launch as a background command with `WaitMsBeforeAsync=500`.\n\n**Windows (PowerShell):**\n```powershell\nparam([string]$ApiKey, [string]$BaseUrl = \"https://api.agentline.cloud\", [int]$Interval = 50)\n$headers = @{ \"Authorization\" = \"Bearer $ApiKey\" }\nwhile ($true) {\n    try {\n        $r = Invoke-RestMethod -Uri \"$BaseUrl/v1/events/peek\" -Headers $headers -Method Get -ErrorAction Stop\n        if ($r.count -gt 0) { Write-Output \"AGENTLINE_EVENTS_FOUND: $($r.count) pending event(s). Call GET /v1/events to consume.\" }\n    } catch {\n        if ($_.Exception.Response.StatusCode -eq 401) { Write-Output \"AGENTLINE_AUTH_ERROR\"; break }\n    }\n    Start-Sleep -Seconds $Interval\n}\n```\n\n**macOS/Linux (Bash):**\n```bash\n#!/usr/bin/env bash\nset -uo pipefail\nAPI_KEY=\"$1\"; BASE_URL=\"${2:-https://api.agentline.cloud}\"; INTERVAL=\"${3:-50}\"\nwhile true; do\n  RESP=$(curl -s -w \"\\n%{http_code}\" \"$BASE_URL/v1/events/peek\" -H \"Authorization: Bearer $API_KEY\" 2>/dev/null) || { sleep \"$INTERVAL\"; continue; }\n  CODE=$(echo \"$RESP\" | tail -1); BODY=$(echo \"$RESP\" | sed '$d')\n  [ \"$CODE\" = \"401\" ] && { echo \"AGENTLINE_AUTH_ERROR\"; exit 1; }\n  [[ \"$CODE\" != 2* ]] && { sleep \"$INTERVAL\"; continue; }\n  COUNT=$(echo \"$BODY\" | grep -oP '\"count\"\\s*:\\s*\\K[0-9]+' 2>/dev/null || echo \"0\")\n  [ \"$COUNT\" -gt 0 ] && echo \"AGENTLINE_EVENTS_FOUND: $COUNT pending event(s). Call GET /v1/events to consume.\"\n  sleep \"$INTERVAL\"\ndone\n```\n\n**When notified with `AGENTLINE_EVENTS_FOUND`:** Call `GET /v1/events` to consume, process each event, report to human.\n\n### Endpoints\n\n- **Consume events:** `GET /v1/events` — returns events oldest-first, auto-deleted after retrieval\n- **Peek (don't consume):** `GET /v1/events/peek`\n- **Filter:** `?agent_id=agt_xxx` or `?event_type=call.completed` or `?event_type=sms.received`\n\n### Event payload structure\n\nEach event contains: `event_id`, `agent_id`, `event_type`, and a `payload` with call/SMS details. `call.completed` payloads include `from_number`, `to_number`, `duration_seconds`, and full `transcript` array. `sms.received` payloads include `from_number`, `body`, and `media_url`.\n\n---\n\n## List Calls\n\n`GET /v1/calls?limit=20` or `GET /v1/calls?status=completed&limit=10`\n\n---\n\n## Get Call Details\n\n`GET /v1/calls/<call_id>`\n\n---\n\n## SMS\n\n> **⚠️ SMS sending is NOT enabled.** Do NOT attempt outbound SMS/MMS.\n\nInbound SMS arrives as `sms.received` events in the Events Mailbox. View message history: `GET /v1/messages?limit=20`\n\n---\n\n## Update Agent (System Prompt, Voice, etc.)\n\n`PATCH /v1/agents/$AGENTLINE_AGENT_ID` with any of:\n\n| Field | Description |\n|-------|-------------|\n| `system_prompt` | Full instructions + current context for voice AI |\n| `initial_greeting` | What the agent says when answering inbound calls |\n| `name` | Display name |\n| `voice_id` | `\"female-1\"`, `\"female-2\"`, `\"male-1\"`, or Cartesia UUID |\n| `model_tier` | `\"turbo\"`, `\"balanced\"`, or `\"max\"` |\n\n---\n\n## Get/List Agents\n\n- **Get one:** `GET /v1/agents/$AGENTLINE_AGENT_ID`\n- **List all:** `GET /v1/agents`\n\n---\n\n## Voice Settings\n\nPriority (highest wins): per-call → per-agent → per-account\n\n- **List voices:** `GET /v1/voices`\n- **Set account default:** `PATCH /v1/account/voice` with `{\"voice_id\": \"female-1\"}`\n- **Check current:** `GET /v1/account/voice`\n- **Reset to default:** `DELETE /v1/account/voice`\n\n---\n\n## Phone Numbers\n\nEach agent needs one phone number. Only US numbers supported. **$2.00 per number.**\n\n### Provision (Buy) a Number\n\n`POST /v1/numbers` with:\n\n| Field | Required | Description |\n|-------|------------|-------------|\n| `agent_id` | Yes | Agent to attach to |\n| `country` | Yes | Must be `\"US\"` |\n| `area_code` | No | Preferred 3-digit area code (e.g. `\"212\"`, `\"313\"`). **Always ask the user!** |\n| `number_type` | No | `\"local\"` or `\"tollfree\"` (default: local) |\n\nIf no numbers are available for the requested area code, the API returns an error — ask the user for a different area code.\n\n### List Numbers\n\n`GET /v1/numbers`\n\n---\n\n## Billing\n\n- **Check balance:** `GET /v1/billing/balance`\n- **Expenditure:** `GET /v1/billing/expenditure?period=current_month` (also: `last_month`, `all_time`, `YYYY-MM`)\n- **Call charges:** `GET /v1/billing/expenditure/calls?limit=10`\n- **Number charges:** `GET /v1/billing/expenditure/numbers`\n- **Verify charge:** `GET /v1/billing/verify/<call_id>`\n\n### Rates\n\n| Item | Cost |\n|------|------|\n| Calls (in/out) | $0.10/min (billed per second) |\n| Phone number | $2.00 (one-time) |\n\n---\n\n## Rules\n\n1. **E.164 format** — always `+1XXXXXXXXXX` for US numbers.\n2. **Confirm before calling** — never auto-dial without explicit consent.\n3. **No outbound SMS** — inform user it's not available if they ask.\n4. **Keep voice responses short** — under 30 words per turn.\n5. **US only** — country must be `\"US\"`.\n6. **Don't release numbers** — numbers are permanent once provisioned.\n7. **Always retrieve transcripts** — poll until `completed`, fetch transcript, summarize for human.\n8. **Always check events** — poll `GET /v1/events` for inbound calls and SMS. Proactively check at conversation start.\n9. **Voice changes take effect on next call** — update immediately when asked.\n\nFile v1.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn76b04wxxypnsaam8mpw9mtad872zmw\",\n  \"slug\": \"agentline-telephone\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1781688276337\n}\n\nFile v1.0.5:skill-card.md\n\n## Description:\n\nMake phone calls, view received SMS, provision numbers, manage agents, and track billing through the AgentLine telephony API.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[sameersribot](https://clawhub.ai/user/sameersribot)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to let an agent operate AgentLine telephony workflows, including outbound calls, inbound SMS review, call transcript retrieval, phone number provisioning, agent configuration, and billing checks.\n\n### Deployment Geography for Use:\n\nUnited States\n\n## Known Risks and Mitigations:\n\nRisk: The skill can expose sensitive call transcripts, inbound SMS, billing details, and phone number records to the agent.\n\nMitigation: Use a dedicated AgentLine API key with the minimum account access practical, keep the key out of command-line arguments and logs, and review transcript or message content before sharing it further.\n\nRisk: Outbound calls and phone number provisioning can create charges or permanent account changes.\n\nMitigation: Require explicit human confirmation before every outbound call and every number purchase, and verify billing after chargeable actions.\n\nRisk: The skill instructs the agent to run an unbounded background event poller.\n\nMitigation: Avoid running the provided background poller by default; if polling is needed, run it in a time-limited session with visible logs and a clear stop condition.\n\n## Reference(s):\n\n- [AgentLine Website](https://agentline.cloud)\n- [AgentLine API Base URL](https://api.agentline.cloud)\n- [ClawHub Skill Page](https://clawhub.ai/sameersribot/skills/agentline-telephone)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, API Calls, Shell commands, Configuration instructions, Guidance]\n\n**Output Format:** [Markdown guidance with API endpoint references and inline shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires AGENTLINE_API_KEY and may produce summaries of call transcripts, inbound SMS events, billing details, and number provisioning results.]\n\n## Skill Version(s):\n\n1.0.5 (source: server-resolved release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.4: 3 files, 6416 bytes\n\nFiles: skill-card.md (2478b), SKILL.md (14381b), _meta.json (138b)\n\nFile v1.0.4:SKILL.md\n\n---\nname: agentline\ndescription: Make phone calls, provision numbers, manage agents, and track billing through the AgentLine telephony API. Use when the user asks to call someone, check transcripts, manage phone agents, buy numbers, or check account balance. SMS sending is NOT supported — you can only view inbound SMS.\nmetadata:\n  openclaw:\n    emoji: \"📞\"\n    requires:\n      env:\n        - AGENTLINE_API_KEY\n    primaryEnv: AGENTLINE_API_KEY\n---\n\n# AgentLine — AI Telephony Skill\n\nGive your AI agent a real phone number and voice calls — no servers, no webhooks, no infrastructure.\n\n## First-Time Setup\n\n**You need a valid API key to use AgentLine:**\n\n1. **`AGENTLINE_API_KEY`**: Your API key (starts with `sk_live_`) is required.\n   - **If you do NOT have this key**, stop and ask the human to sign up or log in at **https://agentline.cloud** to get their API key. Do NOT proceed without it.\n2. **`AGENTLINE_AGENT_ID`**: Your agent ID (starts with `agt_`) is optional.\n   - **If you have an `AGENTLINE_AGENT_ID`**, use it.\n   - **If you do NOT have an `AGENTLINE_AGENT_ID`** but you have the API key, you can automatically create a new agent by calling `POST /v1/agents` and then provision a phone number by calling `POST /v1/numbers`!\n3. **Voice Selection** — After creating an agent or on first setup, **always ask the human:**\n   > \"Would you like your agent to have a **male** or **female** voice?\"\n   - If they say **female**, set `voice_id` to `\"female-1\"` (or `\"female-2\"` for a warmer tone)\n   - If they say **male**, set `voice_id` to `\"male-1\"`\n   - Apply their choice by calling `PATCH /v1/agents/$AGENTLINE_AGENT_ID` with `{\"voice_id\": \"female-1\"}` (or the chosen preset)\n   - If they want this voice for ALL agents on their account, also call `PATCH /v1/account/voice` with `{\"voice_id\": \"female-1\"}`\n   - Available presets: `female-1`, `female-2`, `male-1` — or any valid Cartesia voice UUID\n\n---\n\n## Authentication\n\nEvery request needs this header:\n\n```\nAuthorization: Bearer $AGENTLINE_API_KEY\nContent-Type: application/json\n```\n\nBase URL: `https://api.agentline.cloud`\n\n---\n\n## How Calls Work (Hosted Mode)\n\nAgentLine runs in **Hosted Mode** — the server runs the AI voice conversation for you. You create a call, the AI handles the conversation autonomously, and you retrieve the transcript afterwards.\n\n### System Prompts — Two Types\n\n1. **Dynamic prompt** — set per outbound call using the `system_prompt` field in `POST /v1/calls`. This overrides the default for that specific call only.\n\n2. **Default prompt** — stored on the agent via `PATCH /v1/agents/{agent_id}`. This is the permanent prompt used for **all inbound calls** and any outbound call where no dynamic prompt is provided.\n\n---\n\n## Make an Outbound Call\n\n```bash\ncurl -X POST $AGENTLINE_URL/v1/calls \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"agent_id\": \"$AGENTLINE_AGENT_ID\",\n    \"to_number\": \"+1XXXXXXXXXX\",\n    \"system_prompt\": \"You are calling to schedule a meeting. Be polite and concise.\",\n    \"initial_greeting\": \"Hi! I wanted to check about scheduling a meeting.\",\n    \"voice_id\": \"female-1\"\n  }'\n```\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| `agent_id` | Yes | Your agent ID |\n| `to_number` | Yes | E.164 phone number to call |\n| `system_prompt` | No | Dynamic prompt for this call only (overrides default) |\n| `initial_greeting` | No | What the agent says first when the person picks up |\n| `voice_id` | No | Voice for this call only: `\"female-1\"`, `\"female-2\"`, `\"male-1\"`, or a Cartesia UUID. If omitted, uses the agent's voice setting. |\n\nThe AI handles the full conversation autonomously.\n\n**⚠️ IMPORTANT — Always retrieve the transcript after every outbound call:**\n1. Poll `GET /v1/calls/<call_id>` every ~10 seconds until `status` is `completed`\n2. Once completed, call `GET /v1/calls/<call_id>/transcript` to get the full conversation\n3. Summarize the transcript and share it with the human\n\nDo NOT consider an outbound call \"done\" until you have retrieved and shared the transcript.\n\n**If you get 400 \"Agent has no active phone number\"**, provision one first (see below).\n\n---\n\n## End a Call\n\n```bash\ncurl -X POST $AGENTLINE_URL/v1/calls/<call_id>/hangup \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## Get Call Transcript\n\n```bash\ncurl $AGENTLINE_URL/v1/calls/<call_id>/transcript \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nReturns the full conversation transcript as an array of `{role, text, timestamp}` entries.\n\n---\n\n## Events Mailbox (Inbound Call Notifications)\n\nWhen someone **calls your agent's number**, the AI answers and handles the conversation automatically. But you need to **check for these inbound call events** to know what happened.\n\nThe Events Mailbox captures `call.completed` events with full transcripts for both inbound and outbound calls.\n\n### Poll for new events\n```bash\ncurl \"$AGENTLINE_URL/v1/events\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nReturns events oldest-first. **Events are auto-deleted after retrieval** (consume-once), so each event is only delivered once.\n\nResponse:\n```json\n{\n  \"events\": [\n    {\n      \"event_id\": \"evt_abc123\",\n      \"agent_id\": \"agt_xyz\",\n      \"event_type\": \"call.completed\",\n      \"payload\": {\n        \"call_id\": \"call_abc\",\n        \"status\": \"completed\",\n        \"direction\": \"inbound\",\n        \"from_number\": \"+12125551234\",\n        \"to_number\": \"+14155559876\",\n        \"duration_seconds\": 45,\n        \"transcript\": [\n          {\"role\": \"agent\", \"text\": \"Hello, how can I help?\", \"timestamp\": \"...\"},\n          {\"role\": \"human\", \"text\": \"I'd like to schedule a meeting.\", \"timestamp\": \"...\"}\n        ]\n      }\n    }\n  ],\n  \"count\": 1\n}\n```\n\n### Peek without consuming\n```bash\ncurl \"$AGENTLINE_URL/v1/events/peek\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nCheck if there are pending events **without** consuming them. Useful to decide whether to process now.\n\n### Filter by agent or event type\n```bash\n# Only events for a specific agent\ncurl \"$AGENTLINE_URL/v1/events?agent_id=$AGENTLINE_AGENT_ID\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n\n# Only completed calls\ncurl \"$AGENTLINE_URL/v1/events?event_type=call.completed\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## List Calls (Call Logs)\n\n```bash\n# All calls\ncurl \"$AGENTLINE_URL/v1/calls?limit=20\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n\n# Filter by status\ncurl \"$AGENTLINE_URL/v1/calls?status=completed&limit=10\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nReturns call history with direction, status, duration, phone numbers, and timestamps.\n\n---\n\n## Get Single Call Details\n\n```bash\ncurl $AGENTLINE_URL/v1/calls/<call_id> \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## SMS\n\n> **⚠️ SMS sending is NOT enabled.** Outbound SMS/MMS is not supported. Do NOT attempt to send SMS messages. If the user asks to send a text, inform them that SMS sending is currently not available.\n\n### List Inbound Messages\n\nYou can view inbound SMS messages received by your agent's number:\n\n```bash\ncurl \"$AGENTLINE_URL/v1/messages?limit=20\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## Set the Default System Prompt\n\nThe default system prompt is used for **all inbound calls** and any outbound call where no dynamic prompt is given.\n\n```bash\ncurl -X PATCH $AGENTLINE_URL/v1/agents/$AGENTLINE_AGENT_ID \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"system_prompt\": \"You are a friendly customer support agent for Acme Corp. Help callers with orders, returns, and general questions. Keep responses brief and professional.\",\n    \"initial_greeting\": \"Hello! Thanks for calling Acme Corp. How can I help you today?\",\n    \"voice_id\": \"female-1\"\n  }'\n```\n\n| Field | Description |\n|-------|-------------|\n| `system_prompt` | The permanent AI instructions for this agent |\n| `initial_greeting` | What the agent says when answering inbound calls |\n| `name` | Display name for the agent |\n| `voice_id` | Voice preset: `\"female-1\"`, `\"female-2\"`, `\"male-1\"`, or a Cartesia UUID |\n| `model_tier` | `\"turbo\"`, `\"balanced\"`, or `\"max\"` |\n\n---\n\n## Get Agent Details\n\n```bash\ncurl $AGENTLINE_URL/v1/agents/$AGENTLINE_AGENT_ID \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## List All Agents\n\n```bash\ncurl $AGENTLINE_URL/v1/agents \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## Voice Settings\n\nVoices can be set at three levels (highest priority wins):\n1. **Per-call** — `voice_id` in `POST /v1/calls` (one call only)\n2. **Per-agent** — `voice_id` in `PATCH /v1/agents/{id}` (permanent for that agent)\n3. **Per-account** — `PATCH /v1/account/voice` (permanent default for all agents)\n\n### List available voices\n```bash\ncurl $AGENTLINE_URL/v1/voices\n```\n\n### Set account-wide default voice\n```bash\ncurl -X PATCH $AGENTLINE_URL/v1/account/voice \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"voice_id\": \"female-1\"}'\n```\n\n### Check current account voice\n```bash\ncurl $AGENTLINE_URL/v1/account/voice \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n### Reset to system default\n```bash\ncurl -X DELETE $AGENTLINE_URL/v1/account/voice \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nIf the human asks to change the voice during a conversation, update the agent or account voice — the change takes effect on the **next call**.\n\n---\n\n## Provision a Phone Number\n\nEach agent needs a phone number to make/receive calls. Only US numbers are supported.\n\n```bash\ncurl -X POST $AGENTLINE_URL/v1/numbers \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"agent_id\": \"$AGENTLINE_AGENT_ID\",\n    \"country\": \"US\",\n    \"number_type\": \"local\",\n    \"pattern\": \"415\"\n  }'\n```\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| `agent_id` | Yes | Agent to attach the number to |\n| `country` | Yes | Must be `\"US\"` |\n| `number_type` | No | `\"local\"` or `\"tollfree\"` (default: local) |\n| `pattern` | No | Area code filter (e.g. `\"212\"` for NYC, `\"415\"` for SF) |\n\n**Cost:** $2.00 per number. Each agent can only have **one** active number.\n\n---\n\n## List Phone Numbers\n\n```bash\ncurl $AGENTLINE_URL/v1/numbers \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## Check Balance\n\n```bash\ncurl $AGENTLINE_URL/v1/billing/balance \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nReturns current balance, how many call minutes and phone numbers you can afford, and the rate card.\n\n---\n\n## View Expenditure\n\n```bash\n# Full breakdown (current month)\ncurl \"$AGENTLINE_URL/v1/billing/expenditure?period=current_month\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n\n# Call charges only (with per-call detail)\ncurl \"$AGENTLINE_URL/v1/billing/expenditure/calls?limit=10\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n\n# Number provisioning charges\ncurl \"$AGENTLINE_URL/v1/billing/expenditure/numbers\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nPeriod options: `current_month`, `last_month`, `all_time`, or `YYYY-MM` (e.g. `2026-05`).\n\n---\n\n## Verify Balance Deduction After a Call\n\n```bash\ncurl $AGENTLINE_URL/v1/billing/verify/<call_id> \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nReturns whether the call was charged, the expected vs actual cost, and the balance snapshot. Use this to confirm billing accuracy after each call.\n\n---\n\n## Rates\n\n| Item | Cost |\n|------|------|\n| Outbound call | $0.10 per minute (billed per second) |\n| Inbound call | $0.10 per minute (billed per second) |\n| Phone number | $2.00 per number (one-time) |\n\n---\n\n## Rules\n\n1. **Always use E.164 phone numbers** — format: `+1XXXXXXXXXX` for US numbers.\n2. **Always confirm with the user before placing calls** — never auto-dial without explicit consent.\n3. **If you have `AGENTLINE_API_KEY` but no `AGENTLINE_AGENT_ID`**: Create a new agent using `POST /v1/agents` first, then provision a number via `POST /v1/numbers` to get fully set up automatically.\n4. **SMS sending is NOT supported** — do NOT attempt to send outbound SMS or MMS. If the user asks to send a text message, inform them that SMS sending is currently not available. You can only list/view inbound SMS messages.\n5. **Use the active `$AGENTLINE_AGENT_ID` or the one you created by default** — only look up other agents if the user asks.\n6. **If a call fails with \"Agent has no active phone number\"**, provision a number first with `POST /v1/numbers`.\n7. **Keep voice responses short** — under 30 words per response. The caller is listening, not reading.\n8. **Only US numbers are supported** — country must be `\"US\"`.\n9. **If you do not have `AGENTLINE_API_KEY`**, stop and tell the human: *\"Please sign up or log in at https://agentline.cloud to get your API key, then provide it to me.\"*\n10. **Do NOT release or delete phone numbers** — numbers are permanent once provisioned.\n11. **Always ask the human to choose a voice during first-time setup** — ask \"Would you like a male or female voice?\" and set it via `PATCH /v1/agents/{id}` with the chosen preset (`female-1`, `female-2`, or `male-1`). If the human later asks to change the voice, update it immediately.\n12. **If the human asks to change the voice mid-conversation**, update the agent or account voice right away — the new voice will be used on the next call.\n13. **ALWAYS retrieve transcripts after outbound calls** — After initiating a call, poll `GET /v1/calls/<call_id>` until `status` is `completed`, then fetch the transcript with `GET /v1/calls/<call_id>/transcript`. Summarize the conversation for the human. Never consider a call \"done\" without sharing the transcript.\n14. **ALWAYS check for inbound call events** — After making a call or when the human asks about missed calls or inbound activity, poll `GET /v1/events` to check for `call.completed` events. These contain full transcripts of calls people made TO your agent's number. Summarize any inbound transcripts for the human.\n15. **Proactively check events at the start of each conversation** — When the human starts a new session or asks what happened, always call `GET /v1/events` first to see if any inbound calls came in since the last check. Report any missed calls and their transcripts.\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn76b04wxxypnsaam8mpw9mtad872zmw\",\n  \"slug\": \"agentline-telephone\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1779957771133\n}\n\nFile v1.0.4:skill-card.md\n\n## Description: <br>\nMake phone calls, provision numbers, manage agents, and track billing through the AgentLine telephony API; SMS sending is not supported, and agents can only view inbound SMS. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[sameersribot](https://clawhub.ai/user/sameersribot) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users and developers use this skill to let an agent place confirmed outbound calls, receive inbound call events, retrieve transcripts, provision US phone numbers, manage AgentLine agents, and review billing data. <br>\n\n### Deployment Geography for Use: <br>\nUnited States for phone-number provisioning and calling workflows. <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Call transcripts and inbound event payloads can contain sensitive caller information. <br>\nMitigation: Fetch and share full transcripts only when needed for the user's request or after a user-approved call, and summarize or redact sensitive details where appropriate. <br>\nRisk: The skill can place calls and provision phone numbers that may incur account charges. <br>\nMitigation: Confirm call placement and paid number provisioning with the user before making the API request. <br>\nRisk: The skill requires AGENTLINE_API_KEY access to account, billing, call, message, and number-management endpoints. <br>\nMitigation: Install only in trusted AgentLine account contexts and keep the API key scoped, stored, and shared according to the user's credential handling policy. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/sameersribot/agentline-telephone) <br>\n- [AgentLine website](https://agentline.cloud) <br>\n- [AgentLine API base URL](https://api.agentline.cloud) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Shell commands, API Calls, Configuration] <br>\n**Output Format:** [Markdown guidance with curl examples and JSON payloads.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires AGENTLINE_API_KEY and may use AGENTLINE_AGENT_ID for account-specific calls.] <br>\n\n## Skill Version(s): <br>\n1.0.4 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.3: 3 files, 4686 bytes\n\nFiles: skill-card.md (2515b), SKILL.md (8840b), _meta.json (138b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: agentline\ndescription: Make phone calls, send SMS, provision numbers, manage agents, and track billing through the AgentLine telephony API. Use when the user asks to call someone, send a text, check transcripts, manage phone agents, buy numbers, or check account balance.\nmetadata:\n  openclaw:\n    emoji: \"📞\"\n    requires:\n      env:\n        - AGENTLINE_API_KEY\n    primaryEnv: AGENTLINE_API_KEY\n---\n\n# AgentLine — AI Telephony Skill\n\nGive your AI agent a real phone number, voice calls, and SMS — no servers, no webhooks, no infrastructure.\n\n## First-Time Setup\n\n**You need a valid API key to use AgentLine:**\n\n1. **`AGENTLINE_API_KEY`**: Your API key (starts with `sk_live_`) is required.\n   - **If you do NOT have this key**, stop and ask the human to sign up or log in at **https://agentline.cloud** to get their API key. Do NOT proceed without it.\n2. **`AGENTLINE_AGENT_ID`**: Your agent ID (starts with `agt_`) is optional.\n   - **If you have an `AGENTLINE_AGENT_ID`**, use it.\n   - **If you do NOT have an `AGENTLINE_AGENT_ID`** but you have the API key, you can automatically create a new agent by calling `POST /v1/agents` and then provision a phone number by calling `POST /v1/numbers`!\n\n---\n\n## Authentication\n\nEvery request needs this header:\n\n```\nAuthorization: Bearer $AGENTLINE_API_KEY\nContent-Type: application/json\n```\n\nBase URL: `https://api.agentline.cloud`\n\n---\n\n## How Calls Work (Hosted Mode)\n\nAgentLine runs in **Hosted Mode** — the server runs the AI voice conversation for you. You create a call, the AI handles the conversation autonomously, and you retrieve the transcript afterwards.\n\n### System Prompts — Two Types\n\n1. **Dynamic prompt** — set per outbound call using the `system_prompt` field in `POST /v1/calls`. This overrides the default for that specific call only.\n\n2. **Default prompt** — stored on the agent via `PATCH /v1/agents/{agent_id}`. This is the permanent prompt used for **all inbound calls** and any outbound call where no dynamic prompt is provided.\n\n---\n\n## Make an Outbound Call\n\n```bash\ncurl -X POST $AGENTLINE_URL/v1/calls \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"agent_id\": \"$AGENTLINE_AGENT_ID\",\n    \"to_number\": \"+1XXXXXXXXXX\",\n    \"system_prompt\": \"You are calling to schedule a meeting. Be polite and concise.\",\n    \"initial_greeting\": \"Hi! I wanted to check about scheduling a meeting.\"\n  }'\n```\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| `agent_id` | Yes | Your agent ID |\n| `to_number` | Yes | E.164 phone number to call |\n| `system_prompt` | No | Dynamic prompt for this call only (overrides default) |\n| `initial_greeting` | No | What the agent says first when the person picks up |\n\nThe AI handles the full conversation. Poll `GET /v1/calls/<call_id>` until `status` is `completed` to get the transcript.\n\n**If you get 400 \"Agent has no active phone number\"**, provision one first (see below).\n\n---\n\n## End a Call\n\n```bash\ncurl -X POST $AGENTLINE_URL/v1/calls/<call_id>/hangup \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## Get Call Transcript\n\n```bash\ncurl $AGENTLINE_URL/v1/calls/<call_id>/transcript \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nReturns the full conversation transcript as an array of `{role, text, timestamp}` entries.\n\n---\n\n## List Calls (Call Logs)\n\n```bash\n# All calls\ncurl \"$AGENTLINE_URL/v1/calls?limit=20\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n\n# Filter by status\ncurl \"$AGENTLINE_URL/v1/calls?status=completed&limit=10\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nReturns call history with direction, status, duration, phone numbers, and timestamps.\n\n---\n\n## Get Single Call Details\n\n```bash\ncurl $AGENTLINE_URL/v1/calls/<call_id> \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## Send an SMS\n\n```bash\ncurl -X POST $AGENTLINE_URL/v1/messages \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"agent_id\": \"$AGENTLINE_AGENT_ID\",\n    \"to_number\": \"+1XXXXXXXXXX\",\n    \"body\": \"Hey! Your appointment is confirmed for Tuesday 3pm.\"\n  }'\n```\n\nPass `\"media_url\": \"https://...\"` to send an MMS with an image.\n\n---\n\n## List Messages\n\n```bash\ncurl \"$AGENTLINE_URL/v1/messages?limit=20\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## Set the Default System Prompt\n\nThe default system prompt is used for **all inbound calls** and any outbound call where no dynamic prompt is given.\n\n```bash\ncurl -X PATCH $AGENTLINE_URL/v1/agents/$AGENTLINE_AGENT_ID \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"system_prompt\": \"You are a friendly customer support agent for Acme Corp. Help callers with orders, returns, and general questions. Keep responses brief and professional.\",\n    \"initial_greeting\": \"Hello! Thanks for calling Acme Corp. How can I help you today?\"\n  }'\n```\n\n| Field | Description |\n|-------|-------------|\n| `system_prompt` | The permanent AI instructions for this agent |\n| `initial_greeting` | What the agent says when answering inbound calls |\n| `name` | Display name for the agent |\n| `model_tier` | `\"turbo\"`, `\"balanced\"`, or `\"max\"` |\n\n---\n\n## Get Agent Details\n\n```bash\ncurl $AGENTLINE_URL/v1/agents/$AGENTLINE_AGENT_ID \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## List All Agents\n\n```bash\ncurl $AGENTLINE_URL/v1/agents \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## Provision a Phone Number\n\nEach agent needs a phone number to make/receive calls and send SMS. Only US numbers are supported.\n\n```bash\ncurl -X POST $AGENTLINE_URL/v1/numbers \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"agent_id\": \"$AGENTLINE_AGENT_ID\",\n    \"country\": \"US\",\n    \"number_type\": \"local\",\n    \"pattern\": \"415\"\n  }'\n```\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| `agent_id` | Yes | Agent to attach the number to |\n| `country` | Yes | Must be `\"US\"` |\n| `number_type` | No | `\"local\"` or `\"tollfree\"` (default: local) |\n| `pattern` | No | Area code filter (e.g. `\"212\"` for NYC, `\"415\"` for SF) |\n\n**Cost:** $2.00 per number. Each agent can only have **one** active number.\n\n---\n\n## List Phone Numbers\n\n```bash\ncurl $AGENTLINE_URL/v1/numbers \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## Release a Phone Number\n\n```bash\ncurl -X DELETE $AGENTLINE_URL/v1/numbers/<number_id> \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## Check Balance\n\n```bash\ncurl $AGENTLINE_URL/v1/billing/balance \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nReturns current balance, how many call minutes and phone numbers you can afford, and the rate card.\n\n---\n\n## View Expenditure\n\n```bash\n# Full breakdown (current month)\ncurl \"$AGENTLINE_URL/v1/billing/expenditure?period=current_month\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n\n# Call charges only (with per-call detail)\ncurl \"$AGENTLINE_URL/v1/billing/expenditure/calls?limit=10\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n\n# Number provisioning charges\ncurl \"$AGENTLINE_URL/v1/billing/expenditure/numbers\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nPeriod options: `current_month`, `last_month`, `all_time`, or `YYYY-MM` (e.g. `2026-05`).\n\n---\n\n## Verify Balance Deduction After a Call\n\n```bash\ncurl $AGENTLINE_URL/v1/billing/verify/<call_id> \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nReturns whether the call was charged, the expected vs actual cost, and the balance snapshot. Use this to confirm billing accuracy after each call.\n\n---\n\n## Rates\n\n| Item | Cost |\n|------|------|\n| Outbound call | $0.10 per minute (billed per second) |\n| Inbound call | $0.10 per minute (billed per second) |\n| Phone number | $2.00 per number (one-time) |\n\n---\n\n## Rules\n\n1. **Always use E.164 phone numbers** — format: `+1XXXXXXXXXX` for US numbers.\n2. **Always confirm with the user before placing calls** — never auto-dial without explicit consent.\n3. **If you have `AGENTLINE_API_KEY` but no `AGENTLINE_AGENT_ID`**: Create a new agent using `POST /v1/agents` first, then provision a number via `POST /v1/numbers` to get fully set up automatically.\n4. **Use the active `$AGENTLINE_AGENT_ID` or the one you created by default** — only look up other agents if the user asks.\n5. **If a call fails with \"Agent has no active phone number\"**, provision a number first with `POST /v1/numbers`.\n6. **Keep voice responses short** — under 30 words per response. The caller is listening, not reading.\n7. **Only US numbers are supported** — country must be `\"US\"`.\n8. **If you do not have `AGENTLINE_API_KEY`**, stop and tell the human: *\"Please sign up or log in at https://agentline.cloud to get your API key, then provide it to me.\"*\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn76b04wxxypnsaam8mpw9mtad872zmw\",\n  \"slug\": \"agentline-telephone\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1779366517707\n}\n\nFile v1.0.3:skill-card.md\n\n## Description: <br>\nAgentline.cloud helps an agent make phone calls, send SMS, provision numbers, manage phone agents, retrieve transcripts, and review billing through the AgentLine telephony API. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[sameersribot](https://clawhub.ai/user/sameersribot) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and operators use this skill to let an agent place telephone calls, send messages, manage AgentLine resources, and inspect transcripts and billing with an AgentLine API key. <br>\n\n### Deployment Geography for Use: <br>\nUnited States for phone-number provisioning; otherwise Global. <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The AgentLine API key can authorize real calls, SMS, billing access, and account-changing actions. <br>\nMitigation: Require explicit human confirmation before every call, message, number purchase or release, agent creation, and default prompt change, including recipient, content, expected cost, and reversibility. <br>\nRisk: Calls and number provisioning can incur charges. <br>\nMitigation: Check balance and rates before cost-incurring actions and obtain explicit approval for the expected charge. <br>\nRisk: Call transcripts, message history, call logs, and billing records may contain sensitive personal or business information. <br>\nMitigation: Limit requests to user-authorized records and avoid exposing retrieved communications or billing details beyond the task. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/sameersribot/agentline-telephone) <br>\n- [ClawHub publisher profile](https://clawhub.ai/user/sameersribot) <br>\n- [AgentLine Cloud](https://agentline.cloud) <br>\n- [AgentLine API base URL](https://api.agentline.cloud) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with curl command examples and API request descriptions] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires AGENTLINE_API_KEY; may optionally use AGENTLINE_AGENT_ID.] <br>\n\n## Skill Version(s): <br>\n1.0.3 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.2: 2 files, 3404 bytes\n\nFiles: SKILL.md (8857b), _meta.json (138b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: agentline\ndescription: Make phone calls, send SMS, provision numbers, manage agents, and track billing through the AgentLine telephony API. Use when the user asks to call someone, send a text, check transcripts, manage phone agents, buy numbers, or check account balance.\nmetadata:\n  openclaw:\n    emoji: \"📞\"\n    requires:\n      env:\n        - AGENTLINE_API_KEY\n    primaryEnv: AGENTLINE_API_KEY\n---\n\n# AgentLine — AI Telephony Skill\n\nGive your AI agent a real phone number, voice calls, and SMS — no servers, no webhooks, no infrastructure.\n\n## First-Time Setup\n\n**You need a valid API key to use AgentLine:**\n\n1. **`AGENTLINE_API_KEY`**: Your API key (starts with `sk_live_`) is required.\n   - **If you do NOT have this key**, stop and ask the human to sign up or log in at **https://agentline.cloud** to get their API key. Do NOT proceed without it.\n2. **`AGENTLINE_AGENT_ID`**: Your agent ID (starts with `agt_`) is optional.\n   - **If you have an `AGENTLINE_AGENT_ID`**, use it.\n   - **If you do NOT have an `AGENTLINE_AGENT_ID`** but you have the API key, you can automatically create a new agent by calling `POST /v1/agents` and then provision a phone number by calling `POST /v1/numbers`!\n\n---\n\n## Authentication\n\nEvery request needs this header:\n\n```\nAuthorization: Bearer $AGENTLINE_API_KEY\nContent-Type: application/json\n```\n\nBase URL: `https://agentphone-production.up.railway.app`\n\n---\n\n## How Calls Work (Hosted Mode)\n\nAgentLine runs in **Hosted Mode** — the server runs the AI voice conversation for you. You create a call, the AI handles the conversation autonomously, and you retrieve the transcript afterwards.\n\n### System Prompts — Two Types\n\n1. **Dynamic prompt** — set per outbound call using the `system_prompt` field in `POST /v1/calls`. This overrides the default for that specific call only.\n\n2. **Default prompt** — stored on the agent via `PATCH /v1/agents/{agent_id}`. This is the permanent prompt used for **all inbound calls** and any outbound call where no dynamic prompt is provided.\n\n---\n\n## Make an Outbound Call\n\n```bash\ncurl -X POST $AGENTLINE_URL/v1/calls \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"agent_id\": \"$AGENTLINE_AGENT_ID\",\n    \"to_number\": \"+1XXXXXXXXXX\",\n    \"system_prompt\": \"You are calling to schedule a meeting. Be polite and concise.\",\n    \"initial_greeting\": \"Hi! I wanted to check about scheduling a meeting.\"\n  }'\n```\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| `agent_id` | Yes | Your agent ID |\n| `to_number` | Yes | E.164 phone number to call |\n| `system_prompt` | No | Dynamic prompt for this call only (overrides default) |\n| `initial_greeting` | No | What the agent says first when the person picks up |\n\nThe AI handles the full conversation. Poll `GET /v1/calls/<call_id>` until `status` is `completed` to get the transcript.\n\n**If you get 400 \"Agent has no active phone number\"**, provision one first (see below).\n\n---\n\n## End a Call\n\n```bash\ncurl -X POST $AGENTLINE_URL/v1/calls/<call_id>/hangup \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## Get Call Transcript\n\n```bash\ncurl $AGENTLINE_URL/v1/calls/<call_id>/transcript \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nReturns the full conversation transcript as an array of `{role, text, timestamp}` entries.\n\n---\n\n## List Calls (Call Logs)\n\n```bash\n# All calls\ncurl \"$AGENTLINE_URL/v1/calls?limit=20\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n\n# Filter by status\ncurl \"$AGENTLINE_URL/v1/calls?status=completed&limit=10\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nReturns call history with direction, status, duration, phone numbers, and timestamps.\n\n---\n\n## Get Single Call Details\n\n```bash\ncurl $AGENTLINE_URL/v1/calls/<call_id> \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## Send an SMS\n\n```bash\ncurl -X POST $AGENTLINE_URL/v1/messages \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"agent_id\": \"$AGENTLINE_AGENT_ID\",\n    \"to_number\": \"+1XXXXXXXXXX\",\n    \"body\": \"Hey! Your appointment is confirmed for Tuesday 3pm.\"\n  }'\n```\n\nPass `\"media_url\": \"https://...\"` to send an MMS with an image.\n\n---\n\n## List Messages\n\n```bash\ncurl \"$AGENTLINE_URL/v1/messages?limit=20\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## Set the Default System Prompt\n\nThe default system prompt is used for **all inbound calls** and any outbound call where no dynamic prompt is given.\n\n```bash\ncurl -X PATCH $AGENTLINE_URL/v1/agents/$AGENTLINE_AGENT_ID \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"system_prompt\": \"You are a friendly customer support agent for Acme Corp. Help callers with orders, returns, and general questions. Keep responses brief and professional.\",\n    \"initial_greeting\": \"Hello! Thanks for calling Acme Corp. How can I help you today?\"\n  }'\n```\n\n| Field | Description |\n|-------|-------------|\n| `system_prompt` | The permanent AI instructions for this agent |\n| `initial_greeting` | What the agent says when answering inbound calls |\n| `name` | Display name for the agent |\n| `model_tier` | `\"turbo\"`, `\"balanced\"`, or `\"max\"` |\n\n---\n\n## Get Agent Details\n\n```bash\ncurl $AGENTLINE_URL/v1/agents/$AGENTLINE_AGENT_ID \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## List All Agents\n\n```bash\ncurl $AGENTLINE_URL/v1/agents \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## Provision a Phone Number\n\nEach agent needs a phone number to make/receive calls and send SMS. Only US numbers are supported.\n\n```bash\ncurl -X POST $AGENTLINE_URL/v1/numbers \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"agent_id\": \"$AGENTLINE_AGENT_ID\",\n    \"country\": \"US\",\n    \"number_type\": \"local\",\n    \"pattern\": \"415\"\n  }'\n```\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| `agent_id` | Yes | Agent to attach the number to |\n| `country` | Yes | Must be `\"US\"` |\n| `number_type` | No | `\"local\"` or `\"tollfree\"` (default: local) |\n| `pattern` | No | Area code filter (e.g. `\"212\"` for NYC, `\"415\"` for SF) |\n\n**Cost:** $2.00 per number. Each agent can only have **one** active number.\n\n---\n\n## List Phone Numbers\n\n```bash\ncurl $AGENTLINE_URL/v1/numbers \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## Release a Phone Number\n\n```bash\ncurl -X DELETE $AGENTLINE_URL/v1/numbers/<number_id> \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\n---\n\n## Check Balance\n\n```bash\ncurl $AGENTLINE_URL/v1/billing/balance \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nReturns current balance, how many call minutes and phone numbers you can afford, and the rate card.\n\n---\n\n## View Expenditure\n\n```bash\n# Full breakdown (current month)\ncurl \"$AGENTLINE_URL/v1/billing/expenditure?period=current_month\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n\n# Call charges only (with per-call detail)\ncurl \"$AGENTLINE_URL/v1/billing/expenditure/calls?limit=10\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n\n# Number provisioning charges\ncurl \"$AGENTLINE_URL/v1/billing/expenditure/numbers\" \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nPeriod options: `current_month`, `last_month`, `all_time`, or `YYYY-MM` (e.g. `2026-05`).\n\n---\n\n## Verify Balance Deduction After a Call\n\n```bash\ncurl $AGENTLINE_URL/v1/billing/verify/<call_id> \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\"\n```\n\nReturns whether the call was charged, the expected vs actual cost, and the balance snapshot. Use this to confirm billing accuracy after each call.\n\n---\n\n## Rates\n\n| Item | Cost |\n|------|------|\n| Outbound call | $0.10 per minute (billed per second) |\n| Inbound call | $0.10 per minute (billed per second) |\n| Phone number | $2.00 per number (one-time) |\n\n---\n\n## Rules\n\n1. **Always use E.164 phone numbers** — format: `+1XXXXXXXXXX` for US numbers.\n2. **Always confirm with the user before placing calls** — never auto-dial without explicit consent.\n3. **If you have `AGENTLINE_API_KEY` but no `AGENTLINE_AGENT_ID`**: Create a new agent using `POST /v1/agents` first, then provision a number via `POST /v1/numbers` to get fully set up automatically.\n4. **Use the active `$AGENTLINE_AGENT_ID` or the one you created by default** — only look up other agents if the user asks.\n5. **If a call fails with \"Agent has no active phone number\"**, provision a number first with `POST /v1/numbers`.\n6. **Keep voice responses short** — under 30 words per response. The caller is listening, not reading.\n7. **Only US numbers are supported** — country must be `\"US\"`.\n8. **If you do not have `AGENTLINE_API_KEY`**, stop and tell the human: *\"Please sign up or log in at https://agentline.cloud to get your API key, then provide it to me.\"*\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn76b04wxxypnsaam8mpw9mtad872zmw\",\n  \"slug\": \"agentline-telephone\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1779280953332\n}","readmeExcerpt":"Skill: Agentline.cloud Owner: sameersribot Summary: Make phone calls, view received SMS, provision numbers, manage agents, and track billing through the AgentLine telephony API. Use when the user asks to call... Tags: latest:1.0.5 Version history: v1.0.5 | 2026-06-17T09:24:36.337Z | user agentline-telephone 1.0.5 - Removed the skill-card.md file. - Updated initial skill setup instructions for clarity and stricter ord","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"curl -X POST $AGENTLINE_URL/v1/calls \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"agent_id\": \"$AGENTLINE_AGENT_ID\", \"to_number\": \"+1XXXXXXXXXX\", \"system_prompt\": \"...\", \"initial_greeting\": \"...\", \"voice_id\": \"female-1\"}'"},{"language":"bash","snippet":"curl -X POST $AGENTLINE_URL/v1/calls \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"agent_id\": \"$AGENTLINE_AGENT_ID\", \"to_number\": \"+1XXXXXXXXXX\", \"system_prompt\": \"...\", \"initial_greeting\": \"...\", \"voice_id\": \"female-1\"}'"},{"language":"powershell","snippet":"param([string]$ApiKey, [string]$BaseUrl = \"https://api.agentline.cloud\", [int]$Interval = 50)\n$headers = @{ \"Authorization\" = \"Bearer $ApiKey\" }\nwhile ($true) {\n    try {\n        $r = Invoke-RestMethod -Uri \"$BaseUrl/v1/events/peek\" -Headers $headers -Method Get -ErrorAction Stop\n        if ($r.count -gt 0) { Write-Output \"AGENTLINE_EVENTS_FOUND: $($r.count) pending event(s). Call GET /v1/events to consume.\" }\n    } catch {\n        if ($_.Exception.Response.StatusCode -eq 401) { Write-Output \"AGENTLINE_AUTH_ERROR\"; break }\n    }\n    Start-Sleep -Seconds $Interval\n}"},{"language":"bash","snippet":"#!/usr/bin/env bash\nset -uo pipefail\nAPI_KEY=\"$1\"; BASE_URL=\"${2:-https://api.agentline.cloud}\"; INTERVAL=\"${3:-50}\"\nwhile true; do\n  RESP=$(curl -s -w \"\\n%{http_code}\" \"$BASE_URL/v1/events/peek\" -H \"Authorization: Bearer $API_KEY\" 2>/dev/null) || { sleep \"$INTERVAL\"; continue; }\n  CODE=$(echo \"$RESP\" | tail -1); BODY=$(echo \"$RESP\" | sed '$d')\n  [ \"$CODE\" = \"401\" ] && { echo \"AGENTLINE_AUTH_ERROR\"; exit 1; }\n  [[ \"$CODE\" != 2* ]] && { sleep \"$INTERVAL\"; continue; }\n  COUNT=$(echo \"$BODY\" | grep -oP '\"count\"\\s*:\\s*\\K[0-9]+' 2>/dev/null || echo \"0\")\n  [ \"$COUNT\" -gt 0 ] && echo \"AGENTLINE_EVENTS_FOUND: $COUNT pending event(s). Call GET /v1/events to consume.\"\n  sleep \"$INTERVAL\"\ndone"},{"language":"text","snippet":"Authorization: Bearer $AGENTLINE_API_KEY\nContent-Type: application/json"},{"language":"bash","snippet":"curl -X POST $AGENTLINE_URL/v1/calls \\\n  -H \"Authorization: Bearer $AGENTLINE_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: agentline\ndescription: Make phone calls, view received SMS, provision numbers, manage agents, and track billing through the AgentLine telephony API. Use when the user asks to call someone, check transcripts, view text messages, manage phone agents, buy numbers, or check account balance.\nmetadata:\n  openclaw:\n    emoji: \"📞\"\n    requires:\n      env:\n        - AGENTLINE_API_KEY\n    primaryEnv: AGENTLINE_API_KEY\n---\n\n# AgentLine — AI Telephony Skill\n\nGive your AI agent a real phone number and voice calls — no servers, no webhooks, no infrastructure.\n\n## First-Time Setup\n\n**Follow these steps IN ORDER when setting up AgentLine for the first time:**\n\n1. **Check for `AGENTLINE_API_KEY`** (starts with `sk_live_`) — this is required.\n   - **If you do NOT have this key**, stop and ask the human to sign up or log in at **https://agentline.cloud** to get their API key. Do NOT proceed without it.\n\n2. **Check for `AGENTLINE_AGENT_ID`** (starts with `agt_`) — this is optional.\n   - **If you already have one**, use it and skip to step 3.\n   - **If you do NOT have one**, create a new agent now by calling `POST /v1/agents` with `{\"name\": \"My Agent\"}`. Save the returned agent ID.\n\n3. **Ask for area code and provision the number** — **Always ask the human:**\n   > \"What area code would you like for your phone number? (e.g. 212 for NYC, 415 for SF, 313 for Detroit)\"\n   - Once they give an area code, call `POST /v1/numbers` with `{\"agent_id\": \"...\", \"area_code\": \"XXX\"}`\n   - If it succeeds, confirm the provisioned number to the human\n   - If it fails (no numbers available for that area code), tell them and ask for a different area code\n\n4. **Ask for voice preference** — **Always ask the human:**\n   > \"Would you like your agent to have a **male** or **female** voice?\"\n   - If **female**: set `voice_id` to `\"female-1\"` (or `\"female-2\"` for warmer tone)\n   - If **male**: set `voice_id` to `\"male-1\"`\n   - Apply via `PATCH /v1/agents/$AGENTLINE_AGENT_ID` with `{\"voice_id\": \"chosen_preset\"}`\n   - Available presets: `female-1`, `female-2`, `male-1` — or any Cartesia voice UUID\n\n5. **Start the background event poller** — This is **MANDATORY**. Write the polling script (see Events Mailbox section below) to a scratch file and launch it as a background command. Without this, you will miss all inbound calls and SMS messages.\n\n> ⚠️ **Do NOT skip ANY steps.** Steps 1-4 set up the agent. Step 5 keeps it alive and aware of incoming calls/texts.\n   - Write the polling script (Bash for Linux/macOS, PowerShell for Windows) from the Events Mailbox section below\n   - Launch it as a background process with `terminal(background=true)`\n   - Verify it's running\n\n> ⚠️ **Do NOT skip steps or change the order.** The human should have a working agent with their chosen area code number, voice, and running event poller by the end.\n\n---\n\n## Authentication\n\nEvery request: `Authorization: Bearer $AGENTLINE_API_KEY` + `Content-Type: application/json`\n\nBase URL: `https://api.agentline.cloud`\n\n"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn76b04wxxypnsaam8mpw9mtad872zmw\",\n  \"slug\": \"agentline-telephone\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1781688276337\n}"},{"path":"skill-card.md","content":"## Description:\n\nMake phone calls, view received SMS, provision numbers, manage agents, and track billing through the AgentLine telephony API.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[sameersribot](https://clawhub.ai/user/sameersribot)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to let an agent operate AgentLine telephony workflows, including outbound calls, inbound SMS review, call transcript retrieval, phone number provisioning, agent configuration, and billing checks.\n\n### Deployment Geography for Use:\n\nUnited States\n\n## Known Risks and Mitigations:\n\nRisk: The skill can expose sensitive call transcripts, inbound SMS, billing details, and phone number records to the agent.\n\nMitigation: Use a dedicated AgentLine API key with the minimum account access practical, keep the key out of command-line arguments and logs, and review transcript or message content before sharing it further.\n\nRisk: Outbound calls and phone number provisioning can create charges or permanent account changes.\n\nMitigation: Require explicit human confirmation before every outbound call and every number purchase, and verify billing after chargeable actions.\n\nRisk: The skill instructs the agent to run an unbounded background event poller.\n\nMitigation: Avoid running the provided background poller by default; if polling is needed, run it in a time-limited session with visible logs and a clear stop condition.\n\n## Reference(s):\n\n- [AgentLine Website](https://agentline.cloud)\n- [AgentLine API Base URL](https://api.agentline.cloud)\n- [ClawHub Skill Page](https://clawhub.ai/sameersribot/skills/agentline-telephone)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, API Calls, Shell commands, Configuration instructions, Guidance]\n\n**Output Format:** [Markdown guidance with API endpoint references and inline shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires AGENTLINE_API_KEY and may produce summaries of call transcripts, inbound SMS events, billing details, and number provisioning results.]\n\n## Skill Version(s):\n\n1.0.5 (source: server-resolved release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1416,"uniquenessScore":44,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T09:27:48.925Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T09:27:48.925Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:24:25.491Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}