Help us understand the problem. What is going on with this article?

AWS Lambda + API GatewayでLINE Notifyを実装してみた

More than 3 years have passed since last update.

はじめに

LINEが新サービス、LINE Notifyをリリースしました。
Webサービス(Git Hub, IFTTT, Mackerel)からの自動通知やAPIリクエストやCurlコマンドからもメッセージの送信ができます。
今回は、AWS Lambda + API Gatewayを通して通知を送信する方法をまとめさせていだだきます。
なお、環境は以下の通りです。

項目 環境
OS Windows7
Node.js 6.7.0

LINE Notifyのアクセストークンの取得

LINE Notifyの公式サイト右上のログインより、自分のLINE IDでログインします。
01_ログイン.png

ページ右上のログイン名称が記載されているメニューより、マイページへ移動します。
そして、ページ下部にある、トークンを発行するを選択し、送信したいグループを選択します。

02_アクセストークン発行.png

グループ選択後に表示されるアクセストークンを大切に保管します。(二度と表示されないっぽいです)

Node.jsでHTTPSのAPIリクエストの送信

requestモジュールのインストール

任意のフォルダで下記のコマンドでrequestモジュールをインストールします。

npm init
npm install --save request

これでrequestモジュールがインストールされます。

実装

// main.js
'use strict';

const request = require('request');

// メイン処理
exports.handler = function(event, context) {
  const header_val = {
    'Content-Type':'application/x-www-form-urlencoded',
    'Authorization': 'Bearer [先ほど取得した]',
  };

  const options = {
    url: 'https://notify-api.line.me/api/notify',
    method: 'POST',
    headers: header_val,
    form: { message : 'テストメッセージ送信'}
  };

  // リクエスト送信
  request(options, (err, res, body) => {
    console.log(res.body);
  });

}

動作確認

上記のコードではコマンドプロンプト上で動作確認ができませんので、exports.handler...の行と、最終行をコメントアウトした上で、main.jsを実行しましょう。
コマンドは下記の通りです。

node main.js

コンソールに、{"status":200,"message":"ok"}と出ればOKです。

Lambda, API Gatewayの設定

Lambdaの作成

作業の前に、先ほど作成したソースコードとフォルダ内のファイルをZip化しておきます。

まず、AWS上でLambdaを作成します。

  • Subject Blueprintはスルー
  • Configure TriggerをAPI Gatewayに設定し、次のページへ image ※Security はOpen等でも可能。Openの場合誰でもアクセスしてしまうのでご注意ください。
  • Configure functionを下記に設定
    • Name/Description:任意
    • Runtime:Node.js 4.3
    • Code entry type:Upload a .zip file
    • 先ほどZip化したファイルをアップロード
    • Handler:main.handler
    • Role:任意

次ページで確認した際の状態は下記。
image

API Gateway

作成後、Triggerタブを確認すると下記ように、URLが記載されていますので、こちらにリクエストを投げることで、メッセージを送信可能です。
03_トリガー確認.png

APIキーの確認(Option)

APIキーによるアクセス認証を行う場合、API Gatewayのコンソールでキーを作成する必要があります。
AWSの公式サイトを参考に設定してください。
この設定をしないと誰でもリクエストを投げることができますので、設定しているほうが良いです。
設定方法は下記をご参照ください。

確認

Advanced REST client等を用いて、設定したAPIにアクセスしましょう。
ちゃんと設定できていたら、皆さんのお手元のLINEにメッセージが届きますよ。

まとめ

今回はAPI Gatewayを直接呼び出しましたが、もちろんWebサービスからメッセージを送信することも可能です。
LINE Notifyは任意のグループにメッセージを送信することが可能ですので、運用チームでLINEのグループを作成し、そのグループにイベントを通知するようなこともできるので、かなり多様な使い方ができるのではないでしょうか。

メッセージの内容を変更する場合は、APIリクエスト時にメッセージをBodyに含めることで、
Lambdaのeventパラメータより取得可能です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away