Skill: zhangchengzc/keyue-call (version 1.0.5)

--- name: keyue-call description: 通过百度 AIOB 的获取 Token 与实时任务接口创建外呼任务。适用于：立即拨打电话、定时提醒电话（例如 5 分钟后拨打）、以及需要把用户意图整理为 dialogVar.name、dialogVar.owner_name 和 dialogVar.user_intent 后再发起外呼的场景；也适合通过脚本自动化创建外呼任务并结合 OpenClaw cron 调度。 --- # AIOB 外呼技能 用于稳定地创建“立即外呼”与“延时外呼”任务。 ## 工作流 1. 在 `config.json` 中配置默认参数（可参考 `config.json.example`），包括：`accessKey`、`secretKey`、`robotId`、`mobile`、`callerNum`。 2. 按 `references/aiob-auth.md` 获取 `accessToken`。 3. 按 `references/aiob-realtime-task.md` 组织实时外呼请求体。 4. 先按 `references/extraction-rules.md` 从用户自然语言中提取 `mobile`、`name`、`owner_name`、`user_intent`、`schedule`。 5. 使用 `scripts/create_realtime_call.py` 发起请求（命令行参数可覆盖配置文件中的默认值）。 6. 对“5 分钟后提醒我打电话”这类需求，使用 OpenClaw `cron` 做精确定时触发。 ## 典型场景 ### 1）立即外呼 采用配置优先模式。 示例（拨打配置文件中的默认手机号）： ```bash python3 scripts/create_realtime_call.py --config config.json ``` 示例（仅覆盖被叫手机号）： ```bash python3 scripts/create_realtime_call.py --config config.json --mobile "13333333333" ``` ### 2）通知某人某件事 当用户表达“打电话给张三，告诉他下午三点开会”这类需求时： - `name = "张三"` - `owner_name = "李四"`（表示是谁发起这通电话；若上下文明确且用户希望话术体现发起人身份，则优先补齐） - `user_intent = "下午三点开会"` 示例： ```bash python3 scripts/create_realtime_call.py \ --config config.json \ --mobile "13333333333" \ --name "张三" \ --user-intent "下午三点开会" ``` ### 3）提醒或催办 适用于： - 打电话给张三，提醒他今天下班前提交周报 - 打电话给李四，告诉他快递到了 - 打电话给我，提醒我两分钟后出门 变量提取建议： - `name`：被称呼的人名；若用户没有明确姓名，可留空或使用默认值 - `owner_name`：外呼任务发起人的姓名或身份称呼，用于在话术里体现“这是谁让打来的电话”；若上下文明确且用户有这个需求，优先传递 - `user_intent`：真正要传达的内容，保留原意，尽量简洁 ### 4）延时提醒外呼（例如 5 分钟后） 使用 OpenClaw `cron` 进行一次性调度。 实现模式： 1. 创建 one-shot cron 任务（`schedule.kind = "at"`），触发时间为当前时间 + 5 分钟。 2. 任务使用 isolated `agentTurn` 执行本技能流程。 3. cron 文案中写明“这是提醒电话”，并带上必要上下文。 ### 5）带截止时间的排队外呼 设置 `--stop-date "yyyy-MM-dd HH:mm:ss"`，超过截止时间后 AIOB 不再继续拨打。 ## 自然语言入口 当用户直接说自然语言时，优先按 `references/extraction-rules.md` 解析，不要让用户自己组织 JSON。 推荐支持这类表达： - “打电话给张三，告诉他下午三点开会” - “打个电话给 14444444444，提醒他尽快回我微信” - “2 分钟后打电话给我，提醒我出门拿快递” 执行策略： 1. 判断是立即外呼还是延时/定时外呼。 2. 抽取手机号；只有“打电话给我 / 给我自己打电话 / 提醒我自己”这类明确打给自己的场景，才允许回退到 `config.json` 默认手机号。 3. 若目标不是用户自己，则必须要求用户明确提供手机号；不要因为给了姓名就擅自使用默认号码。 4. 抽取 `name`。 5. 若用户希望在电话里体现“是谁发起的提醒/通知”，或上下文已明确发起人身份，则抽取 `owner_name`。 6. 抽取 `user_intent`。 7. 立即外呼时优先调用： ```bash python3 scripts/create_realtime_call.py --config config.json [--mobile ...] [--name ...] [--owner-name ...] [--user-intent ...] ``` 8. 延时/定时时用 OpenClaw `cron` 调度，并在触发时执行同一脚本。 ## 参数约定 默认把外呼平台常用变量统一收敛到 `dialogVar`： - `dialogVar.name`：称呼对象，例如“张三” - `dialogVar.owner_name`：外呼任务发起人的姓名或身份称呼，例如“李四”“妈妈”“公司行政” - `dialogVar.user_intent`：要传达的信息，例如“下午三点开会” 优先使用快捷参数： - `--name` → 写入 `dialogVar.name` - `--owner-name` → 写入 `dialogVar.owner_name` - `--user-intent` → 写入 `dialogVar.user_intent` 如果确实需要额外变量，再使用 `--dialog-var` 传完整 JSON；当快捷参数和 `--dialog-var` 同时存在时，快捷参数优先覆盖同名字段。 当 `dialogVar` 中的字段值为空字符串时，脚本会自动清理；如果最终 `name`、`owner_name` 和 `user_intent` 都为空，则整个 `dialogVar` 不再上送。 ## 成功后的用户提示 如果本次外呼成功，但用户没有表达 `name` 和 `user_intent`，回复里可顺手提示一次更完整的用法，帮助用户学会这个能力。 推荐提示风格： - 简短 - 不说教 - 只在缺少这两个字段时提示 示例： - “已经给你发起电话了。下次如果你想让电话里带具体内容，可以直接说：打电话给张三，告诉他 5 点开会。” - “电话已经发起成功。你也可以直接补充姓名和想传达的话，比如：打电话给李四，告诉他尽快回电。” 如果本次已经明确提供了 `name` 或 `user_intent`，就不要重复教育用户。 ## 约束与防护 - 不要在用户可见回复中暴露 AK/SK 或 accessToken。 - 若接口业务码非成功，返回简洁错误原因与可执行修复建议。 - `dialogVar` 必须是合法 JSON 对象。 - 优先提取并传递 `name`、`owner_name` 与 `user_intent`，避免把整句原话无差别塞给平台。 - 只有“打给自己”的场景才能使用 `config.json` 中的默认手机号；其他目标一律要求用户明确提供号码。 - 单次实时外呼请求仅传一个被叫号码（`mobile`）。 ## 资源说明 - `config.json.example`：默认配置模板（AK/SK/robotId/mobile/callerNum 等）。 - `references/aiob-auth.md`：Token 获取接口与认证约束。 - `references/aiob-realtime-task.md`：实时任务字段、请求和响应要点。 - `references/extraction-rules.md`：把用户自然语言拆成 `mobile`、`name`、`owner_name`、`user_intent`、`schedule` 的规则。 - `scripts/create_realtime_call.py`：配置优先、支持参数覆盖的外呼脚本。


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