はじめに
LINE Botを開発する際、特定のメンバーのみにサービスを提供したい場合があります。
そのような場合、LINEグループを活用することで、アクセス制限を簡単に実装することができます。
この記事では、Google Apps Scriptを使用して、特定のLINEグループからのメッセージにのみ反応するBotの実装方法を紹介します。
実装の概要
仕組みとしては単純で、Webhookで呼び出された時に特定のLINEグループのみに反応するようにするだけです。
グループIDが必要なのでまずグループID確認用の実装を行い、その後で取得したグループIDを利用してbotを実装します。
1. グループIDを取得するBot
まず、グループIDを取得するためのBotを実装します。以下のコードは、グループ内で「グループID」というメッセージを受け取ったときに、そのグループのIDを返信する実装です:
// LINE Messaging APIの設定
const CHANNEL_ACCESS_TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN';
function doPost(e) {
const events = JSON.parse(e.postData.contents).events;
events.forEach(event => {
if (event.type === 'message' && event.message.type === 'text') {
if (event.message.text === 'グループID') {
const groupId = event.source.groupId;
replyMessage(event.replyToken, `このグループのIDは: ${groupId} です。\nこのIDを使用して、このグループからのメッセージにのみ反応するように設定します。`);
}
}
});
return ContentService.createTextOutput(JSON.stringify({ 'status': 'success' }))
.setMimeType(ContentService.MimeType.JSON);
}
このスクリプトをGASにデプロイしたうえでWebhookに設定し、公式アカウントを含むグループで"グループID"と発話するとグループIDを返信してくれます。
2. グループからのメッセージにのみ反応するBot
取得したグループIDを使用して、特定のグループからのメッセージにのみ反応するBotを実装します。
以下のコードは、指定されたグループからのメッセージをそのグループへ鸚鵡返しする実装例です
// LINE Messaging APIの設定
const CHANNEL_ACCESS_TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN';
// 許可されたグループID
const ALLOWED_GROUP_ID = 'YOUR_GROUP_ID';
function doPost(e) {
const events = JSON.parse(e.postData.contents).events;
events.forEach(event => {
if (event.type === 'message' && event.message.type === 'text') {
// グループからのメッセージかチェック
if (event.source.type === 'group' && event.source.groupId === ALLOWED_GROUP_ID) {
// メッセージを鸚鵡返し
const messageText = event.message.text;
replyMessage(event.replyToken, messageText);
}
}
});
return ContentService.createTextOutput(JSON.stringify({ 'status': 'success' }))
.setMimeType(ContentService.MimeType.JSON);
}
設定手順
LINE Developersコンソールで以下の設定を行います:
チャネルアクセストークンを取得
公式アカウントがグループに参加するのを許可しておく
Webhook URLを設定(Google Apps ScriptのデプロイURL)
Google Apps Scriptで以下の設定を行います:
スクリプトをデプロイし、Webアプリケーションとして公開
アクセス権限を「全員(匿名を含む)」に設定
使用方法
LINEグループにBotを招待
グループ内で「グループID」とメッセージを送信してIDを取得
取得したIDをALLOWED_GROUP_IDに設定
メリット
アクセス制限が簡単: グループIDによる制限で、特定のグループのメンバーのみがBotを利用できます。
管理が容易: グループのメンバー管理はLINEの機能を使用できるため、独自のユーザー管理システムを実装する必要がありません。
注意点
グループID等は公開しないように注意してください。
グループのメンバーがBotの利用を希望する場合は、Botをグループに招待する必要があります。
まとめ
たまたま便利そうなLINE Botの話題を目にしたのですが、「これっておそらく自分だけとか仲間内だけで使うBotなんだろうけど、公式アカウントに知らない人が登録されちゃったらその人にも使えてしまうのではないか?」と不安になったのでどうすればいいか考えてみました。