AI LINE Bot練功坊-L5 Webhook Event Type
===
## Webhook Event
### 常見的通用基本屬性
1. type : 識別事件的類型
2. mode : channel的狀態
3. timestamp : 事件發生的時間(以毫秒為單位)
4. source : 包含有關事件來源的資訊
5. webhookeventID : 標示webhook event的ID
6. deliveryContext.isRedelivery : Webhook event是否是重新傳遞的event。
>Reference:https://developers.line.biz/en/reference/messaging-api/#common-properties
### Webhook Event的類型
基本的Webhook Event有以下幾種
| Webhook Event | 說明 | 一對一聊天室 | 群組聊天室 |
| ---------------------------- |:---------------------------------------------------------------------- |:------------:|:----------:|
| Message event | 表示使用者發送一則訊息(可以回覆的事件) | ✔ | ✔ |
| Unsend event | 表示使用者收回一則訊息 | ✔ | ✔ |
| Follow event | 表示你的Line官方帳號被加入好友或者是解除封鎖(可以回覆的事件) | ✔ | ❌ |
| Unfollow event | 表示你的Line官方帳號被封鎖或被刪除好友 | ✔ | ❌ |
| Join event | 表示你的帳號被加入群組(可以回覆的事件) | ❌ | ✔ |
| Leave event | 表示你的帳號被從群組中移除 | ❌ | ✔ |
| Member join event | 在您的帳號存在的群組中有人加入的事件(可以回覆的事件) | ❌ | ✔ |
| Member leave event | 在您的帳號存在的群組中有人退出的事件 | ❌ | ✔ |
| Postback event | 配合Postback action的訊息事件(可以回覆的事件) | ✔ | ✔ |
| Video viewing complete event | 用戶觀看完從LINE官方帳號發送的指定TrackingId的影片訊息(可以回覆的事件) | ✔ | ❌ |
✔ Your bot server receives this event ❌ Your bot server doesn't receive this event
>Reference : https://developers.line.biz/en/docs/messaging-api/receiving-messages/#webhook-event-in-one-on-one-talk-or-group-chat
## Message Event
表示使用者發送一則訊息,官方帳號可以根據這則訊息進行應對的回覆
Message Object包括以下幾種 :
* Text
* Image
* Video
* Audio
* File
* Location
* Sticker
### 引用套件
```python
from linebot.v3.webhooks import (
MessageEvent,
TextMessageContent
)
```
### 程式碼
```python
@handler.add(MessageEvent, message=TextMessageContent)
def handle_text_message(event):
print(f'Got {event.type} event')
```
message的type(指要接收到的的訊息類型)有:
* TextMessageContent
* LocationMessageContent
* StickerMessageContent
* ImageMessageContent
* VideoMessageContent
* AudioMessageContent
* FileMessageContent
>Reference : https://developers.line.biz/en/reference/messaging-api/#message-event
## Follow Event
表示你的Line官方帳號被加入好友或者是解除封鎖
### 引用套件
```python
from linebot.v3.webhooks import (
FollowEvent
)
```
### 程式碼
```python
@handler.add(FollowEvent)
def handle_follow(event):
print(f'Got {event.type} event')
```
加入好友後會傳送一則"Got Follow Event"的訊息
>Reference : https://developers.line.biz/en/reference/messaging-api/#follow-event
## Postback Event
配合Postback action的訊息事件
當有action type為postback發生時,則會透過messaging API回傳event給Webhook URL
### 引用套件
```python
from linebot.v3.messaging import (
MessagingApi,
ReplyMessageRequest,
TemplateMessage,
ButtonsTemplate,
PostbackAction
)
from linebot.v3.webhooks import (
MessageEvent,
PostbackEvent
)
```
### 程式碼
觸發postback action的前置作業(建立一個選單訊息)
```python
@handler.add(MessageEvent, message=TextMessageContent)
def handle_message(event):
line_bot_api = MessagingApi(api_client)
with ApiClient(configuration) as api_client:
if event.message.text == 'postback':
buttons_template = ButtonsTemplate(
title='Postback Sample',
text='Postback Action',
actions=[
PostbackAction(label='Postback Action', text='Postback Action Button Clicked!', data='postback'),
])
template_message = TemplateMessage(
alt_text='Postback Sample',
template=buttons_template
)
line_bot_api.reply_message(
ReplyMessageRequest(
reply_token=event.reply_token,
messages=[template_message]
)
)
```
其中action有下列幾種 :
1. MessageAction
2. URIAction
3. PostbackAction
4. DatetimePickerAction
5. CameraAction
6. CameraRollAction
7. LocationAction
### 程式碼
觸發action後的動作
```python
@handler.add(PostbackEvent)
def handle_postback(event):
if event.postback.data == 'postback':
print('Postback event is triggered')
```
按下名為Postback Action的按鈕後,回應一個postback action且值為"postback"
當postback action傳送的值為"postback"時,會回覆一則訊息"Postback Action Button Clicked!"
在伺服器則會輸出一段訊息"Postback event is triggered"
>Reference:https://developers.line.biz/en/reference/messaging-api/#postback-event
Youtube 課程影片
---
<iframe width="560" height="315" src="https://www.youtube.com/embed/FEeQuUT1pM0?si=QSKhsvE5gxJljJ5F" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
{%hackmd @ntuebigdata/about %}
## 相關教材連結
<div style="display: flex; justify-content:space-between;">
<div>
<a class="btn btn-warning" href="https://hackmd.io/@ntuebigdata/create-an-echo-bot" style="color:white;width:300px;text-overflow:ellipsis;overflow:hidden">◀◀◀ L04 Echo Bot 製作 ◀◀◀</a>
</div>
<div>
<a class="btn btn-info" href="https://hackmd.io/@ntuebigdata/sending-message" style="color:white;width:300px;text-overflow:ellipsis;overflow:hidden">▶▶▶ L06 Sending Message ▶▶▶</a>
</div>
</div>