2025-12-02
- 升級@line/bot-sdk到10.5.0版
- 因github通知相關套件有弱點,升級所有相依套件以及pnpm
2025-04-08
- 升級@line/bot-sdk到9.8.0版
- 加入一個最小可用的Line Notify API供推播訊息
註冊並登入LINE developer
-
左邊Providers選單 > 點'Create' 命名以建立Provider
-
左邊點剛建立的Provider > Create a Messaging API channel > 填寫 Channel的基本資訊 > 建立Channel
-
在Provider下會看到Channels分頁建立了剛才的Messaging API channel > 點擊它進入設定 > 分頁 Basic settings 下有
Channel ID,Channel secret> 分頁 Messaging API 下有Channel access token -
在functions目錄下建立
.env檔案,把上面取得的資料都寫進去LINE_CHANNEL_ID= LINE_CHANNEL_SECRET= LINE_CHANNEL_TOKEN=
-
安裝nvm(Node Version Manager)
如果你的環境已經有裝npm就怕版本不合,所以用nvm管理就可以快速的切換執行的node版本
跑一下nvm的github安裝script並安裝node v20
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash nvm -v # 0.39.5 # 安裝 node.js nvm install 20 nvm use 20 node -v # v20.19.5 # 啟用 pnpm 套件管理程式 corepack enable pnpm pnpm -v # 10.24.0
-
安裝firebase工具
npm install -g firebase-toolsfirebase -V顯示版本為 14.26.0 -
登入firebase
firebase login -
安裝專案套件並部屬
cd functions pnpm install pnpm run deploy如果是要從無到有建立
firebase init functions firebase deploy --only functions
舉例我的部屬完是生成了URL:
https://trigger-tsqxmel55q-de.a.run.app -
測試
直接用
/ping測試是否正確curl https://trigger-tsqxmel55q-de.a.run.app/ping會得到
pong的訊息 -
拷貝上面部屬生成的url到LINE Developers的web hooks中
將部屬的URL拿去設定在LINE Developers > Messaging API > Webhook URL中
https://trigger-tsqxmel55q-de.a.run.app/webhook
左邊選前面建立的Provider > 分頁 Channels 中點選 Messaging API 的卡片 > 分頁 Messaging API 下面就有 Bot basic ID
預設是一個以@起頭的一個ID,可以直接分享給其他人請他們加入,或是在網頁上以連結的形式寫成下面這樣
https://line.me/R/ti/p/{BOT_BASIC_ID}
舉我的BOT的例子,Bot basic ID是@342mhjuj,連結就會是
https://line.me/R/ti/p/@342mhjuj
pnpm run serve 跑起本機firebase function模擬器
啟動要等一下, 直到跑出url
✔ functions[asia-east1-trigger]: http function initialized (http://127.0.0.1:5001/simple-firebase-linebot/asia-east1/trigger).
用curl測試/ping可以得到pong結果
curl 'http://127.0.0.1:5001/simple-firebase-linebot/asia-east1/trigger/ping'
functions目錄下.env檔案,加入2項環境變數
LINE_NOTIFY_GROUP_ID指定通知的群組ID 這部份你可以把這個line bot加到群組,然後輸入訊息gid來取得你要通知到哪個群組IDLINE_NOTIFY_TOKEN指定通知的權杖(TOKEN) 可以沿用之前Line Notify給的權杖,或是設定你喜歡的權杖LINE_ADMIN_ID指定管理者的ID,可以直接在BOT的對話使用以下管理員功能(注意:會耗用LINE訊息額度)- 管理員傳訊息
訊息額度可以查詢目前額度 - 管理員傳訊息
群發 <要傳的訊息>可以把要傳的訊息送到LINE_NOTIFY_GROUP_ID的訊息中 - 管理員傳訊息
發到 <ID>,<要傳的訊息>可以指定要傳的ID可以是使用者ID或是群組ID(不是指朋友名稱)
- 管理員傳訊息
LINE_NOTIFY_GROUP_ID=
LINE_NOTIFY_TOKEN=
LINE_ADMIN_ID=pnpm run serve 跑起本機firebase function模擬器
啟動要等一下, 直到跑出url
✔ functions[asia-east1-trigger]: http function initialized (http://127.0.0.1:5001/simple-firebase-linebot/asia-east1/trigger).
用curl測試/api/notify可以得到 {"message":"Success"} 訊息
curl -X POST "http://127.0.0.1:5001/simple-firebase-linebot/asia-east1/trigger/api/notify" \
-H "Authorization: Bearer 在Bearer後空一格然後輸入你的權杖" \
-d "message=Hello, Line Notify"-
pnpm run deploy部屬你的function部屬後會有個網址如下:
Function URL (trigger(asia-east1)): https://trigger-tsqxmel55q-de.a.run.app
✔ Deploy complete!
Project Console: https://console.firebase.google.com/project/simple-firebase-linebot/overview
-
就用那個網址加入
/api/notify進行測試, 可以得到 {"message":"Success"} 訊息curl -X POST "https://trigger-tsqxmel55q-de.a.run.app/api/notify" \ -H "Authorization: Bearer 在Bearer後空一格然後輸入你的權杖" \ -d "message=Hello, Line Notify"
由於functions會在使用變數名稱作為url的一部分trigger, 若想要改成別的名稱
請修改functions/index.js的exports成你像要的新的名稱
exports.新的名稱 = onRequest(app);
部屬的時候firebase tool會自動偵測,並詢問是否要刪除舊有的,按確認就會自動處理。
如果失靈才需要用手動
-
手動刪除舊的部屬
firebase functions:delete trigger -
手動再部屬新的
firebase deploy --only functions:新的名稱
pnpm add {套件名}pnpm add -D {套件名}pnpm remove {套件名}pnpm run {命令}


