iT邦幫忙

2

[C#][Line] 使用 Line Notify 開發訊息通知機器人 – 開發篇

  • 分享至 

  • twitterImage
  •  

我使用了自己的開源套件 LexLibrary.Line.NotifyBot,直接從 NuGet 就可以下載安裝,節省了許多串接 API 時所需的開發與測試時間,只需安裝套件後即可快速開發 Line Notify Bot!!

系列文章:

  1. [C#][Line] 使用 Line Notify 開發訊息通知機器人 – 註冊篇
  2. [C#][Line] 使用 Line Notify 開發訊息通知機器人 – 開發篇

  1. 從 管理登錄服務 找到剛剛我們註冊的新項目,取得 Client ID 與 Client Secret
  2. 打開 Startup.cs 找到 ConfigureServices 方法,並在這裡新增下列程式碼
services.AddLogging();
services.AddHttpClient();

services.AddLineNotifyBot(new LineNotifyBotSetting
{
    ClientID = "",
    ClientSecret = "",
    AuthorizeApi = "https://notify-bot.line.me/oauth/authorize",
    TokenApi = "https://notify-bot.line.me/oauth/token",
    NotifyApi = "https://notify-api.line.me/api/notify",
    StatusApi = "https://notify-api.line.me/api/status",
    RevokeApi = "https://notify-api.line.me/api/revoke"
});
  1. 接著需要使用 Client Redirect 的方式讓使用者登入 Line 並授權給系統權限,我已經在套件裡面封裝好方法了,只要使用 LineNotifyBotApi.GenerateAuthorizeUrl 即可取得 Redirect Url。
string callBackUrl = string.Format("{0}://{1}{2}", Request.Scheme, Request.Host, Url.Action("CallBack"));
string clientAuthorizeUrl = _lineNotifyBotApi.GenerateAuthorizeUrl(callBackUrl, "1234");

1234 這個參數可以拿來做 XSS 驗證避免被攻擊
4. 使用者授權完後 Line 會 CallBack 到上面定義好的網址,可以用 AuthorizeCallbackDTO 這個物件接收參數

public IActionResult CallBack(AuthorizeCallbackDTO callbackDTO)
{
    // 可能是第三方攻擊
    if (callbackDTO.State != "1234")
    {
        return new UnauthorizedResult();
    }

    return RedirectToAction("Index", new { callbackDTO.Code });
}
  1. 利用 AuthorizeCallbackDTO.Code 的值去呼叫 LineNotifyBotApi.Token,可以取得發送訊息給使用者的 AccessToken
var apiResult = await _lineNotifyBotApi.Token(new TokenRequestDTO
{
    Code = code,
    RedirectUri = callBackUrl
});

ViewBag.AccessToken = apiResult.Access_Token;
  1. 取得 AccessToken 後就可以呼叫 LineNotifyBotApi.Notify 發送訊息給使用者囉!
var apiResult = await _lineNotifyBotApi.Notify(new NotifyRequestDTO
{
    AccessToken = accessToken,
    Message = message
});

ViewBag.ResultJson = JsonConvert.SerializeObject(apiResult, Formatting.Indented);


7. 我有寫一個簡單的範例放到 GitHub 供給大家參考,有問題歡迎在下方留言給我。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言