Slide 1

Slide 1 text

FB Chatbot 2016/05/16 古田

Slide 2

Slide 2 text

FB Chatbot 作成 Facebook Messengerのbotを作りたい! (こちらはイメージです)

Slide 3

Slide 3 text

採用理由:運用面&コスト面で有利と判断 デプロイなど別管理にしたく relux本体のリポジトリとは切り離す。 このためだけにサーバを立てるのも勿体ないので Lambdaを利用。 RDSへ接続できるようになったし、せっかくだから Try。 構成 やりとり メッセージ relux データ API gateway Lambda DynamoDB RDS

Slide 4

Slide 4 text

VPC AZ-a AZ-c インターネット ゲートウェイ Lambda用に サブネット作成 NAT ゲートウェイ

Slide 5

Slide 5 text

API gateway

Slide 6

Slide 6 text

Lambda(設定)

Slide 7

Slide 7 text

Lambda(FBからの認証) tokenを判別 var verify_token = 'XXXXXXXX'; exports.handler = function(event, context, callback) { // Webhooks統合を有効にするための処理 if (event.verify_token === verify_token) { console.log('verify_token is correct'); callback(null, parseInt(event.challenge)); } callback(null, 'Error, wrong validation token'); };

Slide 8

Slide 8 text

Lambda(機能) function classifyMessageType(text) { // AAAですか? if (isAAAText(text)) { return DATA_TYPE_AAA; } // BBBですか? if (isBBBText(text)) { return DATA_TYPE_BBB; } // CCCですか? if (isCCCText(text)) { return DATA_TYPE_CCC; } // DDDですか? if (isDDDText(text)) { return DATA_TYPE_DDD; } // それ以外ですね return DATA_TYPE_OTHER; } メッセージ種別判断 var aws = require('aws-sdk'); var dynamo = new aws.DynamoDB(); var tableName = "table-name"; function saveMessage(senderId, type, value) { var dynamoRequest = { "TableName" : tableName }; var nowTheTime = new Date(); var nowTheTimeStr = getTimeString(nowTheTime); dynamoRequest.Item = { "sender" : { "N" : String(senderId) }, "date" : { "S" : nowTheTimeStr }, "type" : { "S" : type }, "value" : { "S" : value } }; dynamo.putItem(dynamoRequest, function (err, data) {}); } メッセージ保存

Slide 9

Slide 9 text

Facebook設定

Slide 10

Slide 10 text

Facebook設定