📅  最后修改于: 2023-12-03 15:06:50.733000             🧑  作者: Mango
Rasa 是一种流行的开源聊天机器人开发框架,能够帮助程序员快速开发复杂的对话系统。在本文中,我们将介绍如何使用 Rasa 聊天机器人来自动发送电子邮件。
要使用 Rasa,首先需要安装 Rasa 的 Python 包。可以通过以下命令来安装:
pip install rasa
要从聊天机器人中发送电子邮件,必须将邮件账户配置到 Rasa 的配置文件中。可以在 credentials.yml
文件中配置邮件账户,例如:
# credentials.yml
smtp:
# 发件人邮箱地址
username: example@gmail.com
# 发件人邮箱密码或授权码
password: password123
# 发件人的SMTP服务器
server: smtp.gmail.com
# 发件人SMTP服务器的端口
port: 587
# 是否启用TLS加密
tls: true
上面的示例使用 Gmail 作为 SMTP 服务器,需要提供正确的发件人地址和密码/授权码。请注意,这种方式可能需要开启Gmail的“允许较低安全性应用访问您的账号”设置。
接下来,需要编写 Rasa 的对话流程,以便让用户告诉机器人要发送哪封电子邮件,以及邮件的主题和内容。下面是一个简单的对话流程示例,可以在 domain.yml
文件中定义:
# domain.yml
intents:
- send_email:
# 匹配这个意图的常见说法
examples: |
- 发送邮件
- 发送电子邮件
- 发送一封邮件
# 用于提取主题和内容的实体
entities:
- subject
- body
actions:
- action_send_email:
# 发送邮件的实现代码(参见下面的代码段)
smtp_server: smtp.gmail.com
smtp_port: 587
smtp_username: "\<email address\>"
smtp_password: "\<email password or auth token\>"
to_email: ""
subject: ""
body: ""
templates:
utter_ask_email_to:
- "请告诉我收件人的邮箱地址。"
utter_ask_email_subject:
- "请告诉我邮件的主题。"
utter_ask_email_body:
- "请告诉我邮件的正文。"
utter_email_sent:
- "电子邮件已发送。"
上面的示例定义了一个意图 send_email
,其中包含 subject
和 body
实体,用于提取电子邮件的主题和内容。还定义了一个动作 action_send_email
,用于实现发送电子邮件的逻辑。
在 utter_ask_email_to
、utter_ask_email_subject
和 utter_ask_email_body
模板中,指定了对话中问询用户的对话动作。当机器人遇到 send_email
意图时,将提示用户提供收件人、邮件主题和内容。当邮件发送成功时,机器人将显示 utter_email_sent
模板。
下面是一个 Python 实现的发送电子邮件动作的示例,可以在 actions.py
文件中定义:
# actions.py
from typing import Dict, Text, Any, List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
class ActionSendEmail(Action):
def name(self) -> Text:
return "action_send_email"
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
smtp_server = tracker.get_slot("smtp_server")
smtp_port = tracker.get_slot("smtp_port")
smtp_username = tracker.get_slot("smtp_username")
smtp_password = tracker.get_slot("smtp_password")
to_email = tracker.get_slot("to_email")
subject = tracker.get_slot("subject")
body = tracker.get_slot("body")
# 创建包含正文和附件的多部分邮件
msg = MIMEMultipart()
# 将HTML内容添加到邮件正文中
body = MIMEText(body, "html")
msg.attach(body)
try:
# 使用SMTP凭证进行登录
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(smtp_username, smtp_password)
# 设置邮件头部
msg["From"] = smtp_username
msg["To"] = to_email
msg["Subject"] = subject
# 将多部分邮件转换为字符串并发送
server.sendmail(smtp_username, to_email, msg.as_string())
server.quit()
dispatcher.utter_message(template="utter_email_sent")
except Exception as e:
dispatcher.utter_message(text="发送邮件时出错:{}".format(str(e)))
return []
上面的示例使用 smtplib
库与 SMTP 服务器进行交互,以便将电子邮件发送到给定的收件人地址。在 ActionSendEmail
类中, run
方法获取从对话轨迹中提取到的电子邮件的主要信息,并使用以下步骤将邮件发送出去:
最后,启动 Rasa 服务并通过终端或聊天客户端与机器人进行交互。使用以下命令启动 Rasa 服务:
rasa run --endpoints endpoints.yml --credentials credentials.yml --enable-api --debug
现在可以向机器人说 “发送一封邮件” 并按照提示提供收件人、主题和内容信息。当一切正常时,机器人将发送一封电子邮件到指定的收件人地址,并显示“电子邮件已发送”的消息。
在本文中,我们介绍了如何使用 Rasa 聊天机器人框架来自动发送电子邮件。通过定义意图、实体和对话流程,以及实现发送电子邮件动作,可以轻松地集成电子邮件发送功能到聊天机器人中,以提供更强大的用户体验。