360 Secure SkillHub
360 安全技能中心

jm-call

面向电话外呼场景:从用户输入提取被叫方、电话号码与通话目的,按预约/推销/提醒等场景批量追问补充信息,展示确认卡片并获得同意后,通过 shell 脚本调用言犀智能外呼接口发起通话,处理风控拦截与缺少必填参数等错误,并可按 request_id 查询结果;号码与对话内容会传输至该服务并本地留存日志。

pe-evolver
pe-evolver
热度 16.02
最近更新 2026-03-24 11:53:35
分类:自动化依赖:第三方 API / 代码执行 / 读写文件应用场景:工作流 / 日程安排 / 任务管理

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add jm-call
Metadata
name
yanxi-aicall
description
AI-powered outbound calling service. Use when user expresses intent to make phone calls (e.g., "help me call xxx to book a table", "call customer about promotion", "remind user about payment"). Collects call information and delegates prompt generation to backend.
version
3.1.0
author
yanxi
license
MIT
homepage
https://yanxi-aicall.jd.com/
required_env_vars
[{"name":"YANXI_API_KEY","description":"API key for Yanxi AI Call service (apply at https://yanxi-aigc-uat.jd.com/jimi/mine/api-center)","required":true},{"name":"YANXI_BASE_URL","description":"API base URL (optional, defaults to https://yanxi-ai-api.jd.com)","required":false}]
required_binaries
["curl","jq"]
privacy
{"pii_transmitted":true,"pii_stored_locally":true,"third_party_api":"Yanxi AI Call (JD.com)","user_consent_required":true}

Yanxi AI Call - 智能外呼服务

用户有打电话意图 → 意图提取 → 信息收集 → 确认 → 调用外呼 → 检查结果 → 补充信息(如需)


⚠️ 隐私声明与用户确认

重要:在调用外呼接口前,必须向用户展示确认卡片并获得明确同意。

数据收集与传输

本 skill 会收集以下信息并发送到 Yanxi AI 外呼服务:

数据类型 用途 是否传输 是否本地存储
电话号码 外呼目标号码 ✓ ✓
对话上下文 AI 理解通话目的 ✓ ✓
通话记录 状态和日志 - ✓

第三方服务

本地数据保留

  • 请求记录:memory/yanxi-calls/requests.jsonl
  • 通话日志:memory/yanxi-calls/costs.jsonl
  • 这两个文件包含 PII(电话号码、对话内容),用户可随时删除

用户确认流程

在信息收集完毕后,必须展示确认卡片:

📞 外呼确认

对象:{Who}
电话:{Phone}
目的:{What}

⚠️ 以下信息将发送到 Yanxi AI 外呼服务(京东言犀平台):
• 电话号码:{Phone}
• 对话内容:{对话摘要}

确认拨打?(回复"确认"或"取消")

仅在用户明确确认后才执行外呼。


🎯 触发条件

当用户表达以下意图时触发:

  • "帮我给xxx打个电话预约个位子"
  • "给老客户打电话推销活动"
  • "打电话提醒用户还款"
  • "帮我问下我父亲最近身体怎么样"
  • "给客户打电话确认预约时间"

关键词:打电话、致电、外呼、电话通知、电话确认


📋 步骤 1:意图提取

从用户输入中提取核心信息:

要素 说明 示例
Who 打给谁(名称/关系/机构) 蜀九香、我爸、老客户
Phone 电话号码 18033009923
What 外呼目的 预约位子、推销活动、问身体状况

📝 步骤 2:信息收集

目标:一次收集尽可能多的信息,减少后续追问次数。

信息收集清单

根据外呼目的,智能判断需要收集哪些信息:

基础信息(必问)

信息项 说明 追问方式
Who 被叫方名称/关系 "请问打给谁?"
Phone 电话号码 "请问对方电话是多少?"
What 外呼目的 "请问打电话主要想说什么?"

时间信息(涉及时间时追问)

信息项 适用场景 追问方式
When 预约、提醒、限时活动 "请问是什么时间?"
Deadline 限时事项 "有截止时间吗?"

地点信息(涉及地点时追问)

信息项 适用场景 追问方式
Where 预约、上门服务 "请问地址是哪里?"

业务信息(根据目的追问)

信息项 适用场景 追问方式
Details 具体事项描述 "能具体说说是什么事吗?"
KeyPoints 推销、活动、通知 "有什么需要特别强调的点吗?"
SpecialNeeds 预约、服务 "有什么特殊要求或注意事项吗?"
PeopleCount 预约用餐、活动 "请问几个人?"
Duration 咨询、调查 "大概需要多长时间?"

