手把手教你用 FunctionGraph 零成本搭建定时消息推送机器人

举报
yd_234127553 发表于 2026/10/27 11:18:07 2026/10/27
【摘要】 手把手教你用 FunctionGraph 零成本搭建定时消息推送机器人(Serverless极简实战)前言:作为个人开发者或学生党,我们经常有一些定时执行轻量小任务的需求,比如:每日早安/天气提醒、节日倒计时、定时签到、个人服务器简易巡检通知等。如果为此特意租一台 24 小时开机的云服务器(ECS),不仅每个月要花费几十上百元,而且服务器 99% 的时间都在空载。其实,华为云的 Funct...

手把手教你用 FunctionGraph 零成本搭建定时消息推送机器人(Serverless极简实战)

前言:
作为个人开发者或学生党,我们经常有一些定时执行轻量小任务的需求,比如:每日早安/天气提醒、节日倒计时、定时签到、个人服务器简易巡检通知等。
如果为此特意租一台 24 小时开机的云服务器(ECS),不仅每个月要花费几十上百元,而且服务器 99% 的时间都在空载。
其实,华为云的 FunctionGraph(函数工作流) 为每个用户每月提供了 100 万次免费调用 + 40 万 GB-秒执行时间 的免费额度!对于个人小工具来说,完全就是零成本“白嫖”。

今天这篇短文,我就带大家花 5 分钟时间,使用 Python 原生代码写一个自动推送到企业微信/飞书/钉钉的群机器人,无需打包任何依赖包,直接在网页控制台就能搞定!


一、准备工作

整个流程极其轻量,你只需要准备好:

  1. 一个已实名认证的华为云账号(新老用户均有免费 FunctionGraph 额度)。
  2. 一个群机器人 Webhook 地址:
    • 企业微信:群聊右上角 -> 添加群机器人 -> 复制 Webhook 地址。
    • 飞书 / 钉钉:群设置 -> 机器人 -> 自定义机器人 -> 复制 Webhook 地址。

(本文以通用的 Webhook POST 请求为例演示)


二、第一步:创建 FunctionGraph 函数

  1. 登录华为云控制台,顶部搜索框直接搜 FunctionGraph(或在左侧导航进入【计算】->【函数工作流】)。
  2. 点击右上角的 【创建函数】。
  3. 按照如下配置填写(非常简单):
    • 函数类型:选择 事件函数(默认项)。
    • 区域(Region):建议选择离自己最近的区域(如华北-北京四、华东-上海一)。
    • 函数名称:例如 daily-notify-robot。
    • 委托:选择 无。
    • 运行语言(Runtime):选择 Python 3.9(或 Python 3.10)。
    • 企业项目:default。
  4. 点击右下角的 【创建函数】,进入在线代码编辑界面。

三、第二步:编写推送脚本(零依赖,直接复制)

很多同学在用云函数时最头疼的就是“怎么装 requests 库”。其实 Python 自带的 urllib.request 就能直接发送网络请求,完全不需要打包依赖,代码拷进去就能跑!

在函数代码编辑框中,将 index.py 的内容全部替换为以下代码:

# -*- coding:utf-8 -*-
import json
import urllib.request
import urllib.error
from datetime import datetime, timezone, timedelta

def send_wechat_robot(webhook_url: str, message_text: str):
    """
    发送消息至企业微信群机器人 (企业微信支持 markdown 格式)
    """
    payload = {
        "msgtype": "markdown",
        "markdown": {
            "content": message_text
        }
    }
    
    headers = {"Content-Type": "application/json; charset=utf-8"}
    req = urllib.request.Request(
        url=webhook_url,
        data=json.dumps(payload).encode("utf-8"),
        headers=headers,
        method="POST"
    )
    
    try:
        with urllib.request.urlopen(req, timeout=10) as response:
            result = json.loads(response.read().decode("utf-8"))
            print(f"[*] 推送响应结果: {result}")
            return result
    except urllib.error.HTTPError as e:
        print(f"[!] HTTP 请求失败: {e.code} - {e.reason}")
        raise e
    except Exception as e:
        print(f"[!] 网络异常: {e}")
        raise e

