摘要

WorkBuddy不仅是办公助手,更是你的"AI开发团队"。本文以一个真实的"AI周报生成器"微信小程序为例,从需求分析、技术选型、UI设计、前后端开发、测试、部署到微信审核上线,完整覆盖一个小程序从0到1的12个关键步骤。所有代码均基于2026年5月主流技术栈(微信小程序 + Node.js + 腾讯云),可直接作为项目模板使用。

关键词:WorkBuddy、小程序开发、微信小程序、AI应用、全栈开发、产品上线、技术实战


【写在最前面】

本文案例"AI周报生成器"是一个真实可开发的小程序项目。
代码仓库:本文示例代码可参考 GitHub - workbuddy-weekly-report(示例链接,以实际发布为准)


一、需求分析:找到一个真实痛点

1.1 为什么选"周报生成器"?

评估维度 打分 说明
痛点强度 ⭐⭐⭐⭐⭐ 几乎每个职场人每周都要写周报
使用频次 ⭐⭐⭐⭐ 每周1次,高频复购
付费意愿 ⭐⭐⭐⭐ 企业买单意愿强
技术可行 ⭐⭐⭐⭐⭐ WorkBuddy天然支持文档生成
竞争程度 ⭐⭐⭐ 有竞品但AI驱动的不多

1.2 目标用户画像

  • 核心用户:25-40岁职场人士,每周需提交工作周报
  • 使用场景:周五下午/周一早上,需要快速生成上周工作汇总
  • 核心诉求:省时间 + 格式规范 + 内容完整

1.3 产品功能定义

MVP版本(4周开发)

  1. 自然语言输入本周工作内容
  2. AI自动生成标准格式周报
  3. 支持多种模板(技术/产品/销售/管理)
  4. 一键导出Word/PDF
  5. 历史周报存档与搜索

商业模式:免费版(每月5份)+ 高级版(¥9.9/月,无限生成 + 团队模板)


二、技术选型

2.1 技术架构

┌─────────────────────────────────────────┐
│              微信小程序前端               │
│  WeUI + Vant Weapp + ECharts            │
├─────────────────────────────────────────┤
│              API 网关层                  │
│  腾讯云 API Gateway + 认证鉴权           │
├─────────────────────────────────────────┤
│              业务逻辑层                  │
│  Node.js + Express + WorkBuddy API      │
├─────────────────────────────────────────┤
│              数据存储层                  │
│  腾讯云 MySQL + COS 对象存储            │
└─────────────────────────────────────────┘

2.2 核心依赖

{
  "dependencies": {
    "express": "^5.0.0",
    "@workbuddy/api-sdk": "^2.1.0",
    "tencentcloud-sdk-nodejs": "^4.0.0",
    "mysql2": "^3.11.0",
    "jsonwebtoken": "^9.0.0",
    "dayjs": "^1.11.0"
  }
}

三、前端开发:微信小程序

3.1 小程序初始化

使用微信开发者工具创建项目:

# AppID 在微信公众平台获取
# 项目名称:AI周报生成器
# 模板:选择"云开发"模板

3.2 核心页面:周报生成页

pages/generate/generate.wxml(核心结构):

<view class="container">
  <!-- 模板选择 -->
  <view class="template-section">
    <text class="section-title">选择模板</text>
    <scroll-view scroll-x class="template-list">
      <view wx:for="{{templates}}" wx:key="id"
            class="template-card {{currentTemplate === item.id ? 'active' : ''}}"
            bindtap="selectTemplate" data-id="{{item.id}}">
        <text>{{item.name}}</text>
        <text class="template-desc">{{item.desc}}</text>
      </view>
    </scroll-view>
  </view>

  <!-- 工作内容输入 -->
  <view class="input-section">
    <text class="section-title">本周工作内容</text>
    <textarea placeholder="以自然语言描述你本周的工作内容...
