步驟與藍圖

  1. Line developers創建provider、channel
  2. Messaging API and a SDK for Python
  3. Heroku作為LineBot server

Line developers創建provider、channel

Line developers主頁點選右上角Log in,登入自己line帳號:

點選畫面上Providers旁的Create,並在Provider name輸入自己專案名稱(例如TestLineBot):

創建完provider後可以看到左邊bar上有剛剛創的專案,點選後我們來創建channel, 直接選擇Create a Messaging API channel,作為聊天機器人使用。

在Create a new channel底下可以設定icon(line大頭貼)、name(line名稱)等資訊,最後勾選同意使用條款,然後創建。

這裡有幾個重要資訊,分別是:

  • Basic settings
    1. Channel secret (A unique secret key you can use to grant an app access to your channel)
    2. Your user ID (Your LINE account’s user ID. Use this to send yourself test messages with the Messaging API. Doing so requires you to add your channel as a friend on LINE by scanning the QR code on the Messaging API tab.)
  • Messaging API
    1. QR code
    2. Webhook URL
    3. Channel access token (Use this channel access token to call the Messaging API.)

Messaging API and a SDK for Python

Messaging API 提供push messages和reply messages兩個方法讓聊天機器人與使用者互動。

其中開源的LINE Messaging API SDK for Python 讓我們可以使用Python開發自己的聊天機器人(回覆訊息、推播訊息)。

# python >= 3.7
pip install line-bot-sdk

創建檔案app.py來編寫聊天機器人的push messages和reply messages。其中,這裡用Flask架一個app作為LineBot server的溝通方式。並且,剛剛重要的Channel access tokenChannel secretYour user ID分別設定給LineBotApiWebhookHandlerpush_message

import os
from flask import Flask, request, abort
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import *

app = Flask(__name__)

# 必須放上自己的Channel Access Token
line_bot_api = LineBotApi('Channel Access Token')
# 必須放上自己的Channel Secret
handler = WebhookHandler('Channel Secret')
# 使用Your user ID推播訊息
line_bot_api.push_message('Your user ID', TextSendMessage(text='你可以開始了'))

# 監聽所有來自 /callback 的 Post Request
@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'
    
#訊息傳遞區塊
##### 基本上程式編輯都在這個function #####
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    message = TextSendMessage(text=event.message.text)
    line_bot_api.reply_message(event.reply_token,message)


if __name__ == "__main__":
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

Heroku作為LineBot server

Heroku主頁右上角選擇Sign up(或Log in),最後登入你的帳號:

這個頁面會顯示你在Heroku目前所有app。透過右上角New > Create New App來創建新的app,輸入App name、選擇region就可以了:

創建好Heroku app後,我們需要設定Line Platform和Bot Server(Heroku app)溝通橋梁Webhook。進入你的Heroku app,點選Open app:

然後複製這段網址(包含https:://):

回到Line Developers,打開Providers進到你的channel並點選Messaging API頁面(TestLineBot > testbot01 > Messaging API),往下滑到Webhook settings貼上剛剛複製的網址,並在後面加上/callback,完成後點選Update,並開啟Use webhook。

建議在LINE Official Account features的Auto-reply messages可以選擇關掉Disabled,否則聊天機器人每次都回多回覆一些罐頭訊息,像是:感謝您的訊息!很抱歉,本帳號無法個別回覆用戶的訊息。敬請期待我們下次發送的內容喔)。

完成Line Platform和Bot Server的橋樑後我們可以開始部屬程式。這裡要將三個檔案放入剛剛創建的Heroku app裡:

  1. app.py (line bot主程式)
  2. Procfile (告訴Heroku要執行什麼e.g. python app.py)
  3. requirements.txt (安裝環境套件)

其中,app.py如上節所示,而Procfile如下:

web: python app.py

與requirements.txt:

line-bot-sdk 
bs4 
flask 
pymongo 
datetime 
pandas 
SnowNLP 
emoji 
pyshorteners 
scipy

我們選擇github作為部屬程式到Heroku的管道。另外,這裡就不介紹如何創建一個repository並把剛剛3個檔案push上去了,記得選擇private repo,因為有你的Channel access tokenChannel secret資訊在上面。

輸入你的repository name然後connect,接著畫面拉到下面,點選Deploy Branch就可以把(repo裡面的code)app.py、Procfile、requirements.txt部屬到Heroku app了。

當部屬成功完成後,Heroku app就會幫你執行python app.py,照理說,這時候你的line bot就會發出一則推播訊息:「你可以開始了」。

代表push messagest成功!而當你輸入任何訊息,Line Bot都會回覆相同訊息,代表reply messages成功!另外,這兩個方法都可以在app.py裡修改,創造出你想要的聊天機器人。

Next

  1. 修改reply messages的邏輯。
  2. 新增reply messages的種類:文字、貼圖、圖片、影片、聲音、位置等。

參考資料