{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ai-calls-china-phone",
    "name": "ai-calls-china-phone",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/ustczz/ai-calls-china-phone",
    "canonicalUrl": "https://clawhub.ai/ustczz/ai-calls-china-phone",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ai-calls-china-phone",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ai-calls-china-phone",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "callout.sh",
      "stepone.sh",
      "SKILL.md",
      "callinfo.sh",
      "stream_chat.sh"
    ],
    "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/ai-calls-china-phone"
    },
    "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/ai-calls-china-phone",
    "agentPageUrl": "https://openagent3.xyz/skills/ai-calls-china-phone/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ai-calls-china-phone/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ai-calls-china-phone/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": "Stepone AI 电话外呼",
        "body": "github：https://github.com/ustczz/openclaw-ai-calls-china-phone"
      },
      {
        "title": "1. 注册账号",
        "body": "访问 Stepone AI 官网注册新账号：\n\n网址: https://open-skill.steponeai.com\n龙虾使用更友好\n新用户福利: 注册即送 10 元人民币免费额度\n一句prompt即可专业交流\n支持批量电话外呼\n中文语音交互自然\n按通话分钟计费"
      },
      {
        "title": "2. 获取 API Key",
        "body": "登录后访问：https://open-skill.steponeai.com/keys\n点击\"创建 API Key\"\n复制生成的 Key（格式：sk_xxxxx）"
      },
      {
        "title": "方法一：环境变量（推荐）",
        "body": "export STEPONEAI_API_KEY=\"sk_xxxxxxxxxxxxx\""
      },
      {
        "title": "方法二：secrets 文件",
        "body": "echo '{ \"steponeai_api_key\": \"sk_xxxxxxxxxxxxx\" }' > ~/.clawd/secrets.json"
      },
      {
        "title": "4.1 发起外呼",
        "body": "./callout.sh <手机号> <外呼需求>\n\n参数说明：\n\n参数必填描述手机号是电话号码，如 \"13800138000\"外呼需求是外呼内容描述\n\n示例：\n\n./callout.sh \"13800138000\" \"通知您明天上午9点开会\"\n./callout.sh \"13800138000,13900139000\" \"通知年会时间变更\"\n\n返回： 包含 call_id，用于后续查询通话记录"
      },
      {
        "title": "4.2 查询通话记录",
        "body": "./callinfo.sh <call_id> [最大重试次数]\n\n参数说明：\n\n参数必填描述call_id是外呼返回的通话ID最大重试次数否默认为5次\n\n示例：\n\n./callinfo.sh \"abc123xyz\"\n./callinfo.sh \"abc123xyz\" 3\n\n特性：\n\n自动重试机制：未查到记录时，等待10秒后重试\n最多重试5次（可自定义）\n返回通话状态、时长、内容等信息"
      },
      {
        "title": "4.3 实时通话对话（SSE 流式）",
        "body": "在通话进行过程中，实时获取 AI 和用户之间的对话内容。\n\n./stream_chat.sh <call_id> [options]\n\n参数说明：\n\n参数必填描述call_id是外呼返回的通话ID--json否输出原始SSE数据（不格式化）\n\n示例：\n\n# 发起呼叫后立即开始监听\n./callout.sh \"13800138000\" \"通知明天开会\"\n# 拿到 call_id 后\n./stream_chat.sh \"8bbbbbbb-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n\n输出示例：\n\n🎙️  Streaming real-time conversation\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nCall ID: 8bbbbbbb-xxxx-xxxx-xxxx-xxxxxxxxxxxx\nWaiting for connection...\n\n🤖 AI: 喂，您好，这里是XX公司，请问是张总吗？\n👤 User: 对，是我，有什么事情？\n🤖 AI: 好的张总，主要是通知您明天上午9点有个重要会议。\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n📞 Call ended\n\nSSE 数据格式：\n\nrolecontent说明assistant具体文本AI 的回复内容user具体文本用户语音转文本system[DONE]通话正常结束system[TIMEOUT]30秒内未接通，超时断开\n\n注意事项：\n\n可以在发起呼叫后立即调用，无需等待接通\n未接通时服务器每 0.5 秒推送心跳（: keep-alive）保持连接\n超过 30 秒未接通会收到 [TIMEOUT] 并断开\n通话结束后收到 [DONE] 并断开"
      },
      {
        "title": "4.4 底层 API 封装",
        "body": "./stepone.sh <command> [options]\n\n命令描述call '<json>'发起呼叫（原始JSON）callinfo <id>查询通话记录stream <id>实时对话流version检查版本号balance查看余额"
      },
      {
        "title": "5. API 接口说明",
        "body": "所有 API 请求需携带以下 Headers：\n\nX-API-Key: <API_KEY>\nX-Skill-Version: 1.0.0\n\n如果 X-Skill-Version 与服务端版本不一致，API 会返回 HTTP 426 提示更新。"
      },
      {
        "title": "发起外呼",
        "body": "URL: https://open-skill-api.steponeai.com/api/v1/callinfo/initiate_call\nMethod: POST\nBody:\n\n{\n  \"phones\": \"13800138000\",\n  \"user_requirement\": \"通知内容\"\n}"
      },
      {
        "title": "查询通话记录",
        "body": "URL: https://open-skill-api.steponeai.com/api/v1/callinfo/search_callinfo\nMethod: POST\nBody:\n\n{\n  \"call_id\": \"xxx\"\n}"
      },
      {
        "title": "实时通话对话（SSE）",
        "body": "URL: https://open-skill-api.steponeai.com/api/v1/callinfo/stream_chat_history\nMethod: POST\nContent-Type: application/json\nResponse: text/event-stream (Server-Sent Events)\nBody:\n\n{\n  \"call_id\": \"xxx\"\n}\n\n响应流格式：\n\n: keep-alive\n: keep-alive\ndata: {\"role\": \"assistant\", \"content\": \"喂，您好，请问是张总吗？\"}\n\ndata: {\"role\": \"user\", \"content\": \"对，是我。\"}\n\ndata: {\"role\": \"assistant\", \"content\": \"好的张总，通知您明天上午9点开会。\"}\n\ndata: {\"role\": \"system\", \"content\": \"[DONE]\"}"
      },
      {
        "title": "查询版本号",
        "body": "URL: https://open-skill-api.steponeai.com/api/v1/callinfo/skill_version\nMethod: GET\nResponse:\n\n{\n  \"skill_version\": \"1.0.0\"\n}"
      },
      {
        "title": "6. 版本控制",
        "body": "所有脚本和 API 请求均通过 X-Skill-Version Header 传递当前 Skill 版本号。\n\n服务端会校验版本：版本不匹配时返回 HTTP 426 并提示更新\n检查版本：./stepone.sh version\n更新方式：拉取最新代码即可"
      },
      {
        "title": "身份确认",
        "body": "发起呼叫前必须先确认对方身份\n称呼对方姓名/称呼并等待确认"
      },
      {
        "title": "电话号码格式",
        "body": "多个电话号码使用英文逗号 , 分隔\n确保电话号码格式正确（国内手机号 11 位）"
      },
      {
        "title": "通话记录查询",
        "body": "call_id 由外呼接口返回\n通话记录生成有延迟，需要耐心等待\n重试间隔为固定 10 秒"
      },
      {
        "title": "user_requirement 建议",
        "body": "描述清晰明确\n包含具体的时间、地点、人名等信息"
      },
      {
        "title": "Stepone AI Phone Callout",
        "body": "github: https://github.com/ustczz/openclaw-ai-calls-china-phone"
      },
      {
        "title": "1. Register an Account",
        "body": "Visit the Stepone AI official website to register a new account:\n\nWebsite: https://open-skill.steponeai.com\nMore friendly for Openclaw users\nNew user bonus: Get a free quota of 10 RMB upon registration\nProfessional communication with just one prompt\nSupports batch phone callouts\nNatural Chinese voice interaction\nBilled by call minutes"
      },
      {
        "title": "2. Get API Key",
        "body": "Log in and visit: https://open-skill.steponeai.com/keys\nClick \"Create API Key\"\nCopy the generated Key (format: sk_xxxxx)"
      },
      {
        "title": "Method 1: Environment Variables (Recommended)",
        "body": "export STEPONEAI_API_KEY=\"sk_xxxxxxxxxxxxx\""
      },
      {
        "title": "Method 2: secrets file",
        "body": "echo '{ \"steponeai_api_key\": \"sk_xxxxxxxxxxxxx\" }' > ~/.clawd/secrets.json"
      },
      {
        "title": "4.1 Initiate a Callout",
        "body": "./callout.sh <phone_number> <callout_requirement>\n\nParameters Description:\n\nParameterRequiredDescriptionphone_numberYesPhone number, e.g. \"13800138000\"callout_requirementYesDescription of the callout content\n\nExamples:\n\n./callout.sh \"13800138000\" \"Notify you of the meeting at 9 am tomorrow\"\n./callout.sh \"13800138000,13900139000\" \"Notify the time change of the annual meeting\"\n\nReturns: Includes call_id, used for subsequent call record queries"
      },
      {
        "title": "4.2 Query Call Records",
        "body": "./callinfo.sh <call_id> [max_retries]\n\nParameters Description:\n\nParameterRequiredDescriptioncall_idYesThe call ID returned by the calloutmax_retriesNoDefaults to 5 times\n\nExamples:\n\n./callinfo.sh \"abc123xyz\"\n./callinfo.sh \"abc123xyz\" 3\n\nFeatures:\n\nAutomatic retry mechanism: Wait 10 seconds before retrying when a record is not found\nMaximum retries up to 5 times (customizable)\nReturns information such as call status, duration, and content"
      },
      {
        "title": "4.3 Real-time Conversation (SSE Streaming)",
        "body": "During an ongoing call, get the conversation content between AI and the user in real-time.\n\n./stream_chat.sh <call_id> [options]\n\nParameters Description:\n\nParameterRequiredDescriptioncall_idYesThe call ID returned by the callout--jsonNoOutput raw SSE data (unformatted)\n\nExamples:\n\n# Start listening immediately after initiating the call\n./callout.sh \"13800138000\" \"Notify meeting tomorrow\"\n# After getting the call_id\n./stream_chat.sh \"8bbbbbbb-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n\nOutput Example:\n\n🎙️  Streaming real-time conversation\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nCall ID: 8bbbbbbb-xxxx-xxxx-xxxx-xxxxxxxxxxxx\nWaiting for connection...\n\n🤖 AI: Hello, this is XX company, am I speaking with Mr. Zhang?\n👤 User: Yes, speaking, what's up?\n🤖 AI: Alright Mr. Zhang, just wanted to notify you about an important meeting at 9 am tomorrow.\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n📞 Call ended\n\nSSE Data Format:\n\nrolecontentDescriptionassistantSpecific textAI's reply contentuserSpecific textUser's voice-to-textsystem[DONE]Call ended normallysystem[TIMEOUT]Not connected within 30 seconds, disconnected due to timeout\n\nNotes:\n\nCan be called immediately after initiating the call, no need to wait for connection\nWhen not connected, the server pushes heartbeats (: keep-alive) every 0.5 seconds to keep the connection alive\nIf not connected for over 30 seconds, it will receive [TIMEOUT] and disconnect\nWhen the call ends, it receives [DONE] and disconnects"
      },
      {
        "title": "4.4 Underlying API Wrapper",
        "body": "./stepone.sh <command> [options]\n\nCommandDescriptioncall '<json>'Initiate a call (raw JSON)callinfo <id>Query call recordsstream <id>Real-time conversation streamversionCheck version numberbalanceCheck balance"
      },
      {
        "title": "5. API Interface Description",
        "body": "All API requests must carry the following Headers:\n\nX-API-Key: <API_KEY>\nX-Skill-Version: 1.0.0\n\nIf X-Skill-Version is inconsistent with the server version, the API will return HTTP 426 prompting for an update."
      },
      {
        "title": "Initiate a Callout",
        "body": "URL: https://open-skill-api.steponeai.com/api/v1/callinfo/initiate_call\nMethod: POST\nBody:\n\n{\n  \"phones\": \"13800138000\",\n  \"user_requirement\": \"Notification content\"\n}"
      },
      {
        "title": "Query Call Records",
        "body": "URL: https://open-skill-api.steponeai.com/api/v1/callinfo/search_callinfo\nMethod: POST\nBody:\n\n{\n  \"call_id\": \"xxx\"\n}"
      },
      {
        "title": "Real-time Conversation (SSE)",
        "body": "URL: https://open-skill-api.steponeai.com/api/v1/callinfo/stream_chat_history\nMethod: POST\nContent-Type: application/json\nResponse: text/event-stream (Server-Sent Events)\nBody:\n\n{\n  \"call_id\": \"xxx\"\n}\n\nResponse Stream Format:\n\n: keep-alive\n: keep-alive\ndata: {\"role\": \"assistant\", \"content\": \"Hello, am I speaking with Mr. Zhang?\"}\n\ndata: {\"role\": \"user\", \"content\": \"Yes, speaking.\"}\n\ndata: {\"role\": \"assistant\", \"content\": \"Alright Mr. Zhang, notifying you of the meeting at 9 am tomorrow.\"}\n\ndata: {\"role\": \"system\", \"content\": \"[DONE]\"}"
      },
      {
        "title": "Query Version Number",
        "body": "URL: https://open-skill-api.steponeai.com/api/v1/callinfo/skill_version\nMethod: GET\nResponse:\n\n{\n  \"skill_version\": \"1.0.0\"\n}"
      },
      {
        "title": "6. Version Control",
        "body": "All scripts and API requests pass the current Skill version number through the X-Skill-Version Header.\n\nThe server will verify the version: if the version does not match, it returns HTTP 426 and prompts for an update\nCheck version: ./stepone.sh version\nHow to update: Just pull the latest code"
      },
      {
        "title": "Identity Confirmation",
        "body": "Must confirm the other party's identity before starting the call content\nAddress the other party's name/title and wait for confirmation"
      },
      {
        "title": "Phone Number Format",
        "body": "Multiple phone numbers use English comma , to separate\nEnsure the correct format for phone numbers (domestic mobile number 11 digits)"
      },
      {
        "title": "Call Record Query",
        "body": "call_id is returned by the callout interface\nCall record generation has a delay, need to wait patiently\nRetry interval is fixed at 10 seconds"
      },
      {
        "title": "user_requirement Suggestions",
        "body": "Clear and explicit descriptions\nInclude specific time, location, person names, and other information"
      }
    ],
    "body": "Stepone AI 电话外呼\ngithub：https://github.com/ustczz/openclaw-ai-calls-china-phone\n1. 注册账号\n\n访问 Stepone AI 官网注册新账号：\n\n网址: https://open-skill.steponeai.com\n龙虾使用更友好\n新用户福利: 注册即送 10 元人民币免费额度\n一句prompt即可专业交流\n支持批量电话外呼\n中文语音交互自然\n按通话分钟计费\n2. 获取 API Key\n登录后访问：https://open-skill.steponeai.com/keys\n点击\"创建 API Key\"\n复制生成的 Key（格式：sk_xxxxx）\n3. 配置环境变量\n方法一：环境变量（推荐）\nexport STEPONEAI_API_KEY=\"sk_xxxxxxxxxxxxx\"\n\n方法二：secrets 文件\necho '{ \"steponeai_api_key\": \"sk_xxxxxxxxxxxxx\" }' > ~/.clawd/secrets.json\n\n4. 使用方法\n4.1 发起外呼\n./callout.sh <手机号> <外呼需求>\n\n\n参数说明：\n\n参数\t必填\t描述\n手机号\t是\t电话号码，如 \"13800138000\"\n外呼需求\t是\t外呼内容描述\n\n示例：\n\n./callout.sh \"13800138000\" \"通知您明天上午9点开会\"\n./callout.sh \"13800138000,13900139000\" \"通知年会时间变更\"\n\n\n返回： 包含 call_id，用于后续查询通话记录\n\n4.2 查询通话记录\n./callinfo.sh <call_id> [最大重试次数]\n\n\n参数说明：\n\n参数\t必填\t描述\ncall_id\t是\t外呼返回的通话ID\n最大重试次数\t否\t默认为5次\n\n示例：\n\n./callinfo.sh \"abc123xyz\"\n./callinfo.sh \"abc123xyz\" 3\n\n\n特性：\n\n自动重试机制：未查到记录时，等待10秒后重试\n最多重试5次（可自定义）\n返回通话状态、时长、内容等信息\n4.3 实时通话对话（SSE 流式）\n\n在通话进行过程中，实时获取 AI 和用户之间的对话内容。\n\n./stream_chat.sh <call_id> [options]\n\n\n参数说明：\n\n参数\t必填\t描述\ncall_id\t是\t外呼返回的通话ID\n--json\t否\t输出原始SSE数据（不格式化）\n\n示例：\n\n# 发起呼叫后立即开始监听\n./callout.sh \"13800138000\" \"通知明天开会\"\n# 拿到 call_id 后\n./stream_chat.sh \"8bbbbbbb-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n\n\n输出示例：\n\n🎙️  Streaming real-time conversation\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nCall ID: 8bbbbbbb-xxxx-xxxx-xxxx-xxxxxxxxxxxx\nWaiting for connection...\n\n🤖 AI: 喂，您好，这里是XX公司，请问是张总吗？\n👤 User: 对，是我，有什么事情？\n🤖 AI: 好的张总，主要是通知您明天上午9点有个重要会议。\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n📞 Call ended\n\n\nSSE 数据格式：\n\nrole\tcontent\t说明\nassistant\t具体文本\tAI 的回复内容\nuser\t具体文本\t用户语音转文本\nsystem\t[DONE]\t通话正常结束\nsystem\t[TIMEOUT]\t30秒内未接通，超时断开\n\n注意事项：\n\n可以在发起呼叫后立即调用，无需等待接通\n未接通时服务器每 0.5 秒推送心跳（: keep-alive）保持连接\n超过 30 秒未接通会收到 [TIMEOUT] 并断开\n通话结束后收到 [DONE] 并断开\n4.4 底层 API 封装\n./stepone.sh <command> [options]\n\n命令\t描述\ncall '<json>'\t发起呼叫（原始JSON）\ncallinfo <id>\t查询通话记录\nstream <id>\t实时对话流\nversion\t检查版本号\nbalance\t查看余额\n5. API 接口说明\n\n所有 API 请求需携带以下 Headers：\n\nX-API-Key: <API_KEY>\nX-Skill-Version: 1.0.0\n\n\n如果 X-Skill-Version 与服务端版本不一致，API 会返回 HTTP 426 提示更新。\n\n发起外呼\nURL: https://open-skill-api.steponeai.com/api/v1/callinfo/initiate_call\nMethod: POST\nBody:\n{\n  \"phones\": \"13800138000\",\n  \"user_requirement\": \"通知内容\"\n}\n\n查询通话记录\nURL: https://open-skill-api.steponeai.com/api/v1/callinfo/search_callinfo\nMethod: POST\nBody:\n{\n  \"call_id\": \"xxx\"\n}\n\n实时通话对话（SSE）\nURL: https://open-skill-api.steponeai.com/api/v1/callinfo/stream_chat_history\nMethod: POST\nContent-Type: application/json\nResponse: text/event-stream (Server-Sent Events)\nBody:\n{\n  \"call_id\": \"xxx\"\n}\n\n\n响应流格式：\n\n: keep-alive\n: keep-alive\ndata: {\"role\": \"assistant\", \"content\": \"喂，您好，请问是张总吗？\"}\n\ndata: {\"role\": \"user\", \"content\": \"对，是我。\"}\n\ndata: {\"role\": \"assistant\", \"content\": \"好的张总，通知您明天上午9点开会。\"}\n\ndata: {\"role\": \"system\", \"content\": \"[DONE]\"}\n\n查询版本号\nURL: https://open-skill-api.steponeai.com/api/v1/callinfo/skill_version\nMethod: GET\nResponse:\n{\n  \"skill_version\": \"1.0.0\"\n}\n\n6. 版本控制\n\n所有脚本和 API 请求均通过 X-Skill-Version Header 传递当前 Skill 版本号。\n\n服务端会校验版本：版本不匹配时返回 HTTP 426 并提示更新\n检查版本：./stepone.sh version\n更新方式：拉取最新代码即可\n6. 注意事项\n身份确认\n发起呼叫前必须先确认对方身份\n称呼对方姓名/称呼并等待确认\n电话号码格式\n多个电话号码使用英文逗号 , 分隔\n确保电话号码格式正确（国内手机号 11 位）\n通话记录查询\ncall_id 由外呼接口返回\n通话记录生成有延迟，需要耐心等待\n重试间隔为固定 10 秒\nuser_requirement 建议\n描述清晰明确\n包含具体的时间、地点、人名等信息\nEnglish Documentation\nStepone AI Phone Callout\ngithub: https://github.com/ustczz/openclaw-ai-calls-china-phone\n1. Register an Account\n\nVisit the Stepone AI official website to register a new account:\n\nWebsite: https://open-skill.steponeai.com\nMore friendly for Openclaw users\nNew user bonus: Get a free quota of 10 RMB upon registration\nProfessional communication with just one prompt\nSupports batch phone callouts\nNatural Chinese voice interaction\nBilled by call minutes\n2. Get API Key\nLog in and visit: https://open-skill.steponeai.com/keys\nClick \"Create API Key\"\nCopy the generated Key (format: sk_xxxxx)\n3. Configure Environment Variables\nMethod 1: Environment Variables (Recommended)\nexport STEPONEAI_API_KEY=\"sk_xxxxxxxxxxxxx\"\n\nMethod 2: secrets file\necho '{ \"steponeai_api_key\": \"sk_xxxxxxxxxxxxx\" }' > ~/.clawd/secrets.json\n\n4. Usage\n4.1 Initiate a Callout\n./callout.sh <phone_number> <callout_requirement>\n\n\nParameters Description:\n\nParameter\tRequired\tDescription\nphone_number\tYes\tPhone number, e.g. \"13800138000\"\ncallout_requirement\tYes\tDescription of the callout content\n\nExamples:\n\n./callout.sh \"13800138000\" \"Notify you of the meeting at 9 am tomorrow\"\n./callout.sh \"13800138000,13900139000\" \"Notify the time change of the annual meeting\"\n\n\nReturns: Includes call_id, used for subsequent call record queries\n\n4.2 Query Call Records\n./callinfo.sh <call_id> [max_retries]\n\n\nParameters Description:\n\nParameter\tRequired\tDescription\ncall_id\tYes\tThe call ID returned by the callout\nmax_retries\tNo\tDefaults to 5 times\n\nExamples:\n\n./callinfo.sh \"abc123xyz\"\n./callinfo.sh \"abc123xyz\" 3\n\n\nFeatures:\n\nAutomatic retry mechanism: Wait 10 seconds before retrying when a record is not found\nMaximum retries up to 5 times (customizable)\nReturns information such as call status, duration, and content\n4.3 Real-time Conversation (SSE Streaming)\n\nDuring an ongoing call, get the conversation content between AI and the user in real-time.\n\n./stream_chat.sh <call_id> [options]\n\n\nParameters Description:\n\nParameter\tRequired\tDescription\ncall_id\tYes\tThe call ID returned by the callout\n--json\tNo\tOutput raw SSE data (unformatted)\n\nExamples:\n\n# Start listening immediately after initiating the call\n./callout.sh \"13800138000\" \"Notify meeting tomorrow\"\n# After getting the call_id\n./stream_chat.sh \"8bbbbbbb-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"\n\n\nOutput Example:\n\n🎙️  Streaming real-time conversation\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nCall ID: 8bbbbbbb-xxxx-xxxx-xxxx-xxxxxxxxxxxx\nWaiting for connection...\n\n🤖 AI: Hello, this is XX company, am I speaking with Mr. Zhang?\n👤 User: Yes, speaking, what's up?\n🤖 AI: Alright Mr. Zhang, just wanted to notify you about an important meeting at 9 am tomorrow.\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n📞 Call ended\n\n\nSSE Data Format:\n\nrole\tcontent\tDescription\nassistant\tSpecific text\tAI's reply content\nuser\tSpecific text\tUser's voice-to-text\nsystem\t[DONE]\tCall ended normally\nsystem\t[TIMEOUT]\tNot connected within 30 seconds, disconnected due to timeout\n\nNotes:\n\nCan be called immediately after initiating the call, no need to wait for connection\nWhen not connected, the server pushes heartbeats (: keep-alive) every 0.5 seconds to keep the connection alive\nIf not connected for over 30 seconds, it will receive [TIMEOUT] and disconnect\nWhen the call ends, it receives [DONE] and disconnects\n4.4 Underlying API Wrapper\n./stepone.sh <command> [options]\n\nCommand\tDescription\ncall '<json>'\tInitiate a call (raw JSON)\ncallinfo <id>\tQuery call records\nstream <id>\tReal-time conversation stream\nversion\tCheck version number\nbalance\tCheck balance\n5. API Interface Description\n\nAll API requests must carry the following Headers:\n\nX-API-Key: <API_KEY>\nX-Skill-Version: 1.0.0\n\n\nIf X-Skill-Version is inconsistent with the server version, the API will return HTTP 426 prompting for an update.\n\nInitiate a Callout\nURL: https://open-skill-api.steponeai.com/api/v1/callinfo/initiate_call\nMethod: POST\nBody:\n{\n  \"phones\": \"13800138000\",\n  \"user_requirement\": \"Notification content\"\n}\n\nQuery Call Records\nURL: https://open-skill-api.steponeai.com/api/v1/callinfo/search_callinfo\nMethod: POST\nBody:\n{\n  \"call_id\": \"xxx\"\n}\n\nReal-time Conversation (SSE)\nURL: https://open-skill-api.steponeai.com/api/v1/callinfo/stream_chat_history\nMethod: POST\nContent-Type: application/json\nResponse: text/event-stream (Server-Sent Events)\nBody:\n{\n  \"call_id\": \"xxx\"\n}\n\n\nResponse Stream Format:\n\n: keep-alive\n: keep-alive\ndata: {\"role\": \"assistant\", \"content\": \"Hello, am I speaking with Mr. Zhang?\"}\n\ndata: {\"role\": \"user\", \"content\": \"Yes, speaking.\"}\n\ndata: {\"role\": \"assistant\", \"content\": \"Alright Mr. Zhang, notifying you of the meeting at 9 am tomorrow.\"}\n\ndata: {\"role\": \"system\", \"content\": \"[DONE]\"}\n\nQuery Version Number\nURL: https://open-skill-api.steponeai.com/api/v1/callinfo/skill_version\nMethod: GET\nResponse:\n{\n  \"skill_version\": \"1.0.0\"\n}\n\n6. Version Control\n\nAll scripts and API requests pass the current Skill version number through the X-Skill-Version Header.\n\nThe server will verify the version: if the version does not match, it returns HTTP 426 and prompts for an update\nCheck version: ./stepone.sh version\nHow to update: Just pull the latest code\n7. Notes\nIdentity Confirmation\nMust confirm the other party's identity before starting the call content\nAddress the other party's name/title and wait for confirmation\nPhone Number Format\nMultiple phone numbers use English comma , to separate\nEnsure the correct format for phone numbers (domestic mobile number 11 digits)\nCall Record Query\ncall_id is returned by the callout interface\nCall record generation has a delay, need to wait patiently\nRetry interval is fixed at 10 seconds\nuser_requirement Suggestions\nClear and explicit descriptions\nInclude specific time, location, person names, and other information"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ustczz/ai-calls-china-phone",
    "publisherUrl": "https://clawhub.ai/ustczz/ai-calls-china-phone",
    "owner": "ustczz",
    "version": "1.0.8",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ai-calls-china-phone",
    "downloadUrl": "https://openagent3.xyz/downloads/ai-calls-china-phone",
    "agentUrl": "https://openagent3.xyz/skills/ai-calls-china-phone/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ai-calls-china-phone/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ai-calls-china-phone/agent.md"
  }
}