LINEのアンケートの作り方:リサーチ機能・Googleフォームと回答の使い方

公開 書いた人 大林 諒

LINE公式アカウントでアンケートを取る方法は、2026年10月時点で大きく変わる途中にあります。標準機能の「リサーチ」は2026年12月2日で終わり、それまでに段階的に使えなくなっていきます。この記事では、リサーチの代わりに何を使うかを決め、体験レッスンの感想アンケートを作って配り、回答した人と友だちを結びつけ、回答で次の配信を送り分けるところまでを一通り書きます。例はいつもの「サンプル料理教室」です。LINE公式アカウントの開設とリッチメニューの設定は済んでいる前提で進めます。

この記事の内容
  1. 個人のLINEの「投票」とは別物
  2. 先に決めること
  3. LINE公式アカウントで使えるアンケートの手段
  4. リサーチ機能の終了スケジュール
  5. Googleフォームで作り、LINEで配る
  6. 回答と友だちを結びつける
  7. サンプル料理教室の2つのアンケート
  8. 回答の集計
  9. 回答で送り分ける
  10. 応用
  11. できないことと、その代わり
  12. よく詰まるところ
  13. 次にやること

個人のLINEの「投票」とは別物

「line アンケート」で検索すると、グループトークの投票の作り方が一緒に出てきます。これは個人のLINEアプリの機能で、グループのトークルームで「+」から「投票」、「投票を作成」と進んで作るものです。サークルの日程調整や飲み会の出欠には便利ですが、LINE公式アカウントの友だちに配るアンケートとは仕組みがまったく違います。

教室の生徒をLINEグループに集めて投票を取る運用は、生徒同士に名前とアカウントが見えてしまいます。お客さんに配るアンケートは、この記事で書くLINE公式アカウント側の方法で作ります。混同しやすいのは、管理画面のメニューに「投票」という名前が無いことです。公式アカウント側では「リサーチ」やフォームという呼び方になります。

先に決めること

アンケートの道具を選ぶ前に、次の4つを決めておきます。ここが曖昧なまま作ると、回答が集まってから「誰の回答か分からない」「回答した人だけに送れない」で作り直しになります。

1つ目は、回答と友だちを結びつけるかどうかです。人気メニューの投票のように全体の傾向だけ知りたいなら、誰の回答かは要りません。体験レッスンの後に「入会を迷っている人にだけ案内を送る」なら、回答とLINEのユーザーを結びつける必要があります。サンプル料理教室の感想アンケートは後者です。

2つ目は、回答で送り分けるかどうかです。「次に受けたいレッスン」を聞いて、パンと答えた人にだけパン講座の日程を送るなら、回答をタグかオーディエンスに変える仕組みが要ります。

3つ目は、月額をかけられるかどうかです。無料の範囲で組むならGoogleフォームとMessaging APIの組み合わせになり、多少の設定作業が要ります。月額をかけてよいなら、CRMオプションや拡張ツールで画面操作だけで済みます。

4つ目は、今リサーチで動いているアンケートがあるかどうかです。あるなら、早めに移し先を決めます。回答の受け付けは11月18日に止まり、結果のダウンロードは12月2日にできなくなるので、それより前に済ませておきます。

LINE公式アカウントで使えるアンケートの手段

2026年10月時点で選べる手段を並べます。

手段費用友だちと結びつくか回答で送り分け向いている場面
リサーチ(標準機能)無料マニュアルに回答者を特定する機能の記載なしマニュアルに記載なし2026年12月2日に終了し、それまでに段階的に使えなくなる。新しく始めない
CRMオプションの「フォーム」月額5,000円(税別)から結びつくタグとユーザーリスト配信で可認証済アカウントで、画面操作だけで回したい
Googleフォームを配るだけ無料結びつかない不可匿名の満足度調査、全体の傾向を見る投票
Googleフォーム+Messaging API無料(配信通数は別)ユーザーIDを事前入力して結びつけるユーザーIDアップロードのオーディエンスで可無料で結びつけたいが、改ざんされても困らない用途
LIFFで作る自前のフォーム無料(作る手間あり)LINEのログインで確実に結びつく可(スプレッドシートやkintoneを経由)回答を顧客管理に残し、確実に本人と結びつけたい
拡張ツールの回答フォーム(Lステップなど)各社の月額結びつく可配信・タグ・予約まで一つのツールで回したい
L Harnessのフォームソフトは0円(Cloudflareなどの費用は別)結びつくタグ・メタデータ・セグメント配信で可拡張ツールと同じことを月額0円で自分で持ちたい

