Skill: ryanhall00/agentizzy-phone-agent (version 1.2.1)

--- name: agentizzy-phone-agent description: "AI phone agent for any business — answers inbound calls 24/7, captures leads, books appointments, and returns structured call data with transcripts, summaries, and sentiment. Provision a phone agent in seconds via API, then query calls, leads, and analytics. Use to add phone handling to any agent workflow." version: 1.2.0 metadata: {"openclaw":{"emoji":"📞","requires":{"env":["AGENTIZZY_API_KEY"],"bins":["curl","python3"]},"primaryEnv":"AGENTIZZY_API_KEY"}} --- # AgentIzzy Phone Agent AI-powered inbound phone agent for any business. Answers calls 24/7, captures leads, books appointments, and returns structured call transcripts, summaries, and sentiment. Provision a dedicated phone agent in seconds, then query call history, leads, and analytics. V1 is inbound only — callers reach Izzy, who handles the conversation, captures intent, and logs everything. ## Setup 1. Register for a free API key (instant, no approval needed): ```bash curl -s -X POST https://api.agentizzy.com/api/v1/register \ -H "Content-Type: application/json" \ -d '{"name": "My Agent", "agent_id": "my-agent"}' ``` Returns an `api_key` starting with `aiz_` — save it, shown only once. 2. Set environment variable: ```bash export AGENTIZZY_API_KEY="aiz_your_key_here" ``` ## Provision a Phone Agent Set up a new AI phone agent for a business: ```bash bash scripts/setup.sh "Business Name" "vertical" "phone" "website_url" ``` **Arguments:** - `name` (required): Business name — Izzy uses this in greetings - `vertical` (optional): Industry vertical for specialized behavior. Options: `storage`, `hvac`, `dental`, `legal`, `salon`, `plumbing`, `automotive`, `generic`. Default: auto-detected from website. - `phone` (optional): Business phone number for call transfers - `website` (optional): Business website URL — Izzy scrapes it to learn services, FAQs, hours **Example:** ```bash bash scripts/setup.sh "Sunrise Dental" "dental" "+15551234567" "https://www.sunrisedental.com" ``` **Returns:** ```json { "id": [REDACTED_SECRET], "bizCode": "A3K7X2", "name": "Sunrise Dental", "vertical": "dental", "demo_phone": "+16783299415", "demo_code": "A3K7X2", "status": "active" } ``` After provisioning, callers can reach the agent by calling the demo line (+1 678-329-9415) and entering the `demo_code`. The `id` field is used for all subsequent API calls. **Dependencies:** This script uses `curl` for HTTP requests and `python3` for safe JSON escaping. Both must be available in your PATH. ## Get Call History Retrieve recent calls with AI summaries and sentiment: ```bash bash scripts/calls.sh "agent_id" [limit] [since] ``` **Arguments:** - `agent_id` (required): The `id` returned from setup - `limit` (optional): Number of calls to return (default: 20, max: 100) - `since` (optional): ISO date filter — only calls after this date (e.g., `2026-04-01`) **Example:** ```bash bash scripts/calls.sh [REDACTED_SECRET] 10 "2026-04-01" ``` **Returns:** ```json { "calls": [ { "id": "call-uuid", "caller_number": "+15559876543", "started_at": "2026-04-13T14:30:00Z", "duration_seconds": 127, "transcript": "Agent: Thank you for calling Sunrise Dental...", "ai_summary": "Caller asked about teeth whitening pricing and booked a consultation for next Tuesday.", "sentiment": "positive", "tag": "new_lead" } ] } ``` **Key fields:** - `transcript`: Full call transcript - `ai_summary`: 1-2 sentence summary generated by AI after the call - `sentiment`: `positive`, `neutral`, or `negative` - `tag`: `new_lead`, `general`, `missed`, or `spam` - `duration_seconds`: Call length - `recording_url`: Link to call recording (when available) **Dependencies:** Requires `curl`. ## Get Captured Leads Retrieve leads captured during calls: ```bash bash scripts/leads.sh "agent_id" [limit] ``` **Arguments:** - `agent_id` (required): The `id` returned from setup - `limit` (optional): Number of leads to return (default: 50, max: 100) **Example:** ```bash bash scripts/leads.sh [REDACTED_SECRET] 20 ``` **Returns:** ```json { "leads": [ { "id": "lead-uuid", "first_name": "Sarah", "last_name": "Chen", "phone": "+15559876543", "email": "[REDACTED_SECRET]", "notes": "Interested in teeth whitening, prefers morning appointments", "status": "new", "created_at": "2026-04-13T14:32:00Z" } ] } ``` **Dependencies:** Requires `curl`. ## Quick API Access (curl only) For environments without the scripts, call the API directly: ```bash # List your provisioned agents curl -s https://api.agentizzy.com/api/v1/agents \ -H "Authorization: Bearer $AGENTIZZY_API_KEY" # Get calls for an agent curl -s "https://api.agentizzy.com/api/v1/agents/AGENT_ID/calls?limit=10" \ -H "Authorization: Bearer $AGENTIZZY_API_KEY" # Get analytics curl -s "https://api.agentizzy.com/api/v1/agents/AGENT_ID/stats?days=30" \ -H "Authorization: Bearer $AGENTIZZY_API_KEY" ``` ## Webhook Events Configure a webhook URL to receive real-time events: ```bash curl -s -X POST "https://api.agentizzy.com/api/v1/agents/AGENT_ID/webhook" \ -H "Authorization: Bearer $AGENTIZZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{"url": "https://your-endpoint.com/webhook"}' ``` **Events fired:** - `call.completed` — call finished, includes summary, sentiment, duration - `lead.captured` — new lead extracted from a call - `sms.received` — inbound SMS to the business line ## Dedicated Phone Numbers (Pro/Enterprise) Search for available numbers: ```bash curl -s -X POST "https://api.agentizzy.com/api/v1/agents/AGENT_ID/phone/search" \ -H "Authorization: Bearer $AGENTIZZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{"areaCode": "404"}' ``` Provision a dedicated number (callers reach the agent directly, no access code): ```bash curl -s -X POST "https://api.agentizzy.com/api/v1/agents/AGENT_ID/phone/provision" \ -H "Authorization: Bearer $AGENTIZZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{"phoneNumber": "+14045551234"}' ``` ## Pricing Usage-based pricing designed for autonomous agents: | Plan | Price | Agents | Minutes | Phone Numbers | Overage | |------|-------|--------|---------|---------------|---------| | Free | $0/mo | 1 | 30/mo | 0 (shared demo line) | blocked | | Builder | $29/mo | 10 | 100 included | 3 dedicated | $0.20/min | | Scale | $0/mo base | Unlimited | Pay-per-use | 10 dedicated | $0.15/min ($50/mo min) | Check current usage and plan details: ```bash curl -s https://api.agentizzy.com/api/v1/billing/usage \ -H "Authorization: Bearer $AGENTIZZY_API_KEY" ``` Upgrade to a paid plan: ```bash curl -s -X POST https://api.agentizzy.com/api/v1/billing/checkout \ -H "Authorization: Bearer $AGENTIZZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tier": "builder"}' ``` Returns a Stripe checkout URL — direct the account owner to complete payment. Plan upgrades take effect immediately. ## Rate Limits - **API:** 60 requests/minute per API key - **Provisioning:** limited by plan (1 / 10 / unlimited agents) - **Call minutes:** limited by plan (30 / 100 included / pay-per-use per month) - **Call/Lead queries:** 100 results per request (paginate with `limit` and `offset`) ## Use When - You need to add phone call handling to an agent workflow - You want AI-powered lead capture from inbound calls - You need structured call data (transcripts, summaries, sentiment) for downstream processing - You are building a multi-channel agent that handles phone, chat, and email - You want to monitor call activity and lead flow programmatically ## NOT For - Outbound calling or cold calls (V1 is inbound only) - Real-time call transcription streaming (transcripts available after call ends) - Direct Twilio/telephony configuration — AgentIzzy manages the phone infrastructure - SMS-only workflows without phone calls ## External Endpoints - `api.agentizzy.com` — AgentIzzy Agent API (HTTPS only, `agentizzy.com` domain) ## Security & Privacy - All API requests are authenticated via Bearer token over HTTPS - API keys are SHA-256 hashed at rest — AgentIzzy never stores plaintext keys - Call recordings and transcripts are stored in Cloudflare infrastructure (US) - Lead data (names, phone numbers, emails) is captured during calls and stored per-agent - Agents can only access data for phone agents they provisioned (ownership verified per request) - Webhook payloads are sent via HTTPS POST — use HTTPS endpoints only - For compliance requirements, contact [REDACTED_SECRET]

