OpenClaw 自动化工作流:打造高效智能工作流

自动化是提升效率的关键。OpenClaw 提供了强大的自动化工作流功能,让你的 AI 助手能够自动执行各种任务。本文将详细介绍如何利用 OpenClaw 构建高效的自动化工作流,从基础概念到实际案例,帮助你充分发挥 AI 的自动化潜力。

自动化工作流基础

什么是工作流?

工作流是一系列自动化步骤的组合,可以理解为:

触发条件 → 执行动作 → 判断条件 → 循环/结束

OpenClaw 自动化能力

类型 说明 示例
触发式 响应特定事件 用户消息、webhook
定时式 按计划执行 每日报告
条件式 满足条件执行 数据达到阈值
链式 多步骤串联 搜索→摘要→翻译

工作流核心组件

1. 触发器(Triggers)

消息触发

triggers:
  - type: "message"
    platform: "telegram"
    patterns:
      - "查天气 (.+)"
      - "天气 (.+)"

定时触发

triggers:
  - type: "cron"
    schedule: "0 8 * * *"  # 每天早上8点
    timezone: "Asia/Shanghai"

Webhook 触发

triggers:
  - type: "webhook"
    path: "/webhook/github"
    events:
      - "push"
      - "pull_request"

条件触发

triggers:
  - type: "condition"
    check: "data.value > threshold"

2. 动作(Actions)

发送消息

actions:
  - type: "send_message"
    platform: "telegram"
    target: "${user.id}"
    content: "任务完成!"

调用技能

actions:
  - type: "call_skill"
    skill: "weather"
    params:
      city: "北京"

API 请求

actions:
  - type: "http_request"
    method: "POST"
    url: "https://api.example.com/notify"
    headers:
      Authorization: "Bearer ${API_TOKEN}"
    body:
      message: "Hello"

数据存储

actions:
  - type: "store"
    key: "task_result"
    value: "${result}"
    ttl: 86400  # 24小时

3. 条件(Conditions)

conditions:
  - if: "${result.success}"
    then:
      - type: "send_message"
        content: "成功"
    else:
      - type: "send_message"
        content: "失败"

4. 循环(Loops)

loops:
  - for_each: "item in items"
    actions:
      - type: "call_skill"
        skill: "process"
        params:
          data: "${item}"

实际工作流案例

案例 1:每日自动报告

场景:每天早上自动生成并发送数据报告

name: "daily-report"
version: "1.0.0"

triggers:
  - type: "cron"
    schedule: "0 8 * * *"
    timezone: "Asia/Shanghai"

steps:
  # 步骤1:获取数据
  - name: "fetch_data"
    action:
      type: "http_request"
      method: "GET"
      url: "https://api.example.com/stats"
      headers:
        Authorization: "Bearer ${API_KEY}"
    output:
      - variable: "stats"

  # 步骤2:生成报告
  - name: "generate_report"
    action:
      type: "call_skill"
      skill: "report-generator"
      params:
        data: "${stats}"
        template: "daily"
    output:
      - variable: "report"

  # 步骤3:发送到 Telegram
  - name: "notify_telegram"
    action:
      type: "send_message"
      platform: "telegram"
      target: "${TELEGRAM_ADMIN_ID}"
      content: "${report}"

  # 步骤4:发送到 Discord
  - name: "notify_discord"
    action:
      type: "send_message"
      platform: "discord"
      target: "${DISCORD_CHANNEL_ID}"
      content: "${report}"

案例 2:智能客服工作流

场景:自动回答常见问题,复杂问题转人工

name: "customer-service"
version: "1.0.0"

triggers:
  - type: "message"
    platform: "telegram"
    groups:
      - "${SUPPORT_GROUP_ID}"

steps:
  # 步骤1:理解用户问题
  - name: "analyze_question"
    action:
      type: "llm"
      prompt: |
        分析用户的问题,判断属于哪种类型:
        - 常见问题(可直接回答)
        - 复杂问题(需要人工处理)
        - 投诉(需要升级)

        用户问题:${message.content}
    output:
      - variable: "question_type"

  # 步骤2:条件分支
  - condition:
      if: "${question_type == '常见问题'}"
      then:
        # 查找常见问题答案
        - name: "search_faq"
          action:
            type: "search_knowledge"
            query: "${message.content}"
          output:
            - variable: "answer"

        # 发送答案
        - name: "send_answer"
          action:
            type: "send_message"
            content: "${answer}"

      else:
        if: "${question_type == '复杂问题'}"
        then:
          # 转人工处理
          - name: "escalate"
            action:
              type: "notify_admin"
              message: "需要人工处理:${message.content}"

          - name: "confirm"
            action:
              type: "send_message"
              content: "您的问题已转接人工客服,请稍候..."

案例 3:数据收集与分析

场景:定期收集社交媒体数据并分析

name: "social-media-analytics"
version: "1.0.0"

triggers:
  - type: "cron"
    schedule: "0 */6 * * *"  # 每6小时