リサーチの代わりとして、LINEヤフーの学習サイト「LINEヤフーマーケティングキャンパス」は、LINEリサーチとCRMオプションの「フォーム」機能を挙げています。LINEリサーチは700万人以上のモニターに聞く有料の調査サービスで、自分の友だちに聞くアンケートとは用途が違います。サンプル料理教室のように自分の友だちに聞くなら、候補はCRMオプションから下の5つです。

リサーチ機能の終了スケジュール

リサーチはLINE Official Account Manager(管理画面)の「リサーチ」メニューから作る機能で、投票形式やアンケート形式のページを作ってメッセージで配れました。2026年12月2日(水)で機能が終わり、それに向けて「リサーチ」と「アカウント満足度調査」が段階的に使えなくなると公式に告知されています。管理画面のお知らせ(2026年10月時点)では、日程は次のとおりです。日程は変わることがあるとも書かれています。

日付止まること
2026年9月2日配信日時が11月18日以降のメッセージに、リサーチを入れた配信予約ができなくなる
2026年11月18日リサーチの新規作成・編集と、回答の受け付けが止まる
2026年12月2日回答結果の閲覧・ダウンロードが止まり、提供が終わる

終わりが1か月少し先に決まっている機能で新しいアンケートを始めると、回答が集まりきる前に作り直しになります。新しいアンケートはリサーチで作らず、この記事の後半の手段で作ります。

すでにリサーチを使っているなら、結果のダウンロードだけは早めに済ませます。手順は次のとおりです。

  1. 管理画面の「リサーチ」を開く
  2. 「リサーチ期間終了」のタブで対象のリサーチを選ぶ
  3. 結果をExcel形式でダウンロードする

回答が20件未満のリサーチはダウンロードできません。ダウンロードできるのは1ユーザー1行で最大50,000行です。20件に届かなかったリサーチは、結果画面をスクリーンショットで残しておきます。

Googleフォームで作り、LINEで配る

いちばん手早いのは、Googleフォームでアンケートを作り、そのURLをLINEで配る方法です。費用はかかりません。サンプル料理教室の「体験レッスンの感想アンケート」をこの方法で作ります。

フォームを作る

  1. ブラウザで forms.google.com を開く
  2. 「空白のフォーム」を選ぶ
  3. 「無題のフォーム」を「体験レッスンの感想アンケート|サンプル料理教室」に変える
  4. 1問目に「今日の体験レッスンの満足度」を「均等目盛」で作り、1〜5にする
  5. 2問目に「次に受けてみたいレッスン」を「ラジオボタン」で作り、「和食の基本」「パン」「中華」「お菓子」「まだ分からない」を入れる
  6. 3問目に「入会について」を「ラジオボタン」で作り、「入会したい」「迷っている」「今回は見送る」を入れる
  7. 4問目に「ご感想・ご要望」を「段落」で作り、必須を外す
  8. 右上の「公開」を押し、「一般的なアクセス」をリンクを知っている全員にして公開する
Googleフォームの編集画面。4問を作り終えた状態
Googleフォームの編集画面。4問を作り終えた状態

質問の数は4〜5問に抑えます。実際に運用していると、スマホで縦に長いフォームは途中で閉じられます。体験の直後に聞くアンケートは1分で終わる長さが目安です。

「回答を1回に制限する」は、オンにすると回答者にGoogleアカウントへのログインを求めることになります。LINEから開いた人の多くはそこで止まるので、教室のアンケートではオフのままにします。同じ理由で「ファイルのアップロード」の質問も使いません。こちらも回答にログインが要ります。

URLを取ってLINEで配る

  1. 右上の「公開済み」から「回答者に送信するリンクをコピー」を選ぶ
  2. 「URL を短縮」にチェックを入れて「コピー」を押す
  3. LINE公式アカウントのメッセージ配信やステップ配信、リッチメニューのリンクにURLを貼る