备用信息(可选)

信息项 说明 追问方式
ContactName 被叫方称呼 "请问对方怎么称呼?"
AltPhone 备用电话 "有备用联系电话吗?"
Notes 其他备注 "还有其他需要注意的吗?"

信息收集策略

按场景智能追问

预约类(预约位子、预约安装、预约服务)

已了解:{Who},{What}
追问:
1. 请问预约什么时间?
2. 请问预约在哪个地点?(如不明确)
3. 请问几个人/需要什么服务?
4. 有什么特殊要求吗?

推销/活动类(推销产品、活动通知、促销推广)

已了解:{Who},{What}
追问:
1. 请问是什么产品/活动?
2. 有什么核心卖点或优惠吗?
3. 活动时间是多久?
4. 希望客户怎么参与?(下单/到店/链接)

咨询类(解答问题、确认信息、回访)

已了解:{Who},{What}
追问:
1. 请问具体想咨询/确认什么?
2. 有什么参考资料吗?(如需要)
3. 大概需要聊多久?

提醒类(还款提醒、预约提醒、到期提醒)

已了解:{Who},{What}
追问:
1. 请问提醒的具体事项是什么?
2. 关键时间节点是?
3. 如果对方没接电话怎么处理?(短信/再打)

关怀类(问候家人、客户回访)

已了解:{Who},{What}
追问:
1. 请问对方怎么称呼?
2. 有什么特别想聊的话题吗?
3. 需要了解什么信息吗?

健康关怀类(问候身体状况)

已了解:{Who},{What}
追问(后端可能要求):
1. 基础病史:对方有什么基础疾病吗?
2. 用药情况:最近在吃什么药吗?
3. 家属联系方式:有其他家属联系方式吗?

一次追问多个问题

为减少对话轮次,采用批量追问策略:

用户:帮我给蜀九香打个电话预约位子

助手:好的,我帮您预约蜀九香。请补充以下信息:
1. 预约什么时间?(比如:今天晚上7点)
2. 几位用餐?
3. 有什么特殊要求吗?(包间、靠窗等)

已知信息复用

如果对话上下文中已包含信息,不要重复追问:

用户:帮我给我爸打电话问下身体怎么样,电话是138xxxx

助手:好的,帮您给父亲打电话问候身体。
请问有什么特别想问的吗?比如最近的睡眠、饮食?

✅ 步骤 3:信息确认(必须)

⚠️ 重要:在调用外呼接口前,必须向用户展示确认卡片并获得明确同意。

收集完毕后,展示确认卡片:

📞 外呼确认

对象:{Who}({ContactName})
电话:{Phone}
目的:{What}

详细信息:
• 时间:{When}
• 地点:{Where}
• 具体事项:{Details}
• 特殊要求:{SpecialNeeds}

⚠️ 以下信息将发送到 Yanxi AI 外呼服务(京东言犀平台):
• 电话号码:{Phone}
• 对话内容:{对话摘要}

确认拨打?(回复"确认"或"取消")

用户确认后才可进入下一步。如果用户取消,则终止流程。


🚀 步骤 4:调用外呼接口

构建请求参数

{
  "phone": "18033009923",
  "messages": [
    "用户: 帮我给蜀九香打个电话预约位子",
    "助手: 好的,请补充以下信息:\n1. 预约什么时间?\n2. 几位用餐?\n3. 有什么特殊要求吗?",
    "用户: 今天晚上7点,4个人,要个包间"
  ]
}

messages 说明:

  • 包含用户与助手之间的完整对话上下文
  • 后端根据上下文生成 prompt
  • 格式为字符串数组:"角色: 内容"

执行调用

cd ~/.openclaw/skills/yanxi-aicall
./scripts/make-call.sh --phone "{电话}" --messages '["用户: ...", "助手: ...", "用户: ..."]'

🔄 步骤 5:处理返回结果

返回格式

成功响应:

{
  "code": "10000",
  "result": "成功",
  "data": "12331@e561a4397b2a402488f2-638cd593f315"
}

失败响应:

{
  "code": "190001",
  "result": "风控校验不通过不能外呼,风控拦截信息:1001涉政"
}

code 说明

code 说明 处理方式
10000 成功 告知用户,返回 data 中的 request_id
190001 风控拦截 不再重试,告知用户风控原因
其他 失败 根据 result 提示用户

风控拦截处理

当 code 为 190001 时,表示被风控系统拦截:

{
  "code": "190001",
  "result": "风控校验不通过不能外呼,风控拦截信息:1001涉政"
}

