LINE Notify を AWS Lambda (Node.js) から利用してみた


先日の LINE DEVELOPER DAY 2016 で [LINE Notify](https://notify-bot.line.me/) が発表されました。これを利用して独自のボットが作れそうなので、今回は AWS Lambda で簡単なボットの作成を試してみました。 

![screenshot0.jpg](https://qiita-image-store.s3.amazonaws.com/0/35733/9f2d6e64-7002-ab29-20c4-7b3e381bf530.jpeg "screenshot0.jpg")

Lambda を利用することで、自分にサーバを持たずにボットを運用することができます（いわゆるサーバレス）。

## トークンの取得

- [https://notify-bot.line.me/ja/](https://notify-bot.line.me/ja/) にログインし `マイページ` にアクセスします。

	> ログインの為の ID とパスワードは LINE アプリで登録・確認できると思います。

	![スクリーンショット 2016-10-04 16.12.09.png](https://qiita-image-store.s3.amazonaws.com/0/35733/cdc06ef8-9089-02f6-fdd1-f463067c9993.png "スクリーンショット 2016-10-04 16.12.09.png")

- `トークンを発行する` ボタンを押下します。

	![スクリーンショット 2016-10-04 16.12.33.png](https://qiita-image-store.s3.amazonaws.com/0/35733/3ac45f39-e280-b32f-1b1a-4ee4d876d189.png "スクリーンショット 2016-10-04 16.12.33.png")
	
- ボット名を適当に入力し `1:1で〜` を選択します。

	> 自分はほぼ LINE を利用してないのでよく分かりませんが、画面を見る限りトークルーム？なるものも選択できるのでしょうか。

	![スクリーンショット 2016-10-04 16.15.48.png](https://qiita-image-store.s3.amazonaws.com/0/35733/80b41b6f-cefa-f430-9b3f-2a61da9a76cf.png "スクリーンショット 2016-10-04 16.15.48.png")

- トークンが発行されるのでメモっておきます。

	![スクリーンショット_2016-10-04_16_16_12.png](https://qiita-image-store.s3.amazonaws.com/0/35733/eb7b7613-e5fb-0928-7e78-ea8a5d6ed836.png "スクリーンショット_2016-10-04_16_16_12.png")

- マイページに戻ると、次のように「連携済みのサービス」が追加されています。

	![スクリーンショット 2016-10-04 16.16.51.png](https://qiita-image-store.s3.amazonaws.com/0/35733/21025201-d6e8-9fea-b880-b43c693788aa.png "スクリーンショット 2016-10-04 16.16.51.png")

## とりあえず LINE Notify の動作確認

`curl` コマンドで POST してみます。

```
curl -X POST -H 'Authorization: Bearer __YOUR_TOKEN__' -F "message=Hello!" https://notify-api.line.me/api/notify
```

> `__YOUR_TOKEN__` の箇所は先程メモしたトークンに置き換えてください。

自身の LINE アプリにメッセージが届けば OK です。

![screenshot0.jpg](https://qiita-image-store.s3.amazonaws.com/0/35733/9f2d6e64-7002-ab29-20c4-7b3e381bf530.jpeg "screenshot0.jpg")

## Lambda でボットの作成

Node.js で作成しました。ソースコードはこちら。
⇒ https://github.com/hkusu/lambda-linenotify-bot

> Babel ベースの ES2015 を利用 ＆ npm でモジュール管理しています。

利用できる npm scripts は `README.md` もしくは `package.json` を参照ください。`$ npm run build` で Babel でのトランスパイル、および、AWS へアップロードする用のアーカイブが生成できるようになっています。生成されたアーカイブを AWS のコンソールからアップロードすれば Lambda で動きます。Lambda の `Triggers` に `CloudWatch Events(Schedule)` を選択すれば、cron のように定期実行が可能です。

ボット本体は `src/handler.js` です。下記のように POST で `Hello!` というメッセージを送るだけの単純なものです。

```javascript:src/handler.js
// ...

axios(
  {
    method: 'post',
    url: 'https://notify-api.line.me/api/notify',
    headers: {
      Authorization: `Bearer ${token}`,
      'Content-Type': 'application/x-www-form-urlencoded',
    },
    data: querystring.stringify({
      message: 'Hello!',
    }),
  }
)
 .then(res => callback(null, res.data))
 .catch(err => callback(err))

// ...
```

AWS の他のリソース（例：DynamoDB等）は利用していないので、ローカルでも実行できるはずです。

```sh:
$ npm run local-run
```

![screenshot0.jpg](https://qiita-image-store.s3.amazonaws.com/0/35733/9f2d6e64-7002-ab29-20c4-7b3e381bf530.jpeg "screenshot0.jpg")

## 参考にさせて頂いた記事

- [[超簡単]LINE notify を使ってみる](http://qiita.com/takeshi_ok_desu/items/576a8226ba6584864d95)

## ほか

LINE Notify ではありませんが、今回と同じように Lambda で作った Twitter ボットのソースコードです。ご参考まで。
⇒ https://github.com/hkusu/lambda-twitter-bot