Email Triage and Response Automation with OpenClaw

Automate email triage, categorization, and intelligent responses with OpenClaw AI agents. Process hundreds of daily emails with zero manual sorting and faster response times.

E
ECOSIRE Research and Development Team
|2026年3月19日4 分钟阅读863 字数|

使用 OpenClaw 进行电子邮件分类和响应自动化

知识工作者平均每天花费 2.6 小时管理电子邮件。对于面向客户的团队、销售开发代表和行政助理来说,这个数字更高,而且其中很大一部分时间花在有能力的系统可以处理的任务上:按紧急程度对电子邮件进行排序、将查询路由给合适的人、回答常见问题、安排会议请求以及跟进未完成的线程。这些任务需要理解,但不需要创造力。它们正是 OpenClaw 代理的构建任务。

OpenClaw 电子邮件自动化超越了基于关键字的规则。电子邮件分类代理以熟练的人类助理的方式阅读每封电子邮件:了解上下文、推断意图、识别发件人与您的业务的关系,以及做出智能路由和响应决策。本指南涵盖了企业部署的完整电子邮件自动化架构。

要点

  • OpenClaw 的电子邮件分类代理可在两秒内按类型(查询、投诉、发票、会议请求、垃圾邮件、内部通知)和优先级对电子邮件进行分类。
  • 代理起草重复查询的回复,自动发送或根据您的政策将其发送给人工批准。
  • 端到端处理会议安排请求:代理检查日历可用性、建议时间、确认预订并发送邀请。
  • 代理维护线程上下文 - 同一线程中的后续电子邮件在了解对话历史记录的情况下进行处理。
  • 情绪升级检测会立即将苦恼或愤怒的发件人转给人工处理人员,无论主题如何。
  • 敏感电子邮件类别(法律声明、监管信函、企业帐户投诉)会被标记,并且不会自动回复。
  • 与 Gmail、Outlook (Microsoft 365) 和任何 IMAP/SMTP 兼容的电子邮件系统集成。
  • ECOSIRE 为执行团队、客户服务部门和销售开发运营构建 OpenClaw 电子邮件自动化。

架构:电子邮件自动化堆栈

电子邮件自动化管道由四个按顺序工作的代理组成:

Inbound Email
      ↓
[ Triage Agent ]         — classify type, priority, sender relationship, intent
      ↓
[ Response Agent ]       — draft appropriate response or action
      ↓
[ Review Gate ]          — auto-send, human-approve, or escalate
      ↓
[ Follow-up Agent ]      — track replies, manage open threads, send reminders

审核门可按电子邮件类别进行配置。对于内部通知,代理可以立即采取行动。对于客户询问,草稿将作为建议回复发送到收件箱,供人工发送。对于垃圾邮件和营销邮件,代理会自动存档。对于敏感类别,代理会标记但不响应。


电子邮件集成:连接到您的邮箱

OpenClaw 通过标准协议和 OAuth 连接到电子邮件。 Gmail 的推荐架构:

export const GmailTool = defineTool({
  name: "email",
  type: "google-gmail",
  auth: {
    type: "oauth2",
    clientId: "${GOOGLE_CLIENT_ID}",
    clientSecret: "${GOOGLE_CLIENT_SECRET}",
    refreshToken: "${GMAIL_REFRESH_TOKEN}", // Stored in Vault
    scopes: [
      "https://www.googleapis.com/auth/gmail.readonly",
      "https://www.googleapis.com/auth/gmail.send",
      "https://www.googleapis.com/auth/gmail.modify",
    ],
  },
  polling: {
    intervalMs: 30_000, // Check every 30 seconds
    maxResults: 50,
    labelFilter: ["INBOX", "UNREAD"],
  },
});

对于 Microsoft 365,该工具使用具有类似 OAuth 配置的 Microsoft Graph API。对于其他电子邮件系统,IMAP 工具提供兼容性:

export const ImapTool = defineTool({
  name: "email",
  type: "imap",
  config: {
    host: "${IMAP_HOST}",
    port: 993,
    tls: true,
    auth: { user: "${EMAIL_ADDRESS}", pass: "${EMAIL_PASSWORD}" },
    smtpHost: "${SMTP_HOST}",
    smtpPort: 587,
  },
});

