/
chatbot.py
114 lines (97 loc) · 3.86 KB
/
chatbot.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
from flask import Flask, request, jsonify, render_template
import json
import requests
import pprint as pp
import sapcai
import os
import logging
from db_connect import DBConnect
import re
app = Flask(__name__)
port = int(os.environ["PORT"])
# port = 5000
#Split List like objects into chunks
def chunks(l, n):
"""Yield successive n-sized chunks from l."""
for i in range(0, len(l), n):
yield l[i:i + n]
#Helper function to get messages between Bots and users
def getMessages():
response = requests.get('https://api.cai.tools.sap/connect/v1/conversations/' + data['conversation']['id'],
headers={'Authorization': '54187a3945f3af9ea86d40ebca0400f2'}
)
# response = requests.get('https://api.cai.tools.sap/connect/v1/conversations/' + 'f727adaa-90fd-455d-b855-c2d656df66f4',
# headers={'Authorization': '54187a3945f3af9ea86d40ebca0400f2'}
# )
conv_dictionary = json.loads(response.text)
if conv_dictionary:
conv_list = [str(conv_dictionary['results']['messages'][i]['attachment']['content']) for i in range(len(conv_dictionary['results']['messages']))]
conv_generator = chunks(conv_list,2)
return conv_generator
else:
logging.log(logging.WARNING, 'Empty Response Object')
def insert_message_info(state):
response = requests.get('https://api.cai.tools.sap/connect/v1/conversations/' + data['conversation']['id'],
headers={'Authorization': '54187a3945f3af9ea86d40ebca0400f2'}
)
d = response.json()
l = ''
for i in range(len(d['results']['messages'])):
l = l + ' ' + str(d['results']['messages'][i]['attachment']['content'])
len_of_message = len(re.split('Thank you!!! | Took a note on that ', l)[-1].split(' '))
my_con = DBConnect("d51dpnoammut78","mfeteccnqkvtor","8c505e55eb950c9b8a5a8a3fb3118b103fc7dabac9b7eb0737b156c9f695fad5",
'ec2-54-217-235-87.eu-west-1.compute.amazonaws.com')
if state == 'no':
my_con.db_connection()
my_con.cur.execute("INSERT INTO messages_info(bad_mess_len) VALUES(%s);", [len_of_message])
my_con.cur.execute("SELECT ROUND(AVG(bad_mess_len)) FROM messages_info;")
av = my_con.cur.fetchone()[0]
my_con.cur.execute("UPDATE messages_stats SET bad_mess_avr = %s",[av])
my_con.end_connection()
elif state == 'yes':
my_con.db_connection()
my_con.cur.execute("INSERT INTO messages_info(good_mess_len) VALUES(%s);", [len_of_message])
my_con.cur.execute("SELECT ROUND(AVG(good_mess_len)) FROM messages_info;")
av = my_con.cur.fetchone()[0]
my_con.cur.execute("UPDATE messages_stats SET good_mess_avr = %s",[av])
my_con.end_connection()
@app.route('/', methods=['POST'])
def index():
global data
my_con = DBConnect("d51dpnoammut78","mfeteccnqkvtor","8c505e55eb950c9b8a5a8a3fb3118b103fc7dabac9b7eb0737b156c9f695fad5",
'ec2-54-217-235-87.eu-west-1.compute.amazonaws.com')
data = json.loads(request.get_data())
if data['nlp']['intents'][0]['slug'] == 'no':
my_con.update_bad_conv()
insert_message_info('no')
return jsonify(
status=200,
replies=[{
'type': 'text',
'content': 'Take a note on that!',
}],
conversation={
'memory': { 'key': 'value' }
}
)
else:
my_con.update_good_conv()
insert_message_info('yes')
return jsonify(
status=200,
replies=[{
'type': 'text',
'content': 'Thank you!!!',
}],
conversation={
'memory': { 'key': 'value' }
}
)
return 'None'
@app.route('/errors', methods=['POST'])
def errors():
print(json.loads(request.get_data()))
return jsonify(status=200)
app.run(port=port,host="0.0.0.0")
# if __name__ == "__main__":
# app.run(debug=True)