体験レッスンの当日夜にステップ配信で送るのが、サンプル料理教室の基本の形です。ステップ配信の起点は友だち追加なので、体験の予約と同時に友だちになった人なら、追加から数日後に自動で届く設定にできます。体験日が人によってばらつく場合は、レッスン後にスタッフが一斉配信で当日参加者に送るか、後で書く仕組みで個別に送ります。

回答をスプレッドシートで見る

  1. フォームの上部の「回答」を開く
  2. 右上の「Google スプレッドシートにエクスポート」のアイコンを押す
  3. 新しいスプレッドシートを作る
  4. 連携が済むと、同じ場所が「スプレッドシートで表示」という文字のリンクに変わる。次からはここを押すとシートが開く
フォームの「回答」タブ。連携が済んで「スプレッドシートで表示」の文字リンクが出ている状態
フォームの「回答」タブ。連携が済んで「スプレッドシートで表示」の文字リンクが出ている状態

これで回答が1行ずつスプレッドシートに入ります。「回答」画面のその他メニューから「新しい回答についてのメール通知を受け取る」をオンにしておくと、回答が来たときに教室のメールに通知が届きます。

この方法の限界

Googleフォームを配るだけでは、誰が回答したかが分かりません。LINEから開いても、フォーム側にはLINEのユーザーの情報が渡らないからです。名前を書く欄を足せば人は分かりますが、LINEの友だちと名前を手で突き合わせる作業が毎回残ります。LINEの表示名は本名と違うことが多く、突き合わせは思ったより当たりません。

匿名で全体の傾向を見るアンケートなら、ここまでで十分です。回答で送り分けたいなら、次の節のどれかで結びつけます。

回答と友だちを結びつける

結びつける方法は4つあります。無料で手早いのがGoogleフォームの事前入力、確実なのがLIFFの自前のフォーム、画面操作で済むのがCRMオプションとL Harnessです。

Googleフォームの事前入力URLにユーザーIDを入れる

Googleフォームには「フォームに事前入力する」という機能があり、回答欄に値を入れた状態のURLを作れます。ここにLINEのユーザーIDを入れて、本人にだけそのURLを返せば、回答の行にユーザーIDが残ります。ユーザーIDを知るには、公式アカウントでMessaging APIを有効にし、Webhookを受ける必要があります。

まずフォーム側の準備です。

  1. フォームの最後に「受付番号(変更しないでください)」という「記述式」の質問を足す
  2. 右上のその他メニューから「フォームに事前入力する」を選ぶ
  3. 受付番号の欄に TEST と入れて「リンクを取得」を押す
  4. コピーしたURLの中の entry.数字=TEST の部分を確かめる

次に、友だちから「体験の感想アンケート」という文字が届いたら、Webhookでその人のユーザーIDを入れたURLを返します。体験後のメッセージに「アンケートに答える方は『体験の感想アンケート』と送ってください」と書いておけば、送ってきた人にだけURLが返ります。Googleスプレッドシートに紐づけたApps Scriptで書くと次の形です。

const TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN';
const FORM_URL = 'https://docs.google.com/forms/d/e/YOUR_FORM_ID/viewform?usp=pp_url&entry.123456789=';

function doPost(e) {
  const body = JSON.parse(e.postData.contents);
  body.events.forEach(function (ev) {
    if (ev.type !== 'message' || ev.message.type !== 'text') return;
    if (ev.message.text !== '体験の感想アンケート') return;
    const url = FORM_URL + encodeURIComponent(ev.source.userId);
    UrlFetchApp.fetch('https://api.line.me/v2/bot/message/reply', {
      method: 'post',
      contentType: 'application/json',
      headers: { Authorization: 'Bearer ' + TOKEN },
      payload: JSON.stringify({
        replyToken: ev.replyToken,
        messages: [{ type: 'text', text: '体験レッスンの感想をお聞かせください。1分ほどで終わります。\n' + url }]
      })
    });
  });
  return ContentService.createTextOutput('ok');
}

entry.123456789 は手順4で確かめた番号に置き換えます。このスクリプトをウェブアプリとしてデプロイし、そのURLをLINE DevelopersのMessaging APIチャネルのWebhook URLに入れます。応答メッセージ(reply)で返すので、メッセージ通数にカウントされません。

