透過Python Line Chatbot 建立聊天機器人 - 基礎篇。
使用Line Develop SDK 的Python Line bot sdk 建置一個簡單的 Line Chatbot的環境教學。
透過Line ChatBot實現一些推播以及回覆的功能
前言:主要是因為要教台科大電腦研習社的社課,想了想我覺得有趣又會想要學的應用, 於是就想到Line ChatBot 此部分只教到可以成功架起來,使用方式會寫在下一篇。
那我們看一下文件
https://developers.line.me/en/services/messaging-api/
我們希望要有發送訊息以及回覆訊息的功能,
因此我們要選擇使用 Message API 上圖轉載自Line Message API
前置條件
需要有一個https的Server
我在這提供幾個簡單的選項,那下面這兩個我都有寫過教學文章
Heroku 好處:
- 有https的網址
- 自己的主機可以不用開著
- 可以將code丟上去,在開著他的伺服器跑你的程式碼
教學文章:Flask結合Heroku教學
Ngrok 好處:
- 有https的網址
- 可以直接從網址連結至本地端的主機
- 部署簡單
- 容易測試,不用每次修改都push上遠端主機 教學文章:Flask結合Ngrok教學
流程說明
1.至line申請develop帳號 2.結合Line Bot SDK Github 3.可用Line Chatbot複誦我傳過去的訊息
方案選擇
我們可以點進這頁面看看詳細的資訊方案介紹
那我們這邊可以看到
我要教社課一定會選擇免費的!!
那因為我們需要有發送訊息(Push API)以及回覆訊息(Reply API)的功能
因此我們就是選擇Developer Trial
註冊帳號
我們要進入Line Developer
然後點選 Start Using Message API
之後輸入你的帳號密碼
那接下來會進到這頁面
填一填之後,到下個頁面有個Start的按鈕按下去~
因為目前沒有provider
因此下面這邊我們點選左邊的Add new provider
然後點選 Message API
然後把你的資訊填進去
比較值得注意的是 下面的選項記得選Develop trial(預設就是這個)
之後會出現下圖
點擊你剛剛創建出來的Provider
然後會進入到這個頁面
這個頁面有幾個個重要的資訊是
Channel ID
Channel secret
QR Code
先拿起你的手機掃描條碼成為好友,之後才能夠順利的進行測試。
Channel access token(long lived)
這個token是之後串接Message API會需要的
還有個要注意的點是 webhook 的選項要記得開啟 - Enabled
實際應用
在一切開始之前
我看了看文件
重點應該是這兩句拉
- LINE Platform sends a request to your webhook URL
- Requests are sent over HTTPS in JSON format.
你要給一個URL => webhook的服務
你的網址要是https
原來要server呢((廢話
然後再看下面這個Link
https://developers.line.me/en/docs/messaging-api/building-bot/
那官方是推薦使用 Heroku
接下來我們點擊進Line Bot SDK Github
看看文件怎麼寫
首先我們照著文件安裝
有兩種選擇
1.你已經有server 或是架設好 ngrok
>pip install line-bot-sdk
{:.message}
2.如果是使用Heroku架server的方式
要用pipenv
>pipenv install line-bot-sdk
>pipenv shell
將github上的Synopsis部分 複製貼上到一個.py檔案
假設檔名為 flask_test.py
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
app = Flask(__name__)
line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('YOUR_CHANNEL_SECRET')
@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'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text))
if __name__ == "__main__":
app.run()
之後將 15, 16行的下方兩個參數,替換為自己的CHANNEL TOKEN
這兩個TOKEN是在下圖的這兩個位置
之後架起server
python flask_test.py
然後要了解目前的https的網址
之後去line chatbot設定我們的server的網址
以heroku示範
這次我的heroku的名稱為
mysterious-stream-19548
所以在line的這個頁面要這樣設定
記得網址後面要加/callback如下圖
接下來會用此示範
至於 Webhook URL Requires SSL 的Verify 其實可以不用管他 Line chatbot issue 31
只要可以像下面這樣正常回答你說過的話就好
其他的使用方法會寫在Line chatbot 應用篇
參考連結
Line Message API - https://developers.line.me/en/services/messaging-api/