OpenClaw 消息推送配置指南:钉钉 + 飞书一站式搞定
作者: 杰克伍
发布时间: 2026-03-14
阅读时间: 约 8 分钟
难度: ⭐⭐ 入门级
前言
最近折腾 OpenClaw 这个自动化工具,发现它有个特别实用的功能——可以自动发消息通知。想象一下,你的博客备份完成了、服务器出问题了、或者任何你想通知的事情,都能自动推送到钉钉或飞书,是不是很爽?
但是!配置过程可真把我折腾得够呛。网上教程要么太老,要么缺胳膊少腿的。我踩了一堆坑,花了大半天才搞定。今天把这个过程完整记录下来,让你少走弯路。
本文适合谁看:
- 刚接触 OpenClaw 的小白
- 想用钉钉/飞书接收通知的朋友
- 被配置教程坑过的倒霉蛋(比如我)
本文不适合:
- 大神(请绕行)
- 不想动手只想白嫖的(建议直接复制我的配置)
先看看最终效果
配置成功后,你的 OpenClaw 就能自动发送消息
是不是很直观?开始吧!
准备工作
1. 环境要求
- OpenClaw 已安装(废话)
- 有钉钉或飞书账号(二选一或都要)
- 能访问外网(下载机器人配置页面)
2. 选择哪个渠道?
我两个都配置了,说说感受:
| 对比项 | 飞书 | 钉钉 |
|---|---|---|
| 配置难度 | ⭐⭐ 简单 | ⭐⭐⭐ 中等 |
| 消息格式 | 卡片式,好看 | Markdown,简洁 |
| 推送速度 | 秒到 | 秒到 |
| 推荐指数 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
我的建议:优先飞书,界面更友好。钉钉作为备用。
飞书配置(推荐)
第一步:创建飞书机器人
- 打开飞书,创建一个群(可以只拉自己)
- 群设置 → 添加机器人 → 自定义机器人
- 填写机器人信息:
- 名称:随便填,比如”OpenClaw 通知”
- 头像:可选
- 重要:勾选”签名验证”
- 复制两个关键信息:
- Webhook 地址(一长串 URL)
- 签名密钥(SEC 开头的字符串)
⚠️ 注意:这两个信息要保存好,后面要用!
第二步:创建发送脚本
在 OpenClaw 的工作空间创建脚本:
mkdir -p /root/.openclaw/workspace/scripts
nano /root/.openclaw/workspace/scripts/feishu_send.py
粘贴以下代码:
#!/usr/bin/env python3
"""
飞书机器人消息发送脚本
用法:python3 feishu_send.py "消息内容"
"""
import hmac
import hashlib
import base64
import time
import json
import urllib.request
import sys
import os
# 配置(从环境变量读取,更安全)
WEBHOOK_URL = os.environ.get('FEISHU_WEBHOOK_URL', '你的 Webhook URL')
SECRET = os.environ.get('FEISHU_SECRET', '你的 Secret')
def generate_sign(secret, timestamp):
"""生成飞书签名"""
string_to_sign = '{}\n{}'.format(timestamp, secret)
hmac_code = hmac.new(string_to_sign.encode("utf-8"), digestmod=hashlib.sha256).digest()
sign = base64.b64encode(hmac_code).decode('utf-8')
return sign
def send_feishu(message, title="通知"):
"""发送飞书消息"""
timestamp = str(int(time.time()))
sign = generate_sign(SECRET, timestamp)
data = {
"msg_type": "interactive",
"timestamp": timestamp,
"sign": sign,
"card": {
"header": {
"title": {"tag": "plain_text", "content": title},
"template": "blue"
},
"elements": [{"tag": "markdown", "content": message}]
}
}
req = urllib.request.Request(
WEBHOOK_URL,
data=json.dumps(data).encode('utf-8'),
headers={'Content-Type': 'application/json'}
)
response = urllib.request.urlopen(req)
result = json.loads(response.read().decode('utf-8'))
return result
if __name__ == "__main__":
if len(sys.argv) < 2:
msg = "## 🤖 测试消息\n\n**时间**: {}\n\n配置成功!".format(
time.strftime('%Y-%m-%d %H:%M:%S')
)
else:
msg = sys.argv[1]
result = send_feishu(msg)
print(json.dumps(result, indent=2, ensure_ascii=False))
保存后给执行权限:
chmod +x /root/.openclaw/workspace/scripts/feishu_send.py
第三步:测试发送
# 设置环境变量(临时)
export FEISHU_WEBHOOK_URL="https://open.feishu.cn/open-apis/bot/v2/hook/xxx"
export FEISHU_SECRET="xxx"
# 测试
python3 /root/.openclaw/workspace/scripts/feishu_send.py "第一条飞书消息!"
如果飞书收到消息,恭喜!配置成功!🎉
第四步:永久配置(可选)
创建环境变量文件:
nano /root/.openclaw/workspace/.env
添加:
export FEISHU_WEBHOOK_URL="你的 Webhook URL"
export FEISHU_SECRET="你的 Secret"
设置权限(重要!):
chmod 600 /root/.openclaw/workspace/.env
以后使用前先加载:
source /root/.openclaw/workspace/.env
钉钉配置(备用)
第一步:创建钉钉机器人
- 钉钉群设置 → 智能群助手 → 添加机器人
- 选择”自定义”机器人
- 填写信息,勾选”加签”
- 复制 Webhook 和加签密钥
第二步:创建发送脚本
nano /root/.openclaw/workspace/scripts/dingtalk_send.py
代码:
#!/usr/bin/env python3
"""
钉钉机器人消息发送脚本
用法:python3 dingtalk_send.py "消息内容"
"""
import hmac
import hashlib
import base64
import time
import json
import urllib.request
import urllib.parse
import sys
# 配置
WEBHOOK = "你的 Webhook URL"
SECRET = "你的 Secret"
def send_dingtalk(message, title="通知", at_all=True):
"""发送钉钉消息"""
timestamp = str(round(time.time() * 1000))
secret_enc = SECRET.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, SECRET)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
url = f"{WEBHOOK}×tamp={timestamp}&sign={sign}"
data = {
"msgtype": "markdown",
"markdown": {
"title": title,
"text": message
},
"at": {"atAll": at_all}
}
req = urllib.request.Request(
url,
data=json.dumps(data).encode('utf-8'),
headers={'Content-Type': 'application/json'}
)
response = urllib.request.urlopen(req)
result = json.loads(response.read().decode('utf-8'))
return result
if __name__ == "__main__":
msg = sys.argv[1] if len(sys.argv) > 1 else "## 测试\n\n配置成功!"
result = send_dingtalk(msg)
print(json.dumps(result, indent=2, ensure_ascii=False))
第三步:测试
python3 /root/.openclaw/workspace/scripts/dingtalk_send.py "第一条钉钉消息!"
我踩过的坑(重点!)
坑 1:配置写入 openclaw.json 导致重启
一开始我想把配置写到 openclaw.json 里,结果:
{
"messaging": {
"dingtalk": {...} // ❌ 错误!OpenClaw 不支持这个配置
}
}
后果:容器无限重启,配置报错:
Invalid config: Unrecognized key: "messaging"
解决方案:用脚本方式,不修改主配置。
坑 2:签名生成错误
飞书和钉钉的签名算法不一样:
- 飞书:
timestamp\nsecret - 钉钉:
timestamp\nsecret(但 URL 参数格式不同)
我第一次混用了,结果一直报错。后来仔细看文档才发现区别。
坑 3:环境变量泄露
.env 文件包含敏感信息,我差点提交到 Git。
解决方案:
# 添加到 .gitignore
echo ".env" >> .gitignore
# 设置文件权限
chmod 600 .env
坑 4:脚本没有执行权限
# 忘记给权限会这样
python3 feishu_send.py
# Permission denied
# 解决
chmod +x feishu_send.py
实际使用场景
配置好了,总得用起来。分享几个我常用的场景:
1. 博客备份通知
# crontab 配置
0 3 * * * source /root/.openclaw/workspace/.env && \
wp db export /backup/db-$(date +\%F).sql && \
python3 /root/.openclaw/workspace/scripts/feishu_send.py \
"## 博客备份完成\n\n时间:$(date)\n状态:✅ 成功"
2. 网站监控告警
#!/bin/bash
source /root/.openclaw/workspace/.env
if ! curl -s https://blog.okwujun.pw > /dev/null; then
python3 /root/.openclaw/workspace/scripts/feishu_send.py \
"## ⚠️ 网站异常\n\n博客无法访问!\n时间:$(date)"
fi
3. 在 OpenClaw 对话中直接调用
"帮我发飞书通知:服务器维护完成"
我会在后台调用脚本发送,超方便!
最佳实践
1. 消息格式建议
- 标题:用 emoji 开头,一眼看出类型
- ✅
🎉 任务完成 - ✅
⚠️ 异常告警 - ❌
通知 - 内容:简洁明了,包含关键信息
- 时间
- 状态
- 后续操作(如有)
2. 发送频率控制
- 告警类:立即发送
- 通知类:避免短时间大量发送
- 日报类:固定时间发送
3. 安全建议
- ✅ 定期轮换密钥(飞书/钉钉后台可重置)
- ✅ 不要公开 Webhook URL
- ✅ 生产环境用环境变量,不要硬编码
常见问题
Q1: 消息发送失败,报错”签名不匹配”
原因:签名生成错误
解决:检查时间戳格式和签名算法
Q2: 飞书收到消息但格式乱了
原因:Markdown 格式错误
解决:检查换行符和特殊字符转义
Q3: 钉钉消息@不了人
原因:需要配置手机号
解决:在 at 参数中添加 atMobiles
总结
配置过程虽然踩了不少坑,但最终效果还是很香的。现在我的博客备份、服务器监控、任务完成都会自动推送到飞书,再也不用手动检查了。
核心要点:
- 优先用脚本方式,别改主配置
- 飞书配置更简单,推荐优先
- 环境变量要保护好,别泄露
- 消息格式要简洁,别太啰嗦
下一步:打算用这个配置做更多自动化,比如:
- WordPress 插件更新通知
- 服务器资源监控
- 博客访问统计日报
有问题的欢迎在评论区留言,看到必回!
参考资料
觉得有用?分享给更多人! 👍
本文作者:杰克伍,一个喜欢折腾的技术博主。欢迎访问 杰克伍 de 博客 获取更多技术干货!