最近做的企微二开销售每天收几十封客户邮件——询价、投诉、合同确认要在企微和邮件两个地方切换处理。业务方要求把邮件接入企微——邮件进来自动推送到企微AI 分类后给销售销售在企微里就能回复邮件。这篇重点讲邮件和企微怎么打通、AI 怎么分类邮件、回复怎么从企微回到邮件。把调了哪些接口记下来。Eyun 平台开放的企微 API统一 POSTJSON鉴权用 App Token 加 appidAuthorization: Bearer eyk_xxxx路径{BASE_URL}/wx-api/api/模块/动作响应封套{code, data, detail, message, time}code 为 0 成功。邮件接收IMAP 拉新邮件后端定时用 IMAP 协议拉新邮件import imaplib import email def fetch_new_emails(): mail imaplib.IMAP4_SSL(imap.example.com) mail.login(salesexample.com, password) mail.select(inbox) # 拉未读邮件 _, data mail.search(None, UNSEEN) emails [] for num in data[0].split(): _, msg_data mail.fetch(num, (RFC822)) msg email.message_from_bytes(msg_data[0][1]) emails.append({ from: msg[From], subject: msg[Subject], body: get_body(msg) }) return emails拉到新邮件后每封邮件要推送到企微给对应销售。查销售调联系人接口邮件要推给谁按邮件发件人匹配负责销售。调联系人接口查import requests BASE https://api.eyun.com HEADERS {Authorization: Bearer eyk_xxxx, Content-Type: application/json} def find_sales_for_customer(appid, customer_email): # 按邮箱查客户找到负责销售 resp requests.post( f{BASE}/wx-api/api/contact/search, headersHEADERS, json{appid: appid, keyword: customer_email} ) data resp.json()[data] if data.get(list): customer data[list][0] return customer.get(owner_uin) # 负责销售uin return None查不到负责销售的邮件推给公共客服组。接口路径在 Eyun 平台开发文档。AI 分类邮件邮件推给销售前AI 先分类——询价、投诉、合同、其他让销售一眼看出优先级def classify_email(subject, body): prompt f 邮件主题{subject} 邮件内容{body[:500]} 分类到询价 / 投诉 / 合同 / 售后 / 其他 并提取关键信息客户公司、产品、金额如有 result llm.chat(prompt) return {category: result[category], info: result[info]}AI 分类让销售不用每封邮件都读全文看分类和关键信息就知道该不该优先处理。推送邮件到企微调 sendRichText邮件分类后推送到销售的企微发卡片带分类标签和操作按钮def push_email_card(appid, to_uin, email_data, classification): card { title: f[{classification[category]}] {email_data[subject]}, description: f发件人{email_data[from]}\n{classification[info]}, url: fhttps://mail.example.com/view/{email_data[id]}, buttons: [ {text: 查看邮件, url: fhttps://mail.example.com/view/{email_data[id]}}, {text: 在企微回复, action: reply_email, data: {email_id: email_data[id]}} ] } requests.post( f{BASE}/wx-api/api/message/sendRichText, headersHEADERS, json{appid: appid, to: to_uin, cards: [card]} )卡片带在企微回复按钮——销售点按钮直接在企微里输入回复内容不用切到邮件客户端。关于消息卡片和交互按钮在Eyun 企业微信 API 平台有说明。接收回复Webhook 收按钮回调销售点在企微回复输入内容Webhook 回调进来from flask import Flask, request app Flask(__name__) app.route(/wx-api/webhook/, methods[POST]) def webhook(): event request.headers.get(X-Eyun-Event) if event card.action.trigger: payload request.json[data] if payload[action] reply_email: email_id payload[data][email_id] from_uin payload[fromUin] # 接下来让销售输入回复内容 send_text(payload[appid], from_uin, 请输入回复内容) elif event message: # 销售输入的回复内容 payload request.json[data] if waiting_for_email_reply(payload[fromUin]): content payload[content] email_id get_pending_email(payload[fromUin]) send_email_reply(email_id, content) send_text(payload[appid], payload[fromUin], 邮件已回复) return ok卡片按钮回调和消息回调都走 Webhook按事件类型区分。销售在企微输入回复内容后端拿到后调邮件接口发出去。发送邮件SMTP回复内容从企微拿到后通过 SMTP 发邮件import smtplib from email.mime.text import MIMEText def send_email_reply(email_id, reply_content): original email_store.get(email_id) msg MIMEText(reply_content, plain, utf-8) msg[Subject] fRe: {original[subject]} msg[From] salesexample.com msg[To] original[from] smtp smtplib.SMTP_SSL(smtp.example.com, 465) smtp.login(salesexample.com, password) smtp.send_message(msg) smtp.quit()邮件发完后调企微接口通知销售邮件已回复。不做通知销售不知道发出去没。邮件转任务调标签接口重要邮件投诉、合同要转成任务跟踪。调标签接口给客户打标签记录def create_task_from_email(appid, email_data, classification): if classification[category] 投诉: # 调标签接口给客户打投诉标签 customer_uin find_customer_uin(appid, email_data[from]) requests.post( f{BASE}/wx-api/api/label/updateLabel, headersHEADERS, json{appid: appid, uin: customer_uin, labels: [投诉待处理]} )邮件不只是看完就完重要邮件要转成任务、打标签、跟踪到闭环。关于标签和客户管理接口在开发文档里。写在最后AI 邮件助手这套东西本质是把邮件协议IMAP/SMTP和企微接口串起来——IMAP 拉邮件、contact/search 查负责销售、AI 分类、sendRichText 推卡片到企微、销售在企微回复、SMTP 发邮件、updateLabel 打标签转任务。把邮件和企微打通销售不用在两个系统切换邮件进来企微就看到、企微里回复就发出。