iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
DevOps

30天的社群機器人之旅系列 第 6

Day 06 TextMessage

  • 分享至 

  • xImage
  •  

接著要來重新說說 TextMessage ,就是當使用者傳送文字時會觸發的 MessageEvent ,在 TextMessage 中最重要的就是使用者所傳送的文字了,各位應該有發現在前面的例子中,我們是這樣將 MessageEvent 的處理函式的。

line_bot_api = LineBotApi(os.environ['CHANNEL_ACCESS_TOKEN'])
handler = WebhookHandler(os.environ['CHANNEL_SECRET'])

首先將 WebhookHandler 初始化並帶入 Channel Secret 作為等一下驗證訊息的參數,以及將 LineBotApi 初始化並帶入 Channel Access Token 。

接著我們是這樣處理 Webhook 傳入的消息的。

@app.route("/callback", methods=['POST'])
def callback():
    # 抓 X-Line-Signature 標頭的值
    signature = request.headers['X-Line-Signature']
    # 抓 request body 的文字
    body = request.get_data(as_text=True)
    # handle webhook body
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)
    return 'ok'

首先先將 Line 傳送進來,將包含在標頭訊息中的簽章及傳送進來的資料交由 handler 進行驗證,如果驗證不通過的話會丟出不合法的簽章錯誤,經由 Flask 回復錯誤訊息;如果通過的話,則會由 handler 交給對應的函式進行處理。

而我們則需先加入各個 Event 對應的處理函式,並指定是處裡哪一類型的函式,若是 MessageEvent ,則還需要再給出是處裡哪一個子類型的訊息。

而函式會有一個參數,是用來取得傳入訊息的資訊,最後再經由 LineBotApi 進行回復。

@handler.add(MessageEvent, message=(TextMessage))
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text)
    )

webhook 會傳來的一些事件 (Event) 及其格式 - Webhook event object

講到這邊,不知道各位有沒有理解 TextMessage 是如何進行處裡並回復的呢?

還有不知道各位有沒有發現一個小細節,那就是如果只是單純傳訊息至 Line Bot ,是根本不需要 WebhookHandler 參與的,也就是說我可以直接推送訊息至 Line Bot (就是我前面提到每個月只有 500 則的那個)。

而主動推送就不太一樣了,必須先知道使用者或群組的 ID ,不然在茫茫大海一片使用者中,哪會知道應該雖送給哪個使用者呢?

因此我們可以先小改一下,取得我們自己的 ID

@handler.add(MessageEvent, message=(TextMessage))
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        [
            TextSendMessage(text=event.message.text),
            TextSendMessage(text=event.source.user_id)
        ]
    )

這樣就回同時回復兩則訊息,前面是我們傳入的訊息,後面則是我們的 ID 。

接著我們就可以主動推送消息了。

line_bot_api.push_message("<your_user_id>", "test")

在某個位置寫下這樣的 function 應該就可以主動推送訊息給自己了,不過要注意一下,不要玩得太過火,500 則消息的額度直接用光了。

那麼就先到這邊, TextMessage 相信各位已經非常了解了,我們接下來就要進入其他的消息了。

大家掰~掰~


上一篇
Day 05 Line Bot 訊息詳解
下一篇
Day 07 ImageMessage, VideoMessage & AudioMessage
系列文
30天的社群機器人之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言