调度器是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 | 任意的关键字参数,可用于指定响应模板中的变量的值 |
# text
dispatcher.utter_message(text="Hey there")
# image
dispatcher.utter_message(image="https://i.imgur.com/nGF1K8f.jpg")
# json_message
date_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)
# attachment
dispatcher.utter_message(attachment="")
# buttons
dispatcher.utter_message(buttons = [
{"payload": "/affirm", "title": "Yes"},
{"payload": "/deny", "title": "No"},
])
# 使用模板和变量
dispatcher.utter_message(response="utter_greet_name", name="Aimee")