###### tags: `LineBot` # 快速開始 ## 建立 Provider 前往 [**LINE Developers**](https://developers.line.biz/zh-hant/),「**使用LINE帳號登入**」後,到 **Providers** 頁籤中點擊「**Create**」按鈕會出現以下畫面: ![](https://hackmd.io/_uploads/rJPQDkyd2.png) 接著,點擊「**Create**」按鈕後會來到第二步驟,建立頻道(Channel)的畫面,如下圖: ![](https://hackmd.io/_uploads/HkBB_J1uh.png) ## 建立 Messaging API channel 我們選擇「**Create a Messaging API channel**」,接著會輸入一些基本資料,畫面如下: ![](https://hackmd.io/_uploads/BkU5qky_n.png) ![](https://hackmd.io/_uploads/HkV3cykd2.png) 其中的 Channel icon 為 LINE 帳號的大頭貼,之後的「Privacy policy URL」及「Terms of use URL」可選擇性填寫,沒有的話保持空白即可。建立成功後,就可以看到如下畫面: ![](https://hackmd.io/_uploads/By1hs11un.png) 最後的步驟就是要將這個頻道(Channel)與自己開發的應用程式連結,所以其中有兩個憑證會使用到,如下: + **Channel secret(頻道密碼)**:位於 Basic settings 頁籤中,如下圖: ![](https://hackmd.io/_uploads/B1UpWNE_h.png) + **Channel access token(頻道憑證)**:位於 Messaging API 頁籤中,要按下右方的「Issue」按鈕才會出現,如下圖: ![](https://hackmd.io/_uploads/H1ndWxyuh.png) ## 使用 Flask 建置 LINE Bot 應用程式 需要先安裝 Python 相關套件: + flask + line-bot-sdk ```bash pip install flask line-bot-sdk ``` 以下是利用 Flask 啟動的 LINE Bot 程式碼,簡單示範使用者傳送什麼訊息就回應相同的內容。 `app.py` :point_down: ```python from flask import Flask, abort, request from linebot import LineBotApi, WebhookHandler from linebot.exceptions import InvalidSignatureError from linebot.models import MessageEvent, TextMessage, TextSendMessage app = Flask(__name__) CHANNEL_ACCESS_TOKEN = "你的 CHANNEL_ACCESS_TOKEN" CHANNEL_SECRET = "你的 CHANNEL_SECRET" line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN) handler = WebhookHandler(CHANNEL_SECRET) # Signature Validation @app.route("/callback", methods=['POST']) def callback(): # get X-Line-Signature header value signature = request.headers['X-Line-Signature'] # get request body as text body = request.get_data(as_text=True) # app.logger.info("Request body: " + body) # handle webhook body try: handler.handle(body, signature) except InvalidSignatureError: abort(400) return 'OK' # Message Response @handler.add(MessageEvent, message=TextMessage) def handle_message(event): get_message = event.message.text # Send To Line reply = TextSendMessage(text=f"{get_message}") line_bot_api.reply_message(event.reply_token, reply) if __name__ == "__main__": app.run(debug=True) ``` 執行程式碼。 ```bash python app.py ``` 接著,會出現以下畫面: ![](https://hackmd.io/_uploads/rk_Kb7Nd2.png) Flask 預設的 port 為 5000。 ## 安裝 ngrok LINE Bot 應用程式都完備後,接下來就要讓網址能夠**公開(Public)** 且具有 **HTTPS**,LINE 頻道(Channel)才有辦法連結,這邊我們透過 ngrok 幫我們實現。 ngrok 能夠將你本機的 IP port(http\://127.0.0.1:5000)對應到一個隨機產生的 HTTPS 網址並且是對外公開的(Public),這時候外部使用者只要透過這個 HTTPS 網址就能夠存取本機所運行的服務。 前往 [**ngrok download**](https://ngrok.com/download) 並遵照自己的作業系統安裝,這邊我們使用 Apt 安裝在 Linux 上。 ![](https://hackmd.io/_uploads/HJ0lAXV_3.png) 下一步需要進行驗證,驗證前需要 [註冊 ngrok](https://dashboard.ngrok.com/signup),註冊完之後會有屬於你自己的憑證(Token),如下圖: ![](https://hackmd.io/_uploads/r13k-VV_2.png) 執行以下指令進行驗證: ```bash ngrok config add-authtoken <token> ``` 接著,就可以透過 ngrok 將本機的 port 對外公開,以本文為例,flask 在本機運行的 port 為 5000,所以輸入以下的指令: ```bash ngrok http 5000 ``` 執行結果: ![](https://hackmd.io/_uploads/SJokrNEOn.png) ## 設定 LINE Webhook URL LINE Webhook URL 位於 [**LINE Developers**](https://developers.line.biz/zh-hant/) 開發者控制台的 Messaging API 頁籤中,點擊「Edit」,輸入剛剛 ngrok 所產生的 HTTPS 網址,除此之外,下方的「Use webhook」要啟用。 ![](https://hackmd.io/_uploads/HJ30SV4dh.png) 這邊點擊「Verify」進行驗證,如果成功的話會出現 "Success" 視窗。 最後一步要記得關閉 LINE 的自動回覆訊息功能,同樣在 Messaging API 頁籤中,點擊「Edit」,如下圖: ![](https://hackmd.io/_uploads/S1f8FEVO2.png) 設定 Auto-response messages 為「停用」,如下圖: ![](https://hackmd.io/_uploads/Bk0xoVV_2.png) ## 結果 最後,加入好友後就可以對 LINE Bot 傳送訊息,執行結果如下圖: ![](https://hackmd.io/_uploads/B1VYjVEuh.png)