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