OpenClaw中飞书机器人配置指南:如何让群消息免 @ 也能自动回复

用 OpenClaw 做飞书机器人时,默认配置下,群里的消息必须 @ 机器人 才能触发回复。这在很多场景下很不方便——如果希望机器人在群里"隐身"工作,不用 @ 就能自动监听和回复,需要额外配置。

本文记录我解决这个问题的完整过程,供同样踩坑的同学参考。


问题描述

现象:

  • 飞书群里 @ 机器人 → 正常回复 ✅
  • 飞书群里不 @ 机器人 → 没有任何反应 ❌

环境:

  • OpenClaw 框架
  • 飞书自建应用(机器人)
  • WebSocket 长连接模式

解决过程

第一步:修改 OpenClaw 配置

openclaw.json 中找到飞书渠道配置:

"channels":{"feishu":{"requireMention":false,...}}

requireMention 设为 false,让 OpenClaw 不再强制要求 @ 机器人。

但这还不够 ❌

第二步:申请飞书平台权限

修改 OpenClaw 配置后测试,发现消息依然收不到。

查日志发现:消息根本没有到达 OpenClaw——问题出在飞书平台层面

飞书默认只推送 @ 机器人 的消息到应用。如果要接收群里所有消息(不限于 @),需要在飞书开放平台申请一个敏感权限:

权限名称:im:message.group_msg(获取群组中所有消息)

第三步:在飞书开放平台申请权限

  1. 打开 飞书开放平台,进入你的应用
  2. 事件与回调事件配置接收消息 → 获取群组中所有信息(敏感权限) im:message.group_msg → 申请开通

第四步:验证效果

权限生效后,在群里发消息不用 @ 机器人,OpenClaw 就能正常收到并自动回复了 ✅


完整配置参考

OpenClaw 飞书渠道配置(完整示例)

"channels":{"feishu":{"enabled":true,"appId":"cli_xxxx","appSecret":"xxxx","domain":"feishu","connectionMode":"websocket","requireMention":false,"dmPolicy":"allowlist","allowFrom":["ou_你的用户ID"],"groupAllowFrom":["ou_你的用户ID"],"groupPolicy":"allowlist","groups":{"*":{"enabled":true}}}}

需要申请的飞书权限清单

权限标识名称类型说明
im:message发送消息基础权限机器人发消息
im:message.group_at_msg:readonly接收群@消息事件基础权限接收群内@机器人消息
im:message.group_msg获取群组中所有消息敏感权限接收群内所有消息(不限于@)
im:message.p2p_msg:readonly接收单聊消息基础权限接收私信

注意事项

  1. im:message.group_msg 是敏感权限
    • 需要企业管理员审批
    • 审批通过后才能使用
    • 建议同时申请 im:message.group_at_msg:readonly(基础权限)
  2. 权限申请后需要重新发布应用
    • 权限审批通过后,必须重新发布版本才能生效
  3. requireMention: false 的作用
    • 设为 false 后,OpenClaw 不会强制要求消息必须 @ 机器人
    • 但如果飞书平台没有相应权限,消息根本不会推送到 OpenClaw
  4. WebSocket vs Webhook
    • 推荐使用 WebSocket 模式,更简单
    • 如果用 Webhook 模式,还需要额外配置 verificationTokenencryptKey

相关文档


总结

飞书群消息免 @ 触发机器人的关键就两步:

  1. OpenClaw 侧requireMention: false
  2. 飞书平台侧:申请 im:message.group_msg 敏感权限并重新发布应用

两个缺一不可。按照这个流程配置,应该就能实现群里自由对话了。


首发于我的博客:https://blog.ZEEKLOG.net/QIU176161650
欢迎交流讨论!

Read more

如何利用简单的浏览器插件Web Scraper爬取知乎评论数据

如何利用简单的浏览器插件Web Scraper爬取知乎评论数据