电子邮件轮询按可配置的时间间隔运行。对于大容量收件箱(每天 1,000 多封电子邮件),通过 Gmail 的 Pub/Sub 集成或 Outlook 的 Webhook 订阅的推送通知模型可提供实时处理,而无需轮询开销。


分类代理:了解每封电子邮件

分类代理按照四个维度对每封传入电子邮件进行分类:

类型:这封电子邮件属于什么类别?常见类型包括:客户查询、销售机会、供应商沟通、发票/账单、会议请求、投诉、法律通知、内部通知、营销/促销、垃圾邮件、时事通讯。

优先级:需要关注的紧急程度如何?优先级由发件人关系(企业帐户与未知联系人)、类型(法律通知始终为高优先级)、情绪(愤怒或苦恼信号高优先级)和明确的时间参考(“我需要在周五之前收到”)决定。

意图:发件人想要什么?安排通话、获取问题答案、请求退款、提交投诉、确认会议、批准文件。

发件人关系:此发件人是客户吗(如果是,是什么级别)?供应商?销售渠道中的潜在客户?内部同事?第一次接触?发件人的电子邮件域与您的 CRM 和 ERP 相匹配,以丰富分类上下文。

export const TriageEmail = defineSkill({
  name: "triage-email",
  tools: ["email", "crm", "llm"],
  async run({ input, tools }) {
    const email = await tools.email.getMessage(input.messageId);

    // Enrich sender context
    const senderContext = await tools.crm.findByEmail(email.from.address);

    // Classify with LLM
    const classification = await tools.llm.classify({
      prompt: buildTriagePrompt(email, senderContext),
      schema: {
        type: z.enum(["customer-inquiry", "sales-opportunity", "complaint", "invoice",
                       "meeting-request", "legal-notice", "internal", "spam", "other"]),
        priority: z.enum(["urgent", "high", "normal", "low"]),
        intent: z.string().max(100),
        requiresHuman: z.boolean(),
        requiresHumanReason: z.string().optional(),
        sentiment: z.enum(["positive", "neutral", "negative", "distressed"]),
      },
    });

    // Emotional escalation — always to human
    if (classification.sentiment === "distressed" || classification.type === "legal-notice") {
      return {
        ...classification,
        requiresHuman: true,
        requiresHumanReason: classification.sentiment === "distressed" ? "Distressed sender" : "Legal notice",
        autoAction: "FLAG_FOR_HUMAN",
      };
    }

    return { ...classification, senderContext };
  },
});

回复代理:起草上下文准确的回复

对于符合自动回复条件的电子邮件(客户有关订单状态、常见问题解答、安排请求的询问),回复代理会以组织的通信方式起草回复。

响应质量取决于代理可以获得的知识。响应代理查询:

  • 事实答案的知识库(产品规格、定价、政策)
  • 客户特定信息的 CRM(账户状态、未结订单、之前的交互)
  • 安排时可用的日历
  • ERP 中的订单和发票详细信息
export const DraftEmailResponse = defineSkill({
  name: "draft-email-response",
  tools: ["email", "crm", "knowledge-base", "erp", "calendar", "llm"],
  async run({ input, tools }) {
    const { email, classification, senderContext } = input;
    let contextData: Record<string, any> = {};

    // Gather relevant context based on email type
    if (classification.type === "customer-inquiry" && senderContext?.customerId) {
      contextData.recentOrders = await tools.erp.getRecentOrders(senderContext.customerId, { limit: 3 });
      contextData.openTickets = await tools.crm.getOpenTickets(senderContext.customerId);
    }

    if (classification.intent.includes("schedule") || classification.type === "meeting-request") {
      contextData.availability = await tools.calendar.getFreeSlots({ days: 7, duration: 30 });
    }

    // Query knowledge base for relevant answers
    const knowledgeResults = await tools.knowledgeBase.search(email.body, { topK: 3 });
    contextData.knowledgeAnswers = knowledgeResults;

    // Generate draft
    const draft = await tools.llm.generate({
      prompt: buildResponsePrompt(email, classification, senderContext, contextData),
      systemPrompt: loadBrandVoiceGuide(), // Tone, style, sign-off format
      maxTokens: 500,
      temperature: 0.3,
    });

    return {
      draft,
      contextUsed: Object.keys(contextData),
      confidence: knowledgeResults[0]?.confidence ?? 0.5,
    };
  },
});

