我有一个开发设置(笔记本电脑,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)