Help us understand the problem. What is going on with this article?

LineBot開発

友人のベンチャーの手伝いで、LINEのBot開発をやってみたので、その議事録として投稿します。

自分で記事を書くというより、2019/09/23現在は、このフローで開発できたよ!っていう、まとめブログ的な立ち位置で書きますね!

今回はこの記事を参考に実装していきますね!
https://qiita.com/nkjm/items/38808bbc97d6927837cd

Line Bot 開発をする方は一緒にこのサイト参考にしてみてください!

LINEのBot開発・超入門(前編)

npm initコマンドでpackage.jsonファイルを作成します。

$ npm init --yes

package.jsonファイルを作成しようとした結果、下記のエラーが出ました。

dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.58.dylib

開発環境によって違うと思いますが、同じエラーが出た方はデバックしましょう。

デバック(その1)

npmをアップグレードしてみた!

$ brew upgrade npm

からの

$ npm init --yes
{
  "name": "{Your-app-name}",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

デバック出来ました:thumbsup:

参考:https://github.com/facebook/react-native/issues/18760

LINEのBot開発・超入門(前編)の続き

$ heroku login

Heroku CLI を使ってログインしようとすると

-bash: heroku: command not found

Herokuをインストールしましょ!(笑)

デバック(その2)

Heroku のインストールしましょ!

brew tap heroku/brew && brew install heroku

これでオッケーかと!

スクリーンショット 2019-09-23 18.45.05.png

無事ログイン出来ました!

参考:https://devcenter.heroku.com/articles/heroku-cli#download-and-install

LINEのBot開発・超入門(前編)の続き

Webhookが無効なHTTPステータスコードを返しました(期待されるステータスコードは200です)

ん?アクセスできない・・・?

デバック(その3)

ここからは、可能性を書いておきます!

  1. 環境変数の記入ミス
  2. URLにはしっかりあなたのアプリ名を記載

コンソールで

$ heroku logs

とやって、Linebotからの通信が来てるか確認すると
スクリーンショット 2019-09-23 20.56.02.png

上記のようにエラーは出てますがPOSTが確認できたら、コードの中身が間違えている可能性があります!

しっかり、参考のサイトと見比べてみてください!

完成したら、めっちゃ楽しい!

index.js
// -----------------------------------------------------------------------------
// モジュールのインポート
const server = require("express")();
const line = require("@line/bot-sdk"); // Messaging APIのSDKをインポート

// -----------------------------------------------------------------------------
// パラメータ設定
const line_config = {
    channelAccessToken: process.env.LINE_ACCESS_TOKEN, // 環境変数からアクセストークンをセットしています
    channelSecret: process.env.LINE_CHANNEL_SECRET // 環境変数からChannel Secretをセットしています
};

// -----------------------------------------------------------------------------
// Webサーバー設定
server.listen(process.env.PORT || 3000);

// APIコールのためのクライアントインスタンスを作成
const bot = new line.Client(line_config);

// -----------------------------------------------------------------------------
// ルーター設定
server.post('/bot/webhook', line.middleware(line_config), (req, res, next) => {
    // 先行してLINE側にステータスコード200でレスポンスする。
    res.sendStatus(200);

    // すべてのイベント処理のプロミスを格納する配列。
    let events_processed = [];

    // イベントオブジェクトを順次処理。
    req.body.events.forEach((event) => {
        // この処理の対象をイベントタイプがメッセージで、かつ、テキストタイプだった場合に限定。
        if (event.type == "message" && event.message.type == "text"){
            // ユーザーからのテキストメッセージが「こんにちは」だった場合のみ反応。
            if (event.message.text == "もう9月も終わりだね・・・"){
                // replyMessage()で返信し、そのプロミスをevents_processedに追加。
                events_processed.push(bot.replyMessage(event.replyToken, {
                    type: "text",
                    text: "でも給料日だったりするんでしょ!"
                }));
            }
            if (event.message.text == "ゴーファー君!"){
                // replyMessage()で返信し、そのプロミスをevents_processedに追加。
                events_processed.push(bot.replyMessage(event.replyToken, {
                    type: "text",
                    text: "僕ってかわいいでしょ!!"
                }));
            }
            if (event.message.text == "トビタテ!"){
                // replyMessage()で返信し、そのプロミスをevents_processedに追加。
                events_processed.push(bot.replyMessage(event.replyToken, {
                    type: "text",
                    text: "留学ジャパン!!!"
                }));
            }
        }
    });

    // すべてのイベント処理が終了したら何個のイベントが処理されたか出力。
    Promise.all(events_processed).then(
        (response) => {
            console.log(`${response.length} event(s) processed.`);
        }
    );
});

実際のbotで試した際の結果

70601660_2415877818628464_8686956734985535488_n.jpg

感想

LINEのBotってこんなに簡単に作れるんやな!と感動しました!!
LINEBOTの世界に足を突っ込んだので、こっからサービス用に改良していきます〜。
リリースしたら報告しますね☆彡

参考になった方も、ならなかった方も、ぜひ良いね!
お願いします!ではでは!!!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away