steps:
  # 步骤1:收集 Twitter 数据
  - name: "fetch_twitter"
    action:
      type: "call_skill"
      skill: "twitter-scraper"
      params:
        keywords: "OpenClaw, AI Agent"
        limit: 100
    output:
      - variable: "twitter_data"

  # 步骤2:收集 Discord 数据
  - name: "fetch_discord"
    action:
      type: "call_skill"
      skill: "discord-analytics"
      params:
        guild: "${DISCORD_GUILD_ID}"
    output:
      - variable: "discord_data"

  # 步骤3:合并数据
  - name: "merge_data"
    action:
      type: "call_skill"
      skill: "data-merge"
      params:
        source1: "${twitter_data}"
        source2: "${discord_data}"
    output:
      - variable: "merged_data}"

  # 步骤4:生成分析
  - name: "analyze"
    action:
      type: "llm"
      prompt: |
        分析以下社交媒体数据,生成趋势报告:

        ${merged_data}

        请分析:
        1. 主要话题
        2. 用户情绪
        3. 增长趋势
    output:
      - variable: "analysis"

  # 步骤5:存储结果
  - name: "store_result"
    action:
      type: "store"
      key: "social_analytics_${timestamp}"
      value: "${analysis}"

  # 步骤6:发送报告
  - name: "notify"
    action:
      type: "send_message"
      platform: "telegram"
      target: "${ADMIN_ID}"
      content: "📊 社交媒体分析报告\n\n${analysis}"

案例 4:GitHub 事件处理

场景:自动处理 GitHub PR 和 Issue

name: "github-handler"
version: "1.0.0"

triggers:
  - type: "webhook"
    path: "/webhook/github"
    events:
      - "pull_request"
      - "issues"

steps:
  # 解析事件
  - name: "parse_event"
    action:
      type: "parse_json"
      data: "${webhook.payload}"
    output:
      - variable: "event_type"
      - variable: "action"
      - variable: "pr_title"
      - variable: "issue_body"

  # PR 处理流程
  - condition:
      if: "${event_type == 'pull_request'}"
      then:
        # 触发代码审查
        - name: "code_review"
          action:
            type: "call_skill"
            skill: "code-review"
            params:
              pr_url: "${pr.url}"
              pr_diff: "${pr.diff}"
          output:
            - variable: "review_result"

        # 添加评论
        - name: "add_review_comment"
          action:
            type: "http_request"
            method: "POST"
            url: "${pr.comments_url}"
            body:
              body: "${review_result}"

  # Issue 处理流程
  - condition:
      if: "${event_type == 'issues'}"
      then:
        # 分类 Issue
        - name: "classify_issue"
          action:
            type: "llm"
            prompt: |
              分类以下 GitHub Issue:
              类型:Bug / Feature / Question / Other
              优先级:High / Medium / Low

              Issue 内容:${issue_body}
          output:
            - variable: "issue_classification"

        # 添加标签
        - name: "add_labels"
          action:
            type: "http_request"
            method: "POST"
            url: "${issue.labels_url}"
            body:
              labels: "${issue_classification.labels}"

案例 5:内容审核工作流

场景:自动审核用户提交的内容

name: "content-moderation"
version: "1.0.0"

triggers:
  - type: "message"
    platforms:
      - "telegram"
      - "discord"

steps:
  # 步骤1:内容检测
  - name: "detect_content"
    action:
      type: "call_skill"
      skill: "content-moderator"
      params:
        text: "${message.content}"
    output:
      - variable: "moderation_result"

  # 步骤2:条件处理
  - condition:
      if: "${moderation_result.safe}"
      then:
        # 内容通过,发布
        - name: "publish"
          action:
            type: "publish_content"
            content: "${message.content}"

      else:
        if: "${moderation_result.risk == 'low'}"
        then:
          # 低风险,标记后通过
          - name: "flag_and_publish"
          - action:
              type: "add_flag"
              reason: "${moderation_result.reason}"
          - action:
              type: "publish_content"

        else:
          # 高风险,拦截
          - name: "block"
            action:
              type: "send_message"
              content: "抱歉,您提交的内容未通过审核"
            action:
              type: "notify_admin"
            message: "高风险内容需要审核:${message.content}"

工作流最佳实践

1. 错误处理

steps:
  - name: "main_action"
    try:
      action:
        type: "http_request"
        ...
    catch:
      - name: "handle_error"
        action:
          type: "notify_admin"
          message: "工作流执行失败:${error}"
        action:
          type: "retry"
            maxAttempts: 3
            delay: 1000

2. 超时控制

steps:
  - name: "long_task"
    timeout: 300000  # 5分钟
    action:
      type: "call_skill"
      skill: "heavy-task"

3. 幂等性设计

确保工作流可以安全重试:

steps:
  - name: "create_record"
    idempotency_key: "${workflow.id}_${step.id}"
    action:
      type: "create_database_record"

4. 监控与日志

workflow:
  name: "monitored-workflow"

  settings:
    logLevel: "debug"
    notifyOnFailure: true
    notifyChannels:
      - "telegram:${ADMIN_ID}"

高级功能

并行执行

steps:
  - parallel:
      - name: "task1"
        action: ...
      - name: "task2"
        action: ...
      - name: "task3"
        action: ...
    then:
      - name: "aggregate"
        action: ...

动态步骤

steps:
  - name: "dynamic_steps"
    action:
      type: "generate_steps"
      based_on: "${user.preferences}"

总结

OpenClaw 的自动化工作流功能强大且灵活,能够满足各种场景的需求:

  • 触发器:消息、定时、Webhook、条件
  • 动作:消息、技能、HTTP、存储
  • 流程控制:条件分支、循环、并行
  • 错误处理:重试、超时、告警

通过合理设计工作流,可以大幅提升工作效率,让 AI 真正成为你的智能助手。


相关阅读: - OpenClaw 定时任务 - OpenClaw 技能开发 - OpenClaw 最佳实践