LINE BOTとAWS LambdaとAPI Gatewayを使って「オウム返しBOT」を作る。

はじめに

LineのBOT APIとAWSのAPI Gateway、Lambdaを利用してLINE botを作りたいと思います。 まず、以下がLINEのBOT APIドキュメントの図です。 How BOT API works 出典:LINE developers

ここでの「YOUR SYSTEM」というところを「Lambda」と「API Gateway」を使って構築します。

また、今回必要となるLINE BOT API Trial Accountの取得方法については割愛します。



# Lambda関数の作成 それではまず、AWSの管理コンソールから「Lambda」のサービスへ移動します。
## ● Create a Lambda function 次に「Create a Lambda function」をクリックします。 ![amore00_create-lambda01.png](/images/posts/f179c7dc-6e230911-b7b4-7b75-9918-f897c02b6304.png)
## ● Select blue print ここではとりあえず何も選択せず「Next」をクリックします。 ![amore00_select-blueprint01.png](/images/posts/085a4f87-4579cd07-c77f-1464-3698-bd14b121c5ce.png)
## ● Configure triggers 今のままだとLambdaだけの状態なのでフロントに「API Gateway」を配置します。 ![amore01_configure-triggers01.png](/images/posts/e3d6ce4f-a272ada3-31a3-528b-c685-ede6f538c285.png)

「API Gateway」を配置したらその設定をここで行いますが、API nameResource nameは任意の名前を設定して大丈夫です。今回は「MyAmore」と「/myamore」にしています。 そしてMethodは「POST」を選択し、Deploymment stageは「prod(デフォルト)」のままで、Securityは「Open」にしておきます。 入力が完了したら「Next」ボタンをクリックします。 01.png


## ● Configure function それでは関数の設定に移ります。
### - Configure function **Name**と**Description**に任意の内容を入力します。また**Runtime**はここでは「_Node.js 4.3_」を選択します。 ![03.png](/images/posts/9eee71b7-ed39297b-ea8a-ccf5-735d-b95d319a180b.png)
### - Lambda function code ここはとりあえずこのままにしておきます。

amore01_configure-triggers03_2.png


### - Lambda function handler and role **Handler**に「_index.handler_」、**Role**は「_Choose an existing role_」を選び**Existing role**に「_lambda_basic_execution_」を指定します。 ![amore01_configure-triggers03_3.png](/images/posts/b291a262-a0f1069a-b1e1-ca68-b694-10169859d648.png)
### - Advanced settings 今回はあまり使う予定はないので**Memory(MB)**は「_128_」にしておきます。 **Timeout**はデフォルトの「_3秒_」です。 また、**VPC**は「_No VPC_」にしておきます。 ![amore01_configure-triggers03_4.png](/images/posts/b69011f7-271e53a9-b533-f8b5-8cd5-c56454a36c49.png)
## ● Review 「Configure function」で設定した内容の確認です。 問題なさそうなら[Create function]で作成完了です。 ![02.png](/images/posts/2b59ab07-6e6a3b03-5ca2-c358-9c2d-b2b509c8a6cd.png) ![03.png](/images/posts/9eee71b7-ed39297b-ea8a-ccf5-735d-b95d319a180b.png)

作成が完了すると「API Gateway」のURLが表示されます。 04.png

ここで表示されたURLをLINEの「Callback URL」に設定します。 その際に注意が必要なのが、ポート番号も指定してあげなければならないという点です。 以下の画像のように、ドメイン末尾に「:443」をつけてあげる必要があります。 05.png

以上で「YOUR SYSTEM」に該当するフレームが完了しました。


# Lambda関数の設定 それでは作成したフレームの中身を設定していきます。 中身というのは先ほど「とりあえずこのまま」にしていたLambda関数の箇所です。 「Code」タブをクリックして編集画面を表示します。 ![07.png](/images/posts/a0c42b05-35cc41e6-9633-79c0-a551-050fe8b69324.png)

そこに以下のソースコードをコピペします。

var https = require('https');

exports.handler = function(event, context) {
    console.log('EVENT:', JSON.stringify(event, null, 0));
    var msg = event.result[0];
    var data = JSON.stringify({
      to: [msg.content.from.toString()],
      toChannel: 1383378250,
      eventType: "138311608800106203",
      content: msg.content
    });
    var url ='https://trialbot-api.line.me/v1/events';
    var opts = {
        host: 'trialbot-api.line.me',
        path: '/v1/events',
        headers: {
            "Content-type": "application/json; charset=UTF-8",
            "X-Line-ChannelID": "【Channel ID】",
            "X-Line-ChannelSecret": "【Channel Secret】",
            "X-Line-Trusted-User-With-ACL": "【MID】"
        },
        method: 'POST'
    };
    var req = https.request(opts, function(res){
        res.on('data', function (chunk) {
            console.log(res.statusCode + chunk.toString());
        });
        req.on('error', function(err) {
          console.log('ERROR: ' + err.message);
        });
    });
    req.write(data);
    req.end();
};

ただその際に、【Channel ID】と【Channel Secret】と【MID】は独自の値を設定する必要があるので「Line developers」で取得した自分の値と置き換えてください。 06.png

コピペが完了したら「Save」ボタンで保存して完了です。

え?それじゃ何をしてるのかわからないって?いいんです!まずは完成させることが大事なんです! ひとまず何も考えずにコピペしましょう!


# トーク それではいよいよ会話です。ProudCloudに話しかけてみます。 ![08.png](/images/posts/3c32cf0a-48bb2b15-2bb9-f322-e475-62c875efc3bb.png)

同じ言葉を返してくれます。いわゆる「オウム返し」というやつです。


# おわりに 今回は「とにかく動かす」ことを目的に作りました。 具体的な処理について説明すると長くなってしまうので、今回はここまでにしたいと思います。