コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

そうだLINE BOTつくろう!

しぶしぶLINEを始めた僕なんですが僕の個人情報をLINEに垂れ流すだけに使うのももったいないと思ったのでLINE BOTつくります。

はい、おはようございます。僕です。皆さんはLINEって活用してますか?僕は全然してないです。全然してないのに僕の個人情報をLINEに垂れ流し続けるのはしゃくなのでLINE BOTを意味もなく作ることにします。

API 参考
LINE Developers
ここの「Messaging API」ってやつ使うとサクッとボット作れるらしい。詳細はこれから作るので知らない。LINEボット、API叩いて呼ぶだけのものだと思ってるのでなんとかなるんじゃねみたいな気持ちで作っていきます。

登録しよう

LINE Developers
まずはこちらに登録します。別に開発とか興味なくても登録しておけば "Developer" 名乗れるのでみんなも登録しよう!

f:id:andron:20191118230755p:plainf:id:andron:20191118230805p:plain
登録したら「プロバイダー」を作成して、「チャンネル」を作成しよう。

これでボットの準備できました。アクセストークンとか適宜いじっていくとしてコード書きます。

f:id:andron:20191119020755p:plain
Webhook URLがSSLでないとダメとか怒られるので、確認にngrok辺りを使っていきます。

関連記事:ngrokについて
inujini.hatenablog.com



コードをかこう

準備できたので、以下のやつ(NodeJS用開発キット)を使ってだらだらコードを書いていきます。
GitHub - line/line-bot-sdk-nodejs: LINE Messaging API SDK for Node.js

導入

$ npm install @line/bot-sdk --save

んで、「落としてきたけど使い方わかんねw」とか嘆いていたらサンプルあった。
■ オウム返しbot サンプル
line-bot-sdk-nodejs/examples/echo-bot at master · line/line-bot-sdk-nodejs · GitHub

'use strict';

const express = require('express');    // 要「express」
const line = require('@line/bot-sdk'); // 要「line-bot-sdk」

const port = process.env.PORT || 3000;

const config = {
    channelSecret: process.env.CHANNEL_ACCESS_TOKEN,
    channelAccessToken: process.env.CHANNEL_SECRET, 
};
const client = new line.Client(config);

const app = express();


// webhook利用:https://****/webhook
app.post('/webhook', line.middleware(config), (req, res) => {
    Promise
      .all(req.body.events.map(handleEvent))
      .then((result) => res.json(result));
});

// メッセージイベント参照
// https://developers.line.biz/ja/reference/messaging-api/#message-event
function handleEvent(event) {
  if (event.type !== 'message' || event.message.type !== 'text') {
    return Promise.resolve(null);
  }

  // reply API
  return client.replyMessage(event.replyToken, {
    type: 'text',
    text: event.message.text
  });
}

// ポートをリッスン
app.listen(port, () => {
    console.log(`Server running at ${port}`);
});

Express*1が推奨なのかよくわかんないけど、それ使ってるんでそのままそれで書きます。あとprocess.env.CHANNEL_ACCESS_TOKENあたりの部分は確認用ってことでまだべた書きした状態です。まあその辺り実運用でなんとかします。これでコードの方は完成です(何もいじってないw)。

動かしてみよう

そういうわけで動かしてみます。管理画面の「チャンネル基本設定」->「Bot情報」のところにQRコードあるんでそこから確認します。あ、サーバ動いてないと動かないので「https://****」で登録したサーバが動いている状態にしておきます。

んで、確認するとこうです。
f:id:andron:20191119030850p:plain
オウム返しbotできましたー。とりあえず動くの確認できたのであとはイベントハンドラにごりごり中身をつけていけば君だけの最強botの完成です!お疲れ様でした。


さて、ngrokはあくまで確認用で長時間使うものでないので、本番環境を探さないといけません。んで、本番環境はここでいけそう。
https://zeit.co/

アクセストークンとかその手のやつは死ぬほど公開したくないなーって思ってたんだけどこいつがあったのでこれでいける。
https://zeit.co/docs/v1/getting-started/secrets
というかこんな機能あったんですね。昔つくったゴミアプリもこれ使って公開できそう……けど何作ったか覚えてない……。


まあいいや。そんなわけでとりあえず確認出来たので今後は僕がこれから作るLineスタンプ販促botを作っていこうと思います。

ojichat.js - npm
ただこのような邪悪なものを見つけてしまったので、僕の願いが叶うかは不明。いや、ちゃんと作りますって……。

おまけ

LINEスタンプ進捗こんな感じです。
f:id:andron:20191119035150p:plain
やる気はあるんでしょうか……?言い訳させてもらいますとこんなBOTの作り方記事に時間かけなければいけたんですって……。