前面完成了讓客戶預約的功能,那一般來說預約最後是要與對方確認,所以接下來就需要製作確認功能。
所以我會用到【Confirm template】,讓用戶確認所預約的內容。
程式碼就在【line-bot-sdk-python:confirmtemplate】這。
confirm_template_message = TemplateSendMessage(
alt_text='Confirm template',
template=ConfirmTemplate(
text='Are you sure?',
actions=[
PostbackAction(
label='postback',
display_text='postback text',
data='action=buy&itemid=1'
),
MessageAction(
label='message',
text='message text'
)
]
)
)
一樣到service.py新增一個function去定義Confirm template。
def confirm_event(event):
然後貼上github的程式碼,這樣會看到ConfirmTemplate又出現紅底波浪紋,所以要去line_bot_api.py匯入ConfirmTemplate。
匯入ConfirmTemplate
紅底波浪紋消失了
再來讓這功能先去data取得資料,然後再透過service_id取得services的預約資料。
程式碼
data = dict(parse_qsl(event.postback.data))
booking_service = services[int(data['service_id'])]
再來就是調整confirm_template_message的內容,就是設定詢問用戶是否確定預約(服務、服務詳情、預約日期、預約時間),確定與否動作上,就是給使用這按鈕選項,所以第一個text我就這樣設定f'Are you sure?\n\n{booking_service["title"]} {booking_service["duration"]}\ntime: {data["date"]} {data["time"]}\n\nOK or Not'。
然後下面兩個選項分別是PostbackAction與MessageAction。
我這樣設定
PostbackAction:是,確認並會回傳資料給伺服器。(回傳的資料有確認預約,服務項目、日期、時間)
MessageAction:否,就不回傳資料給伺服器。
confirm_template_message = TemplateSendMessage(
alt_text='Confirm template',
template=ConfirmTemplate(
text=f'Are you sure?\n\n{booking_service["title"]} {booking_service["duration"]}\ntime: {data["date"]} {data["time"]}\n\nOK or Not',
actions=[
PostbackAction(
label='OK',
display_text='OK',
data=f'action=confirmed&service_id={data["service_id"]}&date={data["date"]}&time={data["time"]}'
),
MessageAction(
label='NO',
text='cancel'
)
]
)
)
最後就要添加line_bot_api.reply_message,讓confirm_template_message能運作。
line_bot_api.reply_message(
event.reply_token,
[confirm_template_message]
)
最後再來到,主程式app.py添加這個功能。
程式碼:
elif data.get('action') == 'confirm':
confirm_event(event)
添加完畢後,就重新啟動SERVER進行測試,若沒問題,這功能也就完成。
下一篇,機器人設置