DialogFlow Python3 Webhook-增加超时时间?

时间:2019-05-15 08:20:36

标签: python dialogflow

我有一个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的超时时间?

2 个答案:

答案 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"
                             ]
                         }
                     },
                       ]
                 }
相关问题