設置管理者,是因為管理者或店家不太可能時時都在操作電腦,那如果能讓他們在直接詢問機器人,讓機器人回復用戶預約情形,這樣也比較容易知曉狀況。所以就是設置特定用戶能使用的功能。
先在events資料夾下增加一個pyton的檔案,名字我取名為admin
在admin.py會放入管理所可以使用的功能。
首先就是匯入line_bot_api、Reservation與datetime的模組。
然後定義一個list_reservation_event的function,功能式顯示預約的名單,這個功能會去搜尋預約的資料,過濾條件就是沒有被取消與當下時間之後。
並且設定依照預約時間排序,asc邏輯意思就是由小至大,就是說出來的時間排序就是最近到最遠未來。(desc是反向的,由大至小,未來可能在定義價格之類的會用到,那目前不用),最後用all()將所有資料轉換成物件,並存成列表回傳存至reservation。
另外定義一個function為reservation_data_text來顯示預約名單,然後透過for迴圈跑每一筆預約資料,就會依序將用戶的預約時間、服務項目、用戶名依序回傳,最後用line_bot_api.reply_message回傳資料。
from line_bot_api import *
from models.Reservation import Reservation
import datetime
def list_reservation_event(event):
reservations = Reservation.query.filter(Reservation.is_canceled.is_(False),
Reservation.booking_datetime > datetime.datetime.now(),
).order_by(Reservation.booking_datetime.asc()).all()
reservation_data_text = '## book list: ## \n\n'
for reservation in reservations:
reservation_data_text += f'''booked date: {reservation.booking_datetime}
booked item: {reservation.booking_service}
name: {reservation.user.display_name}\n'''
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=reservation_data_text)
)
接下來,先在主程式app.py上匯入events.admin
from events.admin import *
在來往下到@handler.add(MessageEvent, message=TextMessage),去增加判斷式
如果用戶傳送的訊息開頭如果式【*】,代表是管理者的功能,就會先判斷這用戶是否為管理者,如果不是就return,如果是,就判斷關鍵字【*data】或【*d】時,就呼叫前面定義的function。
"管理者的line id,可以到pgAdmin查看。"
elif message_text.startswith('*'):
if event.source.user_id not in ['管理者的line id,可以到pgAdmin查看。']:
return
if message_text in ['*data', '*d']:
list_reservation_event(event)
完畢後,就重新啟動SERVER進行測試,若沒問題,這功能也就完成。
重新啟動SEVER進行測試流程:
重啟ngrok,在terminal輸入服務時指令,程式碼:
ngrok http 5000 --region ap
複製Forwarding的網址,到line developers修改Webhook URL,網址貼上後面加上/callback
然後運行APP,
接下來就能操作linebot了。
下一篇,完成其他剩餘功能