📜  使用 Rasa 聊天机器人发送自动电子邮件

📅  最后修改于: 2022-05-13 01:55:23.920000             🧑  作者: Mango

使用 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

输出:

视频输出: