名称: clawdtalk-client
版本: 2.0.0
描述: ClawdTalk — 为 Clawdbot 提供语音通话、短信和 AI 任务
元数据: {"clawdbot":{"emoji":"📞","primaryEnv":"CLAWDTALK_API_KEY","homepage":"https://github.com/team-telnyx/clawdtalk-client","requires":{"env":["CLAWDTALK_API_KEY"],"bins":["bash","node","jq","python3"],"config":["skill-config.json","~/.openclaw/openclaw.json","~/.clawdbot/clawdbot.json"]}}}
⚠️ 首次设置? 请先阅读本目录下的
SETUP.md文件。它将引导你完成完整的配置流程。
为 Clawdbot 提供语音通话、短信和 AI 任务。通过电话呼叫你的机器人、发送短信,或运行自主的多步骤外联活动——这一切都由 ClawdTalk 驱动。
信任声明: 使用此技能时,语音转录、短信内容和任务数据将被发送到 clawdtalk.com(由 Telnyx 运营)。仅在你信任此服务处理你的对话数据时才安装。
| 端点 | 使用者 | 发送的数据 |
|---|---|---|
https://clawdtalk.com (WebSocket) |
ws-client.js |
语音转录、工具结果、对话状态 |
https://clawdtalk.com/v1/* |
telnyx_api.py |
任务状态、事件、计划的通话/短信、助手配置 |
http://127.0.0.1:<端口> |
ws-client.js |
转录的语音(仅限本地网关) |
https://raw.githubusercontent.com/team-telnyx/clawdtalk-client/... |
update.sh |
无(仅下载) |
setup.sh 会读取网关配置以提取连接详情;经确认后,它会添加一个语音代理并将 sessions_send 添加到 gateway.tools.allow。skill-config.json 中——使用环境变量 CLAWDTALK_API_KEY 或 ${CLAWDTALK_API_KEY} 引用以避免明文存储。init 命令会根据任务名称自动生成一个标识符(小写,空格替换为连字符)。
每个接受标识符的命令(setup-agent、save-memory、complete)都必须使用完全相同的标识符。
标识符不匹配 = 代理未链接 = 前端看不到计划的事件。
# 执行 init 后,务必确认标识符:
python scripts/telnyx_api.py list-state
# 输出示例:find-window-washing-contractors: Find window washing contractors [running]
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 复制粘贴这个。切勿缩写。
服务器不会自动更新计划步骤或任务状态。 这是你作为机器人的职责。如果你不更新步骤并完成任务,UI 将永远显示“运行中”,且所有步骤都显示“待处理”。
对于每个任务,你必须:
1. 更新计划步骤 — 将每个步骤标记为 in_progress → completed(或 failed)
2. 记录事件 — 每次重要操作后
3. 轮询完成状态 — 检查计划的通话/短信是否完成
4. 完成任务 — 将运行标记为 succeeded 或 failed
5. 清理 — 任务结束时移除所有轮询的 cron 作业
UI 会精确反映你告知它的内容。你不更新,屏幕就不会更新。
每次重要操作成功后,必须立即使用 save-memory 或 append-memory 进行持久化。 前端从服务器内存读取数据。如果你不保存,它就不会显示。仅使用 log-event 是不够的。
规则:如果你做了某事,就把它保存到记忆。没有例外。不要“我稍后再做”。现在就做。
示例(安排短信):
# 1. 安排短信
python scripts/telnyx_api.py schedule-sms $AID "$TO" "$FROM" "$DATETIME" "$MESSAGE" $MID $RID $STEP_ID
# 2. 立即保存到记忆
python scripts/telnyx_api.py append-memory "$SLUG" "scheduled_events" \
'{"event_id": "<id>", "type": "sms", "to": "<to>", "message": "<msg>", "scheduled_at": "<dt>", "step_id": "<step>"}'
# 3. 然后记录事件
python scripts/telnyx_api.py log-event $MID $RID custom "Scheduled SMS event_id=<id>" $STEP_ID
跳过第 2 步是导致“前端什么也不显示”问题的首要原因。
在完成或失败任何步骤后,你必须检查任务是否应该被完成或标记为失败。 当任务实际已完成或死亡时,切勿让其停留在“运行中”状态。
规则:每次步骤变更后,问自己:这个任务完成了吗?
步骤完成 →
├── 成功?
│ ├── 所有步骤都完成? → 完成任务 (update-run succeeded)
│ ├── 还有更多步骤? → 继续下一个步骤
│ └── 只剩下验证步骤? → 设置轮询 cron 作业
└── 失败?
├── 可恢复(重试/重新安排)? → 重试
└── 不可恢复? → 立即标记任务失败:
1. update-step <step_id> failed
2. log-event error "Failed: <reason>" <step_id>
3. save-memory "$SLUG" "error_<step_id>" '{"error": "...", "recoverable": false}'
4. update-run $MID $RID failed
5. save-memory "$SLUG" "result" '{"status": "failed", "reason": "...", "failed_step": "..."}'
6. 清理所有轮询的 cron 作业
任务实际已完成或死亡却仍停留在“运行中”状态是一个错误。用户看到后会认为工作仍在进行。
┌──────────────┐ ┌──────────────────┐ ┌──────────────┐
│ 你(机器人) │────▶│ ClawdTalk 服务器 │────▶│ Telnyx API │
│ │ │ (开发/生产) │ │ (云端) │
│ telnyx_api.py│ │ 本地数据库 + 代理 │ │ 执行通话/短信 │
│ │ │ 到 Telnyx │ │ │
└──────────────┘ └──────────────────┘ └──────────────┘
| 文件 | 用途 |
|---|---|
scripts/telnyx_api.py |
用于所有任务/助手/事件操作的 CLI 工具 |
scripts/connect.sh |
用于入站语音呼叫路由的 WebSocket 客户端 |
skill-config.json |
API 密钥和服务器 URL |
.missions_state.json |
活跃任务的本地状态跟踪 |
.connect.log |
WebSocket 连接日志 |
每个实体存在于两个地方,拥有不同的 ID:
- 本地数据库 ID — ClawdTalk 服务器返回的 ID(例如 3df24dde-...)
- Telnyx ID — Telnyx API 内部使用的 ID
脚本始终使用本地 ID。你无需担心 Telnyx ID。
./setup.sh
setup.sh会读取你的网关配置以提取连接详情,将语音代理添加到agents.list,并(经确认后)将sessions_send添加到gateway.tools.allow。网关配置位于~/.openclaw/openclaw.json或~/.clawdbot/clawdbot.json。
./scripts/connect.sh startWebSocket 客户端将呼叫路由到网关的主代理会话,提供对记忆、工具和上下文的完全访问。
./scripts/connect.sh start # 启动连接
./scripts/connect.sh stop # 停止
./scripts/connect.sh status # 检查状态
让机器人呼叫你或他人:
./scripts/call.sh # 呼叫你的电话
./scripts/call.sh "嘿,最近怎么样?" # 带问候语的呼叫
./scripts/call.sh --to +15551234567 # 呼叫外部号码*
./scripts/call.sh --to +15551234567 "你好!" # 带问候语的外部呼叫
./scripts/call.sh status <call_id> # 检查呼叫状态
./scripts/call.sh end <call_id> # 结束呼叫
*外部呼叫需要付费账户和专用号码。AI 在呼叫外部号码时将处于隐私模式(不会透露你的私人信息)。
发送和接收短信:
./scripts/sms.sh send +15551234567 "你好!"
./scripts/sms.sh list
./scripts/sms.sh conversations
对于需要完全跟踪、状态持久化、重试和对话分析的复杂多步骤任务,请使用基于 Python 的任务 API。
必需:Python 3.7+、CLAWDTALK_API_KEY 环境变量。可选设置 CLAWDTALK_API_URL 以覆盖默认端点(默认为 https://clawdtalk.com/v1)。
python scripts/telnyx_api.py check-key # 验证设置
每次重要操作后,你必须保存进度。 如果会话崩溃或重启,未保存的工作将丢失。
始终保存到两者:
1. 本地记忆 (.missions_state.json) - 快速,重启后保留
2. 事件 API (云端) - 永久审计跟踪,本地文件丢失后仍保留
| 操作 | 保存记忆 | 记录事件 |
|---|---|---|
| 网络搜索返回结果 | append-memory | log-event (tool_call) |
| 找到承包商/线索 | append-memory | log-event (custom) |
| 创建助手 | save-memory | log-event (custom) |
| 分配电话号码 | save-memory | log-event (custom) |
| 安排通话/短信 | append-memory | log-event (custom) |
| 通话完成 | save-memory | log-event (custom) |
| 获取报价/见解 | save-memory | log-event (custom) |
| 做出决定 | save-memory | log-event (message) |
| 步骤开始 | save-memory | update-step (in_progress) + log-event (step_started) |
| 步骤完成 | save-memory | update-step (completed) + log-event (step_completed) |
| 步骤失败 | save-memory | update-step (failed) + log-event (error) |
| 发生错误 | save-memory | log-event (error) |
# 保存单个值
python scripts/telnyx_api.py save-memory "<slug>" "key" '{"data": "value"}'
# 追加到列表(适用于收集多个项目)
python scripts/telnyx_api.py append-memory "<slug>" "contractors" '{"name": "ABC 公司", "phone": "+1234567890"}'
# 检索记忆
python scripts/telnyx_api.py get-memory "<slug>" # 获取所有记忆
python scripts/telnyx_api.py get-memory "<slug>" "key" # 获取特定键
# 记录事件(step_id 是必需的 - 将事件链接到计划步骤)
python scripts/telnyx_api.py log-event <mission_id> <run_id> <type> "<summary>" <step_id> '[payload_json]'
# 事件类型:tool_call, custom, message, error, step_started, step_completed
# step_id: 使用你计划中的 step_id(例如 "research", "setup", "calls")
# 如果事件不属于特定步骤,使用 "-"
此技能有两种模式:完整任务(跟踪、多步骤)和简单通话(一次性,无任务开销)。选择正确的模式。
示例:
- “为我找到芝加哥的窗户清洁承包商,打电话给他们并协商价格”
- “联系此列表中的所有线索并安排演示”
- “呼叫 10 个气象站,找出最热的一个”
对于简单通话,只需:
# 重用或创建一个助手
python scripts/telnyx_api.py list-assistants --name=<相关名称>
# 安排通话
python scripts/telnyx_api.py schedule-call <assistant_id> <to> <from> <datetime> <mission_id> <run_id>
# 轮询完成状态
python scripts/telnyx_api.py get-event <assistant_id> <event_id>
# 获取见解
python scripts/telnyx_api.py get-insights <conversation_id>
无需任务、运行或计划。保持简单。
脚本自动管理 .missions_state.json 中的状态。这能在重启后保留,并支持多个并发任务。
python scripts/telnyx_api.py list-state # 列出所有活跃任务
python scripts/telnyx_api.py get-state "find-window-washing-contractors" # 获取特定任务的状态
python scripts/telnyx_api.py remove-state "find-window-washing-contractors" # 从状态中移除任务
python scripts/telnyx_api.py create-mission "简短描述性名称" "任务的完整描述"
保存返回的 mission_id — 你将在所有后续调用中需要它。
python scripts/telnyx_api.py create-run <mission_id> '{"original_request": "确切的用户请求", "context": "任何相关上下文"}'
保存返回的 run_id。
在执行之前,概述你的计划:
python scripts/telnyx_api.py create-plan <mission_id> <run_id> '[
{"step_id": "step_1", "description": "在线研究承包商", "sequence": 1},
{"step_id": "step_2", "description": "为通话创建语音代理", "sequence": 2},
{"step_id": "step_3", "description": "安排与每个承包商的通话", "sequence": 3},
{"step_id": "step_4", "description": "监控通话完成情况", "sequence": 4},
{"step_id": "step_5", "description": "分析结果并选择最佳选项", "sequence": 5}
]'
python scripts/telnyx_api.py update-run <mission_id> <run_id> running
使用 init 命令一步创建任务、运行、计划并设置状态:
python scripts/telnyx_api.py init "寻找窗户清洁承包商" "在芝加哥寻找承包商,打电话给他们,协商价格" "用户想要窗户清洁报价" '[
{"step_id": "research", "description": "在线查找承包商", "sequence": 1},
{"step_id": "setup", "description": "创建语音代理", "sequence": 2},
{"step_id": "calls", "description": "安排并进行通话", "sequence": 3},
{"step_id": "analyze", "description": "分析结果", "sequence": 4}
]'
如果已存在同名任务,此命令也会自动恢复。
⚠️ 执行 init 后,立即运行 list-state 并复制确切的标识符。在所有后续命令中使用它。