-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
124 lines (111 loc) · 3.77 KB
/
app.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
115
116
117
118
119
120
121
122
123
124
from flask import Flask, request, abort,render_template
from nlp.olami import Olami #用威聖電子API
import configparser #讀取設定檔
#import pickle
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage, ImageSendMessage
)
#創建一個falsk對象
app = Flask(__name__)
#讀取設定檔
config = configparser.ConfigParser()
config.read('config.ini')
# Channel Access Token
line_bot_api = LineBotApi(config['Line']['token'])
# Channel Secret
handler = WebhookHandler(config['Line']['Channe_SECRET'])
#載入分類模型(可替換)
#clf = pickle.load(open("pkl/classifier.pkl","rb"))
#跳轉首頁
@app.route("/")
def index():
return render_template("index.html")
# 監聽所有來自 /callback 的 Post Request
@app.route("/callback", methods=['POST'])
def callback():
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature']
# get request body as text
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
glasses=0;
air=0;
step=0
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
#全域變數定義(為了實現多輪對話)
global glasses;
global air;
global step;
status=1;#訊息種類切換定義(1:文字 2:圖片)
msg=event.message.text; #接收文字訊息
if "垃圾車" in msg:
txt=function.getrubbishtruck();
elif "蠟筆小新" in msg:
message=ImageSendMessage(original_content_url='https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR3fsAvfV91zePne1n1RzxuxhnKyQEXUSEVFvYvZAiHqzPJUhlIJQ&s',
preview_image_url='https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR3fsAvfV91zePne1n1RzxuxhnKyQEXUSEVFvYvZAiHqzPJUhlIJQ&s');
status=2; #切換圖片類型
elif "眼鏡" in msg:
glasses=1;
txt=function.getproduct();
elif "空氣" in msg:
air=1;
txt='請輸入一個地區名稱(例如:大里)';
elif "評論" in msg:
#txt=function.classify_review(msg,clf);
txt='評論';
elif msg == '@使用說明' :
txt=function.Description();
elif msg == '@快速填表' :
function.sendQuickreply(event);
#line_bot_api.reply_message(event.reply_token,message);
elif msg == "@事故申請書":
function.fillform(event,'道路事故申請表單')
elif msg == "@集會申請書":
function.fillform(event,'集會申請表單')
elif msg == '@線上檢舉':
txt = 'line://app/1653632802-3X6ymq4Y'
elif "交通違規檢舉" in msg:
function.handleTraffic(event, msg)
elif '###' in msg :
txt=function.downdoc(msg);
else:
if glasses==1:
txt=function.getproduct(msg);
glasses=0;
elif air==1:
txt=function.getOpenData_pm25(msg);
air=0;
# elif step!=0:
# txt,step=function.downdoc(step,msg);
# if step==3:step=0
# step=step;
else:
#txt=function.getTextKey(msg); # 用字典的方式去抓關鍵字
txt=function.get_answer(msg) #用微軟qnamaker
if txt=='No good match found in KB.':
txt=Olami().nli(msg) #用威聖電子API
#txt=event.message.text;
if status==1:
message = TextSendMessage(text=txt);
line_bot_api.reply_message(
event.reply_token,
message)
#引入自定義function
import function;
import os
if __name__ == "__main__":
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port)