🔄 卡若AI 同步 2026-03-13 15:42 | 更新:水桥平台对接、卡木、运营中枢、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 11 个
This commit is contained in:
@@ -97,8 +97,44 @@ SMS: [PUBG] code: 697881. Valid for 3 minutes.
|
||||
|
||||
---
|
||||
|
||||
## 六、参考资料与扩展
|
||||
## 六、付费接码平台(SMSOnline · 推荐用于注册)
|
||||
|
||||
- **流程史记**:`运营中枢/参考资料/giffgaff发短信收短信_流程史记.md`(giffgaff 发短信到临时号时的操作与保号)。
|
||||
- **接码操作说明**:`运营中枢/参考资料/receivesms收短信_操作.md`(命令行用法摘要)。
|
||||
- **扩展**:若需按「发件人名字」或关键词过滤短信,可在本目录下扩展脚本(解析 `from-link` 或短信内容),并在本 SKILL 更新「要获取的网站短信类型」说明。
|
||||
### 6.1 平台信息
|
||||
|
||||
- **网站**:[premium.smsonline.cloud](https://premium.smsonline.cloud) / [smsonline.io](https://smsonline.io)
|
||||
- **API 参考**:`运营中枢/参考资料/smsonline_付费接码平台_API参考.md`
|
||||
- **API Key**:`2w9hva2mzvbubw5sj3vqwkuv9ib43ku29okhwyragkx4o2kgzw7eb9oy8pjh4gc3`
|
||||
|
||||
### 6.2 脚本与用法
|
||||
|
||||
```bash
|
||||
cd /Users/karuo/Documents/个人/卡若AI/运营中枢/scripts
|
||||
|
||||
# 查看支持的国家
|
||||
python3 smsonline_receive_sms.py --list-countries
|
||||
|
||||
# 查看支持的服务(Soul、bilibili 等)
|
||||
python3 smsonline_receive_sms.py --list-services
|
||||
|
||||
# 查看某国+某服务的可用号码与价格
|
||||
python3 smsonline_receive_sms.py --country-id 1 --service-id 2 --products
|
||||
|
||||
# 完整流程:取号 → 轮询收验证码(最多 2 分钟)→ 超时自动退费
|
||||
python3 smsonline_receive_sms.py --country-id 1 --service-id 2
|
||||
```
|
||||
|
||||
### 6.3 防扣费规则(强制)
|
||||
|
||||
1. 轮询 get-sms 最多 **120 秒**,超时 → 自动调 `change-status(status=4)` 取消退费。
|
||||
2. 收到验证码并使用后 → 调 `change-status(status=3)` 确认完成。
|
||||
3. 不重复获取同一号:先取消旧订单再取新号。
|
||||
4. 首次调试加 `&test=1` 不扣费。
|
||||
|
||||
---
|
||||
|
||||
## 七、参考资料与扩展
|
||||
|
||||
- **giffgaff 流程史记**:`运营中枢/参考资料/giffgaff发短信收短信_流程史记.md`
|
||||
- **receivesms 免费接码**:`运营中枢/参考资料/receivesms收短信_操作.md`
|
||||
- **SMSOnline 付费接码 API**:`运营中枢/参考资料/smsonline_付费接码平台_API参考.md`
|
||||
- **扩展**:若需按「发件人名字」或关键词过滤短信,可在本目录下扩展脚本。
|
||||
|
||||
@@ -39,10 +39,10 @@ PANEL_Y = VH - PANEL_H - 30
|
||||
FPS = 8
|
||||
CURRENT_SEED = "default"
|
||||
|
||||
GLASS_TOP = (12, 15, 26, 248)
|
||||
GLASS_BTM = (8, 10, 20, 252)
|
||||
GLASS_BORDER = (255, 255, 255, 26)
|
||||
GLASS_INNER = (255, 255, 255, 12)
|
||||
GLASS_TOP = (10, 12, 22, 230)
|
||||
GLASS_BTM = (6, 8, 16, 230)
|
||||
GLASS_BORDER = (255, 255, 255, 18)
|
||||
GLASS_INNER = (255, 255, 255, 8)
|
||||
|
||||
SOUL_GREEN = (0, 210, 106)
|
||||
ACCENT_A = (0, 200, 140, 255)
|
||||
|
||||
74
开发文档/10、使用手册/OpenClaw控制台/01-系统概述.md
Normal file
74
开发文档/10、使用手册/OpenClaw控制台/01-系统概述.md
Normal file
@@ -0,0 +1,74 @@
|
||||
## 01 系统概述
|
||||
|
||||
> [OpenClaw 控制台使用手册](README.md) > 系统概述
|
||||
|
||||
---
|
||||
|
||||
## 1.1 OpenClaw/Cloud Boot 在本机中的角色
|
||||
|
||||
OpenClaw 控制台可以理解为一层「本地 AI 网关 + 控制台」:
|
||||
|
||||
- 向上:对接飞书、Cloud Boot(卡若消息中枢)、浏览器等「前端入口」。
|
||||
- 中间:作为 **统一网关**,负责会话管理、通道路由、使用量统计。
|
||||
- 向下:调用本机 **Ollama** 或云端 API(如 v0,间接使用 Claude 等模型)。
|
||||
|
||||
在你当前的配置中:
|
||||
|
||||
- 主模型为 **`ollama/qwen2.5:3b`**(本机小模型),Provider 为 `ollama`。
|
||||
- 网关监听在本机 **18789 端口**。
|
||||
- 所有「通过 OpenClaw 的对话」最终都会落到本机 Ollama 或其他你配置的 Provider。
|
||||
|
||||
---
|
||||
|
||||
## 1.2 核心组件与数据流
|
||||
|
||||
整体数据流可以简化为三层:
|
||||
|
||||
1. **入口层(Client)**
|
||||
- 浏览器打开 `http://127.0.0.1:18789/config` 的控制面板进行对话。
|
||||
- 飞书/Cloud Boot 通过 `feishu_openclaw_bridge.py` 转发消息到网关。
|
||||
|
||||
2. **网关层(OpenClaw Gateway)**
|
||||
- 进程来源:Docker 容器或 `openclaw gateway start` 命令。
|
||||
- 端口:`18789`。
|
||||
- 职责:
|
||||
- 管理会话与对话历史;
|
||||
- 按配置选择 Provider(如 `ollama`、`v0`)和具体模型;
|
||||
- 记录使用情况(tokens、费用等,视 Provider 能力而定)。
|
||||
|
||||
3. **模型层(Providers)**
|
||||
- 本机 Provider:`ollama`(`http://localhost:11434`),模型如 `qwen2.5:3b`。
|
||||
- 备选 Provider:`v0` 等云端 API(如启用)。
|
||||
|
||||
---
|
||||
|
||||
## 1.3 配置文件与持久化位置
|
||||
|
||||
关键配置写在本机用户目录下:
|
||||
|
||||
| 项目 | 位置 | 说明 |
|
||||
|------|------|------|
|
||||
| OpenClaw 主配置 | `~/.openclaw/openclaw.json` | 包含网关端口、默认 Provider、默认模型等。 |
|
||||
| clawdbot 源码 | `开发/8、小工具/clawdbot` | 包含 UI 前端、飞书桥接脚本等。 |
|
||||
| 飞书桥接脚本 | `feishu_openclaw_bridge.py` | 将飞书消息转成 OpenClaw 可理解的请求。 |
|
||||
|
||||
网关重启不会丢失配置,因为主要设置保存在上述配置文件中。
|
||||
|
||||
---
|
||||
|
||||
## 1.4 与卡若AI/Cloud Boot 的关系
|
||||
|
||||
- 卡若AI 是「大脑与规则集合」;
|
||||
- OpenClaw 是「本地网关与路由器」;
|
||||
- Cloud Boot/飞书机器人是「对外入口」。
|
||||
|
||||
典型链路可以描述为:
|
||||
|
||||
> 飞书消息/Cloud Boot → `feishu_openclaw_bridge.py` → OpenClaw 网关(18789) → Provider(Ollama/qwen2.5:3b 或 v0)→ 返回结果 → 飞书/Cloud Boot 展示
|
||||
|
||||
---
|
||||
|
||||
上一篇:无 | 下一篇:[02 快速入门](02-快速入门.md)
|
||||
|
||||
返回 [章节目录](README.md)
|
||||
|
||||
77
开发文档/10、使用手册/OpenClaw控制台/02-快速入门.md
Normal file
77
开发文档/10、使用手册/OpenClaw控制台/02-快速入门.md
Normal file
@@ -0,0 +1,77 @@
|
||||
## 02 快速入门
|
||||
|
||||
> [OpenClaw 控制台使用手册](README.md) > 快速入门
|
||||
|
||||
---
|
||||
|
||||
## 2.1 前置条件检查
|
||||
|
||||
在使用前,请确保:
|
||||
|
||||
| 项目 | 要求 | 检查方法 |
|
||||
|------|------|----------|
|
||||
| 操作系统 | macOS(当前本机环境) | 无需额外操作 |
|
||||
| clawdbot 仓库 | 已存在 | 路径为 `开发/8、小工具/clawdbot` |
|
||||
| 网关 | 已经在 18789 端口运行(推荐) | 访问 `http://127.0.0.1:18789/health` 应返回 200 |
|
||||
| Ollama | 已安装并运行 | 终端执行 `curl -s http://localhost:11434/api/tags` 能返回模型列表 |
|
||||
|
||||
---
|
||||
|
||||
## 2.2 启动网关与控制面板
|
||||
|
||||
有两种常见方式:
|
||||
|
||||
### 方式一:使用已有网关(推荐)
|
||||
|
||||
1. 确认网关已启动(Docker 或其他方式)。
|
||||
2. 在终端或 Spotlight 中打开控制面板:
|
||||
|
||||
```bash
|
||||
open http://127.0.0.1:18789/config
|
||||
```
|
||||
|
||||
3. 浏览器中应出现 OpenClaw 控制台首页。
|
||||
|
||||
### 方式二:使用 openclaw 命令启动网关
|
||||
|
||||
当 18789 端口没有服务时,可以手动启动:
|
||||
|
||||
```bash
|
||||
openclaw gateway start
|
||||
# 或指定端口(如需):
|
||||
openclaw gateway --port 18789
|
||||
```
|
||||
|
||||
然后浏览器访问:
|
||||
|
||||
```text
|
||||
http://127.0.0.1:18789/config
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2.3 验证 AI 模型是否可用
|
||||
|
||||
1. 在浏览器中打开控制面板。
|
||||
2. 新建一个会话,发送一条简单消息,例如:
|
||||
- “你现在使用的是哪个模型?”
|
||||
3. 若返回正常回答且使用量统计中可以看到 `provider: ollama`、`model: ollama/qwen2.5:3b`,说明当前本地模型工作正常。
|
||||
|
||||
如对模型有疑问,可在后续章节中查看「模型与 Provider 配置」。
|
||||
|
||||
---
|
||||
|
||||
## 2.4 常用地址速查
|
||||
|
||||
| 功能 | 地址 |
|
||||
|------|------|
|
||||
| 控制面板 | `http://127.0.0.1:18789/config` |
|
||||
| 健康检查 | `http://127.0.0.1:18789/health` |
|
||||
| 飞书桥接状态(若启用) | `http://127.0.0.1:8888/` |
|
||||
|
||||
---
|
||||
|
||||
上一篇:[01 系统概述](01-系统概述.md) | 下一篇:[03 界面与基础操作](03-界面与基础操作.md)
|
||||
|
||||
返回 [章节目录](README.md)
|
||||
|
||||
68
开发文档/10、使用手册/OpenClaw控制台/03-界面与基础操作.md
Normal file
68
开发文档/10、使用手册/OpenClaw控制台/03-界面与基础操作.md
Normal file
@@ -0,0 +1,68 @@
|
||||
## 03 界面与基础操作
|
||||
|
||||
> [OpenClaw 控制台使用手册](README.md) > 界面与基础操作
|
||||
|
||||
---
|
||||
|
||||
## 3.1 控制面板首页结构
|
||||
|
||||
打开 `http://127.0.0.1:18789/config` 后,主要区域通常包括:
|
||||
|
||||
| 区域 | 作用 |
|
||||
|------|------|
|
||||
| 左侧导航栏 | 切换「聊天」「概述」「频道」「会话」「技能」「配置」「日志」等模块。 |
|
||||
| 上方会话栏 | 显示当前选中的会话和快速切换入口。 |
|
||||
| 右侧主区域 | 展示聊天内容、使用统计、配置表单等。 |
|
||||
|
||||
不同版本 UI 会略有差异,但核心导航和模块名称基本一致。
|
||||
|
||||
---
|
||||
|
||||
## 3.2 聊天模块
|
||||
|
||||
1. 在左侧选择「聊天」或类似入口。
|
||||
2. 右侧主区域显示消息记录与输入框。
|
||||
3. 常用操作:
|
||||
- 输入消息并回车发送;
|
||||
- 重命名会话;
|
||||
- 在使用统计中查看当前会话的 Provider 与模型。
|
||||
|
||||
> 提示:如果你想确认当前对话走的是本地 Ollama,留意使用信息中的 `provider: ollama` 和 `model: ollama/qwen2.5:3b`。
|
||||
|
||||
---
|
||||
|
||||
## 3.3 配置模块(Models)
|
||||
|
||||
1. 左侧进入「配置」→「Models」(AI 模型配置与提供商)。
|
||||
2. 在这里你可以:
|
||||
- 查看当前默认 Provider 和默认模型;
|
||||
- 为不同 Provider(如 `ollama`、`v0`)配置 baseUrl、API Key 等;
|
||||
- 设置主模型与备用模型。
|
||||
|
||||
详细的模型配置说明见「04 模型与 Provider 配置」。
|
||||
|
||||
---
|
||||
|
||||
## 3.4 频道与技能模块(与 Cloud Boot/飞书相关)
|
||||
|
||||
1. 「频道」模块:配置不同来源的消息通道,例如飞书、Cloud Boot 等。
|
||||
2. 「技能」模块:启用或禁用某些技能脚本、查看技能状态。
|
||||
|
||||
这些模块与 `feishu_openclaw_bridge.py` 和 Cloud Boot 的集成配合使用,具体操作在「05 飞书与 Cloud Boot 集成」中说明。
|
||||
|
||||
---
|
||||
|
||||
## 3.5 日志与排查入口
|
||||
|
||||
1. 在左侧选择「日志」或类似入口,可以查看网关运行时的错误和请求记录。
|
||||
2. 当出现模型调用失败、Provider 报错等问题时,优先查看这里的最新日志行,以快速定位是:
|
||||
- Provider 配置问题;
|
||||
- 网络或 API Key 问题;
|
||||
- 本机 Ollama 未启动等。
|
||||
|
||||
---
|
||||
|
||||
上一篇:[02 快速入门](02-快速入门.md) | 下一篇:[04 模型与 Provider 配置](04-模型与Provider配置.md)
|
||||
|
||||
返回 [章节目录](README.md)
|
||||
|
||||
81
开发文档/10、使用手册/OpenClaw控制台/04-模型与Provider配置.md
Normal file
81
开发文档/10、使用手册/OpenClaw控制台/04-模型与Provider配置.md
Normal file
@@ -0,0 +1,81 @@
|
||||
## 04 模型与 Provider 配置
|
||||
|
||||
> [OpenClaw 控制台使用手册](README.md) > 模型与 Provider 配置
|
||||
|
||||
---
|
||||
|
||||
## 4.1 当前默认模型与 Provider(本机状态)
|
||||
|
||||
根据 `clawdbot/references/Claw中Ollama配置说明.md`,当前本机默认配置为:
|
||||
|
||||
| 项 | 值 |
|
||||
|----|----|
|
||||
| 主模型 | `ollama/qwen2.5:3b` |
|
||||
| Provider | 内置 `ollama`(本机 `http://localhost:11434`) |
|
||||
| 认证方式 | `auth.profiles["ollama:local"]`,`mode: "api_key"` |
|
||||
| 配置文件 | `~/.openclaw/openclaw.json` |
|
||||
|
||||
本机已存在模型:`qwen2.5:1.5b`、`qwen2.5:3b`、`nomic-embed-text:latest`,默认用 `qwen2.5:3b`。
|
||||
|
||||
---
|
||||
|
||||
## 4.2 在控制面板中切换 Ollama 模型
|
||||
|
||||
1. 打开 `http://127.0.0.1:18789/config`。
|
||||
2. 左侧进入「配置」→「Models」。
|
||||
3. 在「代理默认模型」处选择或填写其中一种:
|
||||
- `ollama/qwen2.5:3b`(当前默认)
|
||||
- `ollama/qwen2.5:1.5b`
|
||||
- `ollama/nomic-embed-text:latest`(一般用于嵌入,不建议当主对话模型)
|
||||
4. 保存配置,新建的会话将使用新模型。
|
||||
|
||||
> 注意:如果在会话中没有立刻感知到变化,请新建会话再测试。
|
||||
|
||||
---
|
||||
|
||||
## 4.3 确保 Ollama 服务运行
|
||||
|
||||
如果模型调用失败,首先确认 Ollama 是否在本机运行:
|
||||
|
||||
```bash
|
||||
curl -s http://localhost:11434/api/tags
|
||||
```
|
||||
|
||||
预期结果:返回一个包含模型列表的 JSON。如果无返回或报错:
|
||||
|
||||
- 尝试从启动项中打开 Ollama 应用;
|
||||
- 或在菜单中选择「Open Ollama」并确认服务已启动。
|
||||
|
||||
---
|
||||
|
||||
## 4.4 配置 v0/Claude 作为备选 Provider(可选)
|
||||
|
||||
当你希望在本地模型之外,保留一个云端模型作为后备时,可以添加 v0 Provider:
|
||||
|
||||
1. 在控制面板「配置」→「Models」中新增一个 Provider:
|
||||
- 基础 URL:`https://api.v0.dev/v1`
|
||||
- 模型 ID:`v0-1.5-md` 或 `v0-1.5-lg`(不要再使用 `v0-1.0-md`)
|
||||
- API 密钥:你的 v0 secret。
|
||||
2. 将该 Provider 标记为 **fallback**,而主 Provider 仍保持为 `ollama` 的 `qwen2.5:3b`。
|
||||
|
||||
数据流将变为:
|
||||
|
||||
- 正常情况下优先使用本机 `ollama/qwen2.5:3b`。
|
||||
- 当本机调用失败时,由网关自动尝试 fallback Provider(如 v0,对接 Claude 等)。
|
||||
|
||||
---
|
||||
|
||||
## 4.5 常见配置错误与排查
|
||||
|
||||
| 症状 | 可能原因 | 排查建议 |
|
||||
|------|----------|----------|
|
||||
| 所有对话都报超时或 500 | Ollama 未启动,或 baseUrl 配错 | 使用 `curl` 测本机接口;检查 `~/.openclaw/openclaw.json` 中的 Provider 配置。 |
|
||||
| 仅部分会话报错 | 某个 Provider 或模型配置不完整 | 在「配置 → Models」中检查该 Provider 的 baseUrl、API Key、模型 ID。 |
|
||||
| 使用量统计中 Provider 一直是 unknown | 会话未正确记录 Provider 字段 | 升级 OpenClaw 版本或检查日志,确认请求是否被中间层改写。 |
|
||||
|
||||
---
|
||||
|
||||
上一篇:[03 界面与基础操作](03-界面与基础操作.md) | 下一篇:[05 飞书与 Cloud Boot 集成](05-飞书与CloudBoot集成.md)
|
||||
|
||||
返回 [章节目录](README.md)
|
||||
|
||||
74
开发文档/10、使用手册/OpenClaw控制台/05-飞书与CloudBoot集成.md
Normal file
74
开发文档/10、使用手册/OpenClaw控制台/05-飞书与CloudBoot集成.md
Normal file
@@ -0,0 +1,74 @@
|
||||
## 05 飞书与 Cloud Boot 集成
|
||||
|
||||
> [OpenClaw 控制台使用手册](README.md) > 飞书与 Cloud Boot 集成
|
||||
|
||||
---
|
||||
|
||||
## 5.1 集成目标
|
||||
|
||||
本部分说明 Cloud Boot/飞书 发送的一条消息,如何通过本机的 OpenClaw 网关与 Ollama 模型完成应答:
|
||||
|
||||
> 飞书/Cloud Boot → `feishu_openclaw_bridge.py` → OpenClaw 网关(18789)→ Provider(Ollama/qwen2.5:3b 或其他)→ 返回结果 → 飞书/Cloud Boot 展示
|
||||
|
||||
这样,外部看到的是 Cloud Boot/飞书机器人,实际「大脑」运行在本机 OpenClaw + Ollama 上。
|
||||
|
||||
---
|
||||
|
||||
## 5.2 关键组件与文件
|
||||
|
||||
| 组件 | 位置 | 作用 |
|
||||
|------|------|------|
|
||||
| 飞书桥接脚本 | `开发/8、小工具/clawdbot/feishu_openclaw_bridge.py` | 接收飞书回调,转发到 OpenClaw 网关。 |
|
||||
| 一键启动脚本 | `开发/8、小工具/clawdbot/start_feishu_frpc.sh` | 启动飞书桥接服务与 frpc。 |
|
||||
| frpc 配置 | `开发/8、小工具/clawdbot/frp_tunnel/client/frpc.toml` | 配置内网穿透,将本机服务暴露给 Cloud Boot/外网。 |
|
||||
| OpenClaw 网关 | `http://127.0.0.1:18789/` | 统一对接 Provider 的网关。 |
|
||||
|
||||
---
|
||||
|
||||
## 5.3 启动飞书桥接与 frpc
|
||||
|
||||
在本机终端执行:
|
||||
|
||||
```bash
|
||||
cd /Users/karuo/Documents/开发/8、小工具/clawdbot
|
||||
./start_feishu_frpc.sh
|
||||
```
|
||||
|
||||
脚本会完成:
|
||||
|
||||
1. 启动一个 FastAPI/Uvicorn 服务,运行 `feishu_openclaw_bridge.py`;
|
||||
2. 启动 `frpc`,根据 `frpc.toml` 将本机端口映射到外网,以便 Cloud Boot/飞书可以访问。
|
||||
|
||||
> 注意:首次使用前需要根据你的服务器与域名情况,正确填写 `frpc.toml` 与飞书应用配置(回调 URL 等)。
|
||||
|
||||
---
|
||||
|
||||
## 5.4 消息流转示意
|
||||
|
||||
以一条来自飞书的消息为例:
|
||||
|
||||
1. 用户在飞书/Cloud Boot 中发送消息;
|
||||
2. 飞书服务器将消息 POST 到你配置的回调 URL;
|
||||
3. 该 URL 实际指向 `feishu_openclaw_bridge.py` 提供的 HTTP 接口;
|
||||
4. 桥接脚本将消息转换为 OpenClaw 支持的请求格式(会话 ID、角色、文本等);
|
||||
5. 请求发送到本机 `http://127.0.0.1:18789` 的 OpenClaw 网关;
|
||||
6. 网关根据当前模型配置,将请求路由到 Provider(默认是 `ollama/qwen2.5:3b`);
|
||||
7. 得到回复后,网关将结果返回给桥接脚本,再由桥接脚本回传给飞书;
|
||||
8. 最终,用户在 Cloud Boot/飞书中看到 AI 的回复。
|
||||
|
||||
---
|
||||
|
||||
## 5.5 常见问题与排查建议
|
||||
|
||||
| 症状 | 可能原因 | 排查建议 |
|
||||
|------|----------|----------|
|
||||
| 飞书回调 500 或超时 | 桥接服务未启动或端口被防火墙拦截 | 确认 `start_feishu_frpc.sh` 是否运行;检查本机 8888 端口和 frpc 日志。 |
|
||||
| 飞书提示签名错误 | 飞书应用密钥或校验 Token 配置不一致 | 对照飞书开发者后台,检查 `feishu_openclaw_bridge.py` 中的配置。 |
|
||||
| Cloud Boot 能打开界面但无回复 | OpenClaw 18789 未运行或 Provider 报错 | 访问 `http://127.0.0.1:18789/health`;查看 OpenClaw 日志与模型配置。 |
|
||||
|
||||
---
|
||||
|
||||
上一篇:[04 模型与 Provider 配置](04-模型与Provider配置.md) | 下一篇:[06 常见问题(FAQ)](06-常见问题.md)
|
||||
|
||||
返回 [章节目录](README.md)
|
||||
|
||||
77
开发文档/10、使用手册/OpenClaw控制台/06-常见问题.md
Normal file
77
开发文档/10、使用手册/OpenClaw控制台/06-常见问题.md
Normal file
@@ -0,0 +1,77 @@
|
||||
## 06 常见问题(FAQ)
|
||||
|
||||
> [OpenClaw 控制台使用手册](README.md) > 常见问题(FAQ)
|
||||
|
||||
---
|
||||
|
||||
## 6.1 控制面板打不开怎么办?
|
||||
|
||||
**现象**:访问 `http://127.0.0.1:18789/config` 显示无法连接。
|
||||
|
||||
可能原因与处理:
|
||||
|
||||
| 原因 | 处理方式 |
|
||||
|------|----------|
|
||||
| 网关未启动 | 按「02 快速入门」中的方式启动网关:`openclaw gateway start` 或启动相关 Docker 容器。 |
|
||||
| 端口被占用或改动 | 确认实际网关端口(例如配置为其他端口),按实际端口访问;或调整为 18789。 |
|
||||
| 本机防火墙限制 | 临时关闭或放行本地 18789 端口后重试。 |
|
||||
|
||||
---
|
||||
|
||||
## 6.2 对话返回 500 或报错信息
|
||||
|
||||
**现象**:在控制面板中对话报 500,或 Cloud Boot 上看到「系统错误」。
|
||||
|
||||
排查顺序:
|
||||
|
||||
1. 查看 OpenClaw 的「日志」模块,找到最近一条错误。
|
||||
2. 根据错误信息判断是 Provider 报错还是网关自身异常。
|
||||
3. 若是 v0 相关错误:
|
||||
- 检查 baseUrl 是否为 `https://api.v0.dev/v1`;
|
||||
- 检查模型 ID 是否为 `v0-1.5-md` 或 `v0-1.5-lg`;
|
||||
- 检查 API Key 是否有效,Billing/配额是否正常。
|
||||
4. 若是 Ollama 报错:
|
||||
- 使用 `curl -s http://localhost:11434/api/tags` 确认服务与模型是否正常。
|
||||
|
||||
---
|
||||
|
||||
## 6.3 模型似乎没变,仍然是旧模型
|
||||
|
||||
**现象**:在「配置 → Models」中修改了默认模型,但对话中感觉没变化。
|
||||
|
||||
处理方式:
|
||||
|
||||
- 修改默认模型后,**新建一个会话** 测试;
|
||||
- 在使用统计或调试信息中确认 `model:` 字段是否为预期值;
|
||||
- 如仍无变化,检查 `~/.openclaw/openclaw.json` 中是否有覆盖默认配置的字段。
|
||||
|
||||
---
|
||||
|
||||
## 6.4 飞书/Cloud Boot 收不到回复
|
||||
|
||||
**现象**:Cloud Boot/飞书消息发送成功,但长时间没有任何回复。
|
||||
|
||||
排查建议:
|
||||
|
||||
1. 确认 `start_feishu_frpc.sh` 是否已执行,桥接服务是否在运行;
|
||||
2. 在浏览器访问 `http://127.0.0.1:8888/`(若有提供状态页)查看桥接健康状态;
|
||||
3. 检查 frpc 日志,确认外网穿透是否正常;
|
||||
4. 检查飞书开发者后台中配置的回调 URL 与签名设置是否与本地配置匹配;
|
||||
5. 在 OpenClaw 日志中查看是否有收到对应请求。
|
||||
|
||||
---
|
||||
|
||||
## 6.5 如何确认当前到底用的是本机小模型还是云端模型?
|
||||
|
||||
- 在控制面板中查看会话的使用信息:
|
||||
- 若显示 `provider: ollama` 且 `model: ollama/qwen2.5:3b`,则在用本机小模型。
|
||||
- 若显示 v0 或其他云端 Provider,则为云端模型。
|
||||
- 也可以直接在对话中提问,例如:
|
||||
- “你当前使用的 Provider 和模型名称是什么?”
|
||||
|
||||
---
|
||||
|
||||
上一篇:[05 飞书与 Cloud Boot 集成](05-飞书与CloudBoot集成.md) | 下一篇:无
|
||||
|
||||
返回 [章节目录](README.md)
|
||||
|
||||
33
开发文档/10、使用手册/OpenClaw控制台/README.md
Normal file
33
开发文档/10、使用手册/OpenClaw控制台/README.md
Normal file
@@ -0,0 +1,33 @@
|
||||
## OpenClaw 控制台使用手册
|
||||
|
||||
**版本**:v1.0 | **更新日期**:2026年3月 | **适用环境**:本机 macOS + Docker/OpenClaw 网关 + Ollama
|
||||
|
||||
> 本手册介绍本地 OpenClaw 控制台(Cloud Boot)的工作原理、启动方式、模型配置、与飞书/Cloud Boot 的集成和常见问题。
|
||||
|
||||
---
|
||||
|
||||
## 章节目录
|
||||
|
||||
| 编号 | 章节 | 文件 | 说明 |
|
||||
|------|------|------|------|
|
||||
| 01 | 系统概述 | [01-系统概述.md](01-系统概述.md) | OpenClaw 的角色、组件与整体架构 |
|
||||
| 02 | 快速入门 | [02-快速入门.md](02-快速入门.md) | 启动网关与控制台、基本健康检查 |
|
||||
| 03 | 界面与基础操作 | [03-界面与基础操作.md](03-界面与基础操作.md) | 控制台主要页面与常用操作说明 |
|
||||
| 04 | 模型与 Provider 配置 | [04-模型与Provider配置.md](04-模型与Provider配置.md) | Ollama、本地模型与 v0/云端模型配置 |
|
||||
| 05 | 飞书与 Cloud Boot 集成 | [05-飞书与CloudBoot集成.md](05-飞书与CloudBoot集成.md) | 飞书桥接脚本、frpc 与 Cloud Boot 调用链路 |
|
||||
| 06 | 常见问题(FAQ) | [06-常见问题.md](06-常见问题.md) | 启动失败、模型报错、HTTP 500 等排查 |
|
||||
|
||||
---
|
||||
|
||||
## 系统访问入口与支持
|
||||
|
||||
- 控制面板入口:`http://127.0.0.1:18789/config`
|
||||
- 健康检查:`http://127.0.0.1:18789/health`
|
||||
- 本地项目路径:`开发/8、小工具/clawdbot`
|
||||
|
||||
如需扩展本手册(新增章节/截图),请遵守 `usage-manual-writer` 的目录与命名规范。
|
||||
|
||||
---
|
||||
|
||||
返回 [使用手册总目录](../README.md)
|
||||
|
||||
24
开发文档/10、使用手册/README.md
Normal file
24
开发文档/10、使用手册/README.md
Normal file
@@ -0,0 +1,24 @@
|
||||
## 使用手册总目录
|
||||
|
||||
> 本目录汇总卡若AI 相关系统的使用手册入口。
|
||||
|
||||
**版本**:v1.0.0 | **更新日期**:2026年3月
|
||||
|
||||
---
|
||||
|
||||
## 系统列表
|
||||
|
||||
| 系统 | 手册目录 | 说明 |
|
||||
|------|----------|------|
|
||||
| OpenClaw 控制台(Cloud Boot) | [OpenClaw控制台/README.md](OpenClaw控制台/README.md) | 本地 AI 网关与控制台,用于统一管理模型与通道(含 Cloud Boot/飞书桥接)。 |
|
||||
|
||||
---
|
||||
|
||||
## 手册编写规范(摘要)
|
||||
|
||||
- 每个系统使用独立子目录(如 `OpenClaw控制台/`)。
|
||||
- 每个目录必须包含 `README.md` 作为章节索引。
|
||||
- 章节文件统一使用 `{两位数}-{章节名}.md` 命名,如 `01-系统概述.md`。
|
||||
- 内容中优先使用表格描述配置项、字段和状态说明。
|
||||
- 截图统一放在上级目录的 `截图/` 中,通过相对路径引用。
|
||||
|
||||
158
运营中枢/scripts/smsonline_receive_sms.py
Normal file
158
运营中枢/scripts/smsonline_receive_sms.py
Normal file
@@ -0,0 +1,158 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
SMSOnline 付费接码自动化脚本:取号 → 轮询收验证码 → 超时自动退号。
|
||||
用法:
|
||||
python3 smsonline_receive_sms.py --country 中国 --service Soul
|
||||
python3 smsonline_receive_sms.py --country-id 1 --service-id 2
|
||||
python3 smsonline_receive_sms.py --list-countries
|
||||
python3 smsonline_receive_sms.py --list-services
|
||||
"""
|
||||
import json
|
||||
import sys
|
||||
import time
|
||||
import urllib.request
|
||||
import argparse
|
||||
|
||||
API_KEY = "2w9hva2mzvbubw5sj3vqwkuv9ib43ku29okhwyragkx4o2kgzw7eb9oy8pjh4gc3"
|
||||
BASE = "https://smsonline.io/api/v1/virtual-number"
|
||||
TIMEOUT_SEC = 120
|
||||
POLL_INTERVAL = 5
|
||||
PROXY = None # 如需代理:"http://127.0.0.1:7897"
|
||||
|
||||
|
||||
def api(endpoint, **params):
|
||||
params["apiKey"] = API_KEY
|
||||
qs = "&".join(f"{k}={v}" for k, v in params.items())
|
||||
url = f"{BASE}/{endpoint}?{qs}"
|
||||
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
|
||||
if PROXY:
|
||||
handler = urllib.request.ProxyHandler({"https": PROXY, "http": PROXY})
|
||||
opener = urllib.request.build_opener(handler)
|
||||
else:
|
||||
opener = urllib.request.build_opener()
|
||||
with opener.open(req, timeout=20) as r:
|
||||
data = json.loads(r.read().decode("utf-8"))
|
||||
if data.get("status") == -1:
|
||||
print(f"API ERROR: {data}", file=sys.stderr)
|
||||
return data
|
||||
|
||||
|
||||
def list_countries():
|
||||
data = api("get-countries")
|
||||
if isinstance(data, dict) and "data" in data:
|
||||
for c in data["data"]:
|
||||
print(f" {c.get('id', '?')}\t{c.get('name', '?')}")
|
||||
else:
|
||||
print(json.dumps(data, indent=2, ensure_ascii=False))
|
||||
|
||||
|
||||
def list_services():
|
||||
data = api("get-services")
|
||||
if isinstance(data, dict) and "data" in data:
|
||||
for s in data["data"]:
|
||||
print(f" {s.get('id', '?')}\t{s.get('name', '?')}")
|
||||
else:
|
||||
print(json.dumps(data, indent=2, ensure_ascii=False))
|
||||
|
||||
|
||||
def get_products(country_id, service_id):
|
||||
data = api("get-products", countryId=country_id, serviceId=service_id)
|
||||
if isinstance(data, dict) and "data" in data:
|
||||
for p in data["data"]:
|
||||
print(f" operator={p.get('operatorId','?')} price={p.get('price','?')} stock={p.get('count','?')}")
|
||||
else:
|
||||
print(json.dumps(data, indent=2, ensure_ascii=False))
|
||||
return data
|
||||
|
||||
|
||||
def buy_number(country_id, service_id, operator_id):
|
||||
data = api("buy-service", countryId=country_id, serviceId=service_id, operatorId=operator_id)
|
||||
return data
|
||||
|
||||
|
||||
def get_sms(order_id):
|
||||
data = api("get-sms", id=order_id)
|
||||
return data
|
||||
|
||||
|
||||
def cancel_order(order_id):
|
||||
data = api("change-status", id=order_id, status=4)
|
||||
return data
|
||||
|
||||
|
||||
def finish_order(order_id):
|
||||
data = api("change-status", id=order_id, status=3)
|
||||
return data
|
||||
|
||||
|
||||
def receive_sms_flow(country_id, service_id, operator_id=None):
|
||||
"""完整流程:买号→轮询→超时退号。"""
|
||||
if not operator_id:
|
||||
prod = api("get-products", countryId=country_id, serviceId=service_id)
|
||||
if isinstance(prod, dict) and "data" in prod and prod["data"]:
|
||||
operator_id = prod["data"][0].get("operatorId", 0)
|
||||
price = prod["data"][0].get("price", "?")
|
||||
print(f"选择运营商 {operator_id},价格 {price}")
|
||||
else:
|
||||
print("无可用运营商/库存", file=sys.stderr)
|
||||
return None, None
|
||||
print(f"正在购买号码(country={country_id}, service={service_id}, operator={operator_id})…")
|
||||
buy = buy_number(country_id, service_id, operator_id)
|
||||
order_id = buy.get("data", {}).get("id") or buy.get("id")
|
||||
number = buy.get("data", {}).get("number") or buy.get("number")
|
||||
if not order_id:
|
||||
print(f"购买失败:{buy}", file=sys.stderr)
|
||||
return None, None
|
||||
print(f"号码:{number} 订单:{order_id}")
|
||||
print(f"请在目标网站用该号码发验证码,轮询中(最多 {TIMEOUT_SEC} 秒)…", flush=True)
|
||||
start = time.time()
|
||||
code = None
|
||||
while time.time() - start < TIMEOUT_SEC:
|
||||
time.sleep(POLL_INTERVAL)
|
||||
elapsed = int(time.time() - start)
|
||||
sms = get_sms(order_id)
|
||||
sms_text = sms.get("data", {}).get("sms") or sms.get("sms")
|
||||
sms_code = sms.get("data", {}).get("code") or sms.get("code")
|
||||
if sms_text or sms_code:
|
||||
code = sms_code or sms_text
|
||||
print(f"\n收到验证码!({elapsed}s)")
|
||||
print(f" 号码:{number}")
|
||||
print(f" 验证码/短信:{code}")
|
||||
finish_order(order_id)
|
||||
print(" 订单已标记完成。")
|
||||
return number, code
|
||||
print(f" 等待中 {elapsed}s…", flush=True)
|
||||
print(f"\n超时 {TIMEOUT_SEC}s 未收到验证码,正在取消退费…")
|
||||
cancel_order(order_id)
|
||||
print(" 订单已取消(退费)。")
|
||||
return number, None
|
||||
|
||||
|
||||
def main():
|
||||
p = argparse.ArgumentParser(description="SMSOnline 付费接码")
|
||||
p.add_argument("--list-countries", action="store_true")
|
||||
p.add_argument("--list-services", action="store_true")
|
||||
p.add_argument("--country-id", type=int)
|
||||
p.add_argument("--service-id", type=int)
|
||||
p.add_argument("--operator-id", type=int, default=None)
|
||||
p.add_argument("--products", action="store_true")
|
||||
p.add_argument("--proxy", default=None, help="如 http://127.0.0.1:7897")
|
||||
args = p.parse_args()
|
||||
global PROXY
|
||||
if args.proxy:
|
||||
PROXY = args.proxy
|
||||
if args.list_countries:
|
||||
list_countries()
|
||||
elif args.list_services:
|
||||
list_services()
|
||||
elif args.products and args.country_id and args.service_id:
|
||||
get_products(args.country_id, args.service_id)
|
||||
elif args.country_id and args.service_id:
|
||||
receive_sms_flow(args.country_id, args.service_id, args.operator_id)
|
||||
else:
|
||||
p.print_help()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
159
运营中枢/参考资料/smsonline_付费接码平台_API参考.md
Normal file
159
运营中枢/参考资料/smsonline_付费接码平台_API参考.md
Normal file
@@ -0,0 +1,159 @@
|
||||
# SMSOnline 付费接码平台 · API 参考文档
|
||||
|
||||
> 平台:premium.smsonline.cloud / smsonline.io
|
||||
> API Key:`2w9hva2mzvbubw5sj3vqwkuv9ib43ku29okhwyragkx4o2kgzw7eb9oy8pjh4gc3`
|
||||
> 更新:2026-03-13
|
||||
> 来源:[smsonline.io/api-docs](https://smsonline.io/api-docs) + [premium.smsonline.cloud](https://premium.smsonline.cloud)
|
||||
|
||||
---
|
||||
|
||||
## 一、Base URL
|
||||
|
||||
```
|
||||
https://smsonline.io/api/v1
|
||||
```
|
||||
|
||||
> 若 premium 域名可访问,则用 `https://premium.smsonline.cloud/api/v1`(接口一致)。
|
||||
> 当前 premium 域名在本机 SSL 不通,备选用 smsonline.io。
|
||||
|
||||
---
|
||||
|
||||
## 二、鉴权
|
||||
|
||||
所有请求带 `apiKey` 参数(GET query string):
|
||||
|
||||
```
|
||||
?apiKey=你的KEY
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、完整接口列表
|
||||
|
||||
### 1. 获取支持的国家
|
||||
|
||||
```
|
||||
GET /virtual-number/get-countries?apiKey=KEY
|
||||
```
|
||||
|
||||
返回:国家列表(含 countryId、国家名)。
|
||||
|
||||
### 2. 获取支持的服务(App/网站)
|
||||
|
||||
```
|
||||
GET /virtual-number/get-services?apiKey=KEY
|
||||
```
|
||||
|
||||
返回:服务列表(含 serviceId、服务名,如 Soul、bilibili、WhatsApp 等)。
|
||||
|
||||
### 3. 获取产品(某国家+某服务的可用号码/价格)
|
||||
|
||||
```
|
||||
GET /virtual-number/get-products?apiKey=KEY&countryId=ID&serviceId=ID
|
||||
```
|
||||
|
||||
参数:
|
||||
- `countryId`:国家 ID(从接口 1 获取)
|
||||
- `serviceId`:服务 ID(从接口 2 获取)
|
||||
|
||||
返回:可用运营商列表、价格、库存。
|
||||
|
||||
### 4. 购买号码(获取一个临时号码)
|
||||
|
||||
```
|
||||
GET /virtual-number/buy-service?apiKey=KEY&countryId=ID&serviceId=ID&operatorId=ID
|
||||
```
|
||||
|
||||
参数:
|
||||
- `countryId`:国家 ID
|
||||
- `serviceId`:服务 ID
|
||||
- `operatorId`:运营商 ID(从接口 3 获取)
|
||||
|
||||
返回:分配的号码、订单 ID(后续取短信/退号用)。
|
||||
|
||||
**测试模式**:在 URL 末尾加 `&test=1`,不扣费、不分配真实号。
|
||||
|
||||
### 5. 获取短信验证码
|
||||
|
||||
```
|
||||
GET /virtual-number/get-sms?apiKey=KEY&id=订单ID
|
||||
```
|
||||
|
||||
参数:
|
||||
- `id`:买号时返回的订单 ID
|
||||
|
||||
返回:
|
||||
- 若已收到短信 → 返回验证码内容
|
||||
- 若未收到 → 返回等待状态(需轮询)
|
||||
|
||||
**轮询策略**:每 5 秒请求一次,最多轮询 2 分钟(24 次)。
|
||||
|
||||
### 6. 修改订单状态(取消/完成/退号)
|
||||
|
||||
```
|
||||
GET /virtual-number/change-status?apiKey=KEY&id=订单ID&status=STATUS
|
||||
```
|
||||
|
||||
参数:
|
||||
- `id`:订单 ID
|
||||
- `status`:目标状态码
|
||||
- `3` = 已完成(确认使用,不退费)
|
||||
- `4` = 取消(未收到短信,退费)
|
||||
- `5` = 退款(出错退费)
|
||||
|
||||
**关键**:超过 2 分钟未收到验证码 → 调 `change-status` 传 `status=4` 取消退费。
|
||||
|
||||
---
|
||||
|
||||
## 四、完整使用流程(从取号到收码到退号)
|
||||
|
||||
```
|
||||
① get-countries → 拿 countryId(如中国=?)
|
||||
② get-services → 拿 serviceId(如 Soul=?)
|
||||
③ get-products → 拿 operatorId + 价格
|
||||
④ buy-service → 拿到号码 + 订单 id
|
||||
⑤ 用该号码在目标网站发送验证码
|
||||
⑥ 轮询 get-sms(每 5 秒一次,最多 2 分钟)
|
||||
├── 收到验证码 → 使用 → change-status(id, status=3) 确认完成
|
||||
└── 超时未收到 → change-status(id, status=4) 取消退费
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、防扣费规则(强制)
|
||||
|
||||
1. **2 分钟超时自动退号**:轮询 get-sms 最多 120 秒(24 次 × 5 秒间隔),超时未收到验证码 → 立即调 `change-status(status=4)` 取消。
|
||||
2. **收到验证码后确认**:验证码用完后调 `change-status(status=3)` 标记完成。
|
||||
3. **不重复获取同一个号**:每次 buy-service 只分配新号;若之前取过的号还在等待中,不要再 buy 新的(先取消旧的再取新号)。
|
||||
4. **测试先用 test 模式**:首次调试在 URL 加 `&test=1`,确认流程正确后再去掉。
|
||||
|
||||
---
|
||||
|
||||
## 六、充值方式
|
||||
|
||||
1. 登录 [premium.smsonline.cloud](https://premium.smsonline.cloud)(需翻墙/代理)。
|
||||
2. 进入账户页 → 充值/Top Up。
|
||||
3. 支持:加密货币(USDT/BTC 等)、信用卡、支付宝(视站点当前支持)。
|
||||
4. 充值后余额即时到账,通过 API 购买号码时自动扣除。
|
||||
|
||||
---
|
||||
|
||||
## 七、当前网络问题
|
||||
|
||||
- `premium.smsonline.cloud` 在本机(macOS + Clash TUN)SSL 握手失败,无法直连。
|
||||
- `smsonline.io` 主站 API 可访问,但你的 API Key 是 premium 站注册的,在主站不通用(提示 invalid key)。
|
||||
- **解决方案**:
|
||||
- 在浏览器里(已走 Clash 规则组)登录 premium 站确认 API Key 是否正确、是否已充值。
|
||||
- 或在 premium 站的「API」页面查看是否有另一个 Base URL。
|
||||
- 若 premium 站持续不通,可考虑联系客服确认 API 端点,或改用 smsonline.io 主站重新注册获取该站的 key。
|
||||
|
||||
---
|
||||
|
||||
## 八、脚本位置
|
||||
|
||||
- 自动化脚本:`运营中枢/scripts/smsonline_receive_sms.py`(待 API 连通后写入)
|
||||
- 接收短信 Skill:`02_卡人(水)/水桥_平台对接/接收短信/SKILL.md`(待更新)
|
||||
|
||||
---
|
||||
|
||||
*归位:运营中枢/参考资料 · 卡若AI*
|
||||
@@ -330,3 +330,4 @@
|
||||
| 2026-03-13 14:15:28 | 🔄 卡若AI 同步 2026-03-13 14:15 | 更新:卡木、运营中枢工作台 | 排除 >20MB: 11 个 |
|
||||
| 2026-03-13 14:17:49 | 🔄 卡若AI 同步 2026-03-13 14:17 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 |
|
||||
| 2026-03-13 14:27:42 | 🔄 卡若AI 同步 2026-03-13 14:27 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 |
|
||||
| 2026-03-13 14:45:12 | 🔄 卡若AI 同步 2026-03-13 14:45 | 更新:卡木、运营中枢工作台 | 排除 >20MB: 11 个 |
|
||||
|
||||
@@ -333,3 +333,4 @@
|
||||
| 2026-03-13 14:15:28 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-13 14:15 | 更新:卡木、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
|
||||
| 2026-03-13 14:17:49 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-13 14:17 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
|
||||
| 2026-03-13 14:27:42 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-13 14:27 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
|
||||
| 2026-03-13 14:45:12 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-13 14:45 | 更新:卡木、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
|
||||
|
||||
Reference in New Issue
Block a user