この記事は下記の #GWアドベントカレンダー の 8日目の記事になります。
1週間でサーバレスLINEBotを生み出す( @inoue2002 ) | GWアドベントカレンダー
はじめに
こちらの内容は超初心者向けです。
公式ドキュメントを読める方はこちらをお読みいただく方が正確です。
昨日の記事をご覧になってない方はぜひ。
こちらの記事はGWアドベントカレンダーを通してLINEBotをサーバレスで作れるようになろう!ということを目標に書いている記事です。
LINEBotは作れるけどAWSでサーバーレスを作ってみたい!方向けの記事です
昨日の記事でほとんどの設定(lambda関数、APIGateway、環境変数等)を終えたので残すはコードを書いて、WEBhookURLを設定するだけとなりました。
ではやっていきましょう!
#コードを作成
##昨日一度もいじらなかったコードエディタのところにを全削除します。
##以下をコピーしてそのまま貼り付け
"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が完成した! pic.twitter.com/FMn7CFYlfp
— ようかん (Yosuke Inoue) (@inoue2002) May 8, 2020
LINEBotに何か喋りかけてみましょう!
##終わりに
GWをかけて一個一個細かく写真をとってLINEBotを作ってみました。
僕も改めて勉強下部分も多く、とても有意義なqiitaを書く時間だったなぁと思っています。
過去作を順番に復習してみなさんでどんどんLINEBotを作っていきましょう!
この1週間の記事は全てこの記事を参考にしています
LINEBotをみんなで作ろう〜環境構築編〜
LINEBotをみんなで作ろう〜LINEBot is 何?編
LINEBotをみんなで作ろう〜おうむ返しbotを作ろう編〜
LINEBotをみんなで作ろう〜色々なメッセージを送ってみよう編
LINEBotをみんなで作ろう〜Messageを分岐させるぞ編
LINEBotをみんなで作ろう〜AWSアカウントを作るぞ編
LINEBotをみんなで作ろう〜レイヤーとAPIgateway設定編