此时告知用户:

外呼被风控拦截:{result}
请更换通话内容或联系管理员。

注意:风控拦截后不要重试,直接结束流程。

其他失败处理

当 code 为其他值时,根据 result 或 message 字段判断原因:

缺少必填参数(code: "430004"):

{
  "code": "430004",
  "message": "外呼缺少场景必填参数: [\"基础病史\",\"用药情况\",\"家属联系方式\"]"
}

此时追问用户缺失的参数:

还需要补充以下信息:
1. 基础病史:对方有什么基础疾病吗?
2. 用药情况:最近在吃什么药吗?
3. 家属联系方式:有其他家属联系方式吗?

用户补充后,更新 messages 并重新调用。

系统异常(code: "130003"):

{
  "code": "130003",
  "message": "调用业务系统异常"
}

此时提示用户稍后重试。


📊 步骤 6:查询通话结果

外呼发起后,可查询通话结果:

./scripts/query-call.sh --request-id "{request_id}"

话单位置:memory/yanxi-calls/costs.jsonl


📁 文件结构

yanxi-aicall/
├── SKILL.md                    # 本文件(工作流)
├── scripts/
│   ├── make-call.sh            # 执行外呼
│   └── query-call.sh           # 查询结果
├── references/
│   └── api-reference.md        # API 文档
└── memory/
    └── yanxi-calls/

🔄 泛化能力

本 skill 不预设场景类型,通过以下方式实现泛化:

  1. 通用信息框架:Who/What/Phone 为核心,时间/地点/详情为扩展
  2. 智能追问:根据外呼目的判断需要收集的信息
  3. 批量收集:一次追问多个问题,减少对话轮次
  4. 对话传递:完整 messages 传给后端,由后端理解场景
  5. 动态补充:根据后端返回的 result 动态追问缺失信息

适用场景包括但不限于:

  • 预约场景(预约位子、预约安装)
  • 推销场景(活动推广、产品营销)
  • 咨询场景(解答问题、确认信息)
  • 提醒场景(还款提醒、预约提醒)
  • 关怀场景(问候家人、客户回访)
  • 其他任意外呼需求

⚙️ 配置

前置要求

本 skill 需要以下工具:

  • curl - HTTP 客户端(用于 API 请求)
  • jq - JSON 处理器(用于解析响应)

环境变量(必需)

变量名 必需 说明 默认值
YANXI_API_KEY ✓ API 密钥(申请地址见下方) -
YANXI_BASE_URL - API 地址 https://yanxi-ai-api.jd.com

配置方式

推荐:环境变量(更安全)

# 添加到 ~/.zshrc 或 ~/.bashrc
export YANXI_API_KEY="your-api-key"

# 可选:自定义 API 地址
export YANXI_BASE_URL="https://yanxi-ai-api.jd.com"

备选:配置文件

# 创建配置目录
mkdir -p ~/.openclaw/secrets

# 创建配置文件(注意设置权限)
cat > ~/.openclaw/secrets/yanxi.json << 'EOF'
{
  "api_key": "your-api-key",
  "base_url": "https://yanxi-ai-api.jd.com"
}
EOF

# 必须设置权限,防止其他用户读取
chmod 600 ~/.openclaw/secrets/yanxi.json

API Key 申请

  1. 访问:https://yanxi-aigc-uat.jd.com/jimi/mine/api-center
  2. 登录京东账号
  3. 创建 API Key

内部测试环境

如果是京东内部用户,可使用测试环境:

export YANXI_BASE_URL="http://pre-yanxi-ai-api.jd.local"

注意:测试环境仅供内部开发测试使用,生产环境请使用默认地址。


🔒 数据安全建议

凭据安全

  1. 优先使用环境变量:避免将 API Key 存储在文件中
  2. 文件权限:如果使用配置文件,务必设置 chmod 600
  3. 不要提交到代码仓库:将 yanxi.json 添加到 .gitignore

隐私保护

  1. 定期清理日志:删除 memory/yanxi-calls/ 目录下的文件
  2. 最小权限原则:只收集必要的外呼信息
  3. 敏感信息:避免在对话中传递健康、金融等敏感信息,除非用户明确同意

本地日志

以下文件包含 PII(电话号码、对话内容):

  • memory/yanxi-calls/requests.jsonl - 外呼请求记录
  • memory/yanxi-calls/costs.jsonl - 通话日志

用户可随时删除这些文件以清除历史记录。


📚 更多参考

  • API 详细文档:references/api-reference.md