iT邦幫忙

2021 iThome 鐵人賽

DAY 4
1

建立Chatbot程式

在專案資料夾內右鍵開啟VS Code
https://ithelp.ithome.com.tw/upload/images/20210904/20140165OdSTUv5Mmj.png
左邊工作區右鍵新增檔案
https://ithelp.ithome.com.tw/upload/images/20210904/20140165wO9ieSpKxF.png
將檔案命名為app.py
這時會提示要不要安裝Python延伸模組
這邊按安裝
https://ithelp.ithome.com.tw/upload/images/20210904/20140165PSfzp4dGf4.jpg
安裝後點擊Select a Python Interpreter Python直譯器選擇前面安裝的Python版本
https://ithelp.ithome.com.tw/upload/images/20210904/20140165YsTZJkzaAx.png

在line-bot-sdk-python 的Github有範例程式
https://github.com/line/line-bot-sdk-python
後面將用這個程式打造成群組團購機器人
回到app.py檔案,將下方程式碼複製至app.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:
        print("Invalid signature. Please check your channel access token/channel secret.")
        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()

這邊就會用到前面提到的Channel secret、access token

Channel secret

進到LINE頻道網頁,在Basic settings網頁往下滾會看到你的Channel secret!https://ithelp.ithome.com.tw/upload/images/20210904/20140165LXhu9U3JvA.jpg
這邊把你程式內單引號裡YOUR_CHANNEL_SECRET替換成你的Channel secret

handler = WebhookHandler('YOUR_CHANNEL_SECRET')

CHANNEL_ACCESS_TOKEN

在Messaging API滾到底會看到你的Channel access token!
https://ithelp.ithome.com.tw/upload/images/20210904/20140165lCoTuXyKLU.jpg
同樣把你程式內單引號裡YOUR_CHANNEL_ACCESS_TOKEN替換成你的CHANNEL_ACCESS_TOKEN

line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')

執行程式

接著點右上在終端機中執行Python
https://ithelp.ithome.com.tw/upload/images/20210904/20140165SUcAHbAO1l.jpg
正常執行畫面長這樣
https://ithelp.ithome.com.tw/upload/images/20210904/20140165MATRS3aEtw.png

透過ngrok連接內網與網際網路,進行本地測試

右下新增一個命令提示字元視窗
https://ithelp.ithome.com.tw/upload/images/20210904/20140165ypmyzJHPG3.png
在命令提示字元中輸入

ngrok http 5000

這個指令讓外部網路也能拜訪這個內網位址 http://127.0.0.1:5000
https://ithelp.ithome.com.tw/upload/images/20210904/20140165J5rVfJuExP.png
這時他會給你兩個位址,這邊會用到下面那個https的位址
這個位址時效是2小時,2小時後要再打一次指令產生新的位址,時效也是2小時
Ctrl+Shift+C 複製它
https://ithelp.ithome.com.tw/upload/images/20210904/20140165La6nxs9lYZ.png
接著開啟頻道頁面內的Messaging API,這邊開啟Use webhook
然後點擊Edit並將剛才複製的位址貼上,並在後面加上/callback
按Update更新

你的位址/callback

https://ithelp.ithome.com.tw/upload/images/20210904/20140165RGWeOBd1iA.jpg
接著點擊Verify,顯示Success代表連接成功了
https://ithelp.ithome.com.tw/upload/images/20210904/20140165RjoklSkb9a.jpg

測試

程式預設是回復它接收到的訊息
先到python分頁按Ctrl+C中斷Python再點擊右上重新執行一次
然後到你的Line發送訊息,有收到回復訊息代表成功了
https://ithelp.ithome.com.tw/upload/images/20210904/20140165odX3wtN5Sm.png
https://ithelp.ithome.com.tw/upload/images/20210904/201401651tYY4e5pRQ.jpg


上一篇
Day 03 安裝python、需要的package以及VS Code等環境建置
下一篇
Day 05 LINE bot上的Webhooks
系列文
LINE Messaging API SDK for Python 實現群組團購輔助機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言