品牌声音一致性:生成响应的系统提示包括您组织的沟通风格指南:正式级别、首选结束语、如何称呼客户(直呼名字或正式)以及要使用或避免的特定短语。这可以确保代理起草的回复在风格上与您团队的写作(如果不是作者身份)没有区别。


会议安排:消除来回的日历

会议安排电子邮件数量大、创意性低——它们遵循座席可以出色处理的可预测模式。当分类代理识别出会议请求时,安排响应流程将激活。

export const HandleMeetingRequest = defineSkill({
  name: "handle-meeting-request",
  tools: ["calendar", "email"],
  async run({ input, tools }) {
    const { email, requestedDuration } = input;

    // Find available slots
    const slots = await tools.calendar.getFreeSlots({
      duration: requestedDuration ?? 30,
      days: 7,
      businessHoursOnly: true,
      timezone: inferTimezone(email),
    });

    if (slots.length === 0) {
      return {
        action: "DRAFT_RESPONSE",
        message: "No available slots in the next 7 days — response template: suggest extending the window",
        requiresHuman: true,
      };
    }

    const topSlots = slots.slice(0, 3);

    // Create a scheduling page link (or include times directly in the email)
    const schedulingLink = await tools.calendar.createSchedulingPage({
      slots: topSlots,
      title: `Meeting with ${input.hostName}`,
      duration: requestedDuration ?? 30,
      confirmationEmailTemplate: "meeting-confirmed",
    });

    const draft = buildSchedulingResponse(email, topSlots, schedulingLink, input.hostName);

    return { action: "DRAFT_READY", draft, schedulingLink };
  },
});

当收件人单击计划链接中的某个位置时,Webhook 会触发预订日历事件的确认技能,向所有各方发送日历邀请,并通过确认关闭电子邮件线程。


线程上下文管理

电子邮件对话跨越多条消息。后续电子邮件仅在前一个线程的上下文中才有意义。线程管理器维护每个打开线程的语义摘要,该摘要随着新消息的到达而更新。

export const UpdateThreadContext = defineSkill({
  name: "update-thread-context",
  tools: ["email"],
  async run({ input, tools, memory }) {
    const threadKey = `thread:${input.threadId}`;
    const existingContext = await memory.episode.get(threadKey);

    const newMessages = await tools.email.getThreadMessages(input.threadId, {
      since: existingContext?.lastMessageId ?? null,
    });

    const updatedSummary = await summarizeThread([
      ...(existingContext?.messages ?? []),
      ...newMessages,
    ]);

    await memory.episode.set(threadKey, {
      threadId: input.threadId,
      summary: updatedSummary,
      lastMessageId: newMessages[newMessages.length - 1]?.id,
      openItems: extractOpenItems(updatedSummary),
      lastUpdated: new Date().toISOString(),
    });

    return { summary: updatedSummary };
  },
});

当新消息到达线程时,分类和响应代理会接收线程摘要作为上下文,因此它们可以了解完整的对话历史记录,而无需重新读取每条消息。


后续跟踪:没有任何遗漏

后续代理监视组织发送消息但尚未收到回复的打开线程。经过一段可配置的时间(通常为 3 个工作日用于客户外展,1 天用于时间敏感的销售跟进)后,它会起草一封后续电子邮件并将其路由到适当的审核门。

export const TrackOpenThreads = defineSkill({
  name: "track-open-threads",
  tools: ["email"],
  async run({ input, tools, memory }) {
    const sentEmails = await tools.email.getSentMessages({
      since: hoursAgo(24 * 7), // Last week's sent emails
      excludeInternalDomains: true,
    });

    const waitingForReply = [];
    for (const sent of sentEmails) {
      const thread = await tools.email.getThread(sent.threadId);
      const lastMessage = thread.messages[thread.messages.length - 1];
      const weWroteLastMessage = lastMessage.from.address === input.ourEmailAddress;

      if (weWroteLastMessage) {
        const daysSinceSent = daysSince(lastMessage.date);
        if (daysSinceSent >= input.followUpAfterDays) {
          waitingForReply.push({ threadId: sent.threadId, daysSinceSent, subject: sent.subject });
        }
      }
    }

    return { waitingForReply, count: waitingForReply.length };
  },
});

