JOURNAL

Simple Line Botを作った理由 — 「2つのAPIキーを貼るだけ」にこだわった話

「LINE Bot作ってみたいんだけどよく分からなくて」という話、周りでも何度か聞いたことがあります。自分も最初そうでした。公式ドキュメントを開くと設定項目がずらっと並んでいて、心が折れそうになります…。Simple Line Botは、そんな心配は必要ありません!

やることは本当に少なくて、LINE Messaging APIの「チャネルアクセストークン」と「チャネルシークレット」(パスワードみたいな数字や文字でできたコード)、この2つを設定ファイルに貼るだけで動くようにしました。

これらはLINE Messaging APIの管理画面ですぐに発行できます。

複雑な初期設定は全部こっちで吸収して、「とりあえず動いた!」までの距離を最短にすることだけ考えて作っています。

Simple Line Botの設定ファイル
▲ Simple Line Botの設定ファイル

Simple Line BotはAIを利用しないため、そもそもAIへの別途契約も必要なければ、クレジットカードの登録といった不安で面倒な手続きも不要です。

実際、自分で最初にテストしたときも5分かからず返信が返ってきて、拍子抜けするくらい呆気なかったです。狙い通りではあるんですが。

機能もわざと絞ってあって、特定のキーワードを含むメッセージに決まった返信をするだけの「部分一致応答」しかできません。多機能にするほど設定も複雑になるので、まずは「返信botってこういうものか」を体験してもらうことを優先しました。

ここから発展させてAIと連携するAI LINE Botも作ったんですが、あっちを作ったあとに改めてこっちを見返すと、「シンプルさって足すより引く方が難しいな」としみじみ思います。

まずは、Simple Line Botから無料で試していただき、どうしても高機能なボットが欲しい、もっと複雑な質問にも柔軟に回答をしてほしいとなった場合、AI LINE Botを検討する、という流れがおすすめです。

複数キーワードがマッチした場合は「登録順」で決定

functions.phpfindResponse()が、$responses配列を上から順にmb_strpos()でチェックし、最初に一致したものを即座に返す実装です。

foreach ($responses as $keyword => $answer) {
    if (mb_strpos($userMessage, $keyword) !== false) {
        return $answer;
    }
}

優先順位は完全に「配列に登録した順番」で決まり、文字数の長さは一切関係ありません。これは仕様として意図的なもので、responses.phpのコメント内にも「より具体的なキーワードを先に、広い意味の言葉は後ろに書いてください」と明記しています。サンプル(responses_sample.php)でも「予約 個室」を「予約」より前に置くことで、この挙動が伝わるようにしています。

署名検証はHMAC-SHA256 + hash_equals

functions.phpverifyLineSignature()で実装しています。

function verifyLineSignature($body, $signature, $channelSecret)
{
    if (empty($signature)) {
        return false;
    }
    $hash = hash_hmac('sha256', $body, $channelSecret, true);
    $expectedSignature = base64_encode($hash);
    return hash_equals($expectedSignature, $signature);
}

リクエストボディ(php://input)をチャネルシークレットでHMAC-SHA256署名し、base64エンコードしたものと、ヘッダーのX-Line-Signatureをタイミング攻撃耐性のあるhash_equals()で比較しています。これはwebhook.phpの冒頭、他の処理より先に必ず通す形にしています。

よくある設定ミスとは?

ここはアプリの機能的に…というものでは無いのですが、開発の過程で実際に発生した「設定ミス」に近いものを挙げると、次の4件です。

  • LINE公式アカウント標準の「応答メッセージ」をOFFにし忘れて、返信が二重に届く(README・LPでも繰り返し注意喚起しています)
  • 配布ZIPのファイル名を変更した際、download_config.php側の実ファイルパスだけを直して、index.html側のリンク(file=パラメータ)を直し忘れ、「ファイルが見つかりません」になった
  • stats.phpの合言葉が一致せず「アクセスできません」になる(日本語や記号を含む合言葉が原因だった)
  • LINEアプリ内蔵ブラウザからのダウンロードができない(これは対策済み)

一応、設定でつまずきやすいポイントとして挙げておきます。

初めての自動化への対応には最適です。

Simple Line Botは、これからLINEの自動化を検討されている方にとっては最適なツールになるはずです、費用も一切かかりませんし、設定がとにかく簡単、楽です! また仕組みを把握しやすいので、どのタイミングでAIを利用したボットに変更を検討したらよいのか?という部分をご自身で把握できます。

もし「LINEで何か自動化してみたい」「こういう時に自動で返信してくれたらな」と思っているなら、まずはこのSimple Line Botから使ってみてください!👇