ETH官方钱包

創作內容

3 GP

讓我們用Python開發一個LineBot By.2022年版 (壹)

作者:OKHand│2022-01-23 18:28:11│巴幣:6│人氣:1817
這篇文章是我自己吸收後打出來的文章如果有錯記得跟我說!!

前情提要:
因為疫情關係導致很多東西都用Line通知並因為公司一些系統也利用 Line notify 去做通知,導致這份小小的 Side Project 產生出來,當然也是由我接下我才會打這篇文 XD

正題:
我們要做Line Bot前要先理解一些他們的傳送資料的方法和架構!
簡單來說就是我們 User 傳送的資料or文字都會透過 LineBot-API 先傳到 Line,之後會轉到我們掛在 Heroku 上用 Python+Flask 建立的網頁,然後網頁收到資料後去執行對應的程式碼,再回傳回去 Line 並執行對應的程式碼(Ex:傳資料給User)。

實作:
  
註冊:
我們先去 Line 創建我們的 LineBot => https://developers.line.biz/en/
先到我們的 Account 裡選擇 Products 然後選擇 Messaging API 然後點 Start Now
之後就開始填一些基本資料,有些資料可以不用填
這樣我們就有了基本的 LineBot 了
之後就可以去註冊 Heroku => https://www.heroku.com
然後就可以建立一個 App
之後也是填一下資料就建立好了

程式方面:
我們是用 Python+Flask 建構一個網頁掛在 Heroku
因為我們要用 Heroku 所以需要安裝 Git 跟 HerokuCLI
然後我是用 Python 3.8.6 去開發
然後安裝一些套件
pip install line-bot-sdk
pip install Flask
不過這些事如果你要在本地執行程式測試才會需要裝的因為我們主要會掛在 Heroku 上所以我們只要把這些套件裝在 Heroku 上就OK了!
東西都裝完之後就能開始看我們的程式碼了
=> Main.py
# 初始化LINT BOT
import os

from flask import Flask
from linebot import LineBotApi, WebhookHandler

app = Flask(__name__)

line_bot_api = LineBotApi(os.environ['CHANNEL_ACCESS_TOKEN'])
handler = WebhookHandler(os.environ['CHANNEL_SECRET'])

# 利用 handler 處理 LINE 觸發事件
from linebot.models import MessageEvent, TextMessage, TextSendMessage

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token, TextSendMessage(text=f"Hello {line_bot_api.get_profile(event.source.user_id).display_name}!")
    )

# 利用 route 處理路由
from flask import request, abort
from linebot.exceptions import InvalidSignatureError

@app.route("/callback", methods=['POST'])
def callback():
    signature = request.headers['X-Line-Signature']

    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)

    return 'OK'
我們可以看到程式碼裡面有 CHANNEL_ACCESS_TOKEN 跟 CHANNEL_SECRET
都是在我們剛剛創 LineBot 的地方看到
Channel secret 在 Basic Setting 下 ,Channel access token 在 Messaging API 下

然後在 Messaging API 裡有一個 Webhook URL 的地方是等等要用的
可以先填上 https://你heroku的APP名字.herokuapp.com/callback
先別急著按 Verify 因為我們還沒把程式上傳
之後就要回到 Heroku 的部分因為我們要上傳到 Heroku,我們先把程式碼的部分搞定在上傳
我們要把程式上傳到 Heroku 需要幾個東西讓 Heroku 去安裝他要的東西跟指定要跑的程式等等...

要上傳Heroku有幾個必要的東西 Procfile(不要懷疑就是沒有副檔名),requirements.txt,runtime.txt 這三個東西跟你的主程式

Procfile:主要是寫說你這個程式是捨麼東西並主要執行的程式
我們要在裡面填上 web: gunicorn main:app –preload
Ex:web: gunicorn main:app –preload
這是一個 Web 用 Gunicorn 搭建一個 Web 服務然後是用 main 這個檔案

等等上傳就可以在你的 Heroku 上看到

requirements.txt:這很重要!這是要把我們需要用到的 Library 去跟 Heroku 說他會在上傳程式碼時一起裝起來
這是我有裝的東西基本上就是 套件名字==版本
Flask==2.0.2
gunicorn==19.9.0
line-bot-sdk==2.0.1
requests==2.27.1
psycopg2==2.9.3
numpy==1.19.4
Pillow==8.0.1
pygsheets==2.0.5

runtime.txt:這裡面是寫說你要用什麼語言去執行
我填上的是 python-3.8.6 就這樣

