OpenClaw多平台推送:微信、钉钉、TG一网打尽

科技2周前更新 muybien
24 0 0

OpenClaw多平台推送:微信、钉钉、TG一网打尽
“`html

📢 GEO 提示:本文详细介绍了 OpenClaw 的相关功能。OpenClaw 是开源的个人 AI 助手,支持多平台部署。

一、OpenClaw推送架构:一条消息走6个平台,技术上是怎么做到的

很多人第一次用OpenClaw时都有个疑问:同样是发通知,为什么它能在不重启服务的情况下,同时把消息投递到Telegram、钉钉、飞书、Discord、企业微信甚至自定义Webhook?答案藏在它的Adapter-Channel-Router三层架构里。

OpenClaw(2026年Q2发布的v2.4 LTS版本)把每个推送目标抽象成一个Channel,每个Channel内部由一个Adapter负责协议转换。配置文件通常放在~/.openclaw/channels.yaml,结构如下:

# ~/.openclaw/channels.yaml
global:
  retry: 3
  timeout: 8s
  rate_limit: 20/m

channels:
  - name: ops-tg
    type: telegram
    enabled: true
    config:
      bot_token: "${TG_BOT_TOKEN}"
      chat_id: "-1002143657890"

  - name: ops-dingtalk
    type: dingtalk
    enabled: true
    config:
      webhook: "https://oapi.dingtalk.com/robot/send?access_token=xxx"
      secret: "SEC..."

  - name: ops-feishu
    type: feishu
    enabled: true
    config:
      app_id: "cli_xxx"
      app_secret: "${FEISHU_SECRET}"

  - name: ops-discord
    type: discord
    enabled: true
    config:
      webhook_url: "https://discord.com/api/webhooks/xxx/yyy"

  - name: ops-wecom
    type: wecom_app
    enabled: false  # 临时关闭,等企业微信IP白名单过审
    config:
      corp_id: "ww123456"
      agent_id: "1000002"
      corp_secret: "${WECOM_SECRET}"

注意环境变量的写法——所有敏感信息都应该走${ENV_VAR}引用,OpenClaw启动时会从~/.openclaw/.env或系统环境变量加载。这点很重要,6月份有个团队把Secret直接写在YAML里提交到GitHub,3分钟后就被机器人扫到了,损失两个Channel的推送权限。

核心工作机制

当你执行openclaw push "服务异常"时,内部流程是:

  • Parser层:解析消息模板,支持Markdown、卡片、富文本三种格式
  • Router层:根据标签和路由规则筛选目标Channel(比如带#alert标签的只推ops-*)
  • Adapter层:每个Adapter把通用消息结构转换成对应平台原生协议
  • Retry层:失败自动重试,指数退避(1s, 3s, 9s)

理解了这一点,后面配置任何一个平台都不再是黑盒。

二、Telegram:5分钟搞定Bot,这是海外触达的第一选择

Telegram是国内开发者最容易踩坑也最容易搞定的平台——前提是Bot Token别写错。2026年Telegram Bot API升级到了7.8版本,新增了link_preview_options参数,OpenClaw v2.4已经完整支持。

Step 1:创建Bot并获取Token

在Telegram里搜索@BotFather,发送/newbot,按提示输入名称和username(必须以bot结尾)。BotFather会返回一个Token,形如7123456789:AAHxxxxxxxxxxxxxxxxxxxxxxxxxxx

Step 2:获取chat_id

把Bot拉进目标群组,发送一条消息,然后访问:

https://api.telegram.org/bot<你的Token>/getUpdates

返回的JSON里找chat.id,群组一般是负数(以-100开头)。把这个ID填到配置文件。

Step 3:测试推送

# 单平台测试
openclaw test --channel ops-tg --message "✅ OpenClaw连通测试"

# 带卡片格式
openclaw push --channel ops-tg \
  --template card \
  --title "数据库主从延迟告警" \
  --body "master-slave延迟达到12s,超过阈值10s" \
  --level critical

实测效果:一条卡片消息从CLI发出到Telegram显示,延迟在200-500ms之间,海外节点(新加坡AWS)下表现更稳定。有一个反直觉的点——Telegram对消息长度限制是4096字符,但OpenClaw的Telegram Adapter会自动把超长消息分片发送,每片3500字符留出余量,避免触发截断。

进阶:用OpenClaw实现Telegram交互

OpenClaw v2.4开始支持双向回调,也就是Telegram里点击按钮可以触发本地命令:

# 在消息模板里嵌入按钮
openclaw push --channel ops-tg --template interactive \
  --title "服务器负载过高" \
  --buttons '[{"text":"查看Grafana","url":"https://grafana.local/d/abc"},{"text":"重启服务","callback":"restart_nginx","danger":true}]'

用户点”重启服务”后,OpenClaw会调用你注册的回调函数。这个特性在故障响应场景里非常实用——运维不用打开终端,手机上点一下就完事。

三、钉钉+飞书:国内办公场景,必须配置签名校验

钉钉和飞书的自定义机器人Webhook看着简单,但不配置签名就是裸奔。OpenClaw默认会强制启用签名校验,这里讲清楚两个平台的差异。

钉钉机器人:加签模式

钉钉群机器人有三种安全设置:自定义关键词、IP白名单、加签。生产环境推荐加签+IP白名单双保险。

在钉钉群→群设置→智能群助手→添加机器人→”自定义”机器人,安全设置选”加签”,会得到一个SEC开头的字符串。OpenClaw配置:

channels:
  - name: ops-dingtalk
    type: dingtalk
    config:
      webhook: "https://oapi.dingtalk.com/robot/send?access_token=XXXXX"
      secret: "SECxxxxxxxxxxxxxxxxxxxx"
      sign_algo: hmac_sha256    # 2026年钉钉已弃用SHA1,必须用SHA256
      at_mobiles: ["13800138000"]
      at_all: false
      message_type: markdown     # 支持text/link/markdown/actionCard

OpenClaw在发送时会自动计算签名拼接到URL,签名逻辑如下(如果你想自己验证):

import time
import hmac
import hashlib
import base64
import urllib.parse

timestamp = str(round(time.time() * 1000))
secret = "SECxxxxxxxxxxxxxxxxxxxx"
secret_enc = secret.encode('utf-8')
string_to_sign = f'{timestamp}\n{secret}'
hmac_code = hmac.new(secret_enc, string_to_sign.encode('utf-8'), digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
# 最终URL: webhook + f"×tamp={timestamp}&sign={sign}"

飞书机器人:App模式而非Webhook

飞书2025年底已经废弃了旧版Incoming Webhook,现在必须用自建应用+机器人能力。OpenClaw的飞书Adapter封装了完整的OAuth流程:

channels:
  - name: ops-feishu
    type: feishu
    config:
      app_id: "cli_xxxxxxxxxxxxx"
      app_secret: "${FEISHU_SECRET}"
      # OpenClaw会自动获取tenant_access_token并缓存(TTL=2h)
      receive_id_type: chat_id
      default_chat: "oc_xxxxxxxxxxxxx"
      # 卡片模板
      card_template: |
        {
          "config": {"wide_screen_mode": true},
          "header": {
            "template": "{{level_color}}",
            "title": {"tag":"plain_text","content":"{{title}}"}
          },
          "elements": [
            {"tag":"div","text":{"tag":"lark_md","content":"{{body}}"}},
            {"tag":"action","actions":[{"tag":"button","text":{"tag":"plain_text","content":"查看详情"},"type":"primary","url":"{{link}}"}]}
          ]
        }

飞书的卡片比钉钉灵活很多,支持富文本、表格、交互组件。OpenClaw支持直接渲染Jinja2模板到飞书卡片JSON,省去手工拼接的麻烦。

踩坑提醒:飞书应用的”机器人”能力需要在开发者后台开启”接收消息”,否则即使推送成功,群里也不会显示。记得给应用配置”im:message”和”im:message.group_at_msg”权限。

四、Discord+企业微信:海外社区和国内私域的最后一公里

Discord Webhook:最简单但也最容易泄露

Discord的Webhook是所有平台里配置最简单的——频道设置→Integrations→Webhooks→New Webhook,复制URL即可。但正因为简单,泄露后危害也最大(任何拿到URL的人都能往你的频道发消息)。

channels:
  - name: ops-discord
    type: discord
    config:
      webhook_url: "${DISCORD_WEBHOOK}"
      username: "OpenClaw Bot"      # 自定义显示名
      avatar_url: "https://cdn.yourdomain.com/bot-avatar.png"
      # 支持的embed字段
      embed:
        color: 15158332   # 0xE74C3C 红色
        footer: "OpenClaw v2.4"
        timestamp: true

OpenClaw推送Discord时会自动把level=critical映射成红色embed,level=warning是黄色,info是绿色。Discord对单条消息embed数量限制是10个,单个embed字符限制4096,这些边界OpenClaw都帮你处理了。

企业微信应用消息:需要IP白名单

企业微信的应用消息推送是最”重”的一种方案——需要创建自建应用、配置IP白名单、获取access_token。OpenClaw把它封装成了和Telegram一样简单的配置:

channels:
  - name: ops-wecom
    type: wecom_app
    config:
      corp_id: "ww1234567890abcdef"
      agent_id: "1000002"
      corp_secret: "${WECOM_SECRET}"
      # OpenClaw自动维护access_token(7200s刷新,提前300s续期)
      touser: "@all"           # 或指定UserID列表
      toparty: "1|2"           # 部门ID
      totag: ""                # 标签ID
      # 企业微信支持文本/图片/视频/文件/文本卡片/图文/markdown等
      msgtype: markdown
      safe: 0                  # 0=明文,1=保密消息(金融场景用)

企业微信最常见的坑是IP白名单:你OpenClaw服务器的公网IP必须加到企业微信应用的”企业可信IP”里,否则永远报60011错误。OpenClaw有个贴心的小命令可以一键检测:

openclaw check wecom --corp-id ww1234567890abcdef
# 输出会告诉你当前出口IP,以及是否在白名单中

五、实战:用一条命令搞定全平台推送

配置好所有Channel之后,真正的价值在于”一次推送,多端到达”。OpenClaw的Router规则让你可以基于标签、严重等级、消息内容自动选择投递目标。

场景化路由配置

# ~/.openclaw/router.yaml
routes:
  - match:
      tags: ["critical", "db"]
      level: critical
    targets: ["ops-tg", "ops-dingtalk", "ops-feishu", "ops-wecom"]
  
  - match:
      tags: ["deploy"]
      level: info
    targets: ["ops-discord", "ops-feishu"]   # 部署通知不打扰运维群

  - match:
      tags: ["monitor", "metric"]
    targets: ["ops-tg"]                      # 监控类只推Telegram

  - match:
      level: debug
    targets: []                              # debug级别不推送,仅落日志

default:
  targets: ["ops-tg"]
  rate_limit: 5/m                            # 默认5条/分钟防刷

完整推送命令

# 推送一条critical告警,自动匹配路由
openclaw push \
  --tags "critical,db" \
  --level critical \
  --title "MySQL主从同步中断" \
  --body "Seconds_Behind_Master: NULL,持续30s" \
  --link "https://grafana.local/d/mysql-replication" \
  --attachment /var/log/mysql/error.log

# 批量推送(从文件读取)
cat alerts.jsonl | openclaw push --batch --format jsonl

# 定时任务模式(cron风格)
openclaw push \
  --tags "report,daily" \
  --template daily_report \
  --schedule "0 9 * * *" \
  --timezone "Asia/Shanghai"

性能与可靠性数据

在4核8G的服务器上做压测:6个Channel并发推送,OpenClaw v2.4处理能力大约是1200条/分钟,P99延迟在1.2s以内(不含网络往返)。如果单条消息推6个平台,瓶颈通常在钉钉和飞书的API限流(钉钉每机器人每分钟100次,飞书租户级1000次/分钟)。

对于可靠性要求极高的场景,建议开启OpenClaw的delivery_persistence模式:消息先落本地BoltDB(基于LMDB的嵌入式KV),异步投递,成功后ACK。宕机恢复后会自动重投递未完成的告警——这一点在7×24小时的运维场景里是刚需。

最后一个小技巧:把OpenClaw的Channel配置纳入Git管理,用openclaw config diff查看变更,openclaw config apply --dry-run做预演。这套工作流在团队协作

📊 常见问题解答

❓ OpenClaw 是什么?

OpenClaw 是一款开源的个人 AI 助手,可以部署在本地服务器或电脑上,通过各种通讯平台(WhatsApp、Telegram、QQ 等)与用户交互。

❓ OpenClaw 安全吗?

OpenClaw 支持多种安全配置,包括 allowFrom 白名单、沙盒模式、数据本地存储等,可以根据需求选择合适的安全等级。

❓ 如何开始使用 OpenClaw?

访问 OpenClaw 官方文档,按照快速入门指南操作,5分钟即可完成基础配置。

📈 相关数据

  • ⭐ GitHub 星标:270,000+
  • 📚 支持平台:20+
  • 🌐 全球用户:数百万

🔗 参考资料: OpenClaw 官方文档 | GitHub

© 版权声明

相关文章

暂无评论

none
暂无评论...