# Line Bot API
###### tags: `Line Bot 簡易上手教學`
## 回應訊息基本語法
* 當使用者傳送訊息給Line Bot時,會觸發MessageEvent事件,這裡僅處理收到的文字訊息
```python=
#TextMessage表示收到的是文字訊息
@handler.add(MessageEvent, message = TextMessage)
```
* 建立路由的函式
```python=
def 函式名稱(event)
```
* 參數event包含傳回的各項訊息
* 通常處理文字的第一步是取得使用者傳送的文字
```python=
傳送文字變數 = event.message.text
```
* 綜合後
```python=
@handler.add(MessageEvent, message = TextMessage)
def handle_message(event):
mtext = event.message.text
if mtext == "傳送文字1":
處理1
#......
```
## 回傳文字訊息
* 回復訊息
```python=
#訊息種類分為text, image, location, sticker, audio, vedio, template
line_bot_api.reply_message(event, reply_token, 訊息種類)
```
* 訊息命令
```python=
訊息命令(參數1 = 值1, 參數2 = 值2, ......)
```
* 最簡單的回傳文字
```python=
line_bot_api.reply_message(event, reply_token, TextSendMessage(text = 文字訊息內容))
```
* 增加可讀性的話......
```python=
message = TextSendMessage(
text = 文字訊息內容
)
line_bot_api.reply_message(event, reply_token, message)
```
## 建立回應訊息的Line Bot
1. 建立Messaging API Channel
2. 建立Flask程式
3. 執行Flask程式可啟動本機伺服器,再啟動ngrok伺服器,設定Messaging API Channel的Webhook URL為ngrok的伺服器網址
* 一樣先自行建立圖文選單

* @傳送文字....自行輸入


* 回到python檔
```python=
from linebot.models import MessageEvent, TextMessage, TextSendMessage, ImageSendMessage, StickerSendMessage, LocationSendMessage, QuickReply, QuickReplyButton, MessageAction
@handler.add(MessageEvent, message = TextMessage)
def handler_message(event):
mtext = event.message.text
if mtext == "@傳送文字":
try:
message = TextSendMessage(
text = "我是xia_bot,\n您好!"
)
line_bot_api.reply_message(event.reply_token, message)
except:
line_bot_api.reply_message(event.reply_token, TextSendMessage(text = '發生錯誤'))
```
* 啟動本機即ngrok伺服器

* 記得修改Webhook settings
* 結果

## 回傳圖片
* 語法為
```python=
訊息變數 = ImageSendMessage(
original_content_url = 原始圖片網址,
preview_image_url = 預覽圖片網址
)
```
* 通常圖片會存在雲端上
```python=
#續
elif mtext == "@傳送圖片":
try:
message = ImageSendMessage(
original_content_url = 'https://i.imgur.com/4QfKuz1.png',
preview_image_url = 'https://i.imgur.com/4QfKuz1.png'
)
line_bot_api.reply_message(event.reply_token, message)
except:
line_bot_api.reply_message(event.reply_token, TextSendMessage(text = '發生錯誤'))
```
* 結果

## 回傳貼圖訊息
* 語法
```python=
訊息變數 = StickerSendMessage(
package_id = '群組id',
sticker_id = '貼圖id'
)
line_bot_api.reply_message(event.reply_token, 訊息變數)
```
* Line[貼圖查詢](https://developers.line.biz/en/docs/messaging-api/sticker-list/)

* 續
```python=
elif mtext == "@傳送貼圖":
try:
message = StickerSendMessage(
package_id = 446,
sticker_id = 2021
)
line_bot_api.reply_message(event.reply_token, message)
except:
line_bot_api.reply_message(event.reply_token, TextSendMessage(text = '發生錯誤'))
```
* 結果

## 同時傳送多個訊息
* 使用串列
```python=
訊息變數 = [
第一個,
第二個
......
]
```
* 範例
```python=
elif mtext == "@多項傳送":
try:
message = [
StickerSendMessage(
package_id = 446,
sticker_id = 2021
),
TextSendMessage(
text = "這是pizza圖片"
),
ImageSendMessage(
original_content_url = 'https://i.imgur.com/4QfKuz1.png',
preview_image_url = 'https://i.imgur.com/4QfKuz1.png'
)
]
line_bot_api.reply_message(event.reply_token, message)
except:
line_bot_api.reply_message(event.reply_token, TextSendMessage(text = '發生錯誤'))
```
* 結果

## 回傳位置
* 語法
```python=
訊息變數 = LocationSendMessage(
title = 標題,
address = 地址,
latitude = 緯度,
longtiude = 經度
)
line_bot_api.reply_message(event.reply_token, 訊息變數)
```
* 續
```python=
elif mtext == "@傳送位置":
try:
message = LocationSendMessage(
title = '101大樓',
address = '台北市信義區五段7號',
latitude = 25.034207,
longitude = 121.564590
)
line_bot_api.reply_message(event.reply_token, message)
except:
line_bot_api.reply_message(event.reply_token, TextSendMessage(text = '發生錯誤'))
```
* 結果

## 快速選單
* 語法
```python=
message = TextSendMessage(
text = "提示文字",
quick_reply = QuickReply(
items = [
QuickReplyButton(action = MessageAction(label = "顯示值", text = '選取值')),
]
)
)
line_bot_api.reply_message(event.reply_token, message)
```
* 續
```python=
elif mtext == '@快速選單':
try:
message = TextSendMessage(
text = "最喜歡的程式語言",
quick_reply = QuickReply(
items = [
QuickReplyButton(action = MessageAction(label = "Python", text = 'python')),
QuickReplyButton(action = MessageAction(label = "Java", text = 'Java')),
QuickReplyButton(action = MessageAction(label = "C++", text = 'C++')),
QuickReplyButton(action = MessageAction(label = "C#", text = 'C#')),
]
)
)
line_bot_api.reply_message(event.reply_token, message)
except:
line_bot_api.reply_message(event.reply_token, TextSendMessage(text = '發生錯誤'))
```
* 結果

## 回應多媒體訊息
* 回傳聲音訊息
```python=
訊息變數 = AudioSendMessage(
original_content_url = 聲音檔網址,
duration = 時間長度
)
```
* 先在line manager上建一個......

* 背景圖

* 續
```python=
baseurl = "https://c80caaf03cbc.ngrok.io/static"
#//續
elif mtext == '@傳送聲音':
try:
message = AudioSendMessage(
original_content_url = baseurl + 'mario.m4a',
duration = 20000 #20s
)
line_bot_api.reply_message(event.reply_token, message)
except:
line_bot_api.reply_message(event.reply_token, TextSendMessage(text = '發生錯誤'))
```
* 結果

## 傳送影片
* 續
```python=
elif mtext == '@傳送影片':
try:
message = VideoSendMessage(
original_content_url=baseurl + 'robot.mp4', #影片檔置於static資料夾
preview_image_url=baseurl + 'robot.jpg'
)
line_bot_api.reply_message(event.reply_token, message)
except:
line_bot_api.reply_message(event.reply_token,TextSendMessage(text='發生錯誤!'))
```
{%hackmd S1DMFioCO %}