之後我們就照著 Heroku 裡 Deploy 下的步驟一步一步操作就能上傳程式碼到 Heroku 上了
過程跟上傳 Github 的方法87%像

之後我們剛剛可以看到程式碼裡有這兩句
line_bot_api = LineBotApi(os.environ['CHANNEL_ACCESS_TOKEN'])
handler = WebhookHandler(os.environ['CHANNEL_SECRET'])
這邊的用的 os.environ['CHANNEL_ACCESS_TOKEN'],是利用我們 Heroku 上設定一些變數並當你跟 Heroku 要的時候會吐出指定的東西給他那要整麼設定呢?
在你的 Heroku App 裡的 Setting 可以看到 Config Vars 把旁邊的點開就能看到兩行可以輸入的東西,我們就在這邊輸入我們 LineBot 的資訊就不用吧他寫在程式裡摟!!

我們有了剛剛講的這三個跟主程式就上傳到你的 Heroku 就能回去剛剛的 LineBot 裡的Webhook URL 按 Verify 正常過的話就是代表能用摟!!

如果不行就檢查一下
先檢查 Webhook URL 是否有對到你的 HerokuAPP
再 CHANNEL_ACCESS_TOKEN 跟 CHANNEL_SECRET 是否填對
如果你不覺的是 Heroku 的問題也能改成直接寫在程式裡
Ex:
line_bot_api = LineBotApi('CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('CHANNEL_SECRET')
過來就是檢查上傳 Heroku 的資料是否都有,再檢查是否有上傳成功
我知道我講的有點簡略,但可以搭配之有一些前輩的文章一起參考喔!(我下面會付)
如果都不行或是還有疑問就留言吧!如果我會,我就盡量回答!!

參考資料:
賴田捕手 iT幫幫忙
卡米狗 iT幫幫忙
[ChatBot] 創造自己的 Line bot,第一次就上手!(1) — Line bot 架構及工具簡介
引用網址:http://www.jamesdambrosio.com/TrackBack.php?sn=5371283
Some rights reserved. 姓名標示-非商業性 2.5 臺灣

相關創作

同標籤作品搜尋:LineBot

留言共 5 篇留言

Bella.S
你好,請問https://www.oxxostudio.tw/articles/201804/line-bot-apps-script.html 這篇文章說使用google apps script也能夠做到同樣的事情是什麼意思~?

08-02 22:08

OKHand
我看了看Google Apps Scripts可以作到取代當Line觸發Heroku所架設的程式post跟get觸發的機制08-02 22:54
OKHand
簡單來說只是換個平臺一樣能作到這效果,只是要注意的是他的語言是跟JavaScript比較靠近的,如果你剛好會JavaScript你可以使用此方法也是不錯的方案08-02 22:59
懷真
抱歉,很高興能找到一個看得懂的資源,但好像死圖了

03-20 16:34

OKHand
我把文章有搬到我Blog上瞜,https://okhand.org/post/line-bot1/
這邊圖沒死,當初偷懶直接上傳巴哈小屋圖片不小心刪到了QQ03-20 22:54
懷真
感謝

03-20 22:56

永武Canyue
您好
最近linebot.v3更新了
一直跳過舊訊息
可以請問您的import 怎麼修改的嗎?

以下是我原本的import

#coding:utf-8
from flask import Flask, request, abort, jsonify
from linebot import WebhookHandler, LineBotApi
from linebot.exceptions import InvalidSignatureError, LineBotApiError
from linebot.models import MessageEvent, TextMessage, TextSendMessage, ImageSendMessage
from linebot.v3.messaging import MessagingApi
import requests
import time
import re
from datetime import datetime
import pandas as pd
import json
import sys
from collections import deque
import threading

05-31 16:42

OKHand
我看官方 github 似乎都要改用v3?
```
from flask import Flask, request, abort
from linebot.v3 import (
WebhookHandler
)
from linebot.v3.exceptions import (
InvalidSignatureError
)
from linebot.v3.messaging import (
Configuration,
ApiClient,
MessagingApi,
ReplyMessageRequest,
TextMessage
)
from linebot.v3.webhooks import (
MessageEvent,
TextMessageContent
)
```
GitHub: https://github.com/line/line-bot-sdk-python/tree/master?tab=readme-ov-file#synopsis06-25 23:22
永武Canyue
謝謝您,我試試看

06-29 09:03

我要留言提醒:您尚未登入,請先登入再留言

3喜歡★az7899603 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:2021最喜歡聽的幾首歌... 後一篇:Line Bot之利用L...


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情? 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】