LINE의 MessagingAPI를 사용하여 수신한 메시지를 S3에 저장
9426 단어 LINEmessagingAPI람다S3APIGateway
소개
LINE@에서 제공되는 MessageingAPI를 사용하여 LINEbot을 만들고, 발화 내용을 DB에 넣어두고 싶었기 때문에, 보내져 온 메시지를 APIGateway로 받아 S3에 돌진해 보았습니다. (거기에서 앞의 DB에의 인서트는 할애)
준비
S3에서 메시지를 넣는 버킷 만들기
알기 쉬운 버킷명을 넣어 작성.
필요에 따라 각종 설정은 변경하면 OK이지만 기본적으로 기본적으로 좋다고 생각합니다.
받은 메시지를 S3에 저장하기 위한 lambda 함수 만들기
역할은 lambda와 S3에 액세스 할 수있는 것을 새로 만들거나 기존 중에서 선택하여 부여합니다.
이번에는 Node.js 6.10에서 만들었습니다.
'use strict';
var AWS = require('aws-sdk');
AWS.config.region = {S3のバケットのregion};
var bucketName = {S3のバケット名};
var s3 = new AWS.S3({apiVersion: '2006-03-01'});
exports.handler = function(event, context, callback) {
if (event.headers) {
// line からのリクエストか判定
const crypto = require('crypto');
const channelSecret = {LINEの管理画面上から取得するチャンネルシークレット};
const body = event.body;
const signature = crypto.createHmac('SHA256', channelSecret).update(body).digest('base64');
if (signature == event.headers['X-Line-Signature']) {
var date = new Date();
var fileName = date.getTime() + '-' + signature.replace( /\//g , "" ) + '.txt';
var params = {
Bucket: bucketName,
Key: fileName,
Body: event.body
};
// 内容をS3に保存
s3.upload(params, function(err, data) {
if (err) {
console.log("Error uploading data: ", err);
} else {
console.log("Successfully uploaded data to " + bucketName + "/" + fileName);
}
callback(null, response_success); // SUCCESS with message
context.done(null, 'Finished UploadObjectOnS3');
});
}
}
};
const response_success = {
'isBase64Encoded': false,
'statusCode': 200,
'headers': {
'Content-Type': 'application/json',
},
body: JSON.stringify({
message: 'ok'
}),
};
엔드포인트인 APIGateway 작성
액션 → 메소드 작성에서 POST 메소드를 작성합니다.
※저는 여기를 GET로 만들어 버리고 있어 LINE의 관리 화면에서 WebhookAPI의 등록을 하고, 소통 테스트를 실시하면 테스트가 통하지 않고 빠졌습니다…
그리고 방법을 설정합니다.
Lamda 지역과 함수 이름은 방금 만든 것을 넣습니다.
설정이 완료되면 작업에서 이 API를 배포합니다.
배포가 가능하면 URL이 발행되므로 그 URL을 LINE@의 관리 화면에서 WebhookURL로 등록합니다.
움직였다.
LINE에서 말을 걸면
들어갔다!
Reference
이 문제에 관하여(LINE의 MessagingAPI를 사용하여 수신한 메시지를 S3에 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kakakaori830/items/4bb1c906a2f5d4e5ca9d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
역할은 lambda와 S3에 액세스 할 수있는 것을 새로 만들거나 기존 중에서 선택하여 부여합니다.
이번에는 Node.js 6.10에서 만들었습니다.
'use strict';
var AWS = require('aws-sdk');
AWS.config.region = {S3のバケットのregion};
var bucketName = {S3のバケット名};
var s3 = new AWS.S3({apiVersion: '2006-03-01'});
exports.handler = function(event, context, callback) {
if (event.headers) {
// line からのリクエストか判定
const crypto = require('crypto');
const channelSecret = {LINEの管理画面上から取得するチャンネルシークレット};
const body = event.body;
const signature = crypto.createHmac('SHA256', channelSecret).update(body).digest('base64');
if (signature == event.headers['X-Line-Signature']) {
var date = new Date();
var fileName = date.getTime() + '-' + signature.replace( /\//g , "" ) + '.txt';
var params = {
Bucket: bucketName,
Key: fileName,
Body: event.body
};
// 内容をS3に保存
s3.upload(params, function(err, data) {
if (err) {
console.log("Error uploading data: ", err);
} else {
console.log("Successfully uploaded data to " + bucketName + "/" + fileName);
}
callback(null, response_success); // SUCCESS with message
context.done(null, 'Finished UploadObjectOnS3');
});
}
}
};
const response_success = {
'isBase64Encoded': false,
'statusCode': 200,
'headers': {
'Content-Type': 'application/json',
},
body: JSON.stringify({
message: 'ok'
}),
};
엔드포인트인 APIGateway 작성
액션 → 메소드 작성에서 POST 메소드를 작성합니다.
※저는 여기를 GET로 만들어 버리고 있어 LINE의 관리 화면에서 WebhookAPI의 등록을 하고, 소통 테스트를 실시하면 테스트가 통하지 않고 빠졌습니다…
그리고 방법을 설정합니다.
Lamda 지역과 함수 이름은 방금 만든 것을 넣습니다.
설정이 완료되면 작업에서 이 API를 배포합니다.
배포가 가능하면 URL이 발행되므로 그 URL을 LINE@의 관리 화면에서 WebhookURL로 등록합니다.
움직였다.
LINE에서 말을 걸면
들어갔다!
Reference
이 문제에 관하여(LINE의 MessagingAPI를 사용하여 수신한 메시지를 S3에 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kakakaori830/items/4bb1c906a2f5d4e5ca9d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
LINE에서 말을 걸면
들어갔다!
Reference
이 문제에 관하여(LINE의 MessagingAPI를 사용하여 수신한 메시지를 S3에 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kakakaori830/items/4bb1c906a2f5d4e5ca9d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)