输入指示器与在线状态教程

intermediate
## 什么是输入指示器 输入指示器(Typing Indicators)就是你在聊天软件中看到的"对方正在输入…"提示。当 OpenClaw 智能体收到你的消息并开始处理时,它会在聊天界面显示这个提示,让你知道它正在工作。 ``` 你:帮我写一个 Docker Compose 配置 智能体:[正在输入...] ← 这就是输入指示器 ``` 没有输入指示器的话,你发完消息后会看到一片空白,不知道智能体是在处理还是卡住了。 ## 输入指示器的工作原理 OpenClaw 的输入指示器工作流程: ``` 1. 用户发送消息 ↓ 2. Gateway 收到消息 ↓ 3. 向渠道发送"正在输入"信号 ← 开始显示 ↓ 4. 调用 AI 模型生成回复 ↓ 5. (如果处理时间长)定期刷新"正在输入"信号 ↓ 6. 回复发送完成 ↓ 7. "正在输入"信号自动消失 ← 停止显示 ``` ### 为什么需要定期刷新? 大多数聊天平台的输入指示器有**超时机制**——如果一段时间内没有新的"正在输入"信号,指示器会自动消失。例如: - WhatsApp:约 25 秒超时 - Telegram:约 5 秒超时 - Discord:约 10 秒超时 OpenClaw 会在处理过程中**定期发送**输入指示器信号,确保在整个处理期间都显示"正在输入"。 ## 配置输入指示器 ### 全局配置 在 `openclaw.json` 中配置: ```json { "typingIndicators": { "enabled": true } } ``` ### 按渠道配置 不同渠道可以单独配置: ```json { "channels": { "telegram": { "typingIndicators": true }, "whatsapp": { "typingIndicators": true }, "discord": { "typingIndicators": true } } } ``` ### 禁用输入指示器 某些场景下你可能想禁用输入指示器: ```json { "typingIndicators": { "enabled": false } } ``` 禁用的理由可能包括: - 减少 API 调用次数(某些渠道对输入指示器有频率限制) - 不想让用户知道智能体正在处理(静默模式) - 调试时减少日志噪音 ## 什么是在线状态 在线状态(Presence)是指智能体在聊天平台上显示的状态信息,比如"在线"、"离线"、"忙碌"等。 ``` 智能体头像旁边的绿点 → 在线 智能体头像旁边的灰点 → 离线 ``` ### 在线状态的作用 - 让用户知道智能体是否可用 - 在群组中显示智能体的活跃状态 - 提供自定义状态消息(如"正在维护中") ## 在线状态配置 ### 基本配置 ```json { "presence": { "enabled": true, "status": "online" } } ``` ### 状态类型 | 状态值 | 显示效果 | 适用场景 | |--------|---------|---------| | `online` | 在线(绿色) | 正常运行 | | `idle` | 空闲(黄色) | Gateway 运行但无活跃会话 | | `dnd` | 勿扰(红色) | 维护期间 | | `offline` | 离线(灰色) | Gateway 停止 | ### 自定义状态消息 部分渠道支持自定义状态文本: ```json { "presence": { "enabled": true, "status": "online", "statusMessage": "随时为你服务 🤖" } } ``` ## 各渠道支持差异 不同渠道对输入指示器和在线状态的支持程度不同: ### 输入指示器支持 | 渠道 | 支持 | 说明 | |------|------|------| | WhatsApp | ✅ 完整支持 | 显示"正在输入…",需定期刷新 | | Telegram | ✅ 完整支持 | 显示"正在输入…",约 5 秒超时需刷新 | | Discord | ✅ 完整支持 | 显示"Bot 正在输入…" | | WebChat | ✅ 完整支持 | 通过 WebSocket 实时显示 | | 微信 | ❌ 不支持 | 微信 API 不提供输入指示器接口 | | QQ | ❌ 不支持 | QQ Bot API 不提供此功能 | | 飞书 | ⚠️ 有限支持 | 仅在单聊中支持 | | Slack | ✅ 完整支持 | 显示"Bot is typing…" | ### 在线状态支持 | 渠道 | 支持 | 说明 | |------|------|------| | Discord | ✅ 完整支持 | 支持在线/空闲/勿扰/离线 + 自定义状态 | | Telegram | ⚠️ 有限 | 仅显示"最近在线"时间 | | WhatsApp | ⚠️ 有限 | 仅显示"在线"或"最后上线时间" | | Slack | ✅ 完整支持 | 支持自定义状态文本和 emoji | | WebChat | ✅ 完整支持 | 可自定义显示 | | 微信 | ❌ 不支持 | 微信不显示 Bot 在线状态 | | QQ | ❌ 不支持 | QQ Bot 无在线状态概念 | ## 实用配置示例 ### 场景一:全渠道最佳体验 为所有支持的渠道启用输入指示器和在线状态: ```json { "typingIndicators": { "enabled": true }, "presence": { "enabled": true, "status": "online", "statusMessage": "AI 助手在线中" } } ``` ### 场景二:Discord 专属配置 Discord 对 Bot 状态支持最完整: ```json { "channels": { "discord": { "typingIndicators": true, "presence": { "status": "online", "statusMessage": "输入 /help 查看帮助" } } } } ``` ### 场景三:静默模式 不显示任何状态信息,适合后台自动化场景: ```json { "typingIndicators": { "enabled": false }, "presence": { "enabled": false } } ``` ## 常见问题 ### 输入指示器一直显示怎么办? 如果"正在输入"一直不消失,可能是: 1. **模型响应超时**:检查模型 API 是否正常 2. **Gateway 卡住**:重启 Gateway(`openclaw gateway restart`) 3. **渠道 API 异常**:检查渠道连接状态(`openclaw channels status`) ### 为什么微信和 QQ 不支持输入指示器? 这是平台 API 的限制。微信和 QQ 的 Bot API 没有提供发送输入指示器的接口。这不是 OpenClaw 的问题,而是平台本身不支持。 ### 输入指示器会消耗 API 配额吗? 发送输入指示器信号会消耗少量的渠道 API 调用次数,但通常可以忽略不计。如果你的渠道 API 配额非常紧张,可以考虑禁用。 ### 在线状态和 Gateway 运行状态有关系吗? 是的。当 Gateway 停止运行时,智能体的在线状态会自动变为"离线"(在支持的渠道上)。Gateway 重新启动后,状态会恢复为配置的值。 ## 小结 - 输入指示器让用户知道智能体正在处理,提升交互体验 - 在线状态显示智能体的可用性,支持自定义消息 - 各渠道支持程度不同,Discord 和 WebChat 支持最完整 - 微信和 QQ 由于平台限制不支持这些功能 - 建议在所有支持的渠道上启用输入指示器 #输入指示器 #在线状态 #Presence #用户体验 #龙虾技能库