nomurabbitのブログ

nomurabbitのブログはITを中心にした技術ブログです。

nomurabbitのブログ

【AWS】LambdaからLINE notifyで通知してみた【LINE】

こんにちは!nomurabbitです。
AWSで作ったシステムから
通知が欲しいケースってけっこうありますよね。

ある値が閾値を超えたら
通知してほしいとか。

毎日決まった時刻に
通知してほしいとかとか。

Amazon SNSもいいけど、
スマホのメッセージってあんま見ないんだよなー。

LINEなら見るんだけど…。

そんなみなさん!
LINE notifyはいかがでしょう?

APIをたたくだけなので、
使い方はとっても簡単!

HTTPクライアントが使えれば
どこからでも呼べます。

もちろんLambdaからも呼べますよ!

というわけで、
この記事ではLambdaからLINE notifyに
メッセージを送る方法を紹介したいと思います。

そもそもLINE notifyって?

LINE notifyは
LINEから公式にリリースされている
通知サービスです。

APIにリクエストを投げると、
指定したトークに任意のメッセージを送ることができます。

公式のドキュメントはこちら
notify-bot.line.me

リクエストの認可にはトークンが必要となります。

トークンは管理画面から手動で発行することもできますし、
発行の手続きをOAuthで実装することもできます。

この記事では手動でトークンを発行して、
Lambdaからメッセージを送信してみます。

トークンの発行

まずはLINEのアカウントを作成して
管理画面にログインしてみましょう。

LINE notify 管理画面
notify-bot.line.me
f:id:nomurabbit:20211204153235p:plain


ログイン後、画面右上のメニューから
マイページを選択します。

f:id:nomurabbit:20211205014118p:plain


マイページの画面下部に
トークンを発行するボタンがあるので
こちらをクリックします。

f:id:nomurabbit:20211205014121p:plain


ダイアログが表示されるので、
トークン名送信先トークルームを選択して
発行するボタンをクリックします。

f:id:nomurabbit:20211204154204p:plain


トークンが表示されるので控えておきましょう。
後ほどLambdaからメッセージを送信するときに必要です。

f:id:nomurabbit:20211204154432p:plain


マイページに戻ると先ほどの入力内容が
連携中のサービスとして表示されます。

f:id:nomurabbit:20211204154526p:plain


以上でトークンの発行は終了です。

メッセージの送信

先程取得したトークンを使って
メッセージを送信します。

まずはLambdaのテンプレートの準備です。

.NET Core3.1のテンプレートは、
この記事この記事を参考にしてください。

ソースコードについて、
ポイントは下記の通りです。

private async Task<string> LineNotify()
{
    try
    {
        string responseContent = "";
        
        string token    = "line notify token";
        string message  = "hello! this is nomurabbit.";
        var parameters = new Dictionary<string, string>()
        {
            { "message"   , message },
        };
        string lineNotifyRequestString = new FormUrlEncodedContent(parameters).ReadAsStringAsync().Result;

        HttpRequestMessage request = new HttpRequestMessage();
        request.RequestUri = new Uri("https://notify-api.line.me/api/notify");
        request.Method     = HttpMethod.Post;
        request.Headers.Add("Authorization", "Bearer " + token);
        request.Content   = new System.Net.Http.StringContent(lineNotifyRequestString, Encoding.UTF8, "application/x-www-form-urlencoded");

        using (var client = new HttpClient())
        {
            HttpResponseMessage response = await client.SendAsync(request);
            responseContent = response.Content.ReadAsStringAsync().Result;
        }

        LineNotifyResponse lineNotifyResponse = JsonSerializer.Deserialize<LineNotifyResponse>(responseContent, ApiUtil.GetJsonSerializerOptionsDefault());

        return lineNotifyResponse.Message;
    }
    catch (System.Exception e)
    {
        throw e;
    }
}

先ほど発行したトークンを
Bearerトークンとして
HTTPヘッダーに書き込みます。

Lambdaをキックすると、
このようにメッセージが送信されます。

f:id:nomurabbit:20211204202827p:plain

送信先トークルームに
LINE notifyさんを招待しておいてくださいね。

GitHubソースコードを載せていますので、
よろしければ参考にしてください。

github.com

以上でLambdaからLINE notifyで
メッセージを送ることができました。

よかったら試してみてください。
では!