例如:
- 周一参加了Q3产品评审会
- 周二完成了用户登录模块重构
- 周三修复了3个线上bug"
              bindinput="onContentInput"
              value="{{content}}"
              maxlength="2000" />
    <view class="char-count">{{content.length}}/2000</view>
  </view>

  <!-- AI生成按钮 -->
  <button class="generate-btn" bindtap="generateReport"
          loading="{{generating}}" disabled="{{!content.length}}">
    {{generating ? 'AI正在生成中...' : '🤖 一键生成周报'}}
  </button>

  <!-- 生成结果 -->
  <view class="result-section" wx:if="{{report}}">
    <rich-text nodes="{{report.html}}" />
    <view class="actions">
      <button bindtap="exportWord">导出Word</button>
      <button bindtap="exportPDF">导出PDF</button>
      <button bindtap="saveHistory">保存</button>
    </view>
  </view>
</view>

3.3 调用WorkBuddy API

pages/generate/generate.js

const app = getApp();

Page({
  data: {
    templates: [
      { id: 'tech', name: '技术周报', desc: '软件研发团队' },
      { id: 'product', name: '产品周报', desc: '产品经理' },
      { id: 'sales', name: '销售周报', desc: '销售/商务团队' },
      { id: 'manage', name: '管理周报', desc: '管理层汇报' },
    ],
    currentTemplate: 'tech',
    content: '',
    generating: false,
    report: null,
  },

  async generateReport() {
    this.setData({ generating: true });

    try {
      const res = await wx.request({
        url: `${app.globalData.apiUrl}/api/generate-weekly`,
        method: 'POST',
        header: {
          'Authorization': `Bearer ${app.globalData.token}`,
          'Content-Type': 'application/json',
        },
        data: {
          template: this.data.currentTemplate,
          content: this.data.content,
          style: 'professional', // 语气风格
        },
      });

      this.setData({
        report: res.data.report,
        generating: false,
      });

      wx.showToast({ title: '生成完成!', icon: 'success' });
    } catch (err) {
      wx.showToast({ title: '生成失败,请重试', icon: 'error' });
      this.setData({ generating: false });
    }
  },

  async exportWord() {
    const res = await wx.request({
      url: `${app.globalData.apiUrl}/api/export`,
      method: 'POST',
      data: {
        reportId: this.data.report.id,
        format: 'docx',
      },
    });
    // 下载文件并打开
    wx.downloadFile({
      url: res.data.downloadUrl,
      success: (result) => {
        wx.openDocument({ filePath: result.tempFilePath });
      },
    });
  },
});

四、后端开发:Node.js + WorkBuddy

4.1 API服务核心代码

server.js

const express = require('express');
const WorkBuddySDK = require('@workbuddy/api-sdk');
const mysql = require('mysql2/promise');

const app = express();
app.use(express.json());

// 初始化WorkBuddy SDK
const wb = new WorkBuddySDK({
  apiKey: process.env.WORKBUDDY_API_KEY,
  region: 'ap-guangzhou',
});

// 数据库连接池
const pool = mysql.createPool({
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: 'weekly_reports',
});

// 核心接口:生成周报
app.post('/api/generate-weekly', async (req, res) => {
  const { template, content, style } = req.body;
  const userId = req.user.id; // JWT 解析

  try {
    // 构建Prompt模板
    const prompts = {
      tech: `你是一位资深技术Leader,请根据以下工作内容生成一份技术周报。
格式要求:
1. 本周完成(按模块分类,每项注明完成百分比)
2. 关键技术决策(如有)
3. 下周计划(含预估工时)
4. 风险与阻塞项(需Leader关注的)`,
      product: `你是一位高级产品经理,请根据以下工作内容生成一份产品周报。
格式要求:
1. 本周产品迭代(功能上线/优化/数据变化)
2. 用户反馈摘要
3. 竞品动态(如有)
4. 下周产品计划`,
      sales: `你是一位销售总监,请根据以下工作内容生成一份销售周报。
格式要求:
1. 本周业绩数据(含环比变化)
2. 重点项目进展
3. 客户反馈
4. 下周销售计划与Pipeline`,
    };

    // 调用WorkBuddy生成
    const result = await wb.document.generate({
      prompt: prompts[template] || prompts.tech,
      context: content,
      style: style || 'professional',
      maxTokens: 2000,
      format: 'markdown',
    });

    // 存储到数据库
    const [dbResult] = await pool.execute(
      'INSERT INTO reports (user_id, template, content, report_html, created_at) VALUES (?, ?, ?, ?, NOW())',
      [userId, template, content, result.html]
    );

    res.json({
      code: 200,
      data: {
        report: {
          id: dbResult.insertId,
          markdown: result.markdown,
          html: result.html,
          wordCount: result.wordCount,
        },
      },
    });
  } catch (err) {
    console.error('生成失败:', err);
    res.status(500).json({ code: 500, message: '生成失败' });
  }
});

