前書き
色々な理由があって、去年僕はLINEをやめました。
普段の仕事はFBやSlackで連絡を取っているので特に困ったことはなかったのですが、この4月に大学院に入学した僕は、久しぶりにLINEの洗礼に遭いました。
同期のLINEグループが誕生したのです。
『『『ソウダ、ダイガクセイ、LINEデレンラク、トリガチ』』』
どうしてもLINEを作りたくなかった反面、同期のLINEグループで流れる情報が入ってこないと、灰色の2年間を過ごすことは確実。
LINE WORKSじゃダメなの?
結論:ダメでした。
bot作り始めた時に気づいたのですが、LINE WORKSっていうのもあるんですね。知らなかった。
「プライベートも確保できそうだし、これならbotなんか作らなくていいじゃん!!」
と思ったのですが、
ドキュメント(以下抜粋)を読むと、
とある通り、一般のLINEユーザーの作ったグループに入ることは仕様上、できませんでした。
残念。 しょうがない、bot作るか。
ゴール
- LINEアカウントは作りたくない
- 連絡を読めるだけでよい(投稿はできなくていい)
- とりあえず、テキストだけでよい(画像とかは後々対応)
- 同期のLINEグループに誰かが投稿したら、
{{投稿者}} : {{内容}}
という形式で、大学から配布されたメールアドレスに送られる
作戦
- botにwebhookがきたらIFTTTにその内容をwebhookで送る
- IFTTTでwebhookを受けたら指定したアドレスにメールで送るようにする
実装(抜粋)
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で連絡をしたくない
というねじれが発生しましたが、無事に実装はできました。
うん。いいんです。これで(きっと)
ともかく、
こんな感じでbotにメッセージを送ると、
無事にメールで受け取れるようになりました。
タイムラグは30秒ぐらいなので、全然、許容範囲。
これで、「お前の席ねえから!」を免れることができました。
楽しいキャンパスライフを送りたいですね!🌸