对于主要通过语音使用的机器人,我希望能够重复该机器人说的最后一条消息。例如:
Bot: I found contact ABC with phone number 123456
User: Could you please repeat that?
Bot: I found contact ABC with phone number 123456
我不想重复整个操作(在数据库中搜索联系信息),而只是再次重复机器人的输出。
我认为我可以创建一个插槽“ last_message”,并在所有自定义操作中始终填充该插槽。但是,手动维护此插槽非常繁琐。有没有更优雅的解决方案,可以简单地重复机器人说的最后一条消息?
答案 0 :(得分:1)
您可以执行以下操作:
if len(tracker.events) >= 3:
dispatcher.utter_message(tracker.events[-3].get('text'))
return[]
但是它仅在消息返回3个事件时才有效。
答案 1 :(得分:0)
您可以在操作代码中执行以下操作
query = tracker.latest_message.get('text')
dispatcher.utter_message(query)
答案 2 :(得分:0)
这里是重复所有消息直到最后一个用户输入而没有任何硬编码的代码。这适用于文本和按钮。您可以对图像执行相同的操作。
ActionRepeat(Action)类: def名称(自己): 返回“ action_repeat”
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
user_ignore_count = 2
count = 0
tracker_list = []
while user_ignore_count > 0:
event = tracker.events[count].get('event')
if event == 'user':
user_ignore_count = user_ignore_count - 1
if event == 'bot':
tracker_list.append(tracker.events[count])
count = count - 1
i = len(tracker_list) - 1
while i >= 0:
data = tracker_list[i].get('data')
if data:
if "buttons" in data:
dispatcher.utter_message(text=tracker_list[i].get('text'), buttons=data["buttons"])
else:
dispatcher.utter_message(text=tracker_list[i].get('text'))
i -= 1
return []