LoginSignup
7
1

More than 5 years have passed since last update.

LINEをやめた僕がLINE botで再降臨した話

Posted at

前書き

色々な理由があって、去年僕はLINEをやめました。
普段の仕事はFBやSlackで連絡を取っているので特に困ったことはなかったのですが、この4月に大学院に入学した僕は、久しぶりにLINEの洗礼に遭いました。
同期のLINEグループが誕生したのです。

『『『ソウダ、ダイガクセイ、LINEデレンラク、トリガチ』』』

どうしてもLINEを作りたくなかった反面、同期のLINEグループで流れる情報が入ってこないと、灰色の2年間を過ごすことは確実。

LINE WORKSじゃダメなの?

結論:ダメでした。

bot作り始めた時に気づいたのですが、LINE WORKSっていうのもあるんですね。知らなかった。

「プライベートも確保できそうだし、これならbotなんか作らなくていいじゃん!!」
と思ったのですが、

ドキュメント(以下抜粋)を読むと、
Screenshot 2019-04-10 04.35.51.png

とある通り、一般のLINEユーザーの作ったグループに入ることは仕様上、できませんでした。
残念。 しょうがない、bot作るか。

ゴール

  • LINEアカウントは作りたくない
  • 連絡を読めるだけでよい(投稿はできなくていい)
  • とりあえず、テキストだけでよい(画像とかは後々対応)
  • 同期のLINEグループに誰かが投稿したら、{{投稿者}} : {{内容}} という形式で、大学から配布されたメールアドレスに送られる

作戦

  • botにwebhookがきたらIFTTTにその内容をwebhookで送る
  • IFTTTでwebhookを受けたら指定したアドレスにメールで送るようにする

実装(抜粋)

app.js
const line = require('@line/bot-sdk');
const app = require('express')();
const { sendEmail } = require('./utils');
const { channelAccessToken, channelSecret } = process.env;
const config = {
  channelAccessToken,
  channelSecret
};

console.log("App started");
app.post('/webhook', line.middleware(config), async (req, res) => {
  await Promise
    .all(req.body.events.map(handleEvent))
    .then(() => {
      console.log('writing http header');
      res.writeHead(200);
      res.end();
      console.log('sent http response');
    })
    .catch(console.error)
});

const client = new line.Client(config);
function handleEvent(event) {
  return new Promise((resolve, reject) => {
    if (event.type !== 'message' || event.message.type !== 'text') {
      resolve(null);
    }
    console.log("Message received: ", event.message.text);

    console.log('event', event);
    client.getProfile(event.source.userId)
      .then(user => {
        console.log('user', user);
        const userName = user.displayName;
        return sendEmail(userName, event.message.text)
      })
      .then(resolve)
      .catch(reject);
  });
}

const PORT = process.env.PORT || 3000;
app.listen(PORT);

sendEmail関数でIFTTTにwebhookを投げています。
シンプル!

herokuにデプロイして、環境変数でアクセストークンを渡して、LINE botのコンソールでデプロイしたherokuアプリのurlをwebhookに設定すればOK!

結果

そもそも、LINEのアカウントを作らずにLINE botを作ることが無理でした
しかたがないので、開発のためにLINEアカウントを作り、誰からも追加できない設定にしました。

LINEアカウントを持っているのに、LINEで連絡をしたくない
というねじれが発生しましたが、無事に実装はできました。
うん。いいんです。これで(きっと)

ともかく、

IMG_2107.PNG

こんな感じでbotにメッセージを送ると、

Screenshot 2019-04-10 04.56.09.png

無事にメールで受け取れるようになりました。
タイムラグは30秒ぐらいなので、全然、許容範囲。

これで、「お前の席ねえから!」を免れることができました。

楽しいキャンパスライフを送りたいですね!🌸

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1