Browse Source

daily commit

master
Richard Shih 5 years ago
parent
commit
5f76a46106
2 changed files with 98 additions and 26 deletions
  1. 123
      back_end/bot_app.py
  2. 1
      back_end/docker-compose.yml

123
back_end/bot_app.py

@ -9,60 +9,125 @@ app = Flask(__name__)
result = None result = None
@app.route('/') @app.route('/')
def sayHi(): def sayHi():
return 'Hello World!!!' return 'Hello World!!!'
@app.route("/short_call",methods=['GET','POST'])
@app.route("/short_call", methods=['GET', 'POST'])
def five_secend_call(): def five_secend_call():
global result global result
result = None result = None
curr = time.time() curr = time.time()
thread = threading.Thread(target=fetch_url,name='query_qa_thread')
thread = threading.Thread(target=fetch_url, name='query_qa_thread')
thread.start() thread.start()
while (curr + 4.5) > time.time(): while (curr + 4.5) > time.time():
if not result == None: if not result == None:
return jsonify(result.json()) return jsonify(result.json())
else: else:
time.sleep(0.3) time.sleep(0.3)
return jsonify({"respone":"None"})
return jsonify({"respone": "None"})
def fetch_url(): def fetch_url():
global result global result
my_headers = {'Authorization': 'EndpointKey 365cdd9c-7af2-48bd-9dfe-031986319115','Content-Type':'application/json'}
res = requests.post('https://whlqakb.azurewebsites.net/qnamaker/knowledgebases/f15e1174-339e-4a81-a95e-747143f77b02/generateAnswer'
,headers=my_headers
,json={"question":"outlook有問題可以找誰?"})
my_headers = {'Authorization': 'EndpointKey 365cdd9c-7af2-48bd-9dfe-031986319115',
'Content-Type': 'application/json'}
res = requests.post(
'https://whlqakb.azurewebsites.net/qnamaker/knowledgebases/f15e1174-339e-4a81-a95e-747143f77b02/generateAnswer'
, headers=my_headers
, json={"question": "outlook有問題可以找誰?"})
print(res.json()) print(res.json())
result = res result = res
return res return res
@app.route('/qa_bot/fulfillment', methods=['GET', 'POST']) @app.route('/qa_bot/fulfillment', methods=['GET', 'POST'])
def index(): def index():
jsonObj = request.get_json() jsonObj = request.get_json()
# print(type(jsonObj))
# print(jsonObj)
# print('responseId => {},\n session => {}'.format(jsonObj.get('responseId'),jsonObj.get('session')))
# print(request.get_data(as_text=True))
try: try:
handleName = jsonObj.get('queryResult').get('intent')['displayName'] handleName = jsonObj.get('queryResult').get('intent')['displayName']
print('Handler:',handleName)
return eval(handleName+'()')
print('Handler:', handleName)
return eval(handleName + '(jsonObj)')
except: except:
return sample_response('找不到對應的fulfillment handler!!!') return sample_response('找不到對應的fulfillment handler!!!')
def buying_drink_ask_category():
drinkCate = fulfillment.get('queryresult').get('parameters')['drink_category']
print('Category: ',drinkCate)
if drinkCate == '咖啡':
return sample_response('美式、拿鐵還、卡布奇諾')
elif drinkCate == '':
return sample_response('紅茶、綠茶、烏龍茶')
elif drinkCate == '果汁':
return sample_response('芒果汁、檸檬汁、芭樂汁')
return sample_response('you got it')
# 確認訂單
def buying_drink_ordering_summary(fulfillment):
context = lookup_context(fulfillment, 'buying_drink_ordering-followup')
params = context.get('parameters')
strResp = '您的訂購資訊如下:\n飲料: ' + params['hot_cold'] + params['drink_item.original'] + '\n數量: ' + str(params['number']) + '\n甜度冰塊: ' + params['ice_level'] + '' + params['sugar_level'] + '\n\n請問是否訂購?'
return sample_response(strResp)
# 詢問飲料種類
def buying_drink_ask_category(fulfillment):
params = lookup_context(fulfillment, 'buying_drink_dialog_context').get('parameters')
drinks = {'咖啡': ['美式', '拿鐵', '卡布奇諾'], '': ['紅茶', '綠茶', '烏龍茶'], '果汁': ['芒果汁', '檸檬汁', '芭樂汁']}
drink_cate = params.get('drink_category')
hot_cold = params.get('hot_cold')
drink_item = params.get('drink_item')
response_str = '我們有'
if not drink_item == '':
if drink_item in sum([x for x in drinks.values()], []):
return sample_response(response_str + drink_item['drink_item'])
else:
return sample_response('抱歉!我們沒有' + drink_item['drink_item'])
else:
if not drink_cate == '':
return sample_response(response_str + ','.join(drinks.get(drink_cate)))
else:
return sample_response(response_str + ','.join(list(drinks.keys())))
return sample_response('')
# fulfillment - 訂飲料
def buying_drink_ordering(fulfillment):
params = fulfillment.get('queryResult').get('parameters')
deliver_method = params.get('deliver_method', '')
drink_item = params.get('drink_item.original', '')
ice_level = params.get('ice_level', '')
sugar_level = params.get('sugar_level', '')
number = params.get('number', '')
if deliver_method == '外送':
jsonRep = {
'followupEventInput': {
'name': 'events_deliver_info',
'languageCode': 'zh-TW',
'parameters': {}
}
}
else:
jsonRep = {
'followupEventInput': {
'name': 'events_order_confirm',
'languageCode': 'zh-TW',
'parameters': {}
}
}
return jsonify(jsonRep)
# strResp = '您的訂購資訊如下:\n飲料: ' + drink_item + '\n數量: ' + str(number) + '\n甜度冰塊: ' + ice_level + '' + sugar_level + '\n\n請問是否訂購?'
#
# return sample_response(strResp)
# 確認地址
def buying_drink_ordering_delivery_info(fulfillment):
print(fulfillment)
jsonRep = {
'followupEventInput': {
'name': 'events_order_confirm',
'languageCode': 'zh-TW',
'parameters': {}
}
}
return jsonify(jsonRep)
def sample_response(text_content): def sample_response(text_content):
strRes = '' strRes = ''
@ -90,16 +155,22 @@ def sample_response(text_content):
# } # }
# } # }
], ],
'source':'richard-shih.idv.tw'
'source': 'richard-shih.idv.tw'
} }
return jsonify(jsonResp) return jsonify(jsonResp)
def lookup_context(fulfillment,lookup_pattern):
contexts = fulfillment.get('queryResult').get('outputContexts')
search_key = fulfillment.get('session') + '/contexts/' + lookup_pattern
return next((x for x in contexts if x['name']== search_key),None)
def main(): def main():
port = os.environ.get('FLASK_EXPOSE_PORT') port = os.environ.get('FLASK_EXPOSE_PORT')
port = port if port != None else 8080 port = port if port != None else 8080
app.config['JSON_AS_ASCII'] = False app.config['JSON_AS_ASCII'] = False
app.run(host='0.0.0.0', port=port, debug=True) app.run(host='0.0.0.0', port=port, debug=True)
if __name__ == '__main__': if __name__ == '__main__':
main() main()

1
back_end/docker-compose.yml

@ -18,6 +18,7 @@ services:
www_backend: www_backend:
container_name: app container_name: app
build: ./
image: shihxuancheng/qa_bot image: shihxuancheng/qa_bot
networks: networks:
- backend - backend

Loading…
Cancel
Save