openclaw 对接完飞书群机器人配置踩坑记:消息不回、Gateway 断开问题排查

openclaw 对接完飞书群机器人配置踩坑记:消息不回、Gateway 断开问题排查

前言

用 OpenClaw 配飞书机器人,踩了两个坑:群消息不回、Gateway 总是断开。排查了好一阵子,总算搞定了,记录一下希望能帮到遇到同样问题的朋友。


发现问题

飞书消息不回复

在飞书群里 @ 了机器人,完全没反应。一开始以为是网络不好或者机器人没上线,但状态显示明明是连接着的,这就奇怪了。

Gateway 频繁断开

每次改完配置跑 openclaw gateway restart,或者根本什么都没干,Gateway 说断就断。再想启动就报错,必须跑一遍 openclaw doctor --fix 重新安装才能用。太影响使用了。


查看原因

飞书机器人 ID 搞错了

翻日志看到这么一句:

receive events or callbacks through persistent connection only available in self-build & Feishu app 

查了一下,原来一开始配的那个 App ID(yyyyyyyyyyyyyy)是快捷版/小程序类型的飞书应用,这类不支持 WebSocket 长连接收消息。找运维要了正确的机器人 ID(xxxxxxxxxxxxxxxx),换上去果然就好了。

多机器人配置一直失败

想给运营 agent(yunying)单独配一个飞书机器人,试了很多次一直报"unknown channel id"。后来翻 OpenClaw 官方文档才发现,飞书多账号不是那么配的,得用 accounts 字段。

正确姿势:

{"channels":{"feishu":{"defaultAccount":"main","accounts":{"main":{"appId":"xxxxxxxxxxxxxxxx","appSecret":"abcdefghijklmnopqrstuvwxyz"},"yunying":{"appId":"yyyyyyyyyyyyyy","appSecret":"1234567890abcdef"}}}}}

然后 bindings 这么配:

{"bindings":[{"type":"route","agentId":"main","match":{"channel":"feishu","accountId":"main"}},{"type":"route","agentId":"yunying","match":{"channel":"feishu","accountId":"yunying"}}]}

Gateway 断开的原因

日志显示 Gateway 收到 SIGTERM 后正常关闭了,但 LaunchAgent 没自动重新加载。

后来才搞明白——我之前一直是跑 openclaw gateway 在前台启动,而不是用 LaunchAgent。虽然 LaunchAgent 配了 KeepAlive: true,但前台进程不受它管,断开后就死了,不会自动起来。


解决问题

飞书多账号配置

改完 ~/.openclaw/openclaw.json 的配置,重启 Gateway:

openclaw gateway restart 

两个机器人都连上了。日志能看出来:

feishu[yunying]: WebSocket client started feishu[main]: WebSocket client started 

Gateway 自动重启

简单说就是别跑 openclaw gateway,改用 LaunchAgent:

# 先停掉前台运行的 Gateway# 然后用 LaunchAgent 方式启动 openclaw gateway install openclaw gateway start 

以后 Gateway 就会受 LaunchAgent 管理,断开会自动重启,不用每次手动搞了。


踩过的坑

总结一下:

  1. 飞书多账号要用 accounts 字段配,别想着开多个渠道
  2. Gateway 一定要用 openclaw gateway start 启动,别直接跑 openclaw gateway

有其他问题欢迎评论区聊聊。

Read more

【Trae】如何使用Trae编译C++(附带MinGW)

【Trae】如何使用Trae编译C++(附带MinGW)

结果 先看结果 这是一道回文串题目,F5编译,控制台输入输出。 下载 * 下载Trae编译器,直接去官网下:https://www.trae.cn/ * 下载VSCode编译器,这个相信用Trae的各位都不陌生。https://code.visualstudio.com/ * 查看你的C盘,C:\Users\Administrator\.vscode\extensions路径下是否有extensions.json文件,如果没有,请将VSCode卸载后重装。 安装插件 在VSCode里安装“C/C++”插件。 这里需要在VSCode里安装的原因是C/C++插件在Trae里是搜不到的。 再次查看C:\Users\Administrator\.vscode\extensions路径,看看插件是否安装成功,且extensions.json文件里有这个插件。 关闭VSCode,打开Trae。 点击右上角头像-IDE设置 选择“从VSCode导入”,等待它导入插件,导入完成后点击查看一下,

By Ne0inhk
C++测试与调试:确保代码质量与稳定性

C++测试与调试:确保代码质量与稳定性

C++测试与调试:确保代码质量与稳定性 一、学习目标与重点 本章将深入探讨C++测试与调试的核心知识,帮助你确保代码的质量与稳定性。通过学习,你将能够: 1. 理解测试与调试的基本概念,掌握测试方法和工具 2. 学会使用单元测试框架,如Google Test和Catch2 3. 理解集成测试的重要性,确保系统的功能正确性 4. 学会使用调试工具,如GDB和Visual Studio调试器 5. 培养测试与调试思维,设计高质量的代码 二、测试的基本概念 2.1 测试的分类 测试可以分为以下几类: * 单元测试:测试单个函数或类的功能 * 集成测试:测试多个模块的集成功能 * 系统测试:测试整个系统的功能 * 验收测试:测试系统是否满足用户需求 * 性能测试:测试系统的性能指标 2.2 测试原则 测试应该遵循以下原则: * 测试应该尽可能早地进行 * 测试应该覆盖所有可能的场景 * 测试应该是自动化的

By Ne0inhk
Redis 核心数据结构:String 类型深度解析与 C++ 实战

Redis 核心数据结构:String 类型深度解析与 C++ 实战

Redis 核心数据结构:String 类型深度解析与 C++ 实战 前言 在当今数据驱动的世界里,Redis 以其卓越的性能和丰富的数据结构,已成为内存数据库领域的翘楚。无论是作为高速缓存、消息队列,还是分布式锁的实现方案,Redis 的身影无处不在。而在 Redis 提供的所有数据结构中,String 类型无疑是基石中的基石。它不仅是构建其他复杂结构的基础,其自身强大的命令集也足以应对各种复杂的业务场景。 本文将以广受欢迎的 C++ Redis 客户端库 redis-plus-plus 为实战工具,系统性地、由浅入深地剖析 Redis String 类型的核心命令。我们将从最基础的 SET 和 GET 操作讲起,逐步探索包括过期时间设置、条件更新、批量操作、子字符串处理以及原子计数器在内的各种高级用法。 本文旨在为您提供一份不仅包含“如何做”,更解释“为什么这么做”的详尽指南。我们将深入探讨 redis-plus-plus

By Ne0inhk
【C++藏宝阁】C++入门:命名空间(namespace)详解

【C++藏宝阁】C++入门:命名空间(namespace)详解

🌈个人主页:聆风吟 🔥系列专栏:C++藏宝阁 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 * 📚专栏订阅推荐 * 📋前言:为什么需要命名空间? * 一、命名空间的定义 * 二、命名空间的使用 * 三、命名空间的特性 * 3.1 命名空间的嵌套定义 * 3.2 命名空间的定义可以不连续 * 四、命名空间的本质:独立的作用域 * 4.1 命名空间是C++的一种作用域类型 * 4.2 命名空间作用域的特点 * 4.3 域作用限定符 `::` 的作用 * 4.4 编译器的查找规则 * 五、命名空间的价值 * 5.1 解决命名冲突 * 5.2 模块化组织代码 * 5.3

By Ne0inhk