我有一个DialogFlow Intent,它可以解析用户关于商品价格的查询。例如,用户询问“一罐沙丁鱼罐头多少钱?”,我的DialogFlow就能获得“沙丁鱼罐头”作为用户输入。
一旦得到,它将继续执行,它将向我拥有的WebHook发送POST请求。我通过ngrok.com将实现与我的本地Python3 Flask应用关联。
现在,我的Python应用程序所做的是将用户输入(沙丁鱼罐头)输入,并使用PDFGrep通过服务器中价目表的PDF查找用户输入。价目表有3列:产品代码,产品名称,产品价格。对于出现用户输入的每个实例,整行都作为输出发送出去。这意味着,如果“沙丁鱼罐头”单独出现3次,则会显示行线。
向控制台的输出将是这样的:
10000 Can of Sardines - 6 Cans $5.00
10001 Can of Sardines - 12 Cans $9.00
10002 Can of Sardines - 18 Cans $13.00
这在控制台中很好用。
但是,该文件很大,包含约348页的项目。因此,发生的是我的pdfgrep
命令花了一些时间来得出输出,但是据我所知,DialogFlow似乎期望服务器在给定的短时间内对其POST请求做出响应。>
是否可以为DialogFlow API调整Webook的超时时间?
答案 0 :(得分:1)
无法增加此超时时间,因为这会破坏用户的对话体验,即如果用户必须等待很长时间才能获得响应,则会感到沮丧。
您可以做的是,向要检查价格的用户发送响应,然后从数据库中获取数据后,就使用POST请求向客户端发送另一个响应。
答案 1 :(得分:0)
Dialogflow webhooks 的超时时间为 5 秒。您可以通过链接 Intent 来增加超时时间,即您可以使用一个 Intent 作为另一个 Intent 的触发器(可以给您 5+5 秒的时间来发送响应) 在这段代码中,当 actual_intent 被击中时,它会将其重定向到 demo_intent 其中有一个名为 demo_event 的事件 可能您可以使用带有线程模块的多处理来处理耗时的任务,相应地调整睡眠时间
if 'action' in request_['queryResult']:
if request_['queryResult']['action']=='actual_intent':
time.sleep(3)
reply={
"followupEventInput": {
"name": "demo_event",
}
}
return jsonify(reply)
if request_['queryResult']['action']=='demo_intent':
time.sleep(3)
reply = {
"fulfillmentMessages": [
{
"text": {
"text": [
"Some message you want to show"
]
}
},
]
}