def handler(event, context):
    """
    FunctionGraph 入口函数
    """
    # 1. 替换成你自己的群机器人 Webhook 地址
    # (更推荐在右侧【配置】->【环境变量】中添加 WEBHOOK_URL,从 context/os.environ 中读取)
    WEBHOOK_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    
    # 2. 获取北京时间 (UTC+8)
    utc_now = datetime.now(timezone.utc)
    beijing_now = utc_now + timedelta(hours=8)
    today_str = beijing_now.strftime("%Y年%m月%d日 %H:%M")
    
    # 3. 组织提醒文案 (支持企业微信 Markdown 语法,如高亮字体、加粗)
    content = (
        f"### ☀️ 早上好!今日提醒已送达\n\n"
        f"> **播报时间**:<font color=\"info\">{today_str}</font>\n"
        f"> **任务状态**:华为云 FunctionGraph Serverless 自动调度执行成功!\n\n"
        f"💼 **今日待办建议**:\n"
        f"- [ ] 查收邮件并处理高优先级任务\n"
        f"- [ ] 记得适量饮水、久坐起来活动一下\n"
        f"- [ ] 保持好心情,效率翻倍!💪\n\n"
        f"—— 来自 [华为云 FunctionGraph](https://www.huaweicloud.com/product/functiongraph.html) 自动化服务"
    )
    
    # 4. 执行推送
    print("[*] 正在执行自动消息推送...")
    send_wechat_robot(WEBHOOK_URL, content)
    
    return {
        "statusCode": 200,
        "headers": {"Content-Type": "application/json"},
        "body": json.dumps({"status": "success", "time": today_str})
    }

小贴士(安全建议):
如果不想在代码中硬编码 Webhook 链接,可以点击页面上方的 【配置】->【环境变量】,添加键值对 WEBHOOK_URL,然后在代码中通过 import os; WEBHOOK_URL = os.getenv("WEBHOOK_URL") 动态读取,既规范又安全!


四、第三步:在线配置与测试运行

  1. 调整超时时间与内存(防止偶发网络慢超时):

    • 点击代码编辑界面上方的 【配置】->【基本配置】。
    • 内存:默认 128 MB 即可(非常轻量,完全足够)。
    • 超时时间:默认是 3 秒,建议改成 10 秒。
    • 点击 【保存】。
  2. 在线测试:

    • 回到代码页面,点击上方的 【配置测试事件】。
    • 测试事件类型选默认的 blank-test(空白事件即可),点击确定。
    • 点击 【测试】 按钮。
    • 看到控制台底部输出 执行成功: 200,且你的群聊里收到了这条来自机器人的提醒卡片,就说明推送成功了!

五、第四步:添加定时触发器(让它每天准时跑)

我们要的是“每天定时自动播报”,不需要每次手动点测试。

  1. 在当前函数页面,切换到 【触发器】 选项卡。
  2. 点击 【创建触发器】:
    • 触发器类型:选择 定时触发器(Timer)。
    • 触发器名称:填 morning_trigger。
    • 触发规则:选择 Cron 表达式。
    • Cron 表达式:比如希望每天早上 08:30 触发:
      0 30 8 * * ?
      
      (注:华为云 FunctionGraph 定时触发器默认是按系统标准时间匹配,如果你的控制台显示为 UTC 时区,将 8 点减去 8 小时写成 0 30 0 * * ? 即可,页面上方会有贴心的下一次触发时间预览,核对一下北京时间即可)。
  3. 点击 【确定】,触发器即刻生效!

六、个人进阶小技巧(混分加分项)

学会了这个基础模版,你还可以轻松拓展以下小功能:

  1. 爬取免费天气 API:
    在代码里增加一个通过公共免 Key 天气接口获取当日温度与下雨预警,拼接到消息内容中。
  2. 节日/发薪日倒计时:
    用 Python 的 datetime 计算离下一个假期(比如元旦、春节、国庆)还有多少天,每天自动更新。
  3. 个人博客/网站存活监控:
    每天定时 urllib.request.urlopen("https://yourblog.com"),如果返回不是 200,立刻发群消息告警。

七、总结

通过本篇实战,我们没有花一分钱,也没有租用任何云服务器,仅利用华为云 FunctionGraph + 定时触发器 + 纯内置 Python 库,就轻轻松松搭建起了一个稳定可靠的每日消息提醒助手。

Serverless 技术的魅力就在于:无需运维服务器、按需计费(平时闲置不花一分钱)、高可靠且开箱即用。

大家如果在配置触发器或时区转换时遇到疑问,欢迎在评论区留言交流!觉得有用的小伙伴欢迎点赞、收藏支持一下~

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。