先日の LINE DEVELOPER DAY 2016 で LINE Notify が発表されました。これを利用して独自のボットが作れそうなので、今回は AWS Lambda で簡単なボットの作成を試してみました。
Lambda を利用することで、自分にサーバを持たずにボットを運用することができます(いわゆるサーバレス)。
トークンの取得
-
https://notify-bot.line.me/ja/ にログインし
マイページ
にアクセスします。ログインの為の ID とパスワードは LINE アプリで登録・確認できると思います。
-
トークンを発行する
ボタンを押下します。 -
ボット名を適当に入力し
1:1で〜
を選択します。自分はほぼ LINE を利用してないのでよく分かりませんが、画面を見る限りトークルーム?なるものも選択できるのでしょうか。
-
トークンが発行されるのでメモっておきます。
-
マイページに戻ると、次のように「連携済みのサービス」が追加されています。
とりあえず 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 です。
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!
というメッセージを送るだけの単純なものです。
// ...
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等)は利用していないので、ローカルでも実行できるはずです。
$ npm run local-run
参考にさせて頂いた記事
ほか
LINE Notify ではありませんが、今回と同じように Lambda で作った Twitter ボットのソースコードです。ご参考まで。
⇒ https://github.com/hkusu/lambda-twitter-bot