剪藏#剪藏#办公技巧小王子

AI不再等你找它:通知Skill,让它主动发微信、写邮件、弹提醒

2026 年 7 月 2 日1 分钟
分享Twitter / XTelegram微博

Notion image

你有没有发现——

到现在为止,你跟 AI 的互动模式都是“你找它”。你问它答,你叫它动。

但很多时候,你需要的是"它找你"。

  • 报表生成了,你能不能主动微信我一下?

  • 网页监控到变化了,你能不能给我发封邮件?

  • 明天上午有会,你能不能提前弹个提醒?

就像一个助理——不只是你叫他才动,而是事情有结果了,他主动跑过来告诉你。

今天这一课,给 AI 装上“主动联系你”的能力。学会之后,你的 AI 不再是“被动响应”,而是“主动汇报”。

一、通知类 Skill 的三种渠道

微信 日常通知、报表推送 秒级 微信机器人 API
邮件 正式报告、对外沟通 分钟级 SMTP 发送
系统通知 桌面弹窗提醒 秒级 节点通知器

三选一,或者三个都要。每种渠道的实现方式不同,但套路完全一样:接收消息内容 → 调用发送接口 → 返回发送结果。

二、实战一:微信通知 技能

需求:日报生成了,Agent 自动把日报内容发到你微信上。

文件结构

JAVASCRIPT
skills/
└── wechat_notify/
    ├── SKILL.md
    ├── skill.json
    └── index.js

SKILL.md

JAVASCRIPT
# 微信通知 ## 功能
通过微信向指定用户发送消息。 ## 使用场景
- Agent 完成任务后通知用户
- 定时任务的结果推送
- 异常情况的及时报警 ## 输入参数
- message(必填):要发送的消息内容
- userId(选填):接收者的微信 ID,默认发送给自己 ## 输出格式
返回发送结果:成功或失败原因。

skill.json

JAVASCRIPT
{
    "name""wechat_notify",
    "version""1.0.0",
    "description""通过微信发送通知消息",
    "author""我",
    "keywords": ["微信""通知""消息"],
    "permissions": ["network"]
}

index.js

JAVASCRIPT
' 微信通知 Skill
' 前提:你的 OpenCLAW 已经配好了微信通
export default async function(query) {
    try {
        ' ===== 1. 取参数 =====
        const message = query.message
        if (!message) {
            return '⚠️ 请提供要发送的消息内容。'
        }         ' ===== 2. 发送微信消息 =====
        ' 这里调用你配置的微信通道来发送消
        ' 具体实现取决于你的微信通道的 API 接
        const result = await sendWechatMessage({
            content: message,
            ' msgtype: "text"   表示发送文本消
            msgtype: 'text'
        })         ' ===== 3. 返回结果 =====
        if (result.success) {
            return `✅ 微信消息已发送。内容:${message.slice(050)}${message.length > 50 ? '...' : ''}`
        } else {
            return `⚠️ 微信消息发送失败:${result.error}`
        }     } catch (error) {
        return `⚠️ 微信通知失败:${error.message}。请检查微信通道是否配置正确。`
    }
} ' 辅助函数:调用微信 API 发送消
async function sendWechatMessage(params) {
    ' webhook_url 是你的微信机器人的 Webhook 地
    ' 这个地址在配置微信通道时会得
    const webhookUrl = process.env.WECHAT_WEBHOOK_URL     if (!webhookUrl) {
        throw new Error('微信 Webhook 未配置,请先设置环境变量 WECHAT_WEBHOOK_URL')
    }     const response = await fetch(webhookUrl, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(params)
    })     return await response.json()
}

三、实战二:邮件通知 Skill

需求:月度报表生成了,自动发邮件到老板邮箱。

index.js

JAVASCRIPT
' 邮件通知 Skill
' 需要安装:npm install nodemailer
import nodemailer from 'nodemailer' export default async function(query) {
    try {
        ' ===== 1. 取参数 =====
        const to = query.to           ' 收件人邮箱
        const subject = query.subject  ' 邮件主题
        const body = query.body        ' 邮件正文
        const attachments = query.attachments || []  ' 附件(可选)         if (!to || !subject || !body) {
            return '⚠️ 请提供收件人(to)、主题(subject)和正文(body)。'
        }         ' ===== 2. 创建邮件发送器 =====
        ' 就像一个邮递员——你要告诉他用哪个邮箱、什么密
        const transporter = nodemailer.createTransport({
            host: 'smtp.qq.com',                  ' QQ 邮箱的发送服务
            port: 465,                             ' 端口号 465(加密
            secure: true,                          ' 使用加
            auth: {
                user: process.env.EMAIL_USER,      ' 你的 QQ 邮
                pass: process.env.EMAIL_PASS       ' QQ 邮箱的授权码(不是密码!
            }
        })         ' ===== 3. 发送邮件 =====
        const info = await transporter.sendMail({
            from: process.env.EMAIL_USER,  ' 发件
            to: to,                        ' 收件
            subject: subject,              ' 主
            text: body,                    ' 正
            attachments: attachments       ' 附
        })         ' ===== 4. 返回结果 =====
        return `✅ 邮件已发送!\n` +
               `收件人:${to}\n` +
               `主题:${subject}\n` +
               `邮件 ID:${info.messageId}`     } catch (error) {
        return `⚠️ 邮件发送失败:${error.message}。` +
               `请检查邮箱配置(EMAIL_USER 和 EMAIL_PASS 环境变量)。`
    }
}

