LINEで特定グループのメンションをスプレッドシートに自動記録する方法

はじめに
LINEを業務チャットの一部として活用する際、複数グループから特定のメンションだけを抜き出し、あとで振り返りや集計を行いたい場面があります。
本記事では、Google Apps Script(GAS)を用いて、LINEの指定したグループ内でBot宛に飛んできたメンションだけを自動でスプレッドシートに記録する仕組みを構築する方法をご紹介します。
手順をひとつずつ丁寧に解説していきますので、ぜひ最後までお付き合いください。
スクリプト概要
全体の流れ
今回の仕組みを実現するために、いくつか情報が必要になります。
- チャネルアクセストークンの取得
- 今回はLINE Messaging APIを利用するため、利用にあたって「チャネルアクセストークン」の発行が必要になります。
- ユーザIDの取得
- 誰に対してのメンションを記録するか判断するために、ユーザIDの取得が必要になります。
- グループIDの取得
- どのグループに対するメンションを記録するか判断するために、該当グループのGroupIDの取得が必要になります。
利用手順
ステップ1:LINE公式アカウントの設定(Messaging APIの準備)
- LINE Official Account Managerにアクセスして自身のアカウントでログインします。個人の利用であれば「LINEアカウントでログイン」で問題ありません。
- 「アカウントタブ」より「作成」をクリックし新規アカウントを作成します。
- アカウント名:お好み(例:「通知アカウント」など)
- メールアドレス:任意
- 業種:個人
- 運用目的:その他
- 主な使い方:メッセージ配信用
- 各種同意画面に従い、「同意」を選択。
- 作成完了後、LINE公式アカウントが使用可能になります。
- LINE Official Account Managerで作成したアカウントにログインします。
- 画面右上の「設定」をクリック。
- 左メニューの「Messaging API」を選択。
- 「Messaging APIを利用する」をクリック
- プロバイダーを選択 → 「同意する」。
- プライバシーポリシー、利用規約は空欄のまま「OK」をクリック。
- 「OK」をクリックし、[Channel ID]と[Channel Secret]が表示されていることを確認します。
- LINE Developersにアクセスし、「コンソールにログイン」をクリック。前ステップで選択したプロバイダーを選択します。
- 前ステップで作成したアカウントを選択します。
- 上部バーから「Messaging API設定」をクリック。
- ページ下部の「チャネルアクセストークン」を発行してコピーします。(後で使用します)。
ステップ2:Google Apps Scriptで通知スクリプトを作成する