// 导出接口
app.post('/api/export', async (req, res) => {
  const { reportId, format } = req.body;

  const [rows] = await pool.execute(
    'SELECT * FROM reports WHERE id = ?', [reportId]
  );

  if (rows.length === 0) {
    return res.status(404).json({ code: 404, message: '报告不存在' });
  }

  const report = rows[0];

  // 调用WorkBuddy导出
  const exportResult = await wb.document.export({
    markdown: report.report_html,
    format: format, // docx / pdf
  });

  res.json({
    code: 200,
    data: { downloadUrl: exportResult.url },
  });
});

app.listen(3000, () => {
  console.log('🚀 AI周报生成器后端启动在 http://localhost:3000');
});

4.2 数据库设计

CREATE TABLE reports (
  id INT AUTO_INCREMENT PRIMARY KEY,
  user_id VARCHAR(64) NOT NULL,
  template VARCHAR(32) NOT NULL,
  content TEXT NOT NULL,
  report_html TEXT,
  report_markdown TEXT,
  word_count INT DEFAULT 0,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_user_id (user_id),
  INDEX idx_created_at (created_at)
);

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  openid VARCHAR(64) UNIQUE NOT NULL,
  nickname VARCHAR(64),
  plan VARCHAR(16) DEFAULT 'free', -- free / premium / team
  report_count INT DEFAULT 0,
  report_limit INT DEFAULT 5,       -- 免费版每月5份
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

五、部署与上线

5.1 腾讯云部署

# 1. 使用腾讯云CloudBase一键部署
tcb framework deploy

# 2. 或者手动部署到云服务器
# 使用PM2管理进程
npm install -g pm2
pm2 start server.js --name weekly-report-api
pm2 save
pm2 startup

5.2 微信小程序审核checklist

审核项 要求 状态
类目选择 工具→效率
隐私协议 独立的隐私政策页面 ⚠️ 需准备
用户授权 获取用户信息前需弹窗授权 ✅ 已实现
内容审核 生成内容需做合规检测 ⚠️ 需接入
服务器域名 配置request合法域名 ⚠️ 需配置
无运营内容 提交时可绕过(工具类)

5.3 合规注意事项

  • 生成的内容需接入腾讯云内容安全API做审核
  • 用户数据存储需符合《个人信息保护法》
  • 支付功能需申请微信支付商户号
  • 小程序名称需避免使用"官方""唯一"等绝对化用语

六、市场推广策略

6.1 冷启动三板斧

  1. CSDN发布教程文章(你正在做的事):写"如何用AI 3分钟生成周报"等教程贴,文末附小程序码
  2. 公司内部推广:先在自己团队的周五下午用起来,同事自然传播
  3. 模板裂变:用户可以创建自定义模板并分享,分享者获得免费次数

6.2 收入预估

用户规模 免费用户 付费转化率 月收入
1000 950 5%(50人×¥9.9) ¥495/月
10000 9500 5%(500人×¥9.9) ¥4,950/月
100000 95000 5%(5000人×¥9.9) ¥49,500/月

七、总结

本文从0到1完整拆解了一个基于WorkBuddy的小程序开发全流程:

  1. 需求验证:选对赛道(周报)是成功的一半
  2. 技术架构:微信小程序 + Node.js + WorkBuddy API + 腾讯云
  3. 前后端实现:完整的前端页面 + API服务代码
  4. 部署上线:腾讯云部署 + 微信审核注意事项
  5. 商业模式:免费增值 + 团队版

下一篇聚焦WorkBuddy最激动人心的部分——如何用它赚钱:6个已验证的盈利案例与完整商业模式拆解。

更多推荐