注意几个关键点:

**QQ 邮箱的"密码"不是你的 QQ 密码——是"授权码"。**在 QQ 邮箱 → 设置 → 账户 → POP3/SMTP 服务 → 生成授权码。把这一串英文数字填到 环境变量里。EMAIL_PASS

不同邮箱的 SMTP 服务器不一样:

QQ 邮箱 smtp.qq.com 465
163 邮箱 smtp.163.com 465
Gmail smtp.gmail.com 587
企业微信 smtp.exmail.qq.com 465

四、实战三:桌面弹窗提醒

需求:重要任务完成时,在电脑桌面弹一个通知。

index.js

JAVASCRIPT
' 桌面通知 Skill
' 需要安装:npm install node-notifier
import notifier from 'node-notifier' export default async function(query) {
    try {
        const title = query.title || 'OpenCLAW 提醒'
        const message = query.message || ''         if (!message) {
            return '⚠️ 请提供通知内容(message)。'
        }         ' node-notifier 会在你的桌面右下角弹出一个通知气
        notifier.notify({
            title: title,
            message: message,
            sound: true,     ' 弹出时有提示
            wait: false      ' 不等用户关闭,立刻返
        })         return `✅ 桌面通知已弹出:${title} - ${message.slice(0, 50)}`     } catch (error) {
        return `⚠️ 桌面通知失败:${error.message}。`
    }
}

这个 Skill 只能在有图形桌面的电脑上跑(Windows/Mac/Linux 桌面版)。服务器上跑不了——因为服务器没有桌面。

五、通知 Skill 的最佳实践

实践 1:不同重要程度用不同渠道

JAVASCRIPT
🟢 普通通知(日报生成了) → 微信消息
🟡 重要通知(监控到异常数据) → 微信 + 邮件
🔴 紧急通知(服务挂了) → 微信 + 邮件 + 桌面弹窗

别啥事都弹桌面通知——你会烦到关掉它。

实践 2:通知内容要清晰可操作

JAVASCRIPT
❌ 「数据有变化」
✅ 「竞品官网昨晚更新了定价页面,降价幅度 15%。链接:xxx  ➡️ 建议今天内完成竞品调价分析。」

好的通知 = 发生了什么事 + 你需要做什么 + 相关的链接/数据。

实践 3:通知 + Cron = 真正的自动化

JAVASCRIPT
cron:
  - schedule"0 17 * * 5"         ' 每周五下午 5 
    timezone: Asia/Shanghai
    task: |
      1. 分析 C:/sales.csv 的数据 → 调销售报表 Skill
      2. 把报告通过微信通知我 → 调微信通知 Skill

一条 Cron,串联两个 Skill。报表 Skill 负责“算”,通知 Skill 负责“送”。

动手:选一个渠道,让 AI 给你发第一条通知

  • 最方便: 微信通知(你每天都在微信上,不用装任何新东西)

  • 最正式: 邮件通知(适合发周报给老板)

  • 最简单: 桌面弹窗(一行代码,适合测试)

选好后配好 Cron,设一个 2 分钟后的触发时间,看它能不能准时通知你。

通知 Skill = AI 的「嘴」,能主动喊你了

在这课之前,你的 AI 是"哑巴"——它做了事不会主动告诉你。有了通知 Skill,AI 就长了一张“能喊你的嘴”。

从“你找它”到“它找你”——这才是真正的 AI 助手。

下一课,我们讲开发 Skill 的最后一步——调试和发布。怎么找 bug、怎么把你写的 Skill 分享给别人用。

跑通通知了吗?截个你收到的第一条 AI 主动消息~ 🔔

原文地址: https://mp.weixin.qq.com/s?__biz=MzU3ODgzOTk3MQ==&mid=2247486062&idx=1&sn=a1eb77d66b530b5837fd1f459350bd65&chksm=fc3bf2bd1781f6db2e89c3d60a012bfebe486a2eafcb50a969800ba3fd818fe8e2d0efd28f7c&mpshare=1&scene=1&srcid=0702pdN7jnTz3xw08ZejZeLN&sharer_shareinfo=055eaf964c9682765639a593a1022222&sharer_shareinfo_first=055eaf964c9682765639a593a1022222#rd

相关文章