今回はスプレッドシートと紐づく形でGASを作成していますが、Apps Script単体で作成しても問題ありません。
- Googleスプレッドシートを開き、新規でスプレッドシートを作成します。
- 上部メニュー「拡張機能」 → 「Apps Script」をクリック。新しいタブでGoogle Apps Scriptのエディタが開きます。
- もともと記載してあるmyfunctions{}は削除し、以下のコードをコピー&ペーストしてください。
- コード2行目の
const ACCESS_TOKEN = 'YOUR_ACCESS_TOKEN';
のYOUR_ACCESS_TOKEN
部分を、
前ステップの最後でコピーしたチャネルアクセストークンに置き換えます。
(シングルクォーテーション' '
はそのままです) - 上部メニューの「保存」ボタンをクリックして、プロジェクトを保存します。
// === 設定ここから ===
const ACCESS_TOKEN = '<発行したChannel Access Tokenを貼り付け>';
const BOT_USER_ID = '<BotのUser IDを貼り付け>';
const TARGET_GROUP_IDS = ['<監視したいGroup_IDをカンマ区切りで列挙>'];
// === 設定ここまで ===
function doPost(e) {
let payload;
try {
payload = JSON.parse(e.postData.contents);
} catch (err) {
return ContentService.createTextOutput('OK');
}
if (!payload.events || payload.events.length === 0) {
return ContentService.createTextOutput('OK');
}
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
payload.events.forEach(event => {
const src = event.source;
const replyToken = event.replyToken;
const msg = event.message;
const text = msg && msg.type === 'text' ? msg.text.trim() : '';
// ── グループ内処理 ──
if (src.type === 'group' && msg && msg.type === 'text') {
// (1) 「group id」コマンドは常に先に処理
if (/group id/i.test(text) && replyToken) {
replyText(replyToken, `あなたのGroup_IDは${src.groupId}です。`);
return; // このイベント処理を終了して次へ
}
// (2) Bot宛メンションは、TARGET_GROUP_IDS に含まれる場合のみ記録
if (TARGET_GROUP_IDS.includes(src.groupId) &&
msg.mention &&
Array.isArray(msg.mention.mentionees) &&
msg.mention.mentionees.some(m => m.userId === BOT_USER_ID)) {
sheet.appendRow([ new Date(), src.groupId, src.userId, text ]);
}
}
// ── 1:1トーク処理 ──
else if (src.type === 'user' && msg && msg.type === 'text' && replyToken) {
if (/my id/i.test(text)) {
replyText(replyToken, `あなたのUser_IDは${src.userId}です。`);
}
}
});
return ContentService.createTextOutput('OK');
}
/**
* replyToken を使ってメッセージを返信
*/
function replyText(replyToken, text) {
const payload = {
replyToken: replyToken,
messages: [{ type: 'text', text: text }]
};
UrlFetchApp.fetch('https://api.line.me/v2/bot/message/reply', {
method: 'post',
contentType: 'application/json',
headers: { Authorization: 'Bearer ' + ACCESS_TOKEN },
payload: JSON.stringify(payload)
});
}
ステップ3:グループID取得用ウェブアプリの作成
- 右上[デプロイ]>[新しいデプロイ]を選択します。
- 表示される画面上で、歯車マークをクリックし、[ウェブアプリ]を選択します。
- [アクセスできるユーザー]を全員に変更し、[デプロイ]をクリックします。
- [アクセスを承認]をクリックします。
- ログインしているGoogleアカウントをクリックします。
- [Advanced]をクリックします。
- [Go to 無題のプロジェクト(unsafe)]をクリックします。
- [Allow]をクリックします。
表示されるWebhook用の[WebアプリURL]をコピーしてください。
ステップ4:公式アカウントのグループ追加の許可設定
- LINE Developersに移動し[コンソールにログイン]をクリックします。
- 作成した公式アカウントをクリックします。
- 上部バーより「Messaging API設定」をクリックします。
- [LINE公式アカウント機能]>[グループトーク・複数人トークへの参加を許可する ]の[編集]をクリックします。
- 別タブが開き、[グループ・複数人トークへの参加を許可する]を選択します。タブは閉じても問題ありません。
- [Webhook設定]まで移動し、[編集]をクリックします。
- 前項でGASでコピーしたWebhook用のURL(WebアプリURL)を貼り付け、[更新]をクリックします。
- [LINE公式アカウント機能]>[応答メッセージ]の[編集]をクリックします。
- 別タブが開きます。[Webhook]をオン、[応答メッセージ]は必要に応じオフにしておきます。タブは閉じても問題ありません。
ステップ5:ユーザIDの取得
LINEを開き、作成した公式アカウントとの1:1トークルームに移動します。
トークルーム内にて[my id]とメッセージを送信してください。
正常に動作すると、ユーザIDが返されますのでコピーしてください。

取得したユーザIDはGASスクリプトのBOT_USER_IDの部分に入力し保存してください。

ステップ6:公式アカウントのグループ追加・グループIDの取得
LINEを開き、任意のグループに作成した公式アカウントを招待します。
グループに対し、[group id]とメッセージを送信します。送信するとグループIDが返信されます。

取得したグループIDはGASスクリプトのTARGET_GROUP_IDSの部分に入力し保存してください。

ステップ7:新しいバージョンでのGASデプロイ
ステップ3を参考に、IDを追加した更新版でGASの再デプロイを行います。
- GASエディタより、[デプロイ]>[新しいデプロイ]をクリックします。
- モーダルが表示されるため、[デプロイ]をクリックします。
- 表示される[Webアプリ]URLをコピーします。
ステップ4を参考に、発行された[Webアプリ]URLを再登録します。
- LINE Developersに移動し[コンソールにログイン]をクリックします。
- 作成した公式アカウントをクリックします。
- 上部バーより「Messaging API設定」をクリックします。
- [Webhook設定]まで移動し、[編集]をクリックします。
- 前項でGASでコピーしたWebhook用のURL(WebアプリURL)を貼り付け、[更新]をクリックします。
上記で設定は完了です。
あとはメンションがあると自動的メンション内容がスプレッドシートに記載されます。

スプレッドシートには[投稿日時][投稿されたグループID][投稿したユーザ][メンション内容]が記録されます。
注意点
- 全員に対するメンションは記載されません。
- 修正があった場合は都度GASをデプロイし直す必要があります。
まとめ
本記事では、LINEグループへのメンションを特定グループに絞り、Bot宛の会話だけをスプレッドシートに自動記録する方法を解説しました。