[HowTo] 實作 Line Notify 服務,使用 ASP.NET Core 3.1

阿蘇卡
Nov 12, 2020

--

Line Notify 是 Line 從 2016 年推出的服務,可以 免費的 傳送推播訊息給訂閱戶。
現在幾乎每個人都有 Line 帳號,可以當作內部系統問題回報時的廣播通知機制。

基本概念就不重複介紹,可參考以下文章:
1. 使用C#開發LineBot(6) — 不用申請Bot也能發訊息的Line Notify
2. 實作 Line Notify 通知服務 (1)
3. LINE Notify API Document
4. 上手 LINE Notify 不求人:一行代碼都不用寫的推播通知方法

這次實作搭配 ASP.NET Core 3.1。

申請服務

首先至 Line Notify 登錄服務頁面填入申請資料,並通過 e-mail 認證:

callback URL 要接收 auth code,所以要與實作系統中 url 相同,後續可以修改,因為本示範系統只在本機運作,所以位置是 localhost。

實作

首先建立 ASP.NET Core MVC 專案

這裡引用我自己包裝 Line Notify API 的專案:askaLib.Line.Notify,提供LineNotifyService 呼叫 Line Notify 服務,註冊方式為:

在 Controller 注入後,透過 LineNotifyService 得 Line OAuth2 認證 URL:

_lineNotifyService.GetAuthorizationRedirectUrl();

使用者確認接收通知後,會跳轉至 callback Url

注意!!
1. Line Notify 登錄服務頁面 Callback URL 欄位、
2. 實際要接收 code 的 API 位置
必須一致才能通過認證!

從 callback 取得 Line 回傳的 auth code 後,就可以向 Line 取得此使用者的 access token,也就是被允許取得使用者資訊與提供服務。(這段流程是 OAuth 2.0 的機制,就(偷懶)不再介紹)。

UserProfile userProfile = await _lineNotifyService.GetUserProfile(code);

UserProfile 包含 access token 、使用者名稱;往後要傳送訊息給此使用者,或是取消訂閱通知時,需要透過這個 access token。

access token 只會提供一次,所以在取得後一定要記下來!
不然就要請使用者再重新訂閱一次囉 (使用者表示:....)

要傳送訊息時,提供 access token 與要傳送訊息的內容:

await _lineNotifyService.SendTextAsync(token, message);

我封裝的 API 提供另一個多型函式,可一次發送訊息給多個使用者,呼叫時請將 token 改成 IEnumerable 類型。

當然也有提供取消訂閱的 API~

await _lineNotifyService.RevokeAsync(token);

一樣也有支援複數的多型函式可用

以上內容希望對各位有幫助

--

--

阿蘇卡
阿蘇卡

Written by 阿蘇卡

後端工程師。記錄下自己開發路上踩過的坑、研究過後的心得,希望對自己好,對其他工程師也好~

No responses yet