path: scripts/calls.sh
content: #!/bin/bash
# Security Manifest:
#   Environment: AGENTIZZY_API_KEY
#   Endpoints: api.agentizzy.com (HTTPS GET /api/v1/agents/:id/calls)
#   Files: None accessed
#
# Retrieves call history with AI summaries and sentiment.
# Usage: bash calls.sh "facility_id" [limit] [since]

set -euo pipefail

FACILITY_ID="${1:?Usage: calls.sh \"facility_id\" [limit] [since]}"
LIMIT="${2:-20}"
SINCE="${3:-}"

if [ -z "${AGENTIZZY_API_KEY:-}" ]; then
  echo '{"error": "AGENTIZZY_API_KEY environment variable is not set. Contact [REDACTED_SECRET] for API access."}'
  exit 1
fi

URL="https://api.agentizzy.com/api/v1/agents/${FACILITY_ID}/calls?limit=${LIMIT}"
[ -n "$SINCE" ] && URL="${URL}&since=${SINCE}"

curl -s "$URL" \
  -H "Authorization: Bearer ${AGENTIZZY_API_KEY}"


path: scripts/leads.sh
content: #!/bin/bash
# Security Manifest:
#   Environment: AGENTIZZY_API_KEY
#   Endpoints: api.agentizzy.com (HTTPS GET /api/v1/agents/:id/leads)
#   Files: None accessed
#
# Retrieves leads captured from phone calls.
# Usage: bash leads.sh "facility_id" [limit]

