LINE BOT 聊天機器人 Ch4 — 使用 Python 打造第一個 LINE 聊天機器人(下)

Lawrence Yi-Hsuan Chuang
6 min readMay 3, 2021

--

在上一篇,我們透過 Python 來著手第一個屬於我們自己的 LINE 聊天機器人,並且能夠讓 LINE 聊天機器人回傳與使用者所輸入一模一樣的文字訊息,那麼接下來我們應該如何讓 LINE 聊天機器人接收到我們定義的關鍵字時能夠回應特定的訊息或動作呢?

就讓我們繼續看下去吧!

設定關鍵字

在 LINE 聊天機器人中,我們可以設定很多的關鍵字以利使用者做特定的查詢或是互動,而我們在之前的文章中已經有先設定好了 Rich Menu ( Rich Menu 可以視為 LINE 聊天機器人中最常用到或最核心的功能),因此我們可以先以點選 Rich Menu 後會出現的文字作為關鍵字!

我們目前設定的四組關鍵字:

@status
@message
@location
@register

到目前為止,我們尚未針對收到關鍵字的部分進行相對應的動作,因此我們需要在程式碼的 handler 中做一些修改!

在這之前,我們可以先查看一下到底傳進來的 event 事件包含哪些資訊,這部分可以透過傳送任一文字訊息給 LINE 聊天機器人來得知其內容,我們可以透過 handler 中將 event 這個參數資訊給列印出來,首先我們需要先執行app.py 這個檔案,執行完畢後筆者以傳送文字訊息 test 作為測試

我們就可以在下方的 PyCharm Console 中,看到列印出來的資訊並稍微格式化一下內容

其中:

message:
- message id (該訊息的id)
- message text (該訊息的內容)
- message type (該訊息的類型,純文字為text)
replyToken:聊天機器人在回覆訊息必須在此token的有效期限內,否則將無法回覆source:
- source type (該訊息來源為何)
- source user id (該來源之id)
timestamp:訊息傳送時間,為unix time format

我們知道了送進來的 event 事件的資訊是什麼之後,那麼我們就可以透過 event 中的 message text 來判斷關鍵字了,因此我們需要再修改一下程式碼來進行判斷!

判斷關鍵字

我們新增一個字串來存放送進來的 message text ,並且要等於我們設定的關鍵字時才會進行回應,因此我們要在 app.py 中的 handle_message(event) 這個函式中修改:

Okay!測試的結果是只有在輸入等於 @status 這個關鍵字時,聊天機器人才會回覆指定的訊息給使用者,從上面我們可以看到,在輸入前面兩個訊息時聊天機器人都不會做任何回應,一直到輸入關鍵字後,聊天機器人才有回覆指定的訊息

那接下來,我們把整個關鍵字的區塊完成,並加上不在 Rich Menu 上的關鍵字時的額外處理吧!

一起來看一下執行的結果!

修改完成後聊天機器人就會在我們輸入非關鍵字時,顯示需要輸入有效的關鍵字囉!

那麼,除了文字訊息之外,還有什麼類型的訊息是可以透過聊天機器人傳遞呢?總共有下列幾種類別(更多資訊請再參考連結):

• Text message
• Sticker message
• Image message
• Video message
• Audio message
• Location message
• Imagemap message
• Template message
• Flex Message

其中粗體的部分是我們這一系列文章中較常會使用到的訊息類別

我們來看看如何使用吧!

下列是其使用方法:

TextSendMessage

text_message = TextSendMessage(text='Hello, world')

ImageSendMessage

image_message = ImageSendMessage(
original_content_url='https://example.com/original.jpg',
preview_image_url='https://example.com/preview.jpg')

LocationSendMessage

location_message = LocationSendMessage(
title='my location',
address='Tokyo',
latitude=35.65910807942215,
longitude=139.70372892916203)

其中 TextSendMessage 已經在程式碼中出現了,那我們來研究一下另外兩個訊息類別吧!

如果要使用 ImageSendMessage 的訊息,需要取得圖片的 URL ,或是可以上傳圖片到雲端硬碟後取得連結。在這邊我們不會區分 original_content_url 跟 preview_image_url 的差異,所以我們會給予同一個 URL 做為使用。除此之外,我們也可以透過免費的線上圖庫來取得圖片的連結作為測試使用(例如 Pexels/Pixabay …等等)

接著,我們需要取得座標來透過聊天機器人傳送位置訊息 ,我們可以透過 Google Map 來取得經緯度與地址資訊,筆者這裡以台北 101 為例

接下來我們來修改一下程式碼吧!

在使用這三個訊息之前,我們需要先導入訊息類別

接著,我們來修改 handle_message(event) 這個函式內容,讓我們的聊天機器人接收到 @status 時,傳送 okay 的照片給我們,然後輸入@location 時,傳送台北 101 的座標位置給我們

一起來測試一下結果是不是符合我們的預期

太好了測試結果符合預期!

那麼,筆者會在後續的文章中,陸續開始介紹如何透過聊天機器人來存取 Sigfox 的資訊,那麼我們下次再見囉!

--

--

Lawrence Yi-Hsuan Chuang
Lawrence Yi-Hsuan Chuang

Written by Lawrence Yi-Hsuan Chuang

擁有超過9年工作經驗的工程師,目前在University of Nevada, Reno就讀Computer Science的碩士生,曾在軟體、銀行顧問和物聯網產業服務並擁有豐富的經驗。在這裡主要分享個人在學習技術方面的心得與知識。此外,我也是攝影愛好者,如果有任何關於技術、職場或攝影的問題,都歡迎一起討論、交流!