Facebook Bot용 앱을 AWS Lambda에서 구현

지금까지 준비



AWS API Gateway 및 AWS Lambda에서 HelloWorld 만들기
ぃ tp // 코 m / 아키라 사사키 / ms / b9 8 8 0330818 3b71d

AWS API Gateway 및 AWS Lambda에서 Facebook Bot 만들기
ぃ tp // 코 m / 아키라 사사키 / ms / 961cb7 아 1 아 7386764863

Facebook에서 보낸 JSON



Facebook에서 보낸 JSON
{
  "object":"page",
  "entry":[
    {
      "id":PAGE_ID,
      "time":1457764198246,
      "messaging":[
        {
          "sender":{
            "id":USER_ID
          },
          "recipient":{
            "id":PAGE_ID
          },
          "timestamp":1457764197627,
          "message":{
            "mid":"mid.1457764197618:41d102a3e1ae206a38",
            "seq":73,
            "text":"hello, world!"
          }
        }
      ]
    }
  ]
}



필드 이름
Description
유형


sender.id
Sender user id
Number

recipient.id
Recipient user id
Number

timestamp
Timestamp of message
Number

message
Message
Object


데이터 전송



Curl 예
curl -X POST -H "Content-Type: application/json" -d '{
    "recipient":{
        "id":"USER_ID"
    }, 
    "message":{
        "text":"hello, world!"
    }
}' "https://graph.facebook.com/v2.6/me/messages?access_token=PAGE_ACCESS_TOKEN"

ACCESS_TOKEN 획득







귀환 보트 만들기



FacebookBotCallback.js
var http = require ('https');

var accessToken = "アクセストークン";
var sendingCount = 0;
var myContext;

exports.handler = function(event, context) {
    console.log('Received event:', JSON.stringify(event, null, 2));
    myContext = context;

    // パラメータチェック
    var entry = event.entry;
    if (!entry || entry.length === 0) {
        context.fail("invalid parameter");
        return;
    }

    // 各メッセージの処理
    for (var i = 0; i < entry.length; i++) {
        var messaging_events = entry[i].messaging;
        var timestamp = entry[i].time;
        for (var j = 0; j < messaging_events.length; j++) {
            var messaging = entry[i].messaging[j];
            var sender = messaging.sender.id;
            // メッセージ
            if (messaging.message && messaging.message.text) {
                var text = messaging.message.text;
                sendMessage(sender, {text: text});
            }
        }
    }
    // context.done();
};

// メッセージ送信
function sendMessage(sender, messageData) {
    var json_data = {
        recipient: {id: sender},
        message: messageData
    };
    var post_data = JSON.stringify(json_data);
    console.log("* sendMessage *" + post_data);

    var post_options = {
        host: 'graph.facebook.com',
        port: '443',
        path: '/v2.6/me/messages?access_token='+accessToken,
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(post_data)
        }
    };

    var post_req = http.request(post_options, function(res) {
        res.setEncoding('utf8');
        // res.on('data', function (chunk) {
        //     console.log('Response: ' + chunk);
        // });
        res.on('end', function () {
            // console.log('End');
            sendingCount -= 1;
            if (sendingCount === 0) {
                myContext.done();
            }
        });
    });

    post_req.on('error', function (e) {
        console.error('HTTP error: ' + e.message);
        sendingCount -= 1;
        if (sendingCount === 0) {
            myContext.done();
        }
    });

    // post the data
    post_req.write(post_data);
    post_req.end();
}

좋은 웹페이지 즐겨찾기