调度器是CollectingDispatcher类的一个实例,用于生成要发送给用户的响应。
1. CollectingDispatcher
CollectingDispatcher拥有一个utter_message方法,一个messages属性。 它在操作中的run方法中使用,用于向返回到 Rasa 服务器的有效负载添加响应,Rasa 服务器将依次为每个响应向跟踪器添加BotUttered事件。因此,使用调度器添加的响应不应作为事件显式返回。例如,以下自定义操作不显式任何事件,但将返回“Hi,User”响应给用户:
class ActionGreetUser(Action):def name(self) -> Text:return "action_greet_user"async def run(self,dispatcher: CollectingDispatcher,tracker: Tracker,domain: Dict[Text, Any],) -> List[EventType]:dispatcher.utter_message(text = "Hi, User!")return []
1.1 utter_message
utter_message方法可用于向用户返回任何类型的响应,它有下表中的可选参数,如果不传递任何参数将导致向用户返回一条空消息,传递多个参数将产生丰富的响应(例如文本和按钮)返回给用户。
| 参数 | 描述 |
|---|---|
| text | 消息文本 |
| image | 图像的 URL 或文件路径 |
| json_message | 字典类型的自定义JSON有效负载 |
| response | 响应的名称,该响应应该在域文件中定义 |
| attachment | 附件的 URL 或文件地址 |
| buttons | 按钮列表,每个按钮是包含了title和payload键的字典。一个按钮可以包含其他键,但是只有在特定通道中查找它们时才会被使用。如果用户单击按钮,按钮的payload将作为消息发送给用户。 |
| elements | Facebook消息通道中的特殊元素 |
| **kwargs | 任意的关键字参数,可用于指定响应模板中的变量的值 |
# textdispatcher.utter_message(text="Hey there")# imagedispatcher.utter_message(image="https://i.imgur.com/nGF1K8f.jpg")# json_messagedate_picker = {"blocks":[{"type": "section","text":{"text": "Make a bet on when the world will end:","type": "markdwn"},"accessory":{"type": "datepicker","initial_date": "2019-05-21","placeholder":{"type": "plain_text","text": "Select a date"}}}]}dispatcher.utter_message(json_message = date_picker)# attachmentdispatcher.utter_message(attachment="")# buttonsdispatcher.utter_message(buttons = [{"payload": "/affirm", "title": "Yes"},{"payload": "/deny", "title": "No"},])# 使用模板和变量dispatcher.utter_message(response="utter_greet_name", name="Aimee")
