#経緯
- 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