iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0
自我挑戰組

30天玩轉規劃LINE BOT系列 第 21

第21天:增加 line bot 機器人功能(五)

  • 分享至 

  • xImage
  •  

前面完成了讓客戶預約的功能,那一般來說預約最後是要與對方確認,所以接下來就需要製作確認功能。
所以我會用到【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。
https://ithelp.ithome.com.tw/upload/images/20221006/20144761Bcjj3hZVKn.png

匯入ConfirmTemplate
https://ithelp.ithome.com.tw/upload/images/20221006/20144761IMO23lQgJ0.png

紅底波浪紋消失了
https://ithelp.ithome.com.tw/upload/images/20221006/20144761kCQ7AG9f51.png

再來讓這功能先去data取得資料,然後再透過service_id取得services的預約資料。
https://ithelp.ithome.com.tw/upload/images/20221006/20144761ywFilQfFOi.png
程式碼

    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進行測試,若沒問題,這功能也就完成。

下一篇,機器人設置


上一篇
第20天:增加 line bot 機器人功能(四)
下一篇
第22天:增加 line bot 機器人功能(六)
系列文
30天玩轉規劃LINE BOT30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言