《我用API写了个自动回邮件机器人,结果把领导得罪了》
这事发生在上个月,现在想起来还是觉得很社死。
起因特别简单,我们部门每天要处理大量客户邮件,基本就是咨询产品功能、问报价、反馈BUG之类的。内容重复度很高,但回复又不能不回,领导嫌大家效率低,天天在群里催"邮件处理速度能不能快一点"。
我脑子一热,跟领导说:这个简单,我写个脚本自动回。
领导说好啊,年轻人有想法。
然后我就给自己挖了个坑,现在还没爬出来。
第一阶段:天真地以为很简单
我当时的想法就是调个API的事。现在大模型API这么成熟,我只需要把邮件内容传进去,让它生成回复,再调用SMTP发回去不就完了吗。
说干就干。
先申请了DeepSeek的API Key(当时觉得性价比高),充了50块钱进去,心想这够用很久了吧。
然后开始写代码。核心逻辑其实就那么几行:
python
import requests
import json
def get_ai_reply(email_content):
api_key = "sk-你的API密钥"
url = "https://api.deepseek.com/v1/chat/completions"
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
data = {
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": "你是某公司客服人员,负责回复客户邮件。要求回复专业、礼貌、简洁。"},
{"role": "user", "content": f"请回复以下客户邮件:\n{email_content}"}
],
"temperature": 0.7,
"max_tokens": 500
}
response = requests.post(url, headers=headers, data=json.dumps(data))
result = response.json()
return result["choices"][0]["message"]["content"]
跑了一下,能用,回复质量还行,就是有时候太啰嗦,我又加了句"控制在100字以内",效果好多了。
然后我写了个自动发邮件的模块:
python
import smtplib
from email.mime.text import MIMEText
from email.header import Header
def send_email(to_addr, subject, content):
smtp_server = "smtp.公司邮箱.com"
from_addr = "service@公司.com"
password = "邮箱授权码"
msg = MIMEText(content, "plain", "utf-8")
msg["From"] = Header("客服机器人", "utf-8")
msg["To"] = Header(to_addr, "utf-8")
msg["Subject"] = Header(f"回复:{subject}", "utf-8")
server = smtplib.SMTP(smtp_server, 25)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
最后用IMAP监听收件箱,来新邮件就触发整个流程:
python
import imaplib
import email
from email.header import decode_header
def check_inbox():
mail = imaplib.IMAP4_SSL("imap.公司邮箱.com")
mail.login("service@公司.com", "密码")
mail.select("INBOX")
status, messages = mail.search(None, "UNSEEN")
if status == "OK":
msg_ids = messages[0].split()
for msg_id in msg_ids:
status, data = mail.fetch(msg_id, "(RFC822)")
if status == "OK":
raw_email = data[0][1]
msg = email.message_from_bytes(raw_email)
subject = decode_header(msg["Subject"])[0][0]
from_addr = msg["From"]
# 提取邮件正文...(省略一大段编码处理的坑)
# 然后调用AI生成回复
# 然后调用send_email发出去
试了一下,整套流程跑通了,心里美滋滋。从收到邮件到自动回复,全程不到10秒。
第二阶段:上线了,噩梦开始了
我把代码部署到服务器上,跟领导说搞定了。领导挺高兴,说可以啊,先试运行几天看看效果。
然后第一个问题出现了。
有个客户发邮件问:"你们这个产品的报价是多少,我们想买10套。"
AI自动回复说:"您好,感谢您的咨询。10套的报价是人民币XX元,具体价格请联系我们的销售经理获取正式报价单。"
这个回复看起来没毛病对吧?问题是我根本没告诉AI报价是多少,它就自己编了一个数字。
客户回邮件说:"好的,那就按这个价格下单吧,麻烦发一下合同。"
然后AI又自动回了:"好的,合同已准备,我们会尽快安排销售人员与您联系。"
客户等了两天没人联系他,又发了封邮件质问。这时候我还没发现问题,直到领导被客户的电话打到手机上,说你们公司怎么回事,报完价就不理人了。
领导来问我,我一看日志,血压直接上来了。
第三个阶段:我加了"人工确认"按钮
出了这事之后,我把代码改了。不直接发了,改成生成回复之后先把邮件存到草稿箱,由人工确认之后再发。
但是这样一来,跟之前手动回复有什么区别呢?效率又降回去了。领导说你这整了半天等于没整。
我又想了个办法,加了个关键词过滤:
python
def need_manual_check(content):
keywords = ["报价", "价格", "多少钱", "合同", "下单", "购买"]
for kw in keywords:
if kw in content:
return True
return False
遇到这些关键词就转人工,其他自动回。
这招管用了一段时间,直到有一天客户的邮件标题是"关于近期合作的反馈",正文写了一大段,最后提了一句"希望价格方面能给予优惠"。
"价格"这个词触发了人工审核,但这封邮件其实不需要报价,只是老客户在正常沟通。结果自动回复没发,人工又漏看了,三天没回客户,客户直接投诉到老板那里去了。
老板在周会上点名批评了我们部门,说服务态度有问题。
我当时的表情,你们自行想象。
第四个阶段:我又搞了一个"学习"功能
这次我学聪明了,搞了一个简单的本地关键词库,把常见问题的回复模板存起来:
python
template_db = {
"发货时间": "您好,订单付款后3个工作日内发货,发货后会短信通知您。",
"售后": "您好,如遇产品质量问题,请提供订单号和问题描述,我们会尽快为您处理。",
"发票": "您好,发票会在订单完成后7个工作日内开具并发送到您的邮箱。"
}
def get_template_reply(content):
for key, value in template_db.items():
if key in content:
return value
return None
如果匹配不到模板,再调用大模型API生成。
这个方案效果还行,但问题是我得手动维护这个模板库。而且客户问的问题五花八门,模板很快就覆盖不全了。
到了后来,这个模板库越来越大,乱七八糟的规则堆在一起,我自己都看不下去了。
第五个阶段:彻底翻车了
真正让我彻底翻车的是上周的事。
有个客户发来一封邮件,措辞特别激烈:"你们的产品用了不到一个月就出问题了,客服也没人回复,这是什么服务态度?"
AI生成的回复是:"您好,非常抱歉给您带来不便。产品出现故障属于正常现象,请按照说明书进行自查,如无法解决请联系售后服务部门。"
我承认,这句"属于正常现象"是我的提示词里"专业"两个字惹的祸,AI想表现得专业,结果用了这种冷冰冰的表述。
问题是我当时没注意到这条回复被自动发出去了。等客户把截图发到朋友圈,配上文字"这家公司说产品出问题是正常现象",事情彻底炸了。
领导把我叫到办公室,说了一句我这辈子都忘不了的话:
"你是想用AI把我干走是吧?"
我当时真的想找个地缝钻进去。
现在的情况
那个机器人现在还在用,但功能被大幅削减了——只能处理三种最标准的咨询:发货时间、退换货流程、营业时间。而且所有回复都必须在后台列表里人工审核点击"确认发送"之后才能发出。
代码里加了个巨大的红色警告:
python
print("\033[91m警告:本回复将发送给客户,请再次确认内容无误!\033[0m")
每天大概有两百多封客户邮件,其中80%还是得人手动回。所谓的自动化基本形同虚设。
总结几条血的教训
-
用AI生成客服内容,绝对不要让它碰任何跟"钱"有关的词,什么报价、折扣、合同,碰了就完蛋
-
AI生成的回复看起来再正常也要人工过一遍,它编起瞎话来比真人还能编
-
不要把IMAP收件箱的密码硬编码在代码里,后来我改成了环境变量读取,因为这个代码被同事看到过好几次
-
最重要的,在跟领导汇报之前,先自己跑半个月看看效果,别上来就吹
哦对了,那个DeepSeek API里充的50块钱,到现在还剩三十多,因为后来基本没用过了。有需要的老铁私聊,我把余额转给你,不开了。
散了吧。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)