みやざダニエルズのIT備忘録
← Blogs 一覧に戻る

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

世界の片隅で愛を叫ぶ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));
    }
};

おわりに

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

関連記事

AstroにGoogleアナリティクス4を導入する

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

動かなくなったので再度AstroにGoogleアナリティクス4を入れてみました。

日向美術館とVuetify

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

v-cardの中にv-cardを入れたらmarginがはみ出てる?暫定的にdivで調整しました..

日向美術館とmicroCMS

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

日向美術館で作成したmicroCMSのAPIスキーマの設定方法と設定した内容をご紹介します。

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

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

子供の作品を箱にしまい込むだけにせずにウェブに載せてみました。Headless CMSであるmicroCMSを使ってみたら使いやすかったです。

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

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

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

OpenBD coverage

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

本の情報をオープンにしてくれているOpenBDのAPIを使ってISBNの登録数を見てみました

Lighthouseのユーザー補助を100点にする

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

Lighthouseのユーザー補助を100点にするためにコントラストの警告を解消しました

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

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

Google Apps Scriptで勤怠管理システム風なものを作ってみました。

canvaでアイキャッチ画像を作る

canvaでアイキャッチ画像を作る

canvaを使ってアイキャッチ画像を作ることができます。

AstroにGoogleアナリティクス4を導入する

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

AstroにGoogleアナリティクス4を入れてみました。

Astroでブログを作る

VuePressからAstroにブログを変えてみた

VuePressからAstroにブログを移管してみました。

miyazadanielsの似顔絵

似顔絵メーカーさんで似顔絵を作ってみた

似顔絵メーカーさんで似顔絵を作ってみました。簡単な操作でできるのでおすすめ。