創作內容

2 GP

Line Bot之利用Line Notify突破限制吧! By.2022年版 (貳)

作者:OKHand│2022-01-30 13:25:15│巴幣:4│人氣:3684
這篇文章是我自己吸收後打出來的文章如果有錯記得跟我說!!

前情提要:
繼之前 讓我們用Python開發一個LineBot By.2022年版 (壹) 這篇文,我們已經有了一個基本的Line Bot,但是 Line 有對 LineBot 有給免費仔們做一些限制(Ex:每個月只能發送500則訊息),那我們要如何突破他的上限呢?那就是利用有官方認證的 Line Notify 去幫我們發送訊息,因為是官方認證的帳號所以可以無限發送訊息重點是還免費啊!

正題:

建立 Line Notify
我們要先去 Line Notify 去申請一個我們的 Line Notify !
登入之後 => 右上點你的 Account => 管理登入服務 => 下面的登入服務 => 創建你的 Line Notify
裡面有一個要注意的是 Callback URL 這個,這邊要填入下面這樣之後他才能跟我們的程式去做互動。
=> https://你的Heroku APP名字.herokuapp.com/callback/notify

讓 Line Bot 發送訊息讓使用者 跟 LineNotify 綁定 :

創造綁定的URL
我們剛剛有了我們創好的 Line Notify ,之後我們要叫使用者去綁定我們的 Line Notify 這樣之後才能對使用者發送訊息!
接下來就是用程式創造出我們的URL讓使用者去綁定
=> 創造URL程式碼:
line_bot_api = LineBotApi(os.environ['CHANNEL_ACCESS_TOKEN'])
handler = WebhookHandler(os.environ['CHANNEL_SECRET'])

import os, urllib
client_id = os.environ['NOTIFY_CLIENT_ID']
client_secret = os.environ['NOTIFY_CLIENT_SECRET']
redirect_uri = f"https://{os.environ['YOUR_HEROKU_APP_NAME']}.herokuapp.com/callback/notify"
def create_auth_link(user_id, client_id=client_id, redirect_uri=redirect_uri):
    
    data = {
        'response_type': 'code',
        'client_id': client_id,
        'redirect_uri': redirect_uri,
        'scope': 'notify',
        'state': user_id
    }
    query_str = urllib.parse.urlencode(data)
    
    return f'https://notify-bot.line.me/oauth/authorize?{query_str}'
這邊的 os.environ 就是把資料從 Heroku 的設定檔那邊找到並拿下來用,不知道整麼用的可以看上一篇
client_id = os.environ['NOTIFY_CLIENT_ID'],
client_secret = os.environ['NOTIFY_CLIENT_SECRET']
可以在剛剛你創好的Line Notify裡看到

他會回傳一個串好的 URL 這時候就能跟我們上次的 LineBot 去做結合直接回傳回去給使用者去做綁定!

回傳給 Line Notify 並拿取使用者 Access Token
我們前面有了 URL 之後就能透過這 URL 去做綁定並跟 Line 去做溝通要使用者的 Access Token,我們以後要透過這個 Access Token 才能傳訊息給我們的使用者或群組!
=> 監聽綁定回傳跟綁定完成會發送你好的訊息程式碼
from flask import request
@app.route("/callback/notify", methods=['GET'])
def callback_nofity():
    #assert request.headers['referer'] == 'https://notify-bot.line.me/'
    code = request.args.get('code')
    state = request.args.get('state')
    #print("Code:"+code)
    #print("state:"+state)
    #print(event.source.group_id)
    
    # Get Access-Token
    access_token = get_token(code, client_id, client_secret, redirect_uri)
    #print("AccessToken="+access_token)
    #print("Clinet_id"+client_id)
    google_sheet(client_id,access_token)
    send_message(access_token,text_message="你好")   #發訊息
    
    return '恭喜完成 LINE Notify 連動!請關閉此視窗。'

#拿取幫綁訂人的access_token
import json
def get_token(code, client_id=client_id, client_secret=client_secret, redirect_uri=redirect_uri):
    url = 'https://notify-bot.line.me/oauth/token'
    headers = { 'Content-Type': 'application/x-www-form-urlencoded' }
    data = {
        'grant_type': 'authorization_code',
        'code': code,
        'redirect_uri': redirect_uri,
        'client_id': client_id,
        'client_secret': client_secret
    }
    data = urllib.parse.urlencode(data).encode()
    req = urllib.request.Request(url, data=data, headers=headers)
    page = urllib.request.urlopen(req).read()
    res = json.loads(page.decode('utf-8'))
    #print(data)
    return res['access_token']

#利用notify發出訊息
def send_message(access_token, text_message):
    url = 'https://notify-api.line.me/api/notify'
    headers = {"Authorization": "Bearer "+ access_token}
    data = {'message': text_message}
    data = urllib.parse.urlencode(data).encode()
    req = urllib.request.Request(url, data=data, headers=headers)
    page = urllib.request.urlopen(req).read()

這樣基本就完成了 LineBot 讓使用者綁定 Line Notify 了,之後就用下面程式碼就能把你想要發送的訊息給你指定的群組或使用者了!

我知道我講的有點簡略,但可以搭配之有一些前輩的文章一起參考喔!
如果都不行或是還有疑問就留言吧!如果我會,我就盡量回答!!

參考資料:


引用網址:https://home.gamer.com.tw/TrackBack.php?sn=5376576
Some rights reserved. 姓名標示-非商業性 2.5 台灣

相關創作

同標籤作品搜尋:LineBot|LineNotify

留言共 2 篇留言

Chris
版主前輩 您好 想請問一下 那這方法可以讓Line Bot接收到 notify傳出的訊息嗎

05-08 18:31

OKHand
我這邊測試出來的結果是不行的喔!05-08 20:15
Chris
謝謝前輩的幫忙

05-08 20:55

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

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

前一篇:讓我們用Python開發... 後一篇:Line Notify建...

追蹤私訊切換新版閱覽

作品資料夾

flys8028大家
美食、旅遊相關的部落格,有興趣歡迎走走 https://www.fatnyanya.com/看更多我要大聲說10小時前


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

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