LINE Developersコンソールの「Messaging API設定」タブ。Webhook URLの欄
LINE Developersコンソールの「Messaging API設定」タブ。Webhook URLの欄

この方法には弱点が2つあります。受付番号の欄は回答者に見えていて、書き換えられます。URLを他人に転送されると、別の人の回答がその人のユーザーIDで入ります。教室の感想や次に受けたいレッスンのように、書き換えられても実害が小さい用途に限って使います。入会の申込や個人情報を集めるフォームには使いません。

LIFFで自前のフォームを作る

確実に本人と結びつけたいなら、LIFF(LINE Front-end Framework)でフォームを作ります。LIFFはLINEの中でウェブページを開く仕組みで、開いた人のLINEのユーザーIDを、ログイン画面なしで取れます。LIFFアプリはMessaging APIチャネルではなくLINEログインチャネルに追加します。LINEログインチャネルは、公式アカウントのMessaging APIチャネルと同じプロバイダーに作ります。ユーザーIDはプロバイダーごとに違う値になるので、別のプロバイダーに作ると、公式アカウントの友だちと突き合わせられません。

LINE Developersの案内では、LIFFとLINEミニアプリはブランド統合が予定されていて、新しく作るならLINEミニアプリとして作ることが勧められています。どちらにするかは別の記事「LINEミニアプリとLIFF:何が違い、自社に要るか」で書いています。ここでは仕組みが同じLIFFで書きます。

手順は次のとおりです。

  1. LINE Developersコンソールで、公式アカウントと同じプロバイダーにLINEログインチャネルを作る
  2. チャネルの「LIFF」タブで「追加」を押す
  3. サイズを「Tall」、Scopeで openid と profile を選ぶ
  4. エンドポイントURLにフォームのページのURLを入れて「追加」を押す
  5. 発行されたLIFF IDを控える
LINE Developersコンソールの「LIFF」タブ。LIFFアプリの追加画面
LINE Developersコンソールの「LIFF」タブ。LIFFアプリの追加画面

フォームのページはこう書きます。回答と一緒にIDトークンを送り、受け取った側で検証してからユーザーIDを取り出します。LIFFの中で取ったユーザーIDをそのままサーバーに送るのは、公式に止められているやり方です。

<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script charset="utf-8" src="https://static.line-scdn.net/liff/edge/2/sdk.js"></script>
</head>
<body>
<form id="f">
  <p>今日の体験レッスンの満足度</p>
  <label><input type="radio" name="score" value="5" required>とても満足</label>
  <label><input type="radio" name="score" value="3">ふつう</label>
  <label><input type="radio" name="score" value="1">不満</label>
  <p>次に受けてみたいレッスン</p>
  <select name="next">
    <option>和食の基本</option><option>パン</option><option>中華</option><option>お菓子</option><option>まだ分からない</option>
  </select>
  <p>ご感想・ご要望</p>
  <textarea name="comment"></textarea>
  <button type="submit">送信する</button>
</form>
<script>
const GAS_URL = 'https://script.google.com/macros/s/YOUR_DEPLOY_ID/exec';
liff.init({ liffId: 'YOUR_LIFF_ID' });
document.getElementById('f').addEventListener('submit', async function (e) {
  e.preventDefault();
  const fd = new FormData(e.target);
  await fetch(GAS_URL, {
    method: 'POST',
    mode: 'no-cors',
    body: JSON.stringify({
      idToken: liff.getIDToken(),
      score: fd.get('score'),
      next: fd.get('next'),
      comment: fd.get('comment')
    })
  });
  alert('ご回答ありがとうございました');
  liff.closeWindow();
});
</script>
</body>
</html>

受け取る側のApps Scriptです。回答用のスプレッドシートに「回答」というシートを作り、そのスプレッドシートからスクリプトを開いて貼ります。

const CHANNEL_ID = 'YOUR_LINE_LOGIN_CHANNEL_ID';

