我正在尝试使用多个后续事件来解决我的案例的对话流5秒响应时间限制。在用户输入之后,该机器人必须使用api获取一些数据,该API当前大约需要20-25秒。
这是我的python webhook代码:
def makeWebhookResult(req):
flag = 0
if req.get("queryResult").get("action")=="status":
time.sleep(3.5)
if flag == 0:
return{
"followupEventInput": {
"name": "ContinueEvent1",
"parameters": {
"Status":"201"
}
}
}
else:
return{
"fulfillmentText":"This works",
}
elif req.get("queryResult").get("action")=="status1":
if flag == 0:
time.sleep(3.5)
return{
"followupEventInput": {
"name": "ContinueEvent2",
"parameters": {
"Status":"202"
}
}
}
else:
return{
"fulfillmentText":"This works in the last loop",
}
elif req.get("queryResult").get("action")=="status2":
time.sleep(3.5)
if flag == 0:
return{
"followupEventInput": {
"name": "ContinueEvent3",
"parameters": {
"Status":"203"
}
}
}
else:
return{
"fulfillmentText":"This works in the last loop",
}
elif req.get("queryResult").get("action")=="status3":
time.sleep(3.5)
if flag == 0:
return{
"followupEventInput": {
"name": "ContinueEvent4",
"parameters": {
"Status":"204"
}
}
}
else:
return{
"fulfillmentText":"This works in the last loop",
}
elif req.get("queryResult").get("action")=="status4":
time.sleep(3.5)
if flag == 0:
return{
"followupEventInput": {
"name": "ContinueEvent2",
"parameters": {
"Status":"205"
}
}
}
else:
return{
"fulfillmentText":"This works in the last loop",
}
elif req.get("queryResult").get("action") == 'Check_vendor:
time.sleep(3.5)
'''
Here i will call my api and get the response and set the flag variable.
'''
return{
"followupEventInput": {
"name": "ContinueEvent",
"parameters": {
"Status":"200"
}
这里我的主要意图是“ Check_vendor”,它将命中我的api并获取参数。因此,要参与api.ai,我会触发一个后续事件,作为响应,它将触发另一个后续事件。
直到“ ContinueEvent2”我的后续活动都在进行。但是,在该对话流没有触发ContinueEvent3之后,它以ContinueEvent2的响应进行响应。
那么,跟进事件的数量有没有限制?
在执行此操作时,我遇到了两个参数:
"diagnosticInfo": {
"accumulated_webhook_latency_ms": 11598,
"webhook_latency_ms": 3777
},
在这里累积了多少webhook_latency_ms?
提前谢谢
答案 0 :(得分:0)
更好地花费时间优化服务。 20-25秒很多!
两个人之间的对话看起来应该很自然。您需要摆脱建立诸如Webapp或移动应用程序之类的聊天机器人的习惯,并显示等待消息或进度条。
添加多个事件可能会导致服务延迟,但会严重影响用户体验。
答案 1 :(得分:0)
最近,我有一个类似的用例,其中我必须处理由dialogflow的webhook请求触发的工作流,然后将结果发送回去。该工作流程的执行几乎耗时40-50秒。我还使用了完全相同的方法,即通过使用followUpEventInput再次再次调用意图。 我发现最多可以召集3个跟进事件。因此,我们最多可以将请求处理到 15秒(每个请求5秒* 3个请求)。 没有太多相关的文档。因此,更好的是,我们找出其他一些解决方案,可能使用插槽填充或任何其他逻辑。