LINE의 Echo Bot을 Google Cloud Functions로 만들기
전체 저장소는 코코에 있습니다.
Cloud Functions
Google Cloud Platform용 AWS Lambda입니다.
아직 베타 버전으로, 정직 Lambda 쪽이 기능 풍부한 생각이 듭니다(제대로 비교는 하지 않지만).
특히 Lambda에 비해 다음 점이 이번에는 걸렸습니다.
Node.js의 LINE Messaging API
Cloud Functions는 Node.js만 사용할 수 있으므로 부작용적으로 LINE Messaging API도 Node.js만 사용할 수 있습니다.
예전에는 Node.js의 SDK가 없었기 때문에 Cloud Functions에서 LINE Bot 기사가 있더라도 SDK를 사용하지 않고 있었으며 직접 도움이되지 않고 힘들었습니다.
Node.js의 SDK는 GitHub에 있습니다.
샘플 코드도 여기에서 빌리기로 결정합니다.
만들기
(코코로부터가 본제)
이번에는 콘솔이 아니라
gcloud
명령으로 배포를 수행하므로 적절하게 검사하여 설치하십시오.주요 기능
먼저 SDK 리포지토리의 샘플 코드을 참조하여 기본 함수를 구현합니다.
샘플 코드는
express
라는 패키지를 사용하지만 Cloud Functions의 경우 내보내기만 하면 되므로 필요하지 않습니다.결과로서 다음과 같은
index.js
를 씁니다 (파일의 이름은 따로 아무것도 좋다).'use strict';
const line = require('@line/bot-sdk');
const config = {
channelAccessToken: process.env.CHANNEL_ACCESS_TOKEN,
channelSecret: process.env.CHANNEL_SECRET,
};
const client = new line.Client(config);
function handleEvent(event) {
console.log(event);
var message = 'Please push text message.';
if (event.type === 'message' && event.message.type === 'text') {
message = event.message.text;
}
const echo = { type: 'text', text: message };
return client.replyMessage(event.replyToken, echo);
}
exports.handler = function echoBot (req, res) {
Promise
.all(req.body.events.map(handleEvent))
.then(result => res.status(200).send(`Success: ${result}`))
.catch(err => res.status(400).send(err.toString()));
};
환경 변수를 어떻게 할 것인가
여기에서 문제는 (위에서 언급했듯이) 환경 변수입니다.
일부 LINE Bot과는 무관한 Cloud Functions 코드를 살펴보면
dotenv
를 사용했기 때문에 그렇게하기로 결정했습니다.index.js
머리에 추가합니다.'use strict';
require('dotenv').config();
const line = require('@line/bot-sdk');
...
그리고 다음과 같은
.env
파일을 만들어 둡니다 (GitHub 등에 주지 않도록 조심해).CHANNEL_ACCESS_TOKEN="XXXXX"
CHANNEL_SECRET="YYYYY"
덧붙여서,
CHANNEL_ACCESS_TOKEN
도 CHANNEL_SECRET
도 LINE Developers의 사이트의 Bot의 관리 페이지에서 알 수 있습니다 (액세스 토큰은 최초로 재발행을 클릭할 필요가 있다).package.json 쓰기
다음은
package.json
를 작성합니다.{
"name": "echo-bot",
"version": "0.1.0",
"main": "index.js",
"dependencies": {
"@line/bot-sdk": "^5.0.0",
"dotenv": "^4.0.0"
}
}
main
곳에 함수를 쓴 JS 파일을 지정해 줍니다.배포하기
여기까지 쓸 수 있으면 배포를 합니다.
$ gcloud beta functions deploy echo-bot --stage-bucket hoge-bucket --trigger-http --entry-point handler
--entry-point
에서 실행할 함수를 지정합니다.덧붙여서, 이러한 코드를 저장할 위치로
--stage-bucket
옵션으로 GCP 버킷을 지정하고 있지만, 만약 아직 만들지 않았다면 다음과 같은 명령으로 미리 만들어 두어야합니다 (이번 경우는[BUCKET_NAME]
는 hoge-bucket
입니다.$ gsutil mb -p [PROJECT_ID] gs://[BUCKET_NAME]
Webhook 설정
그런 다음 URL을 Webhook에 지정하기 만하면됩니다.
다음 명령으로 URL을 검색할 수 있어야 합니다.
$ gcloud beta functions describe echo-bot | grep url
주의점이 하나.
LINE Developers 사이트에서 Webhook을 지정한 후
接続確認
라는 버튼을 누르고 싶습니다.console.log(err.originalError.response.data)
라는 코드를 포함하고 응답을 보면 "ReplyToken이 잘못되었습니다."라고합니다.이것은 어쩔 수 없어 ... (아마)
시도하다
좋은 느낌
Reference
이 문제에 관하여(LINE의 Echo Bot을 Google Cloud Functions로 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/matsubara0507/items/04ab3c2197aa5f68e499텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)