敏感电子邮件处理:代理从不自动回复的内容

某些电子邮件类别永远不应收到自动回复。分类代理会立即标记这些内容以供人工处理:

  • 法律声明、停止函、监管信函
  • 超过收入门槛的企业账户的投诉
  • 提及媒体、报刊或新闻业的电子邮件
  • 带有建议法律文件的附件类型的电子邮件(具有听起来合法的文件名模式的 PDF)
  • 网络钓鱼或社会工程尝试(标记并隔离,不回应)
  • 分类置信度非常低的电子邮件(代理不确定电子邮件的内容)

标记系统添加标签并在团队的工作流程系统中创建任务 - 电子邮件永远不会丢失,只是路由到人手中。


常见问题

代理如何在响应中保持人类作者身份的外观?

响应代理根据发送者的通信风格进行配置:首选短语、签字格式、典型响应长度和正式级别。草稿就是以这种风格生成的。对于在发送前审查回复的团队,如果需要,人员会编辑草稿并自行发送——电子邮件来自他们的地址,没有任何人工智能协助的迹象。对于完全自动化的响应(常见问题解答、订单状态),组织可以选择在电子邮件页脚中公开自动化。

当客服人员对如何回应没有信心时会发生什么?

每个电子邮件类别的置信阈值都是可配置的。当代理对其分类或建议响应的置信度低于阈值时,它会通过建议的操作而不是自动响应路由到人工审核队列。人员可以一键批准建议、修改建议或手动处理。通过学习反馈循环,每个获得批准的建议都会提高客服人员未来对类似电子邮件的信心。

代理可以处理多种语言的电子邮件吗?

是的。语言检测是分类流程的第一步。如果知识库包含该语言的内容,代理可以使用与传入电子邮件相同的语言起草回复。对于知识库仅为英语的语言,代理会将其响应草稿翻译为发件人的语言。对于基础法学硕士具有广泛培训覆盖范围的语言(西班牙语、法语、德语、中文、日语、葡萄牙语、阿拉伯语),非英语语言的响应质量最高。

后续跟踪器如何避免过于激进地发送提醒?

后续代理在发送提醒之前检查收件人的参与信号。如果收件人已打开上一封电子邮件(通过已读回执进行跟踪,如果有的话)但没有回复,则后续行动会比较温和,并假设他们正在考虑。如果没有开盘信号,后续就更直接了。该代理还尊重选择退出信号:如果之前的后续跟进生成了要求不要联系的回复,则该线程将被标记为关闭,并且不会发送进一步的后续跟进。

是否有对电子邮件执行的所有自动操作的审核跟踪?

是的。每个自动化操作(分类分类、草稿生成、自动发送、标签应用、存档)都会记录时间戳、代理的分类理由和电子邮件的消息 ID。管理员可以访问审核日志,并且可以导出审核日志以进行合规性审查。对于有电子邮件归档要求的组织,OpenClaw 的操作不会干扰您现有的电子邮件归档解决方案。


后续步骤

对于大多数专业团队来说,电子邮件是一个大容量、低创造力的瓶颈。 OpenClaw 电子邮件自动化处理排序、路由和重复响应,因此您的团队专注于需要人类判断、建立关系和创造力的对话。

ECOSIRE 的 OpenClaw 服务 包括为客户服务团队、行政助理、销售开发运营和供应商管理功能实施电子邮件自动化。我们的团队配置分类规则、知识库、品牌声音指南和审查门,以符合您组织的沟通标准。

联系 ECOSIRE 讨论您的电子邮件自动化要求并接收实施估算。

E

作者

ECOSIRE Research and Development Team

在 ECOSIRE 构建企业级数字产品。分享关于 Odoo 集成、电商自动化和 AI 驱动商业解决方案的洞见。

通过 WhatsApp 聊天