繁体   English   中英

DialogFlow Python3 Webhook - 增加超时?

[英]DialogFlow Python3 Webhook - Increase Timeout?

我有一个 DialogFlow Intent 可以解析用户对商品价格的查询。 例如,用户询问“一罐沙丁鱼多少钱?”,我的 DialogFlow 能够得到“一罐沙丁鱼”作为用户输入。

一旦得到它,它将继续执行,它将向我拥有的 WebHook 发送 POST 请求。 我通过ngrok.com将 Fulfillment 链接到我本地的 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的超时时间?

没有办法增加这个超时,因为它会破坏用户的对话体验,即如果用户必须等待很长时间才能得到响应,他会感到沮丧。
您可以做的是,向您正在检查价格的用户发送响应,然后一旦您从数据库中获取数据,您就使用 POST 请求向客户端发送另一个回复。

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"
                             ]
                         }
                     },
                       ]
                 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM