Django / Dialogflow chatbot,可以在我的笔记本电脑上使用。当我部署到服务器时,必须在意图匹配之前重复相同的句子

时间:2019-07-15 18:45:34

标签: dialogflow

我有一个开发设置(笔记本电脑,Django,Dialogflow,Ngrok),当我测试聊天机器人时一切都很好。

我有一个生产设置(由Digital Ocean,Django,Dialogflow,Nginx,gunicorn托管的Ubuntu服务器)当我测试对话框流具有troube匹配意图时。也就是说,我必须重复相同的句子几次,直到符合意图为止。

为什么会这样?

我曾尝试将对话框流填充指向我的开发环境,并从生产环境中删除它,但是我仍然必须重复自己以得到匹配的意图。

我尝试将dialogflow指向生产环境,然后将其从开发服务器中删除,并且一切正常。

在生产服务器上测试了会话:

来自Cemlyn小组的Chris你好!我能为你做什么?可能与地图有关? 返回地图 对不起,我不明白你想要什么。 返回地图 对不起,我不明白你想要什么。 返回地图 克里斯,您想退还什么地图? 1个 对不起,我不明白你想要什么。 1个 对不起,我不明白你想要什么。 1个 好的,只是确认一下,您要我为您返回1克里斯 返回地图 克里斯,您想退还什么地图? 1个 对不起,我不明白你想要什么。 1个 对不起,我不明白你想要什么。 1个 好的,只是为了确认一下,您希望我为您的克里斯给您归还1。

通过开发设置测试了会话:

来自Cemlyn小组的Chris你好!我能为你做什么?可能与地图有关? 返回地图 克里斯,您想退还什么地图? 1个 好的,只是为了确认一下,您希望我为您的克里斯给您归还1。

webhook看起来像这样:

def webhook(request):
    # build a request object
    req = json.loads(request.body)
    #s = Session.objects.get(pk='')
    #print(s)
    # get action from json
    action = req.get('queryResult').get('action')
    params = req.get('queryResult').get('parameters')
    print('session hitting webhook - '*3)
    print(request.session.session_key)
    for key, value in request.session.items():
        print('{} => {}'.format(key, value))
    print(req)    

    if action == 'issue_a_map':
        if 'Maps' in params:

            if params['Maps']:

                mapid = int((params['Maps'][0]))
                group = (params['ValleyGroups'][0])

                if mapid == 99:
                    fulfillmentText = {'fulfillmentText': 'issue the next map for ' + group + ' from webhook.'}            
                else:

                    fulfillmentText = {'fulfillmentText': 'issue a map from webhook.'}

    elif action == 'return_a_map':
        print('return a map - '*4)
        if 'Maps' in params:
            if params['Maps']:           
                mapid = int(params['Maps'])
                map = CongMap.objects.get(map_no=mapid)
                if map.issued:
                    retuner = params['username']
                    return_map_form(request, mapid, retuner ) 
                    fulfillmentText = {'fulfillmentText': 'OK I will return map ' + str(mapid) + ' for you ' +params['username']}
                else:
                    #reply = prepresponse('name please','admin','welcome_event')
                    fulfillmentText = {'fulfillmentText': 'Hmmm there is a problem, that map isnt issued currently. A map has to be issued before it can be returned.'}
                    ffr=fulfillment_response()
                    fftext= ffr.fulfillment_text(fulfillmentText)
                    params = {'problem': str(map.map_title) +' map hasnt been issued however we are trying to return it.'}
                    fue = ffr.followup_event_input('ProblemEvent', params)        
                    ffm = None
                    ocx = None
                    reply = ffr.main_response(fftext, ffm, ocx, fue)

                    return JsonResponse(reply, safe=False)

            else:
                fulfillmentText = {'fulfillmentText': 'Sorry I need to know the map no or name.'}       
        else:
            fulfillmentText = {'fulfillmentText': 'Sorry I need to know the map no or name.'}

    elif action == 'help_problem':
        fulfillmentText = {'fulfillmentText': 'OK ' +params['username'] +', I will send him an email asking him to help.'}
        send_mail('Territory Problem', '{}. Please can you help {} with this problem'.format(params['problem'], params['username']), 'territorybot@chivers.io', ['tain259@gmail.com'])
    else:
        fulfillmentText = {'fulfillmentText': 'Sorry, I dont understand what you want.'}
    # return response

    return JsonResponse(fulfillmentText, safe=False)

0 个答案:

没有答案