🚀 原文地址:https://rasa.com/docs/action-server/sdk-dispatcher

调度器是CollectingDispatcher类的一个实例,用于生成要发送给用户的响应。

1. CollectingDispatcher

CollectingDispatcher拥有一个utter_message方法,一个messages属性。 它在操作中的run方法中使用,用于向返回到 Rasa 服务器的有效负载添加响应,Rasa 服务器将依次为每个响应向跟踪器添加BotUttered事件。因此,使用调度器添加的响应不应作为事件显式返回。例如,以下自定义操作不显式任何事件,但将返回“Hi,User”响应给用户:

  1. class ActionGreetUser(Action):
  2. def name(self) -> Text:
  3. return "action_greet_user"
  4. async def run(
  5. self,
  6. dispatcher: CollectingDispatcher,
  7. tracker: Tracker,
  8. domain: Dict[Text, Any],
  9. ) -> List[EventType]:
  10. dispatcher.utter_message(text = "Hi, User!")
  11. return []

1.1 utter_message

utter_message方法可用于向用户返回任何类型的响应,它有下表中的可选参数,如果不传递任何参数将导致向用户返回一条空消息,传递多个参数将产生丰富的响应(例如文本和按钮)返回给用户。

参数 描述
text 消息文本
image 图像的 URL 或文件路径
json_message 字典类型的自定义JSON有效负载
response 响应的名称,该响应应该在域文件中定义
attachment 附件的 URL 或文件地址
buttons 按钮列表,每个按钮是包含了titlepayload键的字典。一个按钮可以包含其他键,但是只有在特定通道中查找它们时才会被使用。如果用户单击按钮,按钮的payload将作为消息发送给用户。
elements Facebook消息通道中的特殊元素
**kwargs 任意的关键字参数,可用于指定响应模板中的变量的值
  1. # text
  2. dispatcher.utter_message(text="Hey there")
  3. # image
  4. dispatcher.utter_message(image="https://i.imgur.com/nGF1K8f.jpg")
  5. # json_message
  6. date_picker = {
  7. "blocks":[
  8. {
  9. "type": "section",
  10. "text":{
  11. "text": "Make a bet on when the world will end:",
  12. "type": "markdwn"
  13. },
  14. "accessory":
  15. {
  16. "type": "datepicker",
  17. "initial_date": "2019-05-21",
  18. "placeholder":
  19. {
  20. "type": "plain_text",
  21. "text": "Select a date"
  22. }
  23. }
  24. }
  25. ]
  26. }
  27. dispatcher.utter_message(json_message = date_picker)
  28. # attachment
  29. dispatcher.utter_message(attachment="")
  30. # buttons
  31. dispatcher.utter_message(buttons = [
  32. {"payload": "/affirm", "title": "Yes"},
  33. {"payload": "/deny", "title": "No"},
  34. ])
  35. # 使用模板和变量
  36. dispatcher.utter_message(response="utter_greet_name", name="Aimee")