{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ringg-voice-agent",
    "name": "Ringg Voice Agent",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/siddharthpilani/ringg-voice-agent",
    "canonicalUrl": "https://clawhub.ai/siddharthpilani/ringg-voice-agent",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ringg-voice-agent",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ringg-voice-agent",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/api_reference.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/ringg-voice-agent"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/ringg-voice-agent",
    "agentPageUrl": "https://openagent3.xyz/skills/ringg-voice-agent/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ringg-voice-agent/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ringg-voice-agent/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Ringg Voice Agent Skill for OpenClaw",
        "body": "This skill connects OpenClaw to Ringg AI — a Voice OS for enterprises\nthat provides low-latency (<337ms), multilingual (20+ languages) AI voice agents for phone\ninteractions including lead qualification, feedback collection, confirmations, and more."
      },
      {
        "title": "Prerequisites",
        "body": "A Ringg AI account with API access\nRINGG_API_KEY environment variable set (obtain from Ringg AI dashboard)\nRINGG_WORKSPACE_ID environment variable set\nOptional: RINGG_DEFAULT_ASSISTANT_ID for a default voice agent\nOptional: RINGG_DEFAULT_FROM_NUMBER for outbound calls"
      },
      {
        "title": "Configuration",
        "body": "Add to openclaw.json under skills.entries:\n\n{\n  \"skills\": {\n    \"entries\": {\n      \"ringg-voice-agent\": {\n        \"enabled\": true,\n        \"apiKey\": \"RINGG_API_KEY\",\n        \"env\": {\n          \"RINGG_API_KEY\": \"<your-ringg-api-key>\",\n          \"RINGG_WORKSPACE_ID\": \"<your-workspace-id>\",\n          \"RINGG_DEFAULT_ASSISTANT_ID\": \"<optional-default-assistant-id>\",\n          \"RINGG_DEFAULT_FROM_NUMBER\": \"<optional-default-number>\"\n        }\n      }\n    }\n  }\n}"
      },
      {
        "title": "1. Make an Outbound Call",
        "body": "Initiate a call from a Ringg AI assistant to a phone number.\n\n# Basic outbound call\ncurl -X POST \"https://api.ringg.ai/v1/calls/outbound\" \\\n  -H \"Authorization: Bearer $RINGG_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"assistant_id\": \"<assistant-id>\",\n    \"to_number\": \"+919876543210\",\n    \"from_number\": \"+918001234567\",\n    \"dynamic_variables\": {\n      \"customer_name\": \"Rahul\",\n      \"order_id\": \"ORD-12345\"\n    }\n  }'\n\nParameters:\n\nassistant_id — ID of the Ringg voice agent to use (falls back to RINGG_DEFAULT_ASSISTANT_ID)\nto_number — Destination phone number in E.164 format\nfrom_number — Caller ID number (falls back to RINGG_DEFAULT_FROM_NUMBER)\ndynamic_variables — Key-value pairs passed into the agent's conversation context\n\nWhen the user says \"call +91XXXXXXXXXX\" or \"make a call to [name/number]\", use this action.\nIf no assistant_id is specified, use RINGG_DEFAULT_ASSISTANT_ID. If no from_number is specified,\nuse RINGG_DEFAULT_FROM_NUMBER."
      },
      {
        "title": "2. Launch a Campaign",
        "body": "Trigger a batch calling campaign for multiple contacts.\n\ncurl -X POST \"https://api.ringg.ai/v1/campaigns/launch\" \\\n  -H \"Authorization: Bearer $RINGG_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"campaign_id\": \"<campaign-id>\",\n    \"contacts\": [\n      {\"phone\": \"+919876543210\", \"name\": \"Rahul\", \"custom_field\": \"value\"},\n      {\"phone\": \"+919876543211\", \"name\": \"Priya\", \"custom_field\": \"value\"}\n    ]\n  }'\n\nWhen the user asks to \"launch a campaign\", \"start calling a list\", or \"run outbound calls for\n[list/segment]\", use this action."
      },
      {
        "title": "3. Check Call Status",
        "body": "curl -X GET \"https://api.ringg.ai/v1/calls/{call_id}/status\" \\\n  -H \"Authorization: Bearer $RINGG_API_KEY\"\n\nReturns: call status (ringing, in-progress, completed, failed), duration, transcript summary,\nand disposition."
      },
      {
        "title": "4. Get Call History & Analytics",
        "body": "# Recent call history\ncurl -X GET \"https://api.ringg.ai/v1/calls/history?limit=20\" \\\n  -H \"Authorization: Bearer $RINGG_API_KEY\"\n\n# Analytics for a time range\ncurl -X GET \"https://api.ringg.ai/v1/analytics?from=2026-02-01&to=2026-02-06\" \\\n  -H \"Authorization: Bearer $RINGG_API_KEY\"\n\nWhen the user asks \"how did the calls go\", \"show me call analytics\", or \"what happened on\nyesterday's calls\", use these endpoints."
      },
      {
        "title": "5. List Assistants",
        "body": "curl -X GET \"https://api.ringg.ai/v1/assistants\" \\\n  -H \"Authorization: Bearer $RINGG_API_KEY\"\n\nWhen the user asks \"which agents do I have\", \"list my ringg assistants\", or needs to select\nan assistant before making a call, use this."
      },
      {
        "title": "6. Get Call Transcript",
        "body": "curl -X GET \"https://api.ringg.ai/v1/calls/{call_id}/transcript\" \\\n  -H \"Authorization: Bearer $RINGG_API_KEY\"\n\nWhen the user asks \"what was said on the call\" or \"get the transcript\", use this."
      },
      {
        "title": "Webhook Integration (Inbound Events)",
        "body": "Ringg AI can push real-time call events to OpenClaw via webhooks. To receive call status\nupdates, transcripts, and dispositions:\n\nExpose OpenClaw's webhook endpoint:\nngrok http 18789\n\n\n\nConfigure the webhook URL in Ringg AI dashboard or via API:\ncurl -X POST \"https://api.ringg.ai/v1/webhooks\" \\\n  -H \"Authorization: Bearer $RINGG_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://your-ngrok-url.ngrok.io/webhook/ringg\",\n    \"events\": [\"call.completed\", \"call.failed\", \"call.transcript_ready\"]\n  }'\n\n\n\nOpenClaw will receive POST payloads with call events that can trigger agent actions."
      },
      {
        "title": "Usage Patterns",
        "body": "Natural language triggers → actions:\n\nUser saysAction\"Call Rahul at +919876543210\"Outbound call with default assistant\"Use the PolicyBazaar agent to call this lead\"Outbound call with specific assistant\"Launch the feedback campaign\"Campaign launch\"How did the last 10 calls go?\"Call history\"Get the transcript for call XYZ\"Call transcript\"What agents do I have in Ringg?\"List assistants\"Show me today's call analytics\"Analytics"
      },
      {
        "title": "Error Handling",
        "body": "401 Unauthorized: Check RINGG_API_KEY is valid\n404 Not Found: Verify assistant_id, call_id, or campaign_id exists\n429 Rate Limited: Back off and retry after the indicated interval\nPhone number format: Always use E.164 format (e.g., +919876543210 for India)"
      },
      {
        "title": "API Reference",
        "body": "For full API details, see references/api_reference.md in this skill directory, or\nvisit the Ringg AI API Docs."
      }
    ],
    "body": "Ringg Voice Agent Skill for OpenClaw\n\nThis skill connects OpenClaw to Ringg AI — a Voice OS for enterprises that provides low-latency (<337ms), multilingual (20+ languages) AI voice agents for phone interactions including lead qualification, feedback collection, confirmations, and more.\n\nPrerequisites\nA Ringg AI account with API access\nRINGG_API_KEY environment variable set (obtain from Ringg AI dashboard)\nRINGG_WORKSPACE_ID environment variable set\nOptional: RINGG_DEFAULT_ASSISTANT_ID for a default voice agent\nOptional: RINGG_DEFAULT_FROM_NUMBER for outbound calls\nConfiguration\n\nAdd to openclaw.json under skills.entries:\n\n{\n  \"skills\": {\n    \"entries\": {\n      \"ringg-voice-agent\": {\n        \"enabled\": true,\n        \"apiKey\": \"RINGG_API_KEY\",\n        \"env\": {\n          \"RINGG_API_KEY\": \"<your-ringg-api-key>\",\n          \"RINGG_WORKSPACE_ID\": \"<your-workspace-id>\",\n          \"RINGG_DEFAULT_ASSISTANT_ID\": \"<optional-default-assistant-id>\",\n          \"RINGG_DEFAULT_FROM_NUMBER\": \"<optional-default-number>\"\n        }\n      }\n    }\n  }\n}\n\nAvailable Actions\n1. Make an Outbound Call\n\nInitiate a call from a Ringg AI assistant to a phone number.\n\n# Basic outbound call\ncurl -X POST \"https://api.ringg.ai/v1/calls/outbound\" \\\n  -H \"Authorization: Bearer $RINGG_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"assistant_id\": \"<assistant-id>\",\n    \"to_number\": \"+919876543210\",\n    \"from_number\": \"+918001234567\",\n    \"dynamic_variables\": {\n      \"customer_name\": \"Rahul\",\n      \"order_id\": \"ORD-12345\"\n    }\n  }'\n\n\nParameters:\n\nassistant_id — ID of the Ringg voice agent to use (falls back to RINGG_DEFAULT_ASSISTANT_ID)\nto_number — Destination phone number in E.164 format\nfrom_number — Caller ID number (falls back to RINGG_DEFAULT_FROM_NUMBER)\ndynamic_variables — Key-value pairs passed into the agent's conversation context\n\nWhen the user says \"call +91XXXXXXXXXX\" or \"make a call to [name/number]\", use this action. If no assistant_id is specified, use RINGG_DEFAULT_ASSISTANT_ID. If no from_number is specified, use RINGG_DEFAULT_FROM_NUMBER.\n\n2. Launch a Campaign\n\nTrigger a batch calling campaign for multiple contacts.\n\ncurl -X POST \"https://api.ringg.ai/v1/campaigns/launch\" \\\n  -H \"Authorization: Bearer $RINGG_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"campaign_id\": \"<campaign-id>\",\n    \"contacts\": [\n      {\"phone\": \"+919876543210\", \"name\": \"Rahul\", \"custom_field\": \"value\"},\n      {\"phone\": \"+919876543211\", \"name\": \"Priya\", \"custom_field\": \"value\"}\n    ]\n  }'\n\n\nWhen the user asks to \"launch a campaign\", \"start calling a list\", or \"run outbound calls for [list/segment]\", use this action.\n\n3. Check Call Status\ncurl -X GET \"https://api.ringg.ai/v1/calls/{call_id}/status\" \\\n  -H \"Authorization: Bearer $RINGG_API_KEY\"\n\n\nReturns: call status (ringing, in-progress, completed, failed), duration, transcript summary, and disposition.\n\n4. Get Call History & Analytics\n# Recent call history\ncurl -X GET \"https://api.ringg.ai/v1/calls/history?limit=20\" \\\n  -H \"Authorization: Bearer $RINGG_API_KEY\"\n\n# Analytics for a time range\ncurl -X GET \"https://api.ringg.ai/v1/analytics?from=2026-02-01&to=2026-02-06\" \\\n  -H \"Authorization: Bearer $RINGG_API_KEY\"\n\n\nWhen the user asks \"how did the calls go\", \"show me call analytics\", or \"what happened on yesterday's calls\", use these endpoints.\n\n5. List Assistants\ncurl -X GET \"https://api.ringg.ai/v1/assistants\" \\\n  -H \"Authorization: Bearer $RINGG_API_KEY\"\n\n\nWhen the user asks \"which agents do I have\", \"list my ringg assistants\", or needs to select an assistant before making a call, use this.\n\n6. Get Call Transcript\ncurl -X GET \"https://api.ringg.ai/v1/calls/{call_id}/transcript\" \\\n  -H \"Authorization: Bearer $RINGG_API_KEY\"\n\n\nWhen the user asks \"what was said on the call\" or \"get the transcript\", use this.\n\nWebhook Integration (Inbound Events)\n\nRingg AI can push real-time call events to OpenClaw via webhooks. To receive call status updates, transcripts, and dispositions:\n\nExpose OpenClaw's webhook endpoint:\n\nngrok http 18789\n\n\nConfigure the webhook URL in Ringg AI dashboard or via API:\n\ncurl -X POST \"https://api.ringg.ai/v1/webhooks\" \\\n  -H \"Authorization: Bearer $RINGG_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://your-ngrok-url.ngrok.io/webhook/ringg\",\n    \"events\": [\"call.completed\", \"call.failed\", \"call.transcript_ready\"]\n  }'\n\n\nOpenClaw will receive POST payloads with call events that can trigger agent actions.\n\nUsage Patterns\n\nNatural language triggers → actions:\n\nUser says\tAction\n\"Call Rahul at +919876543210\"\tOutbound call with default assistant\n\"Use the PolicyBazaar agent to call this lead\"\tOutbound call with specific assistant\n\"Launch the feedback campaign\"\tCampaign launch\n\"How did the last 10 calls go?\"\tCall history\n\"Get the transcript for call XYZ\"\tCall transcript\n\"What agents do I have in Ringg?\"\tList assistants\n\"Show me today's call analytics\"\tAnalytics\nError Handling\n401 Unauthorized: Check RINGG_API_KEY is valid\n404 Not Found: Verify assistant_id, call_id, or campaign_id exists\n429 Rate Limited: Back off and retry after the indicated interval\nPhone number format: Always use E.164 format (e.g., +919876543210 for India)\nAPI Reference\n\nFor full API details, see references/api_reference.md in this skill directory, or visit the Ringg AI API Docs."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/siddharthpilani/ringg-voice-agent",
    "publisherUrl": "https://clawhub.ai/siddharthpilani/ringg-voice-agent",
    "owner": "siddharthpilani",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ringg-voice-agent",
    "downloadUrl": "https://openagent3.xyz/downloads/ringg-voice-agent",
    "agentUrl": "https://openagent3.xyz/skills/ringg-voice-agent/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ringg-voice-agent/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ringg-voice-agent/agent.md"
  }
}