#はじめに
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でログインします。
ページ右上のログイン名称が記載されているメニューより、マイページへ移動します。
そして、ページ下部にある、トークンを発行するを選択し、送信したいグループを選択します。
グループ選択後に表示されるアクセストークンを大切に保管します。(二度と表示されないっぽいです)
#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に設定し、次のページへ
※Security はOpen等でも可能。Openの場合誰でもアクセスしてしまうのでご注意ください。 - Configure functionを下記に設定
- Name/Description:任意
- Runtime:Node.js 4.3
- Code entry type:Upload a .zip file
- 先ほどZip化したファイルをアップロード
- Handler:main.handler
- Role:任意
##API Gateway
作成後、Triggerタブを確認すると下記ように、URLが記載されていますので、こちらにリクエストを投げることで、メッセージを送信可能です。
##APIキーの確認(Option)
APIキーによるアクセス認証を行う場合、API Gatewayのコンソールでキーを作成する必要があります。
AWSの公式サイトを参考に設定してください。
この設定をしないと誰でもリクエストを投げることができますので、設定しているほうが良いです。
設定方法は下記をご参照ください。
##確認
Advanced REST client等を用いて、設定したAPIにアクセスしましょう。
ちゃんと設定できていたら、皆さんのお手元のLINEにメッセージが届きますよ。
#まとめ
今回はAPI Gatewayを直接呼び出しましたが、もちろんWebサービスからメッセージを送信することも可能です。
LINE Notifyは任意のグループにメッセージを送信することが可能ですので、運用チームでLINEのグループを作成し、そのグループにイベントを通知するようなこともできるので、かなり多様な使い方ができるのではないでしょうか。
メッセージの内容を変更する場合は、APIリクエスト時にメッセージをBodyに含めることで、
Lambdaのeventパラメータより取得可能です。