1. daikiojm

    Posted

    daikiojm
Changes in title
+AWS Lambda+Node.jsでLINEBotをサクッと作る(2017/03時点)
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,124 @@
+##はじめに
+
+2016/10にBOT APIに替わりMessaging API(新API)がリリースされれている。
+AWS LambdaとMessaging API(新API)で定番の?オウム返しLINEBotをサクッと作るメモ。
+
+API Reference: https://devdocs.line.me/ja/#reply-message
+
+##LINE側の設定
+以下の手順で LINE Messaging APIの利用登録を行います。
+
+* 「LINE BUSINESS CENTER」にアクセスして、デベロッパー登録を行う
+https://business.line.me/ja/
+
+* 画面右上の「ログイン」をクリックし、通常のLINEアカウントでログイン
+* 提供サービス一覧の「Messaging API」から「Messaging APIを始める」を選択
+![スクリーンショット 2017-03-07 23.24.40.png](https://qiita-image-store.s3.amazonaws.com/0/79414/115b0526-063d-d80a-7e3e-928c89766663.png)
+
+* 利用する企業アカウントの選択を求められるので、まだ無い場合は新規で作成
+* アカウント名の入力と業種と選択をしてアカウント申し込み
+![スクリーンショット 2017-03-07 23.35.39.png](https://qiita-image-store.s3.amazonaws.com/0/79414/fa95364a-8175-5021-1049-5795c81a788e.png)
+
+* 登録完了後、「アカウントリスト」から作成したアカウントの「LINE@ MANAGER」を選択
+![スクリーンショット 2017-03-07 23.46.03.png](https://qiita-image-store.s3.amazonaws.com/0/79414/fae5b123-3f74-7943-b1a1-ef1ff0275252.png)
+※Messaging APIの登録を行うとLINE@のアカウントも有効になるようです。
+
+* 「アカウント設定」>「Bot設定」で以下の項目の設定を変更
+ * Webhook送信: 利用する
+ * 自動応答メッセージ: 利用しない(必要に応じて)
+ * 友だち追加時あいさつ: 利用しない(必要に応じて)
+![スクリーンショット 2017-03-08 0.23.59.png](https://qiita-image-store.s3.amazonaws.com/0/79414/dbf5164a-4537-f2aa-90f5-896025c86361.png)
+
+* Bot設定の「LINE Developersで設定する」を選択し「Developers」ページへ移動
+* Channel Access Tokenの「ISSUE」をクリックし、Access Tokenを発行
+※Access Tokenは後にLambda側の設定の際に使用します。
+
+
+##AWS Lambda側の設定
+
+Lambdaファンクションの作成を行います。
+
+* AWSコンソールでLambdaを選択
+* 「Lambda関数の作成」>「設計図の選択」から「ブランク関数」を選択
+* トリガーの設定はせずに未選択のまま「次へ」を選択
+* 「関数の設定」では「名前」と「説明」を適宜設定します。
+※今回はNode.jsを使用するので「ランタイム」にはNode.js 4.3を選択しました。
+* Lambda関数のコードにソースコードを記述
+* 環境変数に Messaging APIのChannel Access Tokenを設定
+* 「Lambda 関数ハンドラおよびロール」>「ロール名」に適宜ロール名を設定し、「ポリシーテンプレート」にはシンプルなマイクロハーネスのアクセス権限を設定
+* 確認ページで内容を確認し「作成」を選択
+
+##AWS API Gateway側の設定
+
+APIGatewayの作成を行います。
+
+* AWSコンソールでAPI Gatewayを選択
+* 「APIの作成」から「新しいAPI」を選択し適宜API名を設定し「APIの作成」を選択
+![スクリーンショット 2017-03-08 2.13.29.png](https://qiita-image-store.s3.amazonaws.com/0/79414/dff1969c-e2f2-107c-eb12-341d57139e93.png)
+
+* 「アクション」>「リソースのアクション」から「メソッドの作成」を選択しメソッドの種類にはPOSTを選択する
+* 「セットアップ」>「統合タイプ」には「Lambda関数」を選択し、Lambdaファンクションを作成したリーションを選択した後Lambdaファンクションの名前を選択し保存
+![スクリーンショット 2017-03-08 2.18.04.png](https://qiita-image-store.s3.amazonaws.com/0/79414/262aad1f-6016-ea36-5d38-47f78e3acd98.png)
+
+* 「アクション」>「APIアクション」>「APIのデプロイ」を選択し、APIをデプロイ
+※完了後に「ステージ」から確認できるAPIのURLはLINE MessageAPIの設定に使用する。
+
+##LINE側の設定2
+
+LINE Messaging APIにcallbackURLの設定を追加します。
+
+* LINE側の設定で確認した「Developers」ページを開く
+* 「Basic information」の「Edit」を選択し、「Webhook URL」にAPI Gatewayで作成したAPIのURLを設定
+
+
+##ソースコード
+
+```js:app.js
+'use strict';
+
+const https = require('https');
+
+let send = (data, callback) => {
+ let body = JSON.stringify(data);
+
+ let req = https.request({
+ hostname: "api.line.me",
+ port: 443,
+ path: "/v2/bot/message/reply",
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "Content-Length": Buffer.byteLength(body),
+ "Authorization": "Bearer " + process.env.CHANNEL_ACCESS_TOKEN
+ }
+ });
+
+ req.end(body, (err) => {
+ err && console.log(err);
+ callback(err);
+ });
+}
+
+exports.handler = (event, context, callback) => {
+ let result = event.events && event.events[0];
+ if (result) {
+ let content = event.events[0] || {};
+ let message = {
+ "replyToken":result.replyToken,
+ "messages": [
+ {
+ "type": "text",
+ "text": content.message.text
+ }
+ ]
+ };
+ send(message, () => {
+ callback();
+ });
+ } else {
+ callback();
+ }
+};
+```
+
+GitHub: https://github.com/daikiojm/lambda-line-bot-test/blob/master/bot.js