Rasa Chatbot: обработка повторного сценария - PullRequest
1 голос
/ 11 июля 2019

Я работаю в последующем боте, у каждого пользователя есть много задач, когда пользователь спрашивает о своих задачах, бот выбирает задачи с помощью API, затем бот отображает задачи одну за другой и собирается спросить пользователя, он / она в состоянии закончить это сегодня. если пользователь сказал «да», задание будет помечено как выполненное, если нет, бот спросит пользователя о дате окончания.

Я устала от многих решений в 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 []

1 Ответ

1 голос
/ 11 июля 2019

Это звучит как идеальное приложение для Form.Вы можете выполнить вызов API в методе required_slots(), а затем использовать validation , чтобы заполнить слоты в зависимости от ответа пользователя.Форма будет работать до тех пор, пока не будут заполнены все слоты, тогда вы можете решить, что делать со слотами в методе submit() (например, обновлять статус задачи для каждого из них с помощью другого запроса).

Я рекомендуюпрочитав документы по настройке формы , а также проверив код для formbot , чтобы увидеть работающую реализацию

...