function doPost(e) {
  const d = JSON.parse(e.postData.contents);
  const res = UrlFetchApp.fetch('https://api.line.me/oauth2/v2.1/verify', {
    method: 'post',
    payload: { id_token: d.idToken, client_id: CHANNEL_ID },
    muteHttpExceptions: true
  });
  if (res.getResponseCode() !== 200) return ContentService.createTextOutput('ng');
  const user = JSON.parse(res.getContentText());
  SpreadsheetApp.getActive().getSheetByName('回答')
    .appendRow([new Date(), user.sub, user.name, d.score, d.next, d.comment]);
  return ContentService.createTextOutput('ok');
}

user.sub がユーザーIDです。client_id に入れるのは、LIFFを追加したLINEログインチャネルのチャネルIDです。ページを置く場所は、HTTPSで公開できればどこでも構いません。LIFFのURL(https://liff.line.me/ で始まるもの)をリッチメニューやメッセージに貼れば、LINEの中でフォームが開きます。

LINEアプリでLIFFのアンケートを開いたところ(サンプル料理教室の3問)
LINEアプリでLIFFのアンケートを開いたところ(サンプル料理教室の3問)

CRMオプションのフォームを使う

画面操作だけで済ませたいなら、LINE公式アカウントのCRMオプションに「フォーム」があります。2026年10月時点で月額5,000円(税別)、チャットProオプションの機能も含まれます。申し込めるのは、管理者権限のあるユーザーで、認証済のLINE公式アカウントが認証済のビジネスマネージャーと接続していて、友だちが10万人未満のアカウントです。レストランオプションやBeautyオプションを契約しているアカウント、一部の特別なプランや業種カテゴリーのアカウントは申し込めません。チャットProオプションを契約中なら、先に解約してから申し込みます。購入と利用はWeb版の管理画面だけで、管理アプリでは使えません。

申し込みは管理画面の「設定」から「利用と請求」、「拡張オプション」、「CRMオプション」と進みます。フォームの作成は次の手順です。

  1. 「顧客管理」から「フォーム」を開き、「作成」を押す
  2. タイプで「自由設定フォーム」を選ぶ
  3. 「基本設定」でタイトル、説明文、回答期間を入れて「次へ」を押す
  4. 「質問設定」で質問を足し、回答形式を選んで「次へ」を押す
  5. 「タグ設定」で、選択肢ごとに付けるタグを決める
  6. 「公開」を押す

回答形式は短文、長文、ラジオボタン、プルダウン、チェックボックス、日付、評価(10段階)です。「次に受けてみたいレッスン」をラジオボタンにして、「パン」を選んだ人に「興味:パン」のタグを付ける、という設定がそのままできます。タグは先に「顧客管理」の「設定」から「タグ」で作っておきます。回答は友だちごとにユーザーリストに残るので、そのタグでユーザーリスト配信を絞り込めます。

注意点がいくつかあります。公開中のフォームは質問や回答期間を直せず、直せるのはタグ設定と顧客情報の更新設定だけです。直したいときはコピーして作り直します。選択式の質問に「その他」の自由入力欄は付けられないので、次の質問に自由記述を足します。集計は1日1回で、回答直後には数字に出ません。

L Harnessのフォームを使う

拡張ツールの回答フォームと同じことを月額0円で持ちたいなら、オープンソースのL Harness(GitHub Shudesu/line-harness-oss、MITライセンス)にLIFFのフォームがあります。フォームの送信時にタグを付ける、シナリオ(ステップ配信)に登録する、回答を友だちのメタデータに保存する、の3つを設定できます。メタデータに保存した値は、セグメント配信の条件にそのまま使えます。

動かすにはCloudflareのアカウント、Messaging APIチャネル、LIFFアプリが要り、ソフトの利用料は0円でも、配信料金やCloudflareの利用量、導入と保守の手間は自分持ちです。教室の例で予約やステップ配信と一緒に組む手順は「L Harnessで予約・フォーム・ステップ配信を組む:教室の例で一通り」で書いています。

Lステップなどの拡張ツールにも回答フォームがあり、LINEログインで友だちと結びつき、回答に応じたタグ付けやシナリオ配信までできます。予約・配信・タグを一つの画面で、サポート付きで回したい会社には、月額を払う価値があります。

サンプル料理教室の2つのアンケート

サンプル料理教室では、アンケートを2種類に分けています。目的が違うものを1つにまとめると、どちらの質問も中途半端になるからです。

体験レッスンの感想アンケート次に受けたいレッスンのアンケート
送る相手体験レッスンに来た人入会済みの生徒全員
送るタイミング体験当日の夜3か月に1回
質問満足度、入会について、次に受けたいレッスン、感想受けたいレッスン(複数選択)、通いやすい曜日と時間帯
結びつけ必要(入会の案内を送り分けるため)あれば便利(新講座の案内を送り分ける)
使う手段LIFFのフォームかCRMオプションGoogleフォームの事前入力でも足りる
回答のあと「迷っている」人にだけ入会特典の案内票の多い講座を次の月に開講し、選んだ人に先に案内

体験の感想アンケートでは、「入会について」の質問が要です。「入会したい」と答えた人にはスタッフから入会手続きの案内を送り、「迷っている」人には体験参加者向けの特典の案内をステップ配信で送り、「今回は見送る」人には何も送らない、と回答で3つに分けます。見送ると答えた人に入会の案内を送り続けると、ブロックされるきっかけになります。

回答の集計

集計はスプレッドシートで十分です。LIFFのフォームで「回答」シートに貯めた場合、別のシートに次の式を置くと、次に受けたいレッスンの票数が出ます。

=QUERY(回答!A:F, "select E, count(E) where E is not null group by E order by count(E) desc label count(E) '票数'", 1)

最後の引数の 1 は、「回答」シートの1行目を見出しとして扱う指定です。1行目に「日時」「ユーザーID」「表示名」「満足度」「次のレッスン」「感想」と見出しを入れておきます。

満足度の平均は =AVERAGE(回答!D:D) で出ます。Googleフォームの場合は、「回答」タブの「概要」に質問ごとのグラフが自動で出るので、まずそれを見ます。

スプレッドシートでレッスンごとの票数を出した表
スプレッドシートでレッスンごとの票数を出した表

CRMオプションのフォームは、フォーム詳細の「回答結果を確認」から「集計」と「回答者一覧」を見られ、「ダウンロード」でCSVに出せます。選択肢ごとの回答数と割合、回答開始数と回答完了数が出るので、途中で離脱した人の多さも分かります。

回答で送り分ける

回答をもとに配信を分ける方法は、使った手段で決まります。

使った手段送り分けの方法手間
Googleフォームの事前入力、LIFFの自前フォーム回答のユーザーIDをCSVにして、管理画面の「ユーザーIDアップロード」でオーディエンスを作る配信のたびにCSVを作る
同上Messaging APIのマルチキャストで、回答のユーザーIDに直接送るスクリプトを一度書けば自動
CRMオプションのフォーム回答で付いたタグでユーザーリスト配信を絞り込む画面操作のみ
L Harnessのフォームメタデータやタグを条件にセグメント配信画面操作のみ
標準のチャットのタグスタッフが手でタグを付け、チャットタグのオーディエンスで配信1人ずつ手作業

ユーザーIDアップロードの手順は次のとおりです。

  1. スプレッドシートで「入会について」が「迷っている」の行を絞り込む
  2. ユーザーIDの列だけをコピーし、1行1IDのテキストファイルかCSVにする
  3. 管理画面の「データ管理」から「オーディエンス」を開き、「作成」を押して「ユーザーIDアップロード」を選ぶ
  4. ファイルを選んでアップロードし、名前を「体験後_迷っている」にして保存する
  5. メッセージ配信の配信先で「オーディエンス」を選び、作ったオーディエンスを指定する
「オーディエンス」の作成画面で「ユーザーIDアップロード」を選んだところ
「オーディエンス」の作成画面で「ユーザーIDアップロード」を選んだところ

ファイルにはユーザーIDだけを入れます。同じIDが重複していたり、形式が違うIDが混じっていたりすると作成に失敗します。

毎回CSVを作るのが面倒なら、マルチキャストで直接送ります。Apps Scriptで書くと次の形です。

function sendToUndecided() {
  const rows = SpreadsheetApp.getActive().getSheetByName('回答').getDataRange().getValues();
  const ids = rows.filter(function (r) { return r[6] === '迷っている'; }).map(function (r) { return r[1]; });
  if (ids.length === 0) return;
  UrlFetchApp.fetch('https://api.line.me/v2/bot/message/multicast', {
    method: 'post',
    contentType: 'application/json',
    headers: { Authorization: 'Bearer YOUR_CHANNEL_ACCESS_TOKEN' },
    payload: JSON.stringify({
      to: ids.slice(0, 500),
      messages: [{ type: 'text', text: '体験レッスンにお越しいただいた方へ、入会特典のご案内です。' }]
    })
  });
}

この例は「回答」シートのG列に「入会について」を足した前提です。マルチキャストは、送った人数ぶんメッセージ通数にカウントされます。無料のコミュニケーションプランは2026年10月時点で月200通までなので、体験の人数が多い月は通数を先に数えます。

いちばん手がかからないのは、回答が届いた瞬間にオーディエンスへ足し、そのオーディエンスを起点にステップ配信を走らせる形です。ステップ配信は開始条件にオーディエンスを選べて、後からオーディエンスに加わった人も対象になります。Messaging APIには、ユーザーIDアップロード用のオーディエンスを作るAPIと、そこにユーザーIDを足すAPIがあります。ステップ配信の開始条件には、Messaging APIで作ったオーディエンスも指定できます。

  1. 次のcurlで「体験後_迷っている」のオーディエンスを、自分のユーザーID1件を入れて作る(空のオーディエンスは配信に使えない)
  2. 返ってきた audienceGroupId の数字を控える
  3. ステップ配信を作り、開始条件で「オーディエンス」を選んで「体験後_迷っている」を指定する
  4. 1通目に入会特典の案内、2通目(3日後)に次の体験日程を入れて配信を開始する
curl -X POST https://api.line.me/v2/bot/audienceGroup/upload \
  -H 'Authorization: Bearer YOUR_CHANNEL_ACCESS_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"description":"体験後_迷っている","audiences":[{"id":"YOUR_USER_ID"}]}'

返ってくるJSONの audienceGroupId が、次のコードで使う番号です。自分のユーザーIDは、LINE Developersコンソールのチャネルの「チャネル基本設定」タブで確かめられます。

ステップ配信の開始条件で「オーディエンス」を選んだところ
ステップ配信の開始条件で「オーディエンス」を選んだところ

LIFFのフォームを受け取るApps Scriptの appendRow の後ろに、次の関数の呼び出しを足します。

const AUDIENCE_ID = 1234567890123;

function addToUndecided(userId) {
  UrlFetchApp.fetch('https://api.line.me/v2/bot/audienceGroup/upload', {
    method: 'put',
    contentType: 'application/json',
    headers: { Authorization: 'Bearer YOUR_CHANNEL_ACCESS_TOKEN' },
    payload: JSON.stringify({
      audienceGroupId: AUDIENCE_ID,
      uploadDescription: 'survey',
      audiences: [{ id: userId }]
    })
  });
}

AUDIENCE_ID は手順2で控えた audienceGroupId です。フォームに「入会について」を足し、その答えが「迷っている」のときだけ addToUndecided(user.sub) を呼びます。Messaging APIのリファレンスにあるとおり、一度オーディエンスに足したユーザーIDは削除できないので、このステップ配信は2通程度に短く組みます。

標準のチャットのタグは無料の範囲だと作れるタグが5個、1人に付けられるタグが1個までです。アンケートの回答を手で写す使い方には足りないので、少人数の間のつなぎと考えます。セグメント配信全体の考え方は「セグメント配信とオーディエンス:属性・タグ・行動で送り分ける」で書いています。

応用

満足度が低い回答はスタッフにすぐ知らせます。LIFFのフォームなら、受け取ったApps Scriptの中で満足度が1のときに教室のメールへ MailApp.sendEmail で通知を送れば、その日のうちに電話できます。不満のまま帰った体験者に翌週の入会案内が自動で届く、という事故を防げます。

回答のお礼にクーポンを付けると回答率が上がります。LINE公式アカウントのクーポンを作り、フォームの回答完了画面か、回答後のメッセージでクーポンのURLを渡します。ショップカードと組み合わせれば、アンケートに答えて次のレッスンに来た人にポイントを付ける流れも作れます。

アンケートの回答を顧客管理に残すなら、スプレッドシートの代わりにkintoneへ書き込む形にもできます。受け取ったApps Scriptから、kintoneのレコード登録APIを呼ぶだけです。問い合わせの記録と同じ考え方なので、「LINEの問い合わせをスプレッドシートに貯める:Webhookで1件ずつ記録する」の仕組みをそのまま流用できます。

できないことと、その代わり

できないこと代わりの手
2026年12月2日以降もリサーチでアンケートを続けるGoogleフォーム、LIFFのフォーム、CRMオプションのフォームに移す
Googleフォームの回答から、誰が答えたかを知る事前入力URLにユーザーIDを入れるか、LIFFのフォームにする
Googleフォームに見えない隠し項目を置く隠したいならLIFFのフォームにする
LINE公式アカウントの管理画面だけで、無料で回答別に送り分けるCRMオプションを契約するか、Messaging APIでユーザーIDを集める
CRMオプションの公開中フォームの質問を直すフォームをコピーして作り直す
友だち以外の人に広く聞く市場調査有料のLINEリサーチを使う
個人のLINEの投票機能を公式アカウントの友だちに使う公式アカウント側のフォームで作る

よく詰まるところ

症状原因直し方
管理画面で「リサーチ」を作ろうとしても進めない12月2日の終了に向けて段階的に機能が止まっているGoogleフォーム、LIFF、CRMオプションのどれかで作る
リサーチの結果がダウンロードできない回答が20件未満結果画面を保存しておく。12月2日以降は見られなくなる
LINEからGoogleフォームを開くとログインを求められる「回答を1回に制限する」やファイルのアップロードの質問がある設定をオフにし、ファイルのアップロードの質問を外す
事前入力URLを送ったのに受付番号が空URLの entry.数字 が別の質問の番号「フォームに事前入力する」でリンクを取り直し、番号を確かめる
受付番号にあり得ないIDが入っている回答者が欄を書き換えたか、URLを転送した結びつけが大事な用途はLIFFのフォームに替える
WebhookのApps Scriptが反応しないスクリプトを直したあと新しいバージョンでデプロイしていない「デプロイを管理」で新しいバージョンにする
LIFFのフォームで「ng」になり、行が増えないclient_id にMessaging APIチャネルのIDを入れているLIFFを追加したLINEログインチャネルのチャネルIDにする
オーディエンスのユーザーIDアップロードが失敗するファイルにIDの重複や、別のプロバイダーで取ったIDがある重複を消し、公式アカウントと同じプロバイダーで取ったIDだけにする
マルチキャストが200で返るのに届かないブロック中、友だち未追加、別プロバイダーのユーザーID回答時点で友だちかを確かめ、プロバイダーを揃える
CRMオプションのフォームの集計に今日の回答が出ない集計は1日1回翌日に見るか、「回答者一覧」で個別に確かめる
CRMオプションのフォームで、ある設定のタグが1つも付かない人がいる1人に付けられるタグ30件の上限に達し、その設定のタグを全部は付けられない。その場合、その設定の付与と解除はすべて実行されない使っていないタグを外す。1フォームのタグ設定は最大50件で、上から順に処理される
入会した人にも「迷っている」向けのステップが届き続けるオーディエンスに足したユーザーIDは削除できないステップを2通程度に短くし、入会の手続きをした人にはスタッフから一言添える
フォームの途中で閉じられ、最後まで答えてもらえない質問が多い。CRMオプションのフォームは途中保存もできない4〜5問に絞る。聞きたいことが多ければ2回に分ける

次にやること

回答を集めたら、次は送り分けの設計に進みます。タグとオーディエンスの使い分けは「セグメント配信とオーディエンス:属性・タグ・行動で送り分ける」、Webhookで受けた内容をスプレッドシートに残す仕組みは「LINEの問い合わせをスプレッドシートに貯める:Webhookで1件ずつ記録する」で書いています。LIFFを作る前にLINEミニアプリとの違いを確かめるなら「LINEミニアプリとLIFF:何が違い、自社に要るか」、フォームと予約とステップ配信を月額0円でまとめて組むなら「L Harnessで予約・フォーム・ステップ配信を組む:教室の例で一通り」に進みます。

あわせて読む