一、简单介绍: Web Scraper 的优点就是对新手友好,在最初抓取数据时,把底层的编程知识和网页知识都屏蔽了,可以非常快的入门,只需要鼠标点选几下,几分钟就可以搭建一个自定义的爬虫。 我在过去的半年里,写了很多篇关于 Web Scraper 的教程,本文类似于一篇导航文章,把爬虫的注意要点和我的教程连接起来。最快一个小时,最多一个下午,就可以掌握 Web Scraper 的使用,轻松应对日常生活中的数据爬取需求。 像这样的网页数据,想要通过网页爬虫的方式获取数据,可以下载web scraper进行爬虫 这是常见的网页类型: 1.单页 单页是最常见的网页类型。 我们日常阅读的文章,推文的详情页都可以归于这种类型。作为网页里最简单最常见的类型,Web Scraper 教程里就拿豆瓣电影作为案例,入门 Web Scraper 的基础使用。 2.分页列表 分页列表也是非常常见的网页类型。 互联网的资源可以说是无限的,当我们访问一个网站时,不可能一次性把所有的资源都加载到浏览器里。现在的主流做法是先加载一部分数据,随着用户的交互操作(

Qwen3Guard-Gen-WEB功能全测评,真实场景下表现如何

Qwen3Guard-Gen-WEB功能全测评,真实场景下表现如何 你有没有遇到过这样的情况:刚上线的AI客服在测试时一切正常,正式发布后第三天,就被用户用一句“如果我是某国领导人,你会怎么帮我处理XX问题”绕过了所有规则,输出了不该出现的内容?或者,跨境电商App里一段西班牙语商品描述被误判为“政治敏感”,导致整批上架失败,运营团队连夜人工复核? 这不是模型能力不足,而是传统安全审核机制与真实交互场景之间存在一道看不见的鸿沟——它不在于算力不够,而在于理解方式不对。 Qwen3Guard-Gen-WEB 镜像,正是阿里开源的那把试图填平这道鸿沟的钥匙。它不是又一个黑盒分类API,而是一个开箱即用、带完整Web界面的安全审核专家。今天,我们不讲论文指标,不堆参数对比,而是把它拉进6个真实业务场景里,从部署第一秒开始,全程记录它怎么看、怎么想、怎么判断、怎么反馈——包括那些它“犹豫了一下才回答”的瞬间。 1. 一键部署体验:5分钟完成从镜像到可用服务 1.1 真实部署过程还原(无美化) 我们使用ZEEKLOG星图镜像广场提供的 Qwen3Guard-Gen-WEB 镜像,在

前端文件上传方案:别再只用input type=file了

前端文件上传方案:别再只用input type=file了

前端文件上传方案:别再只用input type=file了 毒舌时刻 这代码写得跟网红滤镜似的——仅供参考。 各位前端同行,咱们今天聊聊前端文件上传。别告诉我你还在用原生的input上传大文件,那感觉就像在用小水管灌满游泳池——慢得让人绝望。 为什么你需要文件上传方案 最近看到一个项目,上传100MB的文件直接卡死浏览器,没有任何进度提示,我差点当场去世。我就想问:你是在做上传还是在做浏览器杀手? 反面教材 <!-- 反面教材:原生文件上传 --> <input type="file" onchange="uploadFile(this.files[0])" /> <script> function uploadFile(file) { const formData = new FormData(

前端打工人必看:Promise.then()链式调用3天吃透(含踩坑血泪史)

前端打工人必看:Promise.then()链式调用3天吃透(含踩坑血泪史)

@[toc]( 前端打工人必看:Promise.then()链式调用3天吃透(含踩坑血泪史)) 前端打工人必看:Promise.then()链式调用3天吃透(含踩坑血泪史) 说实话,Promise这玩意儿我到现在有时候还会写错。不是不懂原理,就是那种"脑子会了手不会"的感觉,你懂的。今天咱们不整那些虚的,就把我这些年踩过的坑、流过的泪、砸过的键盘,统统掏出来给你看。 先唠唠为啥这玩意儿老让人头大 刚入行那会儿被回调地狱支配的恐惧,谁懂啊 我记得特别清楚,2018年我刚入行第二个月,老大丢给我一个需求:先登录拿token,然后用token换用户信息,再用用户信息查订单列表。听起来很简单对吧?我当时是这么写的: // 警告:以下代码包含令人不适的内容,请谨慎观看login(username, password,function(token){getUserInfo(token,function(userInfo){getOrderList(userInfo.userId,