みやざダニエルズのIT備忘録

世界の片隅で愛を叫ぶLINE Bot

By miyazaDaniels on Oct 15, 2022
世界の片隅で愛を叫ぶLINE Bot

妻に日頃の感謝や日々なかなか言いづらい言葉を伝えるため秘密裏に作ったLINE Botです。 ランダムにあらかじめ決められた言葉を返すという機能のみ持っています。誕生日にお披露目して「おもしろいね」と言ってもらえました。やったー。

(ただ、数回で飽きられました)

作成方法

LambdaではじめてのLINE Botを作るを参考に作成しました。クラスメソッドさんの記事にはいつもお世話になっています。

ただし、動かない点があります。 LINE Developer CommunityのMessaging APIとAPIGatewayとLambdaで実現したいにある通り、index.jscheckHeader変数に値を入れる箇所で「X-Line-Signature」を「x-line-signature」のように小文字にする必要がありました。

ソースコード

LambdaではじめてのLINE Botを作るのソースコードを少し改変し、おうむがえしではなく、ランダムな言葉を返すように変更したりしました。

'use strict';
const line = require('@line/bot-sdk');
const crypto = require('crypto');
const client = new line.Client({ channelAccessToken: process.env.ACCESSTOKEN });

exports.handler = function (event, context) {
    const signature = crypto.createHmac('sha256', process.env.CHANNELSECRET).update(event.body).digest('base64');
    const checkHeader = (event.headers || {})['x-line-signature'];
    const body = JSON.parse(event.body);
    const messages = [
        "I love you, Hisa-Chan.",
        "大好きだよ〜",
        "ひさちゃん最高",
        "素敵",
        "さっすがー!",
        "ひさちゃん100点満点",
        "最高すぎる",
        "素晴らしいね!",
        "素晴らしいよ!!",
        "好きです",
        "最高の妻",
        "Happyです",
        "感謝してます",
        "いつもありがとう",
        "楽しもうね〜",
        "お誕生日おめでとう!",
        "大好き",
        "幸せをありがとう",
        "さっすが〜"
    ]
    const messageNo = Math.floor(Math.random() * messages.length);
    const responseBodyObj = {"type": "text","text": messages[messageNo]}
    const text = messages[messageNo]
    if (signature !== checkHeader) {
        console.log('署名認証エラー');
        return;
    }
    let lambdaResponse = null;
    if (body.events[0].replyToken === '00000000000000000000000000000000') { //接続確認エラー回避
        lambdaResponse = {
            statusCode: 200,
            headers: { "X-Line-Status": "OK" },
            body: '{"result":"connect check"}'
        };
        context.succeed(lambdaResponse);
    } else {
        const message = {
            'type': 'text',
            'text': text
        };
        client.replyMessage(body.events[0].replyToken, message)
            .then((response) => {
                lambdaResponse = {
                    statusCode: 200,
                    headers: { "X-Line-Status": "OK" },
                    body: '{"result":"completed"}'
                };
                context.succeed(lambdaResponse);
            }).catch((err) => console.log(err));
    }
};

おわりに

皆様もぜひ一瞬の微笑みのために作ってみてはいかがでしょうか! 次は何をしてみようかな〜

Recent Posts
日向美術館とVuetify

【Vuetify】v-cardの中にv-cardを入れたときに意図したmarginにならなかったのでdivでレイアウト調整した話

Nov 29, 2022
v-cardの中にv-cardを入れたらmarginがはみ出てる?暫定的にdivで調整しました..
日向美術館とmicroCMS

【microCMS】日向美術館で使用しているAPIスキーマ設定方法

Nov 27, 2022
日向美術館で作成したmicroCMSのAPIスキーマの設定方法と設定した内容をご紹介します。
microCMSとVue.jsで子供の作品を展示する

microCMSとVue.jsで子供の作品を展示する

Nov 25, 2022
子供の作品を箱にしまい込むだけにせずにウェブに載せてみました。Headless CMSであるmicroCMSを使ってみたら使いやすかったです。
Webで縦書きコンテンツ〜Safariには気を付けろ!〜に助けられた話

Webで縦書きコンテンツ〜Safariには気を付けろ!〜に助けられた話

Nov 5, 2022
縦書き文字をflexboxを使って並べたときのレイアウト崩れが直りました。
OpenBD coverage

OpenBDに登録されているISBNの数の調査をしてみた

Oct 31, 2022
本の情報をオープンにしてくれているOpenBDのAPIを使ってISBNの登録数を見てみました
Lighthouseのユーザー補助を100点にする

Lighthouseのユーザー補助を100点にしたい

Oct 25, 2022
Lighthouseのユーザー補助を100点にするためにコントラストの警告を解消しました
世界の片隅で愛を叫ぶLINE Bot

世界の片隅で愛を叫ぶLINE Bot

Oct 15, 2022
AWS Lambda、API Gatewayを使ってLINE Botで愛を伝えてみました
Google Apps Scriptで勤怠管理システム風なものを作る

Google Apps Scriptで勤怠管理システム風なものを作る

Oct 14, 2022
Google Apps Scriptで勤怠管理システム風なものを作ってみました。
AstroにGoogleアナリティクス4を導入する

Googleアナリティクス4の導入

Oct 13, 2022
AstroにGoogleアナリティクス4を入れてみました。
© Copyright 2022 by みやざダニエルズのIT備忘録. Built with ♥ by CreativeDesignsGuru.