对话流:setFollowupEvent 在"then"中不起作用



我制作了一个聊天机器人,它与外部API对话,并使用API提供的数据调用另一个意图。API提供后续事件的名称。由于某些原因,我只能使用内联编辑器,而不能使用webhook。

function setFollow(agent) {
agent.add("hello"); 
axios.post(url, body, {headers})
.then (({ data }) => {
agent.add("setting followup event");
agent.setFollowupEvent({ "name": data.followupEventInput_name, "parameters" : { "name": data.name}});
}) 
}

我成功地调用API并从中获得适当的响应(事件名称和参数值)。事件和下一个意图仍然没有被调用。我甚至尝试使用硬编码值来调用事件,但它不起作用。执行将进入then语句(用控制台日志检查),但没有设置事件(即使使用硬编码值)。这背后的原因是什么?我该如何解决?

我已经检查了上下文:有2个活动上下文(A和B),应该根据事件调用的意图有1个输入上下文(A)。现在,没有意图被触发。

这是一个JS问题。我没有兑现承诺。

return axios.post(url, body, {headers}).then(...)已解决

发生这种情况是因为JavaScript代码执行默认是异步的,这意味着JavaScript不会等待函数完成后再执行下面的代码。promise之前的return语句使JS等待对resolvereject的promise。

如果没有return语句,函数在agent.add()执行之前完成执行,因此Dialogflow bot没有按预期工作。

最新更新