創作內容

8 GP

Line機器人懶人包總結 By.2022年版 (完)

作者:OKHand│2022-05-22 22:15:08│巴幣:122│人氣:1348
這篇文章是我自己吸收後打出來的文章如果有錯記得跟我說!!

前情提要:
這算是這三篇的綜合懶人包!!如果中間有不太懂可以回去翻翻看

Line Notify建立資料庫並提供不休息的服務 By.2022年版 (參)


正題:
我們要最後做出來的樣子大概會是下圖這樣,會是LineBot+Notify+Heroku+GoogleSheet
我們LineBot or Notify 等等...這邊就可以參考前面的文章創出一個基本的LineBot+Notify然後設定一下Heroku這邊就不在贅述。
我們這邊的重點放在理解整個程式碼!!
我們先從 route 這邊看
@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')
    
    # Get Access-Token
    client_id = os.environ['NOTIFY_CLIENT_ID']
    access_token = get_token(code, client_id, client_secret, redirect_uri)
    google_sheet(access_token)
    send_message(access_token,text_message="你好")   #發訊息
    
    return '恭喜完成 LINE Notify 連動!請關閉此視窗。'


有些人會說這邊的 "/callback/notify" 在哪裡?
會在Notify裡的設定看到

我該如何新增功能?
如果只是要新增利用文字去互動的功能的話只需要在下面增加就可以了
@handler.add(MessageEvent, message=TextMessage) #監聽當有新訊息時
def handle_message(event):
    global Group_id , User_id
    if event.message.text == "個人訂閱" :
        url = create_auth_link(event)
        #回傳 url 給傳訊息的那 個人 or 群組
        line_bot_api.reply_message(event.reply_token,TextSendMessage(text=url) )
        #這邊是利用 event 內的 user_id 去跟 Line 拿到使用者的當前 Line 使用的名子 Ex: Zi-Yu(林子育)
        User_id = line_bot_api.get_profile(event.source.user_id).display_name
        Group_id = ''
    elif event.message.text == "群組訂閱" :
        url = create_auth_link(event)
        line_bot_api.reply_message(event.reply_token,TextSendMessage(text=url) )
        #因為 event 內只會回傳個人訊息所以無法找到 Group 的名稱,所以只能改拿 Group 的 id
        Group_id = (event.source.group_id)   #Group_id get!
        User_id = ''


設定完後,我該如何在別的程式利用LineNotify傳訊息?
#利用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()
#==============================================================================================#
main:
send_message(access_token, text_message)

Python程式套用這個函式就可以,傳送訊息訊息。如果想要傳送端不寫死,就是收到人名再去GoogleSheet搜尋相對映的AccessToken就能摟!

Clock+LineBot 同時使用導致我的Heroku時數爆了整麼辦?
我也是後來才發現有這問題因為我是30天都是24hr讓他去開著,可是我的免費時數只有1000hr。
後來我就想到解決方法把Clock的程式那下來在一台永遠不關機的電腦上跑做到一樣的功能。
整麼解決呢?很簡單就是利用以下程式碼+工作排程器
我們先在本地打一份Clock的Python程式碼:
from apscheduler.schedulers.blocking import BlockingScheduler
from linebot import LineBotApi
from linebot.models import TextSendMessage
import urllib.request

sched = BlockingScheduler()

#利用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()


#定時去搓url讓服務不中斷
@sched.scheduled_job('cron', day_of_week='mon-sun', minute='*/25')
def scheduled_job():
    url = "https://<Your Heroku App Name>.herokuapp.com/"
    conn = urllib.request.urlopen(url)
    for key, value in conn.getheaders():
        print(key, value)
    print("戳一下")

然後在排程器設定每天執行
然後在動作的地方看要是直接執行python檔或是直接把命令寫成bat檔執行都可以摟!

最後附上已經用好的模版GitHub:
下載下來後把Heroku資料夾內的檔案移出外面一層然後修改成自己的內容上傳Heroku就可以摟!
裡面有些檔案裡面要換成自己的App名或是金鑰要注意一下唷!
還有Heroku的環境值也記得要設定!

大家一起來打造出屬於自己的LineBot吧!!
有問題或有不懂的可以私訊或留言給我,我有空就會看唷!!

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

相關創作

同標籤作品搜尋:LineBot|Python

留言共 2 篇留言

Bella.S
https://www.letswrite.tw/line-bot-push-message/ 這一篇說可以用google cloud platform裡面的排程功能~有沒有機會試試這個方法呢?

08-02 22:14

OKHand
是可以喔!不過他是架在GCP上是需要錢錢的所以沒用此方法08-02 22:31
HERO名
感謝大大,我有參考你的介紹也寫了一個服務
部署在Google Cloud Run上
使用Google Cloud的Cloud Scheduler建立工作排程固定打API讓服務發通知
Cloud Scheduler建立工作排程這段滿容易做的,而且有很夠用的免費額度可以打,給你參考看看

11-09 19:48

OKHand
感謝提供排程方法!!改天來玩玩[e19]11-09 22:21
我要留言提醒:您尚未登入,請先登入再留言

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

前一篇:觀賞日記~エス/SS A... 後一篇:AWS 學習旅程 之悲傷...

追蹤私訊切換新版閱覽

作品資料夾

Lobster0627全體巴友
大家可以多多來我的YT頻道看看哦(*´∀`)~♥https://www.youtube.com/@lobstersandwich看更多我要大聲說2小時前


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

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