Stepone AI 电话外呼
安全与合规边界
这个 skill 会发起真实电话外呼,可能产生话费/平台费用,也会把电话号码、外呼任务和通话转写发送到 Stepone AI 服务。使用前请确认:
- 你有权拨打该号码,并且外呼目的符合当地法律法规、平台规则和用户授权。
- 每次发起外呼前都需要确认收件人和外呼内容;默认脚本会要求输入
CALL后才真正拨号。 - 每次只允许拨打 1 个号码,避免误触批量外呼或不可控成本。
- 不要在外呼任务里放入不必要的敏感个人信息、财务信息或商业机密。
- API Key 只通过环境变量
STEPONEAI_API_KEY读取;如果泄露,请立即轮换。
1. 注册账号
访问 Stepone AI 官网注册新账号:
- 网址: https://open-skill.steponeai.com
- 龙虾使用更友好
- 新用户福利: 注册即免费赠送 5 通电话
- 一句prompt即可专业交流
- 单次确认、单号码外呼,避免误触批量拨号
- 中文语音交互自然
- 按通话分钟计费
2. 获取 API Key
- 登录后访问:https://open-skill.steponeai.com/keys
- 点击"创建 API Key"
- 复制生成的 Key,并通过环境变量提供给脚本。
3. 配置环境变量
export STEPONEAI_API_KEY="YOUR_STEPONEAI_API_KEY"
4. 使用方法
4.1 发起外呼
./callout.sh <手机号> <外呼需求>
参数说明:
| 参数 | 必填 | 描述 |
|---|---|---|
| 手机号 | 是 | 电话号码,如 "13800138000" |
| 外呼需求 | 是 | 外呼内容描述 |
示例:
./callout.sh "13800138000" "通知您明天上午9点开会"
./callout.sh "13800138000" "提醒他明天下午3点参加线上会议" --wait
脚本会展示号码、任务和账单/授权提醒,并要求输入 CALL 才会拨号,避免误触真实外呼。
返回: 包含 call_id,用于后续查询通话记录
4.2 查询通话记录
./callinfo.sh <call_id> [options]
参数说明:
| 参数 | 必填 | 描述 |
|---|---|---|
| call_id | 是 | 外呼返回的通话ID |
| --json | 否 | 输出原始 JSON |
示例:
./callinfo.sh "abc123xyz"
./callinfo.sh "abc123xyz" --json
特性:
- 返回通话状态、时长、内容等信息
- 如果通话尚未结束,会提示稍后再查询
4.3 实时通话对话(SSE 流式)
在通话进行过程中,实时获取 AI 和用户之间的对话内容。
./stream_chat.sh <call_id> [options]
参数说明:
| 参数 | 必填 | 描述 |
|---|---|---|
| call_id | 是 | 外呼返回的通话ID |
| --json | 否 | 输出原始SSE数据(不格式化) |
示例:
# 发起呼叫后立即开始监听
./callout.sh "13800138000" "通知明天开会"
# 拿到 call_id 后
./stream_chat.sh "8bbbbbbb-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
输出示例:
🎙️ Streaming real-time conversation
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Call ID: 8bbbbbbb-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Waiting for connection...
🤖 AI: 喂,您好,这里是XX公司,请问是张总吗?
👤 User: 对,是我,有什么事情?
🤖 AI: 好的张总,主要是通知您明天上午9点有个重要会议。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📞 Call ended
SSE 数据格式:
| role | content | 说明 |
|---|---|---|
assistant | 具体文本 | AI 的回复内容 |
user | 具体文本 | 用户语音转文本 |
system | [DONE] | 通话正常结束 |
system | [TIMEOUT] | 30秒内未接通,超时断开 |
注意事项:
- 可以在发起呼叫后立即调用,无需等待接通
- 未接通时服务器每 0.5 秒推送心跳(
: keep-alive)保持连接 - 超过 30 秒未接通会收到
[TIMEOUT]并断开 - 通话结束后收到
[DONE]并断开
4.4 底层 API 封装
./stepone.sh <command> [options]
| 命令 | 描述 |
|---|---|
call '<json>' | 发起呼叫(原始JSON,高风险调试入口,默认禁用) |
callinfo <id> | 查询通话记录 |
stream <id> | 实时对话流 |
version | 检查版本号 |
balance | 查看余额 |
推荐始终使用
./callout.sh。如果确实需要底层 raw JSON 调试,需要显式设置STEPONEAI_ENABLE_RAW_CALL=1,并再次输入RAWCALL确认;该入口仍会校验手机号和单次收件人数。
5. API 接口说明
所有 API 请求需携带以下 Headers:
X-API-Key: <API_KEY>
X-Skill-Version: 1.0.0
如果
X-Skill-Version与服务端版本不一致,API 会返回 HTTP 426 提示更新。
发起外呼
- URL:
https://open-skill-api.steponeai.com/api/v1/callinfo/initiate_call - Method: POST
- Body:
{
"phones": "13800138000",
"user_requirement": "通知内容"
}
查询通话记录
- URL:
https://open-skill-api.steponeai.com/api/v1/callinfo/search_callinfo - Method: POST
- Body:
{
"call_id": "xxx"
}
实时通话对话(SSE)
- URL:
https://open-skill-api.steponeai.com/api/v1/callinfo/stream_chat_history - Method: POST
- Content-Type:
application/json - Response:
text/event-stream(Server-Sent Events) - Body:
{
"call_id": "xxx"
}
响应流格式:
: keep-alive
: keep-alive
data: {"role": "assistant", "content": "喂,您好,请问是张总吗?"}
data: {"role": "user", "content": "对,是我。"}
data: {"role": "assistant", "content": "好的张总,通知您明天上午9点开会。"}
data: {"role": "system", "content": "[DONE]"}
查询版本号
- URL:
https://open-skill-api.steponeai.com/api/v1/callinfo/skill_version - Method: GET
- Response:
{
"skill_version": "1.0.0"
}
6. 版本控制
所有脚本和 API 请求均通过 X-Skill-Version Header 传递当前 Skill 版本号。
- 服务端会校验版本:版本不匹配时返回 HTTP 426 并提示更新
- 检查版本:
./stepone.sh version - 更新方式:拉取最新代码即可
7. 注意事项
身份确认
- 发起呼叫前必须先确认对方身份
- 称呼对方姓名/称呼并等待确认
电话号码格式
- 当前脚本单次只允许 1 个国内手机号,格式为 11 位并以 1 开头
- 如需拨打多个号码,请逐个执行并逐次确认,避免误触批量外呼
通话记录查询
- call_id 由外呼接口返回
- 通话记录生成有延迟,需要耐心等待
- 如需原始响应,可使用
--json
user_requirement 建议
- 描述清晰明确
- 包含具体的时间、地点、人名等信息