LINEBot을 모두 만들자 ~ 코드를 구현 편 ~ 【마지막 날】
일주일 만에 서버리스 LINEBot을 생성합니다 (@inoue2002) |
소개
여기의 내용은 초보자 전용입니다.
공식 문서 을 읽을 수 있는 분은 이쪽을 읽는 것이 정확합니다.
어제 기사 를 보지 못한 분들은 꼭.
이 기사는 GW 어드벤트 캘린더를 통해 LINEBot을 서버리스로 만들 수 있게 합시다! 라는 것을 목표로 쓰고 있는 기사입니다.
LINEBot은 만들 수 있지만 AWS에서 서버리스를 만들고 싶다! 지향 기사입니다.
어제의 기사에서 대부분의 설정 (lambda 함수, APIGateway, 환경 변수 등)을 마쳤으므로 남기는 코드를 쓰고 WEBhookURL을 설정하는 것뿐이었습니다.
그럼 가자!
코드 만들기
어제 한 번도 괴롭히지 않았던 코드 에디터를 모두 삭제합니다.
다음을 복사하여 그대로 붙여넣기
index.js"use strict";
// モジュール呼び出し
const crypto = require("crypto");
const line = require("@line/bot-sdk");
// インスタンス生成
const client = new line.Client({ channelAccessToken: process.env.ACCESSTOKEN });
exports.handler = (event) => {
let signature = crypto
.createHmac("sha256", process.env.CHANNELSECRET)
.update(event.body)
.digest("base64");
let checkHeader = (event.headers || {})["X-Line-Signature"];
if (!checkHeader) {
checkHeader = (event.headers || {})["x-line-signature"];
}
const body = JSON.parse(event.body);
const events = body.events;
console.log(events);
// 署名検証が成功した場合
if (signature === checkHeader) {
events.forEach(async (event) => {
let message;
switch (event.type) {
case "message":
message = await messageFunc(event);
break;
case "postback":
message = await postbackFunc(event);
break;
case "follow":
message = { type: "text", text: "追加ありがとうございます!" };
break;
}
// メッセージを返信
if (message != undefined) {
await sendFunc(body.events[0].replyToken, message);
// .then(console.log)
// .catch(console.log);
return;
}
});
}
// 署名検証に失敗した場合
else {
console.log("署名認証エラー");
}
};
async function sendFunc(replyToken, mes) {
const result = new Promise(function (resolve, reject) {
client.replyMessage(replyToken, mes).then((response) => {
resolve("送信完了");
});
});
return result;
}
async function messageFunc(event) {
let message = "";
message = { type: "text", text: `メッセージイベント` };
return message;
}
const postbackFunc = async function (event) {
let message = "";
message = { type: "text", text: "ポストバックイベント" };
return message;
};
확인 및 저장
아래와 같이 되면 오른쪽 상단의 저장 버튼을 누른다.
WEBhookURL 설정
API 엔드포인트와 작성된 URL을 모두 복사
LINEBot의 WebhookURL의 란에 붙여 넣는다(어미에 /webhook라든지 필요없다. 그대로 붙여 붙일 뿐.)
※ 검증 버튼을 누르면 에러가 나오지만 특히 신경 쓰지 않아도 좋다.
동작 확인
사보였던 서버리스 LINEbot이 완성되었다! 피 c. 라고 r. 이 m/FM7CFYlfp — 요칸 (Yosuke Inoue) (@inoue2002) May 8, 2020
어제 한 번도 괴롭히지 않았던 코드 에디터를 모두 삭제합니다.
다음을 복사하여 그대로 붙여넣기
index.js
"use strict";
// モジュール呼び出し
const crypto = require("crypto");
const line = require("@line/bot-sdk");
// インスタンス生成
const client = new line.Client({ channelAccessToken: process.env.ACCESSTOKEN });
exports.handler = (event) => {
let signature = crypto
.createHmac("sha256", process.env.CHANNELSECRET)
.update(event.body)
.digest("base64");
let checkHeader = (event.headers || {})["X-Line-Signature"];
if (!checkHeader) {
checkHeader = (event.headers || {})["x-line-signature"];
}
const body = JSON.parse(event.body);
const events = body.events;
console.log(events);
// 署名検証が成功した場合
if (signature === checkHeader) {
events.forEach(async (event) => {
let message;
switch (event.type) {
case "message":
message = await messageFunc(event);
break;
case "postback":
message = await postbackFunc(event);
break;
case "follow":
message = { type: "text", text: "追加ありがとうございます!" };
break;
}
// メッセージを返信
if (message != undefined) {
await sendFunc(body.events[0].replyToken, message);
// .then(console.log)
// .catch(console.log);
return;
}
});
}
// 署名検証に失敗した場合
else {
console.log("署名認証エラー");
}
};
async function sendFunc(replyToken, mes) {
const result = new Promise(function (resolve, reject) {
client.replyMessage(replyToken, mes).then((response) => {
resolve("送信完了");
});
});
return result;
}
async function messageFunc(event) {
let message = "";
message = { type: "text", text: `メッセージイベント` };
return message;
}
const postbackFunc = async function (event) {
let message = "";
message = { type: "text", text: "ポストバックイベント" };
return message;
};
확인 및 저장
아래와 같이 되면 오른쪽 상단의 저장 버튼을 누른다.
WEBhookURL 설정
API 엔드포인트와 작성된 URL을 모두 복사
LINEBot의 WebhookURL의 란에 붙여 넣는다(어미에 /webhook라든지 필요없다. 그대로 붙여 붙일 뿐.)
※ 검증 버튼을 누르면 에러가 나오지만 특히 신경 쓰지 않아도 좋다.
동작 확인
사보였던 서버리스 LINEbot이 완성되었다! 피 c. 라고 r. 이 m/FM7CFYlfp — 요칸 (Yosuke Inoue) (@inoue2002) May 8, 2020
사보였던 서버리스 LINEbot이 완성되었다! 피 c. 라고 r. 이 m/FM7CFYlfp — 요칸 (Yosuke Inoue) (@inoue2002) May 8, 2020
LINEBot에 뭔가 말해 봅시다!
끝에
GW를 걸고 한 개 한 개 세세하게 사진을 찍고 LINEBot을 만들어 보았습니다.
저도 다시 공부하 부분도 많아, 매우 의미있는 qiita를 쓰는 시간이었다고 생각합니다.
과거작을 차례로 복습해 여러분으로 점점 LINEBot을 만들어 갑시다!
이 일주일 기사는 모두 이 기사 을 참고로 하고 있습니다
이 문서: LINEBot을 모두 만들자 ~ 코드 구현 편
LINEBot을 모두 만들자~환경 구축편~
LINEBot을 모두 만들자 ~ LINEBot is 무엇? 편
LINEBot을 모두 만들자~ 되돌아가는 bot를 만들자편~
LINEBot을 모두 만들자 ~ 다양한 메시지를 보내 보자.
LINEBot을 모두 만들자 ~ Message를 분기시키는 편
LINEBot을 모두 만들자 ~ AWS 계정 만들기
LINEBot을 모두 만들자~ 레이어와 APIgateway 설정편
Reference
이 문제에 관하여(LINEBot을 모두 만들자 ~ 코드를 구현 편 ~ 【마지막 날】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/inoue2002/items/dbbd862d6149c83f6513텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)