如何在RASA中的运行动作中输入信息

时间:2020-06-25 07:26:07

标签: rasa-nlu rasa-core rasa

假设我正在执行一项操作,该操作为用户生成了一系列动态按钮。通常,从用户输入的按钮将转到NLU。但是我想知道用户刚刚选择了哪个按钮,并在此运行操作中采取相应的措施。例如,如果用户选择“ Toyota”,我想从该运行动作中调用另一个动作。我想要的只是不要去NLU也不去那里检查。我希望一切都在我的跑步动作中。可能吗?如果是这样,有人可以提供我可以使用的方法吗?

Chatbot UI

下面是我的动作课。

> class ActionVehicleManufacture(Action):
>     def name(self):
>         return "action_vehicle_manufacturer"
> 
>     def run(self, dispatcher: CollectingDispatcher,
>             tracker: Tracker,
>             domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
> 
>         r = requests.get('http://mind.zantrik.com/api/A1/GetVehicleManufacturer')
>         response = r.text
>         json_data = json.loads(response)
>         l = []
>         buttons = []
>         for i in json_data["data"]:
>             l.append(i["manufacturerName"])
>         for i in l:
>             buttons.append({"title": i, "payload": i})
> 
>         dispatcher.utter_message(text="Please let me know you car manufacturer name:", buttons=buttons)
>         # I want to apply some condition here according to users inputted button.
>         return []

1 个答案:

答案 0 :(得分:0)

要在新的用户消息(例如,选择按钮或自由文本)之后调用操作,您需要在storied.md中包含一个故事。哪个动作是任意的。例如:

## story example
* ask_about_manufacturers
    - action_vehicle_manufacturer
* inform{"manufacturer": "toyota"}
    - action_execute

如果您已将制造商定义为广告位,则广告位的类型会影响故事。如果您看到过Slots Set By Clicking Buttons,则需要设置插槽制造商,而不是

buttons.append({"title": i, "payload": i})

以下内容,其中“意图”是捕获“丰田”消息的意图,在“通知”上方的故事示例中。

buttons.append({"title": i, "payload": f"""/{intent}{{"manufacturer": "i"}}""")