使用 Rasa 聊天机器人发送自动电子邮件
Rasa 是一个用于创建自定义 AI 聊天机器人的Python模块。您可以使用 rasa 聊天机器人轻松地向您的用户发送自动电子邮件。 Rasa 是一种使用Python和自然语言理解 (NLU) 构建自定义 AI 聊天机器人的工具。 Rasa 提供了一个用于开发使用自然语言理解 (NLU) 的 AI 聊天机器人的框架。它还允许用户训练模型并添加自定义操作。
在本文中,我们将了解如何使用 Rasa 发送电子邮件。
流程图:
创建 Rasa 聊天机器人
首先,您需要一个 rasa 聊天机器人,通过它您可以发送自动电子邮件。
要安装 rasa 模块,请在终端中键入以下命令(需要Python 3.6、3.7 或 3.8)。
pip3 install -U pip
pip3 install rasa
要使用示例训练数据创建一个新项目,请在终端中键入以下命令。
rasa init
现在您的 rasa 聊天机器人已准备就绪。您可以使用以下命令与您的聊天机器人交谈。
rasa shell
现在,在下一步中,我们将向此聊天机器人添加更多训练数据。
添加意图、响应和故事
现在我们的聊天机器人可以响应基本的用户输入,但我们必须添加更多意图、响应和故事来获取用户的电子邮件 ID 和姓名。有关意图、响应和故事的深入解释,请参阅本文。
添加意图:
这里我们需要两个新的名称和电子邮件 ID 意图。在您的 nlu.yml 文件中添加以下几行。
- intent: email_id
examples: |
- [abc@gmail.com](email)
- [abc@yourdomain](email)
- @gmail.com
- [xyz@gmail.com](email)
- intent: user_name
examples: |
- [YOURNAME](name)
- [RANDOM_PERSON_NAME](name)
在这里,我们还创建了两个插槽(电子邮件和姓名),我们将在其中存储用户数据,以便在您的 domain.yml 文件中添加新的插槽和意图。
添加响应:
现在我们必须向我们的聊天机器人添加两个新的响应。
- 要求用户输入姓名。
- 要求用户输入电子邮件 ID。
为此,在 domain.yml 文件的响应部分添加以下行。
utter_askname:
- text: Please enter your name.
utter_askemail:
- text: Please enter email id to receive updates.
添加故事:
现在我们必须在我们的 stories.yml 文件中添加一些相关的故事,因此删除该文件中的所有故事并添加以下行(您可以根据需要添加更多故事)。
- story: GeekforGeek story
steps:
- intent: greet
- action: utter_askname
- intent: user_name
- slot_was_set:
- name: "YOURNAME"
- action: utter_askemail
- slot_was_set:
- email: 'abc@gmail.com'
- intent: email_id
- action: action_email
这里“action_email”不存在,因此我们必须创建此操作来发送电子邮件,但在此之前转到 endpoints.yml 文件并取消注释以下行。
action_endpoint:
url: "http://localhost:5055/webhook"
添加自定义电子邮件操作
现在我们将在我们的 actions.py 文件中添加一个新类来发送自动电子邮件。在 actions.py 文件中添加以下代码。
Python3
# Importing required modules
from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
import smtplib
# Creating new class to send emails.
class ActionEmail(Action):
def name(self) -> Text:
# Name of the action
return "action_email"
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
# Getting the data stored in the
# slots and storing them in variables.
user_name = tracker.get_slot("name")
email_id = tracker.get_slot("email")
# Code to send email
# Creating connection using smtplib module
s = smtplib.SMTP('smtp.gmail.com',587)
# Making connection secured
s.starttls()
# Authentication
s.login("SENDER_EMAILID", "PASSWORD")
# Message to be sent
message = "Hello {} , This is a demo message".format(user_name)
# Sending the mail
s.sendmail("SENDER_EMAIL_ID",email_id, message)
# Closing the connection
s.quit()
# Confirmation message
dispatcher.utter_message(text="Email has been sent.")
return []
说明:首先导入 rasa 和 smtplib 模块。然后创建一个Python类,该类将返回一个名为“action_email”的操作,并从插槽中获取用户名和电子邮件 ID,并将它们存储在单独的变量中。使用 smtplib 模块的 SMTP 方法创建连接。然后使用 smtplib 模块的 starttls() 方法确保连接安全。然后使用 login()函数登录 Gmail 帐户,该函数将电子邮件 ID 和密码作为参数。将消息存储在名为“message”的新变量中。然后使用 Sendmail函数发送电子邮件,该函数将以发件人的电子邮件 ID、收件人的电子邮件 ID 和消息作为其参数。然后使用 quit()函数关闭连接。
您还必须允许访问 Gmail 帐户中安全性较低的应用程序。
登录您的 Gmail 帐户,然后转到“管理您的 Google 帐户”。
然后单击“安全”选项卡。
然后打开“不太安全的应用程序访问”:
在此之后,在 domain.yml 文件中添加以下几行:
actions:
- action_email
现在一切准备就绪,我们只需要训练我们的聊天机器人。对于这种类型,以下命令位于终端中:
rasa train
训练完成后,您可以通过在终端中输入以下命令与您的聊天机器人交谈。运行动作服务器:
rasa run actions
运行训练好的模型:
rasa shell
输出:
视频输出: