AWS × Node.jsでLINE Bot開発（「おうむ返し」と「画像カルーセル表示」を実装）

[AWS と LINE を連携させてbotを作ってみよう・準備編](http://xp-cloud.jp/blog/2017/11/13/2345/)を参考にnode.jsで実装しました。


おうむ返し（index.js）

```
'use strict';
const line = require('@line/bot-sdk');
var event;
var context;
var callback;
exports.handler = (_event, _context, _callback) => {
    event    = _event;
    context  = _context;
    callback = _callback;
    main();
};
let main = function() {
    const client = new line.Client({
        channelAccessToken: ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’
    });
    const message = {
        type: 'text',
        text: JSON.stringify(event)
    };
    client.replyMessage(event.events[0].replyToken, message)
    .then(() => {
        callback(null, {});
    })
    .catch((err) => {
        callback(null, {});
    });
};
```

※ channelAccessTokenの中身「XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX」はLINE developerコンソールで確認して置き換えてください。


これを応用して「画像カルーセル表示」を実装。（index.js）
詳しい使い方は[リファレンス](https://developers.line.me/ja/docs/messaging-api/reference/#confirm)を参照してください。

```
'use strict';
const line = require('@line/bot-sdk');
var event;
var context;
var callback;
exports.handler = (_event, _context, _callback) => {
    event    = _event;
    context  = _context;
    callback = _callback;
    main();
};
let main = function() {
    const client = new line.Client({
        channelAccessToken: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
    });
    const message = {
	  "type": "template",
	  "altText": "this is a image carousel template",
	  "template": {
	      "type": "image_carousel",
	      "columns": [
	          {
	            "imageUrl": "https://example.com/bot/images/item1.jpg",
	            "action": {
	              "type": "message",
	              "label": "腰痛",
	              "text": "腰痛"
	            }
	          },
	          {
	            "imageUrl": "https://example.com/bot/images/item2.jpg",
	            "action": {
	              "type": "message",
	              "label": "頭痛",
	              "text": "頭痛"
	            }
	          },
	          {
	            "imageUrl": "https://example.com/bot/images/item3.jpg",
	            "action": {
	              "type": "message",
	              "label": "下痢",
	              "text": "下痢"
	            }
	          }
	      ]
	  }
	};
    client.replyMessage(event.events[0].replyToken, message)
    .then(() => {
        callback(null, {});
    })
    .catch((error) => {
        callback(null, {});
    });
};
```

違いは「const message」の中身になります。

おうむ返し

```
const message = {
        type: 'text',
        text: JSON.stringify(event)
    };
```
と
画像カルーセル表示（必須項目のみ）

```
const message = {
	  "type": "template",
	  "altText": "this is a image carousel template",
	  "template": {
	      "type": "image_carousel",
	      "columns": [
	          {
	            "imageUrl": "https://example.com/bot/images/item1.jpg",
	            "action": {
	              "type": "message",
	              "label": "腰痛",
	              "text": "腰痛"
	            }
	          },
	          {
	            "imageUrl": "https://example.com/bot/images/item2.jpg",
	            "action": {
	              "type": "message",
	              "label": "頭痛",
	              "text": "頭痛"
	            }
	          },
	          {
	            "imageUrl": "https://example.com/bot/images/item3.jpg",
	            "action": {
	              "type": "message",
	              "label": "下痢",
	              "text": "下痢"
	            }
	          }
	      ]
	  }
	};
```

という具合になっています。