在前幾篇基本教學中,我們想要LINE Bot回覆某個功能時,都必須要自行手動輸入特定關鍵字,但有時候我們卻希望輸入指令後,LINE Bot回覆的是「選單」功能,可以讓我們進行多樣化的選擇,不需要每個指令都手動輸入,可以讓操作上更加便利,好在LINE Bot提供了多樣化的選單回覆功能,今天我們就先從「按鈕樣板」開始學起吧!!
單一按鈕樣板
由於按鈕樣板相當的方便,因此我個人許多的回覆功能都是以此進行選單的選擇
首先是單一按鈕樣板,以下圖為例,當我們輸入關鍵字「股票 + 股票名稱(此為台積電)」,這時LINE Bot就會回覆兩個選項,分別為「台積電 個股資訊」以及「台積電 個股新聞」,而當我們點選該兩項功能後,就可再進行更多的回覆,這部分往後會更深入的教大家
LINE Bot程式碼
而程式碼的部分其實相當簡單,我們只要在主要的程式碼區輸入幾行程式碼即可完成
大致上的重點可分成以下幾點:
- if “股票 ” in message : 還記得我們之前在判斷關鍵字時,我們都是使用「re.match」嗎,例如上篇中的if re.match(‘我誰’,message),該關鍵字判斷為「完全符合」,也就是要完全輸入一模一樣的字,機器人才會回覆相對應的訊息,而本篇使用的「in message」則為「部分符合」,也就是輸入的訊息中有包含關鍵字即可,以本篇來說,我們輸入的訊息中只要有「股票 」,機器人就會進行該指令
- TemplateSendMessage : 為LINE提供的按鈕樣板模組
- alt_text = “股票資訊” : 該段有點像是標題的意思,並不會出現在回覆的訊息中,主要功能為提醒,因為當我們往後程式碼寫得越來越多時,我們很可能會忘記該段到底再寫什麼東西,這時就必須靠我們所命名的標題來進行提醒
- thumbnail_image_url = : 該段為圖片區,也就是我們上面呈現出陳陳的嘉理中的圖片
- title與text : 這段如果跟上方的回覆圖進行比對應該不難吧,就像是大標跟小標的意思
- CarouselColumn : 為按鈕樣板中顯示回覆訊息的部分,包含圖片、按鈕等功能
- actions : 此段[]中的程式碼為選單按鈕的功能設計,在此很簡單只使用到了label與text,有興趣的人可以將之前所學的功能進行一個結合運用
if "股票 " in message:
buttons_template_message = TemplateSendMessage(
alt_text = "股票資訊",
template=CarouselTemplate(
columns=[
CarouselColumn(
thumbnail_image_url ="https://chenchenhouse.com//wp-content/uploads/2020/10/%E5%9C%96%E7%89%871-2.png",
title = message + " 股票資訊",
text ="請點選想查詢的股票資訊",
actions =[
MessageAction(
label= message[3:] + " 個股資訊",
text= "個股資訊 " + message[3:]),
MessageAction(
label= message[3:] + " 個股新聞",
text= "個股新聞 " + message[3:])
]
)
]
)
)
line_bot_api.reply_message(event.reply_token, buttons_template_message)
else:
line_bot_api.reply_message(event.reply_token, TextSendMessage(message))
單一按鈕樣板注意事項
最後提醒一下,在寫程式中我們難免會遇到需要修復的BUG,在這先跟大家說一個按鈕樣板的限制,也就是該樣板的按鈕(下圖紅框位置),最多只能輸入3個,超過就會顯示錯誤
多樣板組合按鈕
這時一定有人會覺得只能放3個按鈕也太少了吧,別擔心,雖然單一按鈕樣板只能放3個按鈕選單,但我們可以結合多個按鈕樣板,將其組合出更多樣的按鈕選單
從下圖可以看到,我們修改了一下程式碼,就可以讓LINE Bot同時回覆多個按鈕樣板
LINE Bot程式碼
而程式碼的部分看起來好像很多,但其實跟單一按鈕樣板大同小異,大多都只是重複的部分,稍微看一下應該就可以了解,並沒有新增什麼新的程式碼
if "股票 " in message:
buttons_template_message = TemplateSendMessage(
alt_text = "股票資訊",
template=CarouselTemplate(
columns=[
CarouselColumn(
thumbnail_image_url ="https://chenchenhouse.com//wp-content/uploads/2020/10/%E5%9C%96%E7%89%871-2.png",
title = message[3:] + " 股票資訊",
text ="請點選想查詢的股票資訊",
actions =[
MessageAction(
label= message[3:] + " 個股資訊",
text= "個股資訊 " + message[3:]),
MessageAction(
label= message[3:] + " 個股新聞",
text= "個股新聞 " + message[3:]),
]
),
CarouselColumn(
thumbnail_image_url ="https://chenchenhouse.com//wp-content/uploads/2020/10/%E5%9C%96%E7%89%871-2.png",
title = message[3:] + " 股票資訊",
text ="請點選想查詢的股票資訊",
actions =[
MessageAction(
label= message[3:] + " 最新分鐘圖",
text= "最新分鐘圖 " + message[3:]),
MessageAction(
label= message[3:] + " 日線圖",
text= "日線圖 " + message[3:]),
]
),
CarouselColumn(
thumbnail_image_url ="https://chenchenhouse.com//wp-content/uploads/2020/10/%E5%9C%96%E7%89%871-2.png",
title = message[3:] + " 股利資訊",
text ="請點選想查詢的股票資訊",
actions =[
MessageAction(
label= message[3:] + " 平均股利",
text= "平均股利 " + message[3:]),
MessageAction(
label= message[3:] + " 歷年股利",
text= "歷年股利 " + message[3:])
]
),
]
)
)
line_bot_api.reply_message(event.reply_token, buttons_template_message)
else:
line_bot_api.reply_message(event.reply_token, TextSendMessage(message))
多樣版組合按鈕注意事項
雖然說多樣版組合按鈕可以顯示更多的選單進行選擇,但其仍然有限制,聽說最多是只能放置10個單一按鈕樣板(因為本人沒放過那麼多個,所以不知道其極限是否真的為10個😅),但10個其實也很多了,一個單一按鈕樣板可放3個選項,10個就可以放置30個選項,應該很少會需要用到那麼多個的功能吧!!
總結
今天學的按鈕樣板真的相當好用,是我目前製作LINE Bot中最常使用的功能之一,所以大家一定要學會使用這個回覆功能,並且搭配先前我們的教學,以及一些爬蟲技巧,這樣大致上就可以進行一個較為完善的聊天機器人了。