set -euo pipefail

FACILITY_ID="${1:?Usage: leads.sh \"facility_id\" [limit]}"
LIMIT="${2:-50}"

if [ -z "${AGENTIZZY_API_KEY:-}" ]; then
  echo '{"error": "AGENTIZZY_API_KEY environment variable is not set. Contact [REDACTED_SECRET] for API access."}'
  exit 1
fi

curl -s "https://api.agentizzy.com/api/v1/agents/${FACILITY_ID}/leads?limit=${LIMIT}" \
  -H "Authorization: Bearer ${AGENTIZZY_API_KEY}"


path: scripts/register.sh
content: #!/bin/bash
# Security Manifest:
#   Environment: None required
#   Endpoints: api.agentizzy.com (HTTPS POST /api/v1/register)
#   Files: None accessed
#
# Registers a new free-tier API key. No authentication required.
# Usage: bash register.sh "Agent Name" [agent_id]

set -euo pipefail

NAME="${1:?Usage: register.sh \"Agent Name\" [agent_id]}"
AGENT_ID="${2:-}"

# Escape name for JSON
NAME_ESCAPED=$(printf '%s' "$NAME" | python3 -c 'import json,sys; print(json.dumps(sys.stdin.read()), end="")')

BODY="{\"name\": ${NAME_ESCAPED}"
[ -n "$AGENT_ID" ] && BODY="${BODY}, \"agent_id\": \"${AGENT_ID}\""
BODY="${BODY}}"

curl -s -X POST "https://api.agentizzy.com/api/v1/register" \
  -H "Content-Type: application/json" \
  -d "$BODY"


path: scripts/setup.sh
content: #!/bin/bash
# Security Manifest:
#   Environment: AGENTIZZY_API_KEY
#   Endpoints: api.agentizzy.com (HTTPS POST /api/v1/agents)
#   Files: None accessed
#
# Provisions a new AI phone agent for a business.
# Usage: bash setup.sh "Business Name" [vertical] [phone] [website_url]

set -euo pipefail

NAME="${1:?Usage: setup.sh \"Business Name\" [vertical] [phone] [website_url]}"
VERTICAL="${2:-}"
PHONE="${3:-}"
WEBSITE="${4:-}"

if [ -z "${AGENTIZZY_API_KEY:-}" ]; then
  echo '{"error": "AGENTIZZY_API_KEY environment variable is not set. Contact [REDACTED_SECRET] for API access."}'
  exit 1
fi

# Escape name for JSON
NAME_ESCAPED=$(printf '%s' "$NAME" | python3 -c 'import json,sys; print(json.dumps(sys.stdin.read()), end="")')

# Build JSON body
BODY="{\"name\": ${NAME_ESCAPED}"
[ -n "$VERTICAL" ] && BODY="${BODY}, \"vertical\": \"${VERTICAL}\""
[ -n "$PHONE" ] && BODY="${BODY}, \"phone\": \"${PHONE}\""
[ -n "$WEBSITE" ] && BODY="${BODY}, \"website\": \"${WEBSITE}\""
BODY="${BODY}}"

curl -s -X POST "https://api.agentizzy.com/api/v1/agents" \
  -H "Authorization: Bearer ${AGENTIZZY_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "$BODY"


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)