ETH官方钱包

創(chuàng)作內(nèi)容

3 GP

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

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

前情提要:
因?yàn)橐咔殛P(guān)係導(dǎo)致很多東西都用Line通知並因?yàn)楣疽恍┫到y(tǒng)也利用 Line notify 去做通知,導(dǎo)致這份小小的 Side Project 產(chǎn)生出來,當(dāng)然也是由我接下我才會(huì)打這篇文 XD

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

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

程式方面:
我們是用 Python+Flask 建構(gòu)一個(gè)網(wǎng)頁(yè)掛在 Heroku
因?yàn)槲覀円?Heroku 所以需要安裝 Git 跟 HerokuCLI
然後我是用 Python 3.8.6 去開發(fā)
然後安裝一些套件
pip install line-bot-sdk
pip install Flask
不過這些事如果你要在本地執(zhí)行程式測(cè)試才會(huì)需要裝的因?yàn)槲覀冎饕獣?huì)掛在 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 觸發(fā)事件
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
都是在我們剛剛創(chuàng) LineBot 的地方看到
Channel secret 在 Basic Setting 下 ,Channel access token 在 Messaging API 下

然後在 Messaging API 裡有一個(gè) Webhook URL 的地方是等等要用的
可以先填上 https://你heroku的APP名字.herokuapp.com/callback
先別急著按 Verify 因?yàn)槲覀冞€沒把程式上傳
之後就要回到 Heroku 的部分因?yàn)槲覀円蟼鞯?Heroku,我們先把程式碼的部分搞定在上傳
我們要把程式上傳到 Heroku 需要幾個(gè)東西讓 Heroku 去安裝他要的東西跟指定要跑的程式等等...

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

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

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

requirements.txt:這很重要!這是要把我們需要用到的 Library 去跟 Heroku 說他會(huì)在上傳程式碼時(shí)一起裝起來
這是我有裝的東西基本上就是 套件名字==版本
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:這裡面是寫說你要用什麼語言去執(zhí)行
我填上的是 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 上設(shè)定一些變數(shù)並當(dāng)你跟 Heroku 要的時(shí)候會(huì)吐出指定的東西給他那要整麼設(shè)定呢?
在你的 Heroku App 裡的 Setting 可以看到 Config Vars 把旁邊的點(diǎn)開就能看到兩行可以輸入的東西,我們就在這邊輸入我們 LineBot 的資訊就不用吧他寫在程式裡摟!!

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

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

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

相關(guān)創(chuàng)作

同標(biāo)籤作品搜尋:LineBot

留言共 5 篇留言

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

08-02 22:08

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

03-20 16:34

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

03-20 22:56

永武Canyue
您好
最近linebot.v3更新了
一直跳過舊訊息
可以請(qǐng)問您的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

我要留言提醒:您尚未登入,請(qǐng)先登入再留言

3喜歡★az7899603 可決定是否刪除您的留言,請(qǐng)勿發(fā)表違反站規(guī)文字。

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


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

face我們了解您不想看到廣告的心情? 若您願(yuàn)意支持巴哈姆特永續(xù)經(jīng)營(yíng),請(qǐng)將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學(xué)】