Posted at

Serverless FrameworkでLINE BOTへのメッセージをDynamoDBに保存するapiを作ってみる

More than 1 year has passed since last update.


経緯


  • ServerlessでChat Botを作る予定

  • 今年中に記事を投稿したい


事前準備


  • Serverless Frameworkインストール

  • AWSアカウント取得


    • AWS CLIインストールと設定



  • LINEアカウント取得


    • Messaging APIを利用可能にする




Serverless Frameworkのプロジェクト作成

$ mkdir test-api && cd test-api

$ serverless create --template aws-nodejs


serverless.ymlの設定


serverless.yml

service: test-api

provider:
name: aws
runtime: nodejs4.3
stage: dev
region: ap-northeast-1
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:PutItem
Resource: '*'

functions:
put:
handler: handler.put
events:
- http:
path: put
method: post

resources:
Resources:
messagesTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: messagesTable
AttributeDefinitions:
- AttributeName: replyToken
AttributeType: S
- AttributeName: time
AttributeType: N
KeySchema:
- AttributeName: replyToken
KeyType: HASH
- AttributeName: time
KeyType: RANGE
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1



Lambdaファンクション作成


handler.js

'use strict';

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB.DocumentClient();
const table = 'messagesTable';

module.exports.put = (event, context, callback) => {
var date = new Date();
var time = date.getTime();
var body = JSON.parse(event.body);

body.events.forEach(function(data) {
var replyToken = data.replyToken;
var message = data.message.text;
var params = {
TableName: table,
Item: {
replyToken: replyToken,
time: time,
message: message
}
};

dynamodb.put(params, function(err) {

if (err) {
console.log(err);
}
});
});

callback(null, {statusCode: 200, body: JSON.stringify({})});
};



AWSへデプロイ

$ serverless deploy

成功したらエンドポイントが取得できるのでメモ

endpoints:

POST - https://xxx.amazonaws.com/dev/put


LINE側設定


  • Webhook送信:利用する

  • Webhook URL:メモしたエンドポイントを指定


以上です

あとは、LINEからBOTアカウントを友だち追加してトークよりメッセージを送信することで

DynamoDBにメッセージが保存されます。


片づけ

$ serverless remove