Rasa Chatbot:处理重复场景

Rasa Chatbot: Handling repeated scenario

我在后续机器人中工作,每个用户都有很多任务,当用户询问 his/her 任务时,机器人将使用 API 获取任务,然后机器人将通过一个然后询问用户 he/she 今天是否能够完成它。如果用户说是,任务将标记为已完成,如果没有,机器人将询问用户完成日期。

我在 Action 中通过迭代任务和分派模板厌倦了很多解决方案,但分派循环停止后再也不会返回。

class ActionRequestTasks(Action):

def name(self):
    return "action_request_tasks"

@staticmethod
def json2obj(data):
    return json.loads(data, object_hook=lambda d: namedtuple('X', d.keys())(*d.values()))

def run(self, dispatcher, tracker: DialogueStateTracker, domain):
    response = requests.get('url', headers=headers)
    tasks_wrapper = self.json2obj(response.text)
    data = tasks_wrapper.Data
    first_message = "You have {} delayed tasks, I will help you to go through all of them".format(len(data))
    dispatcher.utter_message(first_message)

    for task in data:
        task_message = "Task Title {}\nComplete percentage {}\nStart Date {}\nFinish Date{}".format(task.Title,
                                                                                                    task.PercentComplete,
                                                                                                    task.StartDate,
                                                                                                    task.FinishDate)
        dispatcher.utter_message(task_message)
        dispatcher.utter_template("utter_able_to_finish", tracker)
    return []

这听起来像是 Form 的完美应用。您可以在 required_slots() 方法中调用 API,然后根据用户的响应使用 validation 填充槽。表单将 运行 直到所有槽都填满,然后您可以决定如何处理 submit() 方法中的槽(例如,通过另一个请求更新每个槽的任务状态)。

我建议阅读 docs on Form setup and also checking out the code for formbot 以查看有效的实现