SYNON 記事 マーケティングオートメーション
SYNON  MARKETING AUTOMATION

マーケティングオートメーションサービス LINE活用機能仕様書

LINE公式アカウント × LIFF による識別済みリードの継続接点基盤 / MA拡張機能仕様書 v2.0 の追加機能編
v1.02026-08-19F-25 〜 F-35図版39点シンオン株式会社
LINE公式アカウント × LIFF による継続接点基盤MA LINE活用機能仕様書 v1.0 / F-25 〜 F-351識別済み友だちだけtracking_code連結2送らずに接点を保つリッチメニュー/LIFF3送らない権利を渡す配信設定LIFF4行動を計測ファーストパーティ5他チャネルと横並び評価アトリビューション

マーケティングオートメーションサービス LINE活用機能仕様書

— LINE公式アカウント × LIFF による識別済みリードの継続接点基盤 —

項目 内容
文書名 マーケティングオートメーションサービス LINE活用機能仕様書
バージョン v1.0
作成日 2026年8月19日
対象システム シンオン株式会社 マーケティングオートメーションサービス
位置づけ MA_拡張機能仕様書_v2.0.md(F-11〜F-24) に続く追加機能編。v1.2 / v2.0 は変更しない
追加機能ID F-25 〜 F-35
追加画面ID S-28 〜 S-38
追加ガードレールID G-16 〜 G-27
関連文書 MA_機能仕様書.md(v1.2)、MA_拡張機能仕様書_v2.0.md(v2.0)、MA拡張_CloudFlare構築運用手順書_v1.0.md
情報基準日 2026年8月19日(LINEヤフー公式ドキュメントの記載に基づく)

目次

  1. はじめに
  2. 発想の転換 — LINEをBtoBで使うための3つの考え方
  3. LINEプラットフォームの前提知識
  4. システム全体像
  5. 機能要件 第I部 — 接続・識別基盤(F-25〜F-28)
  6. 機能要件 第II部 — 体験・シナリオ(F-29〜F-32)
  7. 機能要件 第III部 — 統制・分析(F-33〜F-35)
  8. ユースケース別シナリオ設計
  9. 計測仕様
  10. 画面仕様(追加)
  11. データベース設計(追加)
  12. API設計(追加)
  13. 非機能要件
  14. 法令・コンプライアンス
  15. 段階導入計画
  16. 今後の検討事項
  17. 出典

1. はじめに

1.1 背景

既存チャネルのカバー範囲と、残っている空白認知情報収集実名取得検討(数週間〜数か月)商談受注メール営業 F-08フォーム営業 F-06LP / 広告 / SEO F-11〜18ウェビナー・資料 F-19,20SNS・コミュニティ F-21← ここが空白届かない / 気づかれない / 即時性がない / 双方向にならない —— ナーチャリングメールが機能しない4つの理由
図 1実名取得から商談化までの数週間〜数か月が、既存5チャネルの空白になっている

v1.2 と v2.0 で、本システムの獲得チャネルは次の5系統に広がった。

系統 機能 性格
メール営業 F-08 プッシュ型・一方向
フォーム営業 F-06 プッシュ型・一方向
LP / 広告 / SEO F-11〜F-18 プル型・匿名流入
ウェビナー / 資料ゲート F-19, F-20 交換型・実名取得
SNS・コミュニティ F-21 認知形成

これらに共通して残っている穴が 「実名を取得したあと、商談化までの数週間〜数か月をどう繋ぐか」 である。

v2.0 の F-20(コンテンツゲートとナーチャリング)は、この期間をメール配信で埋める設計になっている。しかし現実には次の問題が起きる。

問題 内容
届かない BtoBの業務メールは1日100通以上受信する。3通目以降のナーチャリングメールは開かれない
気づかれない メールは能動的に開く必要がある。通知がOSレベルで抑制されている端末も多い
即時性がない ウェビナー開始5分前のリマインド、展示会当日の受付案内はメールでは間に合わない
双方向にならない 「ちょっと聞きたい」を受ける口がない。問い合わせフォームは心理的コストが高すぎる

LINE公式アカウントは、この4点をすべて改善しうる。東急ストアの公表事例では、同一施策に対して開封率 76.4%(メール 16.0%)、クリック率 24.7%(メール 3.9%)という差が出ている(出典: LINEヤフー導入事例)。開封タイミングも約20%が即時、約80%が当日中である。

1.2 目的

本書は、以下を目的とした LINE 活用機能を定義する。

  1. 識別済みリードとの継続接点 — 実名を取得した個人と、商談化までの期間をLINEで繋ぐ
  2. 即時性の獲得 — ウェビナー・展示会・見積依頼など、分単位の速さが価値になる場面を機能化する
  3. プル型の窓口化 — リッチメニューとLIFFで「相手が来たときに答える」導線を常設し、配信を増やさずに接点を維持する
  4. 既存チャネルとの統合計測 — LINEの反応を F-23(チャネル横断アトリビューション)に統合し、メール・フォーム・LPと同じ土俵で比較する

1.3 v1.2 / v2.0 との関係

1.4 スコープ

含むもの

含まないもの

1.5 用語定義(追加分)

用語 定義
LINE公式アカウント 事業者がLINE上に開設するアカウント。以下「公式アカウント」
Messaging API 公式アカウントをプログラムから操作するAPI群
チャネル LINE Developersコンソール上のアプリケーション単位。Messaging APIチャネル / LINEログインチャネル等がある
プロバイダー チャネルを束ねる事業者単位。userId はプロバイダーごとに異なる値になる
userId 公式アカウントの友だち1人を指す U + 32桁の16進文字列
友だち 公式アカウントを追加したLINEユーザー
ブロック 友だちがアカウントからの受信を拒否した状態。こちらからは解除できない
通数 課金対象のメッセージ数。「送信リクエスト数 × 送信対象人数」で数える
吹き出し 1メッセージ内の個々の表示単位。通数には影響しない
reply / push / multicast / narrowcast / broadcast Messaging API の配信種別(3.3項)
LIFF LINE Front-end Framework。LINE内で動作するWebアプリの枠組み
LIFFブラウザ LINEアプリ内蔵のWebView。外部ブラウザとは利用できるAPIが異なる
リッチメニュー トーク画面下部に常設される画像メニュー
オーディエンス 配信対象を絞り込むためのユーザー集合
ID連携 LINEの userId と自社の contacts.id / companies.id を紐づけること
識別済み友だち ID連携が完了した友だち。本書ではこれのみを資産と数える
CPF Cost Per Friend。友だち追加1件あたりの広告費用

2. 発想の転換 — LINEをBtoBで使うための3つの考え方

「LINEでマーケティングをする」という要望をBtoB受託開発の文脈にそのまま持ち込むと、BtoCの成功パターンをなぞって失敗する。本章はその理由と、代わりに何を設計するのかを先に述べる。以降の機能要件はすべてこの3つの考え方から導かれている。

2.1 なぜ「LINEで新規リードを集める」は当社では成立しないのか

LINEをBtoB新規獲得に使えない4つの壁企業を識別できないLINEは個人アカウントuserIdから所属企業は一切分からない→ ABMと相性が悪い意思決定が合議担当者1人に届いても稟議には届かないトークは転送しにくい→ 社内展開されない広告がBtoC設計興味関心は消費行動ベース業種・規模・役職での絞り込みは実質不可能→ CPFが高止まり私的領域への侵入感私用LINEでの売り込みはBtoCより抵抗が強い人材業のブロック率38.4%→ ブロックされやすい結論LINEは「まだ会ったことのない人を集める場所」ではない。すでに接点のある個人と、即時性が価値を持つ場面で繋がるための回線である。
図 2BtoBでLINEを新規獲得に使えない4つの構造的な壁。いずれも運用では埋められない

LINEはBtoCで極めて強い。しかし当社がやろうとしているBtoB受託開発の新規獲得に対しては、次の4つの構造的な壁がある。

内容 帰結
企業を識別できない LINEアカウントは個人のもの。userId から所属企業は分からない。v2.0 の中核だった「tracking_code から企業を解決してLPを出し分ける」が、LINE単体では原理的にできない ABMと相性が悪い。LIFFでの自己申告か、既存リードとの紐付けでしか企業は分からない
意思決定が合議 BtoBの発注は複数人の稟議で決まる。担当者1人のLINEに届いても、社内には展開されない。LINEのトークは転送・共有がしにくい LINE単独では受注に至らない。社内展開できる資料(PDF / LP)への橋渡しが必須
広告ターゲティングがBtoC設計 LINE広告の興味関心セグメントは消費行動ベース。業種・従業員規模・役職での絞り込みは実質できない 友だち追加広告(CPF)の獲得単価が高止まりする。新規獲得チャネルとして採算が合わない
私的領域への侵入感 LINEは個人の私的空間である。業務の売り込みを私用LINEで受けることへの抵抗はBtoCより強い ブロック率が高くなりやすい。実際、業種別ブロック率で最も高いのは人材業界の 38.4%(ソーシャルPLUS調査)

結論: LINEを新規リード獲得チャネルとして使ってはならない。当社にとってのLINEは「まだ会ったことのない人を集める場所」ではなく、「すでに接点のある個人と、即時性が価値を持つ場面で繋がるための回線」である。

2.2 中核アイデア① — 友だちを増やさない。「識別済み友だち」だけを増やす

中核① 未識別の友だちは資産ではない未識別の友だち誰か分からない全体配信の対象にしかならない企業属性・検討状況が不明通数を消費するブロック率を押し上げるコストtracking_codeで連結識別済み友だちcompany_id / contact_id に紐づく業種企業規模都道府県アプローチ履歴LP閲覧履歴メール開封商談ステータス→ 個別配信・シナリオ分岐・営業引き継ぎがすべて可能になる資産KPIの置き換え友だち数識別済み友だち数識別率(目標 80%以上)友だち総数は副次指標として小さく表示する
図 3未識別の友だちは資産ではなくコスト。KPIは友だち数ではなく識別済み友だち数と識別率

一般的なLINEマーケティングのKPIは「友だち数」である。当社ではこれを採用しない。

未識別の友だち(誰か分からない友だち)は、当社にとって資産ではなくコストである。

状態 何ができるか 月額コストへの影響
未識別の友だち 全体配信の対象にしかならない。企業属性も検討状況も分からない 通数を消費する。ブロック率を押し上げる
識別済み友だち company_id / contact_id に紐づく。業種・企業規模・アプローチ履歴・LP閲覧履歴と結合できる。個別配信も営業引き継ぎも可能 通数あたりの期待値が桁違いに高い

したがって本仕様では、友だち追加の導線を必ず tracking_code 付きにする(F-26)。既存のメール・フォーム・LP・ウェビナー申込のいずれかを通過した人だけが友だちになる設計とし、追加された瞬間に company_id の解決を試みる。

導線 識別方法 想定識別率
メール本文内の友だち追加リンク(/r/{tracking_code} 経由) tracking_codecontacts.id を確定 高(ほぼ100%)
ウェビナー申込完了画面 / 資料DL完了画面 申込フォームの入力内容と紐付け
LP内の友だち追加ボタン tracking_code があれば確定、無ければLIFFで自己申告
展示会・名刺交換のQRコード QRに tracking_code を埋め、LIFFで会社名・氏名を確認 中〜高
検索・SNSからの自然流入 LIFFでの自己申告のみ

設計上の要点: 主要KPIは「友だち数」ではなく 「識別済み友だち数」「識別率」。ダッシュボード(S-28)ではこの2つを最上位に置き、友だち総数は副次指標として小さく表示する。

2.3 中核アイデア② — 「送る」のをやめる。課金構造がメールと真逆である

中核② 課金構造の反転1通あたりの限界費用メール(SendGrid)0.1円未満LINE(追加メッセージ)最大3円約30倍以上。「とりあえず送る」が成立しない月間の無料枠(プラン別)コミュニケーション ¥0200通ライト ¥5,0005,000通スタンダード ¥15,00030,000通通数にカウントされる(押し出す)メッセージ配信 / 絞り込み配信 / ステップ配信Messaging API: pushMessaging API: multicastMessaging API: narrowcastMessaging API: broadcast(本仕様では禁止)通数にカウントされない(引き込む)応答メッセージ(Reply API)あいさつメッセージLINEチャットの手動送受信リッチメニューの表示・タップLIFFアプリの利用← ここに価値を置く
図 4LINEは押し出すほど高く、引き込むほど安い。reply・リッチメニュー・LIFFは通数無料

メール営業(F-08)では、送信コストは実質ゼロに近い。SendGrid の従量課金は1通あたり0.1円未満であり、「とりあえず送る」が経済的に成立していた。

LINEでは、この前提が完全に反転する。

項目 メール(SendGrid) LINE公式アカウント
1通あたりの限界費用 0.1円未満 最大3円(スタンダードプランの追加メッセージ)
月間の無料枠 実質なし(従量) コミュニケーション 200通 / ライト 5,000通 / スタンダード 30,000通
受信側からの応答 返信メールを待つしかない 応答API(reply)は通数無料
常設の窓口 なし リッチメニューは通数無料・常時表示

つまり LINE では「押し出す(push)ほど高くつき、引き込む(pull)ほど安い」。これは通数カウントの規則そのものに現れている。

通数にカウントされる 通数にカウントされない
メッセージ配信 / 絞り込み配信 / ステップ配信 応答メッセージ(自動応答)
Messaging API: push / multicast / narrowcast / broadcast あいさつメッセージ
LINEチャットの手動送受信
Reply API(応答メッセージ送信)
リッチメニューの表示・タップ
LIFFアプリの利用

(出典: LINEヤフー「料金プラン」/ LINE Developers「Messaging APIの料金」)

この非対称性を最大限に使うのが本仕様の設計方針である。

  1. 定期的な一斉配信(メルマガのLINE版)は作らない
  2. 常設の価値はリッチメニューLIFFに置く。ここは何度見られてもコストゼロ
  3. こちらから送るのは「相手のアクションへの応答(reply)」と「相手が待っている通知(リマインド)」だけ
  4. push を使うのは、識別済み友だちに対する個別・少数配信に限る

概算すると、識別済み友だち500人・月2回のセグメント配信(平均対象100人)であれば 月200通。コミュニケーションプラン(月額0円)の無料枠内に収まる。BtoBで友だち数が小さいことは、LINEにおいてはむしろ経済的な優位である。

2.4 中核アイデア③ — ブロックは不可逆。だから「送らない権利」を相手に渡す

中核③ ブロックは不可逆な資産の喪失メールの配信停止自社DBで管理する状態相手が気を変えれば再開できるLINEのブロックこちらからは一切解除できない積み上げたID連携が一瞬で消える業種別ブロック率(ソーシャルPLUS調査・平均値)人材38.4%化粧品36.6%医療/美容33.8%不動産31.8%全体平均29.7%食品27.8%その他会員サービス21.5%友だち数5,000未満で約22%、50万人以上で40%超 — 量的に集めるほど質が劣化する機能で防ぐ① 頻度を相手に選ばせる② 頻度上限をシステムで強制③ ブロック確率で事前に外すブロック理由1位「配信頻度が多すぎる」26.5%(モビルス調査 n=655)
図 5ブロックはこちらから解除できない。業界平均29.7%、原因1位は配信頻度

メールの配信停止は、こちらのDBで管理する状態である。相手が気を変えれば再開できる。

LINEのブロックは、こちらからは一切解除できない。 ブロックされた友だちには何を送っても届かず(通数もカウントされない)、識別済み友だちであっても回線は永久に失われる。ID連携で積み上げた資産が一瞬で消える。

業界横断のブロック率実測値(ソーシャルPLUS調査、友だち数1,000未満を除外)は次のとおり。

区分 平均 中央値
全体 29.7% 27.0%
人材 38.4% 35.8%
医療/美容 33.8% 37.0%
不動産 31.8% 30.1%
その他会員サービス 21.5% 15.8%

友だち数別では、5,000人未満で約22%、50万人以上で40%超と、規模が大きくなるほどブロック率は上がる。量的に集めるほど質が劣化する構造である。一方、丁寧に運用した事例(東急ストア)は友だち17万人でブロック率11.1%に収まっている。

ブロック理由の第1位は「情報配信の頻度が多すぎるから」26.5%(モビルス調査、655名)である。

設計上の要点: ブロックを「離脱率」として事後に眺めるのではなく、発生前に機能で抑える。 1. 配信頻度をユーザー自身に選ばせる(F-29 の配信設定LIFF)。「全部止める(=ブロック)」しか選択肢がない状態を作らない 2. 頻度上限をシステムで強制する(F-33)。1人あたり週1通、月4通を既定の上限とし、超過する配信は管理画面で送信ボタンが押せない 3. ブロック確率の高い友だちを配信対象から機械的に外す(F-33)。無反応が続く友だちに送り続けることは、通数を捨ててブロックを買う行為である

2.5 3つの考え方のまとめ

3つの考え方 — 捨てるものと得るもの友だちを増やさず識別済み友だちを増やす捨てる友だち数KPI / CPF広告得る企業属性と結合した配信営業引き継ぎ押し出さず引き込む捨てる定期一斉配信 / メルマガ運用得る月額0〜5,000円で回る運用高い反応率送らない権利を相手に渡す捨てる全員に送る自由得る低いブロック率長期に残る回線LINEはメールを置き換えない。メールが届かない層と、メールでは間に合わない場面を埋める補完チャネルである
図 63つはいずれも「LINEをメールの代替として使わない」に帰着する
# 考え方 捨てるもの 得るもの
友だちを増やさず、識別済み友だちを増やす 友だち数KPI、CPF広告 企業属性と結合した配信・営業引き継ぎ
押し出さず、引き込む 定期一斉配信、メルマガ的運用 月額0円〜5,000円で回る運用、高い反応率
送らない権利を相手に渡す 「とりあえず全員に送る」自由 低いブロック率、長期に残る回線

この3つはいずれも「LINEをメールの代替として使わない」という一点に帰着する。LINEはメールを置き換えるものではなく、メールが届かない層と、メールでは間に合わない場面を埋める補完チャネルである。


3. LINEプラットフォームの前提知識

本章は仕様ではなく、以降の設計の根拠となるLINE側の制約の整理である。数値はすべて2026年8月19日時点のLINEヤフー公式ドキュメントに基づく。

3.1 料金プラン

料金プランと当社の位置コミュニケーション¥0月額(税別)200通/月追加購入 不可当社の開始点ライト¥5,000月額(税別)5,000通/月追加購入 不可スタンダード¥15,000月額(税別)30,000通/月追加 〜¥3/通無料枠を超えると止まるコミュニケーション/ライトは無料枠を超えると送信できなくなる(追加購入不可)。識別済み友だち500人・月2回のセグメント配信(平均対象100人)なら月200通で、無料枠に収まる。
図 7当社の想定規模ではコミュニケーションプラン(月額0円)で開始できる
プラン 月額(税別) 無料メッセージ通数/月 追加メッセージ
コミュニケーション 0円 200通 不可
ライト 5,000円 5,000通 不可
スタンダード 15,000円 30,000通 〜3円/通

追加メッセージ単価(スタンダードのみ・税別)

追加通数帯 単価
1〜50,000通 3.0円/通
50,001〜100,000通 2.8円/通
100,001〜1,000,000通 2.6円/通
1,000,001〜10,000,000通 2.2円/通

重要: コミュニケーションプランとライトプランは無料枠を超えると送信できなくなる(追加購入不可)。当社の想定規模ではコミュニケーションプラン(0円)から開始し、識別済み友だちが1,000人を超えた段階でライトプランへ移行する。この判定は F-33 の配信予算ガードが自動で警告する。

3.2 通数のカウント規則

通数のカウント規則と、そこから導かれる設計分割送信(悪い例)こんにちはリクエスト1 → 100人100通資料はこちらリクエスト2 → 100人100通ご相談はこちらリクエスト3 → 100人100通合計 300通1リクエストに集約(正しい)こんにちは資料はこちらご相談はこちら(最大5吹き出し)リクエスト1つ → 100人100通合計 100通通数 = 送信リクエストの数 × 送信対象の人数 吹き出し(メッセージオブジェクト)の数は通数に影響しない
図 8通数=送信リクエスト数×対象人数。吹き出し数は無関係なので1通に詰め込む

通数 = 送信リクエストの数 × 送信対象の人数

カウントされないもの(2.3項再掲): 応答メッセージ、あいさつメッセージ、LINEチャットの送受信、Reply API。

設計への反映: 「1回の配信で5吹き出しまで無料で使える」ため、1通に情報を詰め込む設計が経済的に正しい。テキスト+画像+ボタン+カルーセルを1リクエストにまとめる。

3.3 配信種別

配信種別の使い分け種別宛先指定上限通数本仕様での用途採否replyreplyToken1トーク無料全ての自動応答。最優先で使うpushuserId 1件1宛先課金識別済み友だちへの個別通知multicastuserId 配列最大500件/req課金セグメント配信(既定)narrowcast属性/オーディエンスオーディエンス50件〜課金限定利用。BtoBでは軸が合わないbroadcast全友だち全友だち課金原則使用禁止(G-17)×
図 9replyを最優先。セグメント配信はnarrowcastではなくmulticastを既定とする
種別 宛先指定 上限 通数 本仕様での用途
reply Webhookで受け取った replyToken 1トーク 無料 全ての自動応答。最優先で使う
push userId 1件 1宛先 課金 識別済み友だちへの個別通知(ウェビナーリマインド、見積完了)
multicast userId の配列 最大500件/リクエスト 課金 セグメント配信(自社DBで対象を決めた場合)
narrowcast 属性 or オーディエンス 課金 LINE側のオーディエンス機能を使う場合。本仕様では限定利用
broadcast 指定不要(全友だち) 全友だち 課金 原則使用禁止(G-17)

共通の制約

設計上の判断: セグメント配信は narrowcast ではなく multicast を既定とする。理由は、当社は contacts テーブルに業種・企業規模・アプローチ履歴を既に持っており、LINE側のオーディエンス(性別・年代・OS・エリアしか使えない)より精度が高い絞り込みができるため。narrowcast は最小送信対象の制約(オーディエンスは50件以上)もあり、当社の規模では使いにくい。

3.4 レート制限

レート制限(チャネル単位 × エンドポイント単位)対数スケール →reply / push / その他大半2,000 req/秒multicast、クーポン系200 req/秒← 配信スループットの上限ローディングアニメーション100 req/秒リッチメニューの配列取得10 req/秒リッチメニュー作成・削除100 req/時narrowcast / broadcast / 統計取得60 req/時← 統計はリアルタイムに取れないリッチメニューの一括リンク3 req/時← 一括APIを使わない理由設計への反映:リッチメニュー切替は一括APIを使わずユーザー単位リンク+キューで平準化。統計は日次バッチ、リアルタイム指標は自前計測(F-34)
図 10リッチメニュー一括リンク3req/時、統計取得60req/時が設計を規定する

チャネル単位 × エンドポイント単位で適用される。超過時は 429 Too Many Requests。トークンバケット方式。

エンドポイント群 制限
reply / push / その他大半 2,000 req/秒
multicast、クーポン系 200 req/秒
ローディングアニメーション 100 req/秒
リッチメニューの配列取得 10 req/秒
リッチメニュー作成・削除・エイリアス削除 100 req/
リッチメニューの一括リンク/リンク解除 3 req/時
narrowcast / broadcast / 各種統計取得 / 友だち数取得 60 req/時
オーディエンス作成・追加・削除・取得 60 req/分
Webhook URL 設定・取得 1,000 req/分

設計上の最重要制約: リッチメニューの一括リンクは 3 req/時。ステータス変化に応じてリッチメニューを切り替える設計(F-28)では、一括APIではなくユーザー単位のリンクAPI(制限緩め)を使い、変更をキューで平準化する必要がある。統計取得系が 60 req/時 であることから、LINE側の統計APIをリアルタイムに叩く設計にはできない。日次バッチで取得し、リアルタイム指標は自前計測(F-34)で持つ。

3.5 Webhook と署名検証

Webhook 受信シーケンスLINE PlatformWorkers(受信)QueuesD1 / Analytics Engineイベント発生 + x-line-signature① 生ボディを保持(clone().text())② HMAC-SHA256 を計算し定数時間比較③ 即座に 200 OK を返す(200ms以内)④ 処理をキューへ(webhookEventIdで冪等)⑤ 友だち登録 / ID連携 / イベント記録禁止:署名検証の前にリクエストボディをパース・デシリアライズ・整形すること(検証が必ず失敗する)。文字コードはUTF-8を維持する
図 11生ボディに対するHMAC-SHA256。検証前にパース・整形してはならない

設計への反映: Cloudflare Workers 実装では request.clone().text() で生ボディを保持し、crypto.subtle で HMAC-SHA256 を計算して定数時間比較する。署名検証に失敗したリクエストは 401 を返し、本文をログに残さない(G-20)。

3.6 チャネル構成と userId

プロバイダー設計 — 唯一やり直しのきかない選択正しい構成(同一プロバイダー)プロバイダー:シンオン株式会社Messaging API公式アカウントLINEログインLIFF 6アプリuserId が一致するLIFFで識別した相手に push 配信できる誤った構成(別プロバイダー)プロバイダーAMessaging APIuserId: U-aaa...プロバイダーBLINEログインuserId: U-bbb...同じ人でも userId が違う作り直し以外に回復手段がないプロバイダーは後から変更できない。構築の最初の手順で確定させる(F-25)
図 12プロバイダーが同じならLINEログインとMessaging APIでuserIdが一致する

設計上の最重要制約: LIFF(LINEログインチャネル)で取得した userId を使って Messaging API で push 配信するには、両チャネルが同一プロバイダー配下でなければならない。プロバイダー設計は後から変更できないため、構築の最初の手順で確定させる(F-25)。

3.7 リッチメニュー

リッチメニューの仕様と優先順位画像規定2500 × 1686 px2500 × 843 px・JPG / JPEG / PNG・1MB以下・タップ領域 最大20 / メニューバー14文字・エイリアス 最大100優先順位とステータス別の出し分けユーザー単位のリッチメニュー優先度 高↓ 未設定ならデフォルトのリッチメニュー(全友だちに表示)メニュー5種(F-28)defaultidentifiedin_dealcustomerdormantタブ切替=リッチメニューエイリアス + richmenuswitch アクション。エイリアスIDを固定すれば実体だけ差し替えられる表示もタップも通数無料 — LINEにおける最大の資産
図 13表示もタップも通数無料。ユーザー単位はデフォルトより優先される
項目
画像サイズ 2500×1686 px(大) / 2500×843 px(小)
形式・容量 JPG / JPEG / PNG、1MB以下
タップ領域(areas) 最大20
メニューバーのテキスト(chatBarText) 最大14文字
リッチメニュー名(name) 最大300文字
エイリアス最大作成数 100
優先度 ユーザー単位のリッチメニュー > デフォルトのリッチメニュー

タブ切替はリッチメニューエイリアス + richmenuswitch アクションで実装する。エイリアスIDを固定しておけば、紐づくリッチメニューの実体だけを差し替えられる(アクション定義を変えずに中身を更新できる)。

3.8 LIFF

LIFF の環境差とスコープLIFFブラウザ(LINE内)外部ブラウザliff.init()liff.init()自動ログイン自動ログイン×(login()が必要)liff.login()× 呼ぶとエラーliff.login()liff.getProfile()liff.getProfile()liff.sendMessages()liff.sendMessages()× 不可liff.shareTargetPicker()liff.shareTargetPicker()△ SSOセッション必須liff.closeWindow()liff.closeWindow()× 動作保証外スコープprofileプロフィール情報申請不要openiduserIdを含むIDトークン申請不要emailメールアドレス要申請chat_message.writesendMessages用申請不要
図 14LIFFブラウザと外部ブラウザで使えるAPIが違う。userIdはIDトークン検証を経て信用する
項目 内容
最新バージョン v2.30.0(2026年8月17日リリース)
画面サイズ Compact / Tall / Full の3種(登録時に選択)
1チャネルあたりのLIFFアプリ数 最大30
liff.init() ページ遷移のたびに実行が必要。実行URLはエンドポイントURL配下に限定
liff.login() LIFFブラウザでは利用不可(init時に自動ログイン済みのため)
liff.getProfile() 表示名・画像URL・ステータスメッセージ。サーバーへの送信は非推奨(サーバー側ではIDトークン検証を使う)
liff.sendMessages() LIFFブラウザ内のみ。最大5件/回
liff.shareTargetPicker() 任意の相手へ共有。送信人数・送信先は取得できない
liff.requestFriendship() v2.28.0(2026年3月)以降。友だち追加を促す

スコープ

スコープ 取得できるもの 申請
profile プロフィール情報 不要
openid userId を含むIDトークン 不要
email メールアドレス。openid との併用必須 要申請(利用目的を提示する画面のスクリーンショットが必要)
chat_message.write liff.sendMessages() 不要

設計への反映: LIFF から取得した userId必ずIDトークンをサーバー側で検証してから信用する。クライアントが送ってきた userId をそのまま信じる実装は、他人へのなりすまし配信を許すことになる(G-19)。

3.9 LINE公式の標準機能を使わない理由

ステップ配信を自前実装する理由LINE標準のステップ配信分岐に使える軸性別年齢OSエリアBtoBでは一つも役に立たない・待ち時間は1〜30日(分単位不可)・1ルート10ステップ / 50件まで・メール等の他チャネルと混在できない自前実装(F-30)分岐に使える軸業種企業規模役職アプローチ履歴LP行動スコア資料DLウェビナー参加商談ステータス当社が持っている軸で分岐できる・待ち時間は分単位〜(開始5分前リマインド可)・LINE / メール / フォームを同一シナリオに混在LINE側の機能で足りるかを毎回確認する。足りないのはBtoBの分岐軸と他チャネル連携の2点だけである
図 15LINE標準の分岐軸(性別・年齢・OS・エリア)はBtoBでは一つも役に立たない

公式アカウントマネージャーには「ステップ配信」機能があるが、本仕様では自前実装(F-30)とする。

観点 LINE標準のステップ配信 本仕様(F-30)
開始条件 友だち追加 / オーディエンス 任意のイベント(LP閲覧、資料DL、ウェビナー参加、ステータス変更)
分岐条件 性別 / 年齢 / OS / エリア / オーディエンス 業種・企業規模・役職・アプローチ履歴・LP行動スコア
待ち時間 1〜30日 分単位〜日単位(ウェビナー5分前リマインド等に対応)
ステップ数 1ルート10個 / 1配信100個 / 50件まで 制限なし(実運用上の上限は設ける)
他チャネル連携 不可 メール・フォームと同一シナリオ内で混在可能

LINE標準の分岐軸(性別・年齢・OS・エリア)はBtoBでは一つも役に立たない。当社が持っている軸で分岐するには自前実装しかない。


4. システム全体像

4.1 機能マップ

機能マップ F-25 〜 F-35第I部 接続・識別基盤F-25LINEチャネル管理プロバイダー/Webhook/シークレットF-26友だち識別・ID連携tracking_code → userId → contact_idF-27メッセージ配信エンジンreply/push/multicast と通数管理F-28リッチメニュー出し分けステータス別の常設窓口第II部 体験・シナリオF-29LIFFアプリ基盤申込・診断・予約・配信設定F-30シナリオ配信イベント駆動のマルチチャネルF-31チャット一次応答自動応答と営業引き継ぎF-32チャネル選択エンジンLINE/メール/フォームの選択第III部 統制・分析F-33配信ガバナンス通数予算・頻度上限・サプレッションF-34LINE行動計測イベント収集とF-23統合F-35コンプライアンス管理G-16〜G-27 の機械的強制既存: v1.2 F-01〜F-10 / v2.0 F-11〜F-24 は変更しない。本書はその上に積む
図 16F-25〜F-35 の全体像。第I部が基盤、第II部が体験、第III部が統制
機能ID 機能名 主な役割
第I部 接続・識別基盤 F-25 LINEチャネル管理・接続設定 プロバイダー/チャネル/Webhook/シークレット
F-26 友だち識別・ID連携 tracking_codeuserIdcontact_id の連結
F-27 メッセージ配信エンジン reply/push/multicast の実行と通数管理
F-28 リッチメニュー出し分け ステータス別の常設窓口
第II部 体験・シナリオ F-29 LIFFアプリ基盤 申込・診断・予約・配信設定
F-30 シナリオ配信(自前ステップ配信) イベント駆動のマルチチャネルシナリオ
F-31 チャット一次応答・営業引き継ぎ 自動応答と有人対応の切替
F-32 チャネル選択エンジン LINE / メール / フォームの最適選択
第III部 統制・分析 F-33 配信ガバナンス・ブロック抑制 通数予算・頻度上限・サプレッション
F-34 LINE行動計測 イベント収集とF-23への統合
F-35 LINEコンプライアンス管理 G-16〜G-27 の機械的強制

4.2 技術構成

Cloudflare を前提とした推奨構成LINE PlatformWebhookMessaging APILIFF SDK (CDN)署名検証配信WorkersWebhook受信 / LIFF配信Queues冪等処理・分割・平準化Workflows + Cron予約配信・日次統計D1line_friends / id_linksDurable Objects頻度カウンタ・配信状態Analytics Engine生イベント(1件INSERTしない)KV重複排除キー 24hR2リッチメニュー画像 1MBWorkers AI + Vectorize第2層 AI応答禁止パターン(v2.0から継承+追加)✕ 生イベントをD1に1件ずつINSERTしない✕ 配信時にモンテカルロを回さない✕ Webhookの処理を同期で完結させない(追加)✕ 割付・計測をKVに書かない
図 17Cloudflare前提の推奨構成。Webhookは同期で完結させない

v2.0 の技術構成(案A: 部分適用 / 案B: Cloudflare全面移行)いずれでも実装できるよう記述するが、Cloudflareを前提とした場合の推奨構成を以下に示す。

役割 Cloudflare 補足
Webhook受信 Workers 署名検証 → 即座に200を返し、処理は Queues へ流す
イベント処理 Queues (Consumer) LINEのWebhookは再送があるため冪等に処理する
友だち・ID連携マスタ D1 line_friendsline_id_links
配信ジョブ Queues + Durable Objects multicast の500件分割、レート制限の遵守
配信状態・頻度カウンタ Durable Objects 1人あたりの直近配信履歴を強一貫で持つ
生イベント Analytics Engine LINEイベントの生ログ。D1へ1件ずつINSERTしない(v2.0の禁止パターン)
LIFFアプリ配信 Workers (Static Assets) LIFF SDK は LINE の CDN から読み込む(唯一の例外)
画像・リッチメニュー素材 R2 1MB以下のリッチメニュー画像
スケジュール実行 Cron Triggers + Workflows 予約配信、日次統計取得
シークレット Workers Secrets チャネルシークレット、チャネルアクセストークン

v2.0からの継承: 「生イベントをD1に1件ずつINSERTしない」「配信時にモンテカルロを回さない」という禁止パターンは本書でも有効。加えて 「Webhookの処理を同期で完結させない」 を禁止パターンに追加する(LINEはWebhookのタイムアウトで再送するため、重複処理が起きる)。

4.3 データフロー

友だち追加から識別、継続接点までのデータフロー既存チャネルメール F-08フォーム F-06LP F-13ウェビナー F-19/r/{tracking_code}?to=linelink_token友だち追加URLLINE公式アカウントfollow イベントWebhook / 署名検証Queues識別処理(F-26)line_friends 登録link_token 解決あいさつメッセージ(無料)ID連携LIFFcontact_id / company_id 確定識別済み友だちリッチメニュー出し分け(無料)シナリオ配信 F-30行動計測 F-34 → F-23 アトリビューション識別できなかった友だちは、3回のリマインドに反応しなければ配信対象から除外する(F-33)
図 18既存チャネル → tracking_code → 友だち追加 → 識別 → 継続接点のループ
[既存チャネル]                 [LINE]                      [自社DB]
メール(F-08) ─┐
フォーム(F-06)─┼→ /r/{tracking_code}
LP(F-13) ─────┘        │
                       ▼
              友だち追加URL(state=tracking_code)
                       │
                       ▼
              LINE: follow イベント ──→ Workers(署名検証)
                                            │
                                            ▼
                                        Queues
                                            │
                       ┌────────────────────┼────────────────────┐
                       ▼                    ▼                    ▼
              line_friends 登録    tracking_code 解決    あいさつメッセージ(無料)
                                       │                        │
                                       ▼                        ▼
                              contact_id / company_id     LIFF(ID連携確認)
                                       │                        │
                                       └──────────┬─────────────┘
                                                  ▼
                                          識別済み友だち
                                                  │
                       ┌──────────────────────────┼──────────────────────────┐
                       ▼                          ▼                          ▼
              リッチメニュー出し分け        シナリオ配信(F-30)         行動計測(F-34)
                  (無料)                    push/multicast              │
                                                  │                     ▼
                                                  └──────────→ F-23 アトリビューション

4.4 LINE広告(友だち追加広告)を採用しない判断根拠

同じ25万円をどこに投じるかLINE友だち追加広告(CPF)250円 × 1,000人 = 250,000円(CPF 200円 + ブロック分25%)獲得できるもの:未識別の友だち 1,000人✕ 業種・従業員規模・役職で絞り込めない✕ ターゲット企業の在籍者は統計的にごく僅か✕ 誰なのか分からない → 2.2項の「コスト」ウェビナー広告(v2.0 F-19)同額 250,000円(v2.0 の実務ベンチマークに基づく)獲得できるもの:実名 + 企業名 + 参加行動○ company_id / contact_id が最初から確定○ そのままLINE識別済み友だちに転換できる○ 参加時間という関与度データが取れる再検討条件「認証済アカウント取得済み」かつ「識別済み友だち2,000人・商談化率5%が安定」の両方を満たしたら、リターゲティング用途に限り再検討する(16章 #3)。それまでは機能化しない。
図 19CPF 250円×1,000人=25万円。誰なのか分からない友だちに投じる価値はない

要望としては「LINEを使ったマーケティング」に広告が含まれうるが、本仕様では機能化しない。判断根拠を残す。

項目 数値・事実 出典の性質
友だち追加広告の入札レンジ 50円〜5,000円 ベンダー
推奨スタート単価 200円以内 ベンダー
LINEヤフー公式資料の概算友だち追加単価 約200円 公式(媒体資料)
ブロック分の見込み 目標単価 + 25%程度で計画すべき ベンダー
前提条件 認証済アカウントが必須。審査に約10営業日 ベンダー
BtoB向けターゲティング 業種・従業員規模・役職での絞り込みは実質不可能 定性

CPF 200円 × ブロック考慮 250円で1,000人集めたとして25万円。うち当社のターゲット企業に所属する人は統計的にごく僅かであり、しかも誰なのか分からない(2.2項)。同じ25万円をウェビナー広告(v2.0 F-19)に投じたほうが、実名と企業名が取れる。

再検討条件: 「認証済アカウント取得済み」「識別済み友だちが2,000人を超え、そのうち商談化率が5%以上で安定」の両方を満たした時点で、リターゲティング用途に限り再検討する(16章)。


5. 機能要件 第I部 — 接続・識別基盤(F-25〜F-28)

5.1 F-25 LINEチャネル管理・接続設定

F-25 チャネル構成(固定)と設定項目プロバイダー:シンオン株式会社1つだけ・変更不可Messaging APIチャネル:シンオン公式アカウントLINEログインチャネル:シンオン LIFF└ 資料DL (Tall)└ ウェビナー申込 (Tall)└ 商談予約 (Full)└ 簡易見積診断 (Full)└ 会社情報登録 (Compact)└ 配信設定 (Compact)(将来)LINEミニアプリチャネル主な処理仕様シークレットの暗号化保存マスク表示・復号はadminのみ・監査ログWebhook URL の疎通検証設定後に検証エンドポイントで確認短期トークンの自動更新有効期限80%でCron再発行。手動発行禁止応答設定の整合チェック公式側の自動応答をOFF(二重返信防止)Webhook URL は1つのみ他ツール併用不可。移行計画を先に立てる
図 20構築の最初に実行する。プロバイダーとチャネルの階層は固定

5.1.1 概要

LINE公式アカウント、Messaging APIチャネル、LINEログインチャネル、LIFFアプリの接続情報を一元管理する。プロバイダー設計を誤ると後戻りできないため、本機能は構築の最初に実行する。

5.1.2 プロバイダー・チャネル構成(固定)

プロバイダー: シンオン株式会社                     ← 1つだけ作る。後から変更不可
 ├─ Messaging APIチャネル: シンオン公式アカウント
 │   └─ Webhook URL: https://ma.example.co.jp/line/webhook
 ├─ LINEログインチャネル: シンオン LIFF
 │   ├─ LIFFアプリ: 資料ダウンロード      (Tall)
 │   ├─ LIFFアプリ: ウェビナー申込        (Tall)
 │   ├─ LIFFアプリ: 商談予約              (Full)
 │   ├─ LIFFアプリ: 簡易見積診断          (Full)
 │   ├─ LIFFアプリ: 会社情報の登録/確認   (Compact)
 │   └─ LIFFアプリ: 配信設定              (Compact)
 └─ (将来) LINEミニアプリチャネル

絶対条件: Messaging APIチャネルとLINEログインチャネルは必ず同一プロバイダー配下に作成する。異なるプロバイダーに作ると userId が一致せず、LIFFで識別した相手にpush配信ができない。この失敗は作り直し以外に回復手段がない。

5.1.3 入力

項目 必須 内容
プロバイダー名 参照用(APIでは使わない)
チャネルID / チャネルシークレット Messaging APIチャネル。シークレットは暗号化保存
チャネルアクセストークン 長期トークンまたは短期トークン(自動更新)
LINEログインチャネルID / シークレット LIFF用
LIFF ID 一覧 用途名とLIFF IDの対応
Webhook URL 自動生成・表示
公式アカウントID(@から始まる) 友だち追加URLの生成に使う
応答設定の状態 あいさつメッセージ・応答メッセージのON/OFF(自前実装との重複防止)

5.1.4 処理仕様

  1. シークレットの保存: チャネルシークレット、チャネルアクセストークンは環境設定(F-10)の暗号化ストアに保存する。管理画面では常にマスク表示(****...末尾4桁)し、復号表示は admin ロールのみ・監査ログ必須とする。
  2. Webhook URL の検証: 設定後、LINEプラットフォームの検証エンドポイントで疎通確認を行い、結果を画面に表示する。
  3. 短期チャネルアクセストークンの自動更新: 有効期限の80%を経過した時点でCronが再発行する。発行上限を超えると既存トークンが無効化されるため、発行は必ず1経路(Cron)に集約し、手動発行を禁止する。
  4. 応答設定の整合チェック: 公式アカウントマネージャー側の「あいさつメッセージ」「応答メッセージ」が有効な状態で自前実装も動かすと、二重返信が発生する。設定画面に注意を表示し、どちらで運用するかを明示的に選択させる。本仕様の既定は「公式側の自動応答をすべてOFF、自前実装に一本化」。
  5. Webhook URL の単一性: LINEプラットフォームに設定できる Webhook URL は1つのみ。他のLINEツール(Lステップ等)との併用はできないため、既存ツールがある場合は移行計画を先に立てる。

5.1.5 制約


5.2 F-26 友だち識別・ID連携

F-26 識別方式A(tracking_code 経由・既定)1メール本文のリンク/r/{code}?to=line2リダイレクタcode→contact_id 解決link_token 発行(15分)3友だち追加LINE公式アカウント4follow イベントこの時点では誰か不明5あいさつメッセージ通数無料。LIFFへ誘導6LIFF起動IDトークン検証 → userId7ID連携確定line_id_links に記録↑ ここが穴↑ 1ホップで塞ぐ(無料)識別方式の比較方式A tracking_codeメール・LP・フォーム経由98%confidence: high方式B LIFF先行ウェビナー申込・資料DL(LIFF内で完結)98%confidence: high方式C 自己申告自然流入。会社情報登録LIFFに誘導30%confidence: low企業の解決順序:tracking_code → メール完全一致 → ドメイン一致 → 会社名正規化(複数候補なら自動確定せずレビューキューへ)
図 21follow イベント単体では誰か分からない。あいさつメッセージ→LIFFの1ホップで必ず結合する

5.2.1 概要

本仕様の中核機能。友だち追加された userId を、自社の contacts.id / companies.id に紐づける。2.2項の「識別済み友だちだけを増やす」を実装で担保する。

5.2.2 識別方式

方式A: tracking_code 経由(推奨・既定)

既存の /r/{tracking_code} リダイレクタ(v1.2 F-09)を拡張し、LINE友だち追加URLへの中継を追加する。

1. メール本文/LP内リンク: https://ma.example.co.jp/r/{tracking_code}?to=line
2. リダイレクタが以下を実行:
   a. tracking_code から contact_id / company_id を解決
   b. 一時トークン link_token を発行(D1に保存、有効期限15分)
   c. LINE友だち追加URL + state に link_token を付与してリダイレクト
      https://line.me/R/ti/p/@xxxxxxx  (state相当はLIFF側で受ける)
3. 友だち追加 → follow イベント受信
4. あいさつメッセージ(無料)で「登録内容の確認」LIFFへ誘導
5. LIFF起動時に link_token を渡し、IDトークン検証済みの userId と結合
6. line_id_links に (userId, contact_id, company_id, 'tracking_code') を登録

技術上の注意: LINEの友だち追加URLには任意のクエリパラメータを安全に引き回す仕組みが公式には用意されていない。したがって follow イベント単体では誰か分からない。本方式では「あいさつメッセージ → LIFF」の1ホップを必ず挟むことで、link_tokenuserId を確実に結合する。あいさつメッセージは通数無料であるため、このホップにコストは発生しない。

方式B: LIFF先行(ウェビナー申込・資料DL)

申込フォーム自体をLIFFで実装する場合、フォーム送信時点で userId とフォーム入力(会社名・氏名・メール)が同時に手に入る。最も確実な識別方式。

1. LP上の「LINEで申し込む」→ LIFF起動(未友だちなら liff.requestFriendship() で追加を促す)
2. IDトークン検証 → userId 確定
3. フォーム入力 → メールアドレスで contacts を照合(なければ新規作成)
4. line_id_links に (userId, contact_id, company_id, 'liff_form') を登録

方式C: 自己申告(自然流入)

tracking_code も申込情報も無い友だち。あいさつメッセージから「会社情報の登録」LIFFへ誘導し、会社名・氏名・メールを入力してもらう。入力率は低いことを前提とし、未識別のまま3回のリマインドに反応しなければ配信対象から除外する(F-33)。

5.2.3 企業の解決

contact_id が確定すれば company_id は既存のリレーションで解決される。メールアドレスしか無い場合は、v1.2 の企業マスタに対して次の順で照合する。

優先 照合キー 備考
1 tracking_codecontacts 確実
2 メールアドレス完全一致 → contacts 確実
3 メールアドレスのドメイン → companies.domain フリーメールドメインは除外リストで弾く
4 入力された会社名の正規化一致 → companies.name 「株式会社」「(株)」等を正規化。候補が複数なら自動確定せず、管理画面のレビューキューに送る

5.2.4 出力・データ

テーブル 主な内容
line_friends user_id(PK)、status(active/blocked)、followed_atunfollowed_atdisplay_name_hash
line_id_links user_idcontact_idcompany_idlink_methodlinked_atconfidence
line_link_tokens link_tokencontact_idexpires_atconsumed_at

5.2.5 制約・注意


5.3 F-27 メッセージ配信エンジン

F-27 配信要求の処理経路配信要求理由コード必須idempotency_key必須F-33 ガバナンス・通数予算・頻度上限・ブロック確率スコア・配信設定(preferences)通過分のみURL自動変換本文内URL → /r/{tracking_code}channel=line / reason / message_idQueues → LINE APImulticastは500件ごとに分割200 req/秒の制限内で消化除外・延期される配信excluded_frequency / excluded_block_score / deferred失敗時の扱い429 Too Many Requests→ バックオフ後に再試行400 ブロック済み / 存在しないID→ 再試行せず status=blocked に更新replyToken 失効→ push にフォールバック(通数が発生するためログに残す)Queues 再試行→ idempotency_key で二重送信を防ぐ
図 22全ての配信はガバナンス(F-33)を通過してから実行される

5.3.1 概要

reply / push / multicast を統一インタフェースで実行し、通数を予算内に収める。送信前に必ずガバナンスチェック(F-33)を通す

5.3.2 配信要求の構造

項目 必須 内容
配信種別 reply / push / multicast
対象 replyToken または userId 配列
メッセージ 最大5オブジェクト。text / image / template / flex / imagemap
配信理由コード webinar_reminder / doc_followup / quote_ready 等。集計とガバナンスの単位
優先度 transactional(相手が待っている) / promotional(こちらから)
予定送信時刻 - 未指定は即時
リンク - 本文内URLは自動的に /r/{tracking_code} 形式に変換される

5.3.3 処理仕様

  1. reply の優先: Webhookイベントに対する応答は必ず reply を使う。replyToken が失効している場合のみ push にフォールバックし、その旨をログに残す(通数が発生するため)。
  2. multicast の分割: userId 配列は500件ごとに分割してリクエストする。分割後の各リクエストは Queues に投入し、200 req/秒の制限内で消化する。
  3. URLの自動変換: メッセージ本文内のURLは、送信前に /r/{tracking_code} 形式へ書き換える。tracking_code には channel=line、配信理由コード、message_id を含める。これにより F-23 のアトリビューションでLINE経由のクリックが他チャネルと同じ粒度で計測される。
  4. 1リクエストへの集約: 通数は吹き出し数に影響されないため、テキスト+画像+ボタンは必ず1リクエストにまとめる。分割送信を検知したらバリデーションエラーとする。
  5. べき等性: 配信要求には idempotency_key を必須とし、Queues の再試行で二重送信されないようにする。
  6. 失敗時の扱い: 429 はバックオフ後に再試行。400(ブロック済み・存在しないID)は再試行せず line_friends.statusblocked に更新する。

5.3.4 メッセージテンプレート

テンプレート種別 用途 備考
テキスト 短い通知 5,000文字まで。ただし実運用は300文字以内を推奨
画像 + テキスト 資料紹介 画像はR2でホスト。HTTPS必須
ボタンテンプレート 1アクションの誘導 LIFFへのリンク
カルーセル 複数の資料・事例の提示 最大10カラム
Flex Message ウェビナー案内、見積サマリ JSON定義。テンプレートをF-11のブロックライブラリ同様に管理する
イメージマップ ビジュアル重視の告知 使用頻度は低い

5.3.5 制約


5.4 F-28 リッチメニュー出し分け

F-28 ステータス別リッチメニューdefault未識別会社情報の登録サービス紹介LPよくある質問identified識別済み・商談前資料一覧 / 事例ウェビナー / 見積相談予約 / 配信設定in_deal商談中提案資料 / 見積打合せ予約担当者に連絡customer既存顧客問い合わせ / 障害情報保守レポート新サービス案内dormant6か月以上無反応資料一覧配信設定(頻度↓)一括リンクAPIを使わない一括リンク/リンク解除は 3 req/時。個別リンクをキューで平準化するエイリアスでタブを切り替えるmenu-{role}-{tab} でIDを固定 → デザイン変更は実体だけ差し替え
図 23ステータスに応じた5種のメニュー。切替は個別リンクをキューで平準化

5.4.1 概要

リッチメニューは表示もタップも通数無料であり、LINEにおける最大の資産である。相手のステータスに応じて内容を出し分け、「送らずに接点を維持する」を実現する。

5.4.2 メニュー設計

メニューID 対象 タブ構成 主なリンク先
default 未識別の友だち 1タブ 会社情報の登録 / サービス紹介LP / よくある質問
identified 識別済み・商談前 2タブ(情報/相談) 資料一覧 / 事例 / ウェビナー / 簡易見積 / 相談予約 / 配信設定
in_deal 商談中 2タブ(案件/連絡) 提案資料 / 見積 / 打合せ予約 / 担当者に連絡
customer 既存顧客 2タブ(サポート/情報) 問い合わせ / 障害情報 / 保守レポート / 新サービス案内
dormant 6か月以上無反応 1タブ 資料一覧 / 配信設定(頻度を下げる導線を目立たせる)

5.4.3 処理仕様

  1. ユーザー単位リンクを使う: ステータス変化時に、対象 userId に対してユーザー単位リッチメニューをリンクする。ユーザー単位はデフォルトより優先度が高い。
  2. 一括APIを使わない: 一括リンク/リンク解除は 3 req/時 という厳しい制限があるため、大量の切替が必要な場合でも使わない。個別リンクをQueuesで平準化して処理する。
  3. エイリアスによるタブ切替: タブは richmenuswitch アクションとリッチメニューエイリアスで実装する。エイリアスIDは menu-{role}-{tab} の命名で固定し、デザイン変更時はエイリアスに紐づく実体だけを差し替える。
  4. ステータス変化のトリガー: contacts.status の変更、商談ステータスの変更、最終反応日からの経過日数(日次Cron)で切替を発火する。
  5. 切替の遅延を許容する: LINE側の反映には時間がかかる場合がある。切替の完了をユーザー体験の前提にしない(切替直後に「メニューから操作してください」と案内しない)。

5.4.4 制約


6. 機能要件 第II部 — 体験・シナリオ(F-29〜F-32)

6.1 F-29 LIFFアプリ基盤

F-29 LIFFアプリ6本と、それぞれの役割Compact会社情報の登録/確認識別方式Cの受け皿Tall資料ダウンロード行動スコアの入力Tallウェビナー申込識別方式BFull商談予約商談化の直接導線Full簡易見積診断高関与シグナルCompact配信設定ブロック抑制の要配信設定 LIFF(最重要)— 「送らない権利」を相手に渡す配信頻度週1回まで月1回まで既定重要な連絡のみ停止カテゴリウェビナー案内技術情報事例紹介サービス更新情報「停止」を選んだ人にも transactional は届ける本人が申し込んだウェビナーのリマインド等。一律停止は「申し込んだのに連絡が来ない」を生む。1チャネルあたりLIFFアプリは最大30本。LIFFブラウザは12時間以内の再訪でレジューム、それ以降はリロード(状態をブラウザに持たない)
図 24LIFFの利用は通数無料。配信設定LIFFがブロック抑制の要になる

6.1.1 概要

LINE内で完結するWebアプリ群。LIFFの利用は通数無料であり、リッチメニューと並んで「送らずに価値を提供する」中核となる。

6.1.2 アプリ一覧

アプリ 画面サイズ 機能 識別への寄与
会社情報の登録/確認 Compact 会社名・氏名・メール・役職の入力/確認 識別方式C の受け皿
資料ダウンロード Tall 資料一覧から選択 → PDFのURLを表示。DL履歴を記録 行動スコア
ウェビナー申込 Tall v2.0 F-19 の申込をLINE内で完結 識別方式B
商談予約 Full 空き枠カレンダーから日時選択 商談化の直接導線
簡易見積診断 Full 5〜8問の設問 → 概算レンジと想定期間を提示 高関与シグナル
配信設定 Compact 配信頻度・カテゴリの選択、配信停止 ブロック抑制の要

6.1.3 共通処理仕様

  1. 初期化: 各ページ遷移で liff.init() を実行する。URLクエリの操作は liff.init() の Promise が resolve した後に行う。
  2. 認証: liff.getIDToken() で取得したIDトークンをサーバー側で検証し、userId を確定する。liff.getProfile() の結果をサーバーに送って信用する実装は禁止(G-19)。
  3. 未ログイン時: 外部ブラウザで開かれた場合は liff.login() を実行する。LIFFブラウザでは自動ログイン済みのため liff.login() を呼ばない(呼ぶとエラーになる)。
  4. 未友だち時: liff.requestFriendship() で友だち追加を促す。追加せずに離脱した場合も、フォーム入力があれば contacts には登録する(メールチャネルでフォローできるため)。
  5. 完了後の挙動: 処理完了後は liff.closeWindow() で閉じる。ただし外部ブラウザでは動作保証がないため、閉じられなかった場合の完了画面も用意する。
  6. 共有機能: 事例・資料の共有には liff.shareTargetPicker() を使う。ただし送信先・送信人数は取得できないため、共有数をKPIにできない。共有経由の流入は共有時に発行する tracking_code で計測する。

6.1.4 配信設定LIFF(最重要)

2.4項の「送らない権利を相手に渡す」を実装する画面。

設定項目 選択肢 既定
配信頻度 週1回まで / 月1回まで / 重要な連絡のみ / 停止 月1回まで
受け取るカテゴリ ウェビナー案内 / 技術情報 / 事例紹介 / サービス更新情報 すべてON
予約・申込の確認通知 受け取る / 受け取らない 受け取る(transactional は頻度上限の対象外)

設計上の要点: 「停止」を選んだ友だちにも transactional(本人が申し込んだウェビナーのリマインド等)は届ける。ここを一律停止にすると、逆に「申し込んだのに連絡が来ない」という不満が生じる。両者を明確に分離して説明する。

6.1.5 制約


6.2 F-30 シナリオ配信(自前ステップ配信)

F-30 シナリオの構造とステップ種別待機分/時/日・絶対時刻分岐条件式で経路を分ける配信チャネル+テンプレートタグ付与contactsにタグ通知営業へSlack/メール終了シナリオから離脱ウェビナー運用シナリオ(8.2項)の実装イメージウェビナー申込トリガーLIFF完了申込完了+カレンダーメール参加URL(記録)待機前日10:00までLINEリマインド待機開始5分前LINEまもなく開始待機終了直後LINEアンケート+資料分岐参加時間が長い?チャネル選択個別相談の案内通知営業へSlack分岐条件で使える変数企業属性業種従業員規模都道府県既存/新規行動LP閲覧滞在時間資料DLウェビナー参加メール開封率LINE識別状態配信設定ブロック確率直近配信からの日数案件商談ステータス見積提示の有無
図 25LINE・メール・フォームを同一シナリオに混在できることが最大の価値

6.2.1 概要

3.9項の理由により、ステップ配信はLINE標準を使わず自前実装する。LINE・メール・フォームを同一シナリオ内で混在させられることが最大の価値である。

6.2.2 シナリオの構造

シナリオ = 開始条件 + ステップの有向グラフ

ステップの種別:
  - 待機      : 分/時間/日 で指定。絶対時刻指定も可(ウェビナー開始5分前 等)
  - 分岐      : 条件式で経路を分ける
  - 配信      : チャネル(LINE/メール)とテンプレートを指定
  - タグ付与  : contacts にタグを付ける
  - 通知      : 営業担当へSlack/メール通知
  - 終了      : シナリオから離脱

6.2.3 開始条件(トリガー)

トリガー
LINE友だち追加(識別済みになった時点) 初回フォロー7日シナリオ
ウェビナー申込 申込直後 → 前日 → 5分前 → 終了後
資料ダウンロード DL直後 → 3日後 → 10日後
LP行動スコア閾値超過(v2.0 F-14) 高関与シグナル → 営業通知 + LINE個別連絡
簡易見積診断の完了 診断結果 → 3日後にフォロー
ステータス変更 商談化、失注、既存顧客化
無反応期間の経過 90日 → 配信頻度確認、180日 → 休眠処理

6.2.4 分岐条件で使える変数

カテゴリ 変数
企業属性 業種、従業員規模、都道府県、既存/新規
担当者属性 役職区分、自己申告の関心領域
行動 LP閲覧回数、滞在時間、資料DL数、ウェビナー参加有無、メール開封率
LINE 識別状態、配信設定の頻度選択、直近配信からの経過日数、ブロック確率スコア
案件 商談ステータス、見積提示の有無

6.2.5 処理仕様

  1. チャネル選択の委譲: 配信ステップは「LINE固定」ではなく「F-32のチャネル選択エンジンに委ねる」を既定とする。相手がLINE識別済みならLINE、そうでなければメールが選ばれる。
  2. 配信の直列化: 同一人物が複数シナリオに同時に入ることを許すが、配信は F-33 の頻度上限を必ず通す。上限に達した場合は配信ステップをスキップではなく延期する(既定24時間)。延期が3回続いた場合は破棄しログに残す。
  3. 絶対時刻トリガー: 「ウェビナー開始5分前」のような絶対時刻は Cloudflare Workflows または Durable Objects Alarm で実装する。Cron(最短1分)では5分前の精度は担保できるが、Queuesの遅延を見込んで2分前に投入する
  4. 停止条件: 商談化・失注・ブロック・配信停止設定のいずれかが発生した時点で、該当者の全シナリオを即座に停止する。
  5. プレビューとテスト送信: 管理者は自分の userId に対してテスト送信できる。テスト送信も通数を消費するため、月間の上限(既定50通)を設ける。

6.2.6 制約


6.3 F-31 チャット一次応答・営業引き継ぎ

F-31 応答の4階層第0層ポストバック応答ボタン / リッチメニュー無料 (reply)定型の導線。最速・最確実55%第1層キーワード応答「料金」「事例」「資料」無料 (reply)頻出語への即答25%第2層AI応答Workers AI + Vectorize無料 (reply)FAQの範囲。信頼度が低ければ第3層へ15%第3層有人チャット営業担当が応答無料 (チャット)個別の相談。企業情報を横に表示5%想定される処理割合第2層は社内ナレッジベース(Vectorize)に限定した検索拡張生成とし、信頼度が閾値未満なら「担当者に確認します」と返して第3層へ。営業時間外は自動応答+翌営業日の約束。未応答15分でアラート。
図 26reply は通数無料。LINEの費用対効果が最も高い領域

6.3.1 概要

友だちからのメッセージに応答する。reply は通数無料であるため、応答は積極的に行ってよい。ここがLINEの費用対効果が最も高い領域である。

6.3.2 応答の階層

階層 手段 通数 対応範囲
第0層 ポストバック応答(ボタン/リッチメニュー) 無料(reply) 定型の導線。最も高速で確実
第1層 キーワード応答 無料(reply) 「料金」「事例」「資料」等の頻出語
第2層 AI応答(自社実装 / Workers AI) 無料(reply) FAQの範囲。回答できない場合は正直に第3層へ渡す
第3層 有人チャット 無料(チャット) 営業担当が公式アカウントマネージャーまたは自社管理画面から応答

6.3.3 処理仕様

  1. 受信の即時応答: Webhookは署名検証後すぐに200を返し、処理はQueuesへ流す。ただし replyToken の失効を避けるため、第0層・第1層の応答はWebhookハンドラ内で同期的に返す(処理時間は50ms以内を目標)。
  2. AI応答の設計: 第2層は v2.0 の Workers AI / AI Gateway を利用する。応答は社内ナレッジベース(Vectorize)に限定した検索拡張生成とし、ハルシネーションを防ぐ。信頼度が閾値未満の場合は「担当者に確認します」と返して第3層へエスカレーションする。
  3. 営業への通知: 第3層へのエスカレーション時、対象 contact_id の担当営業へSlack/メールで通知する。通知には企業名・担当者名・直近の行動履歴・メッセージ本文を含める。
  4. 応答時間の管理: 営業時間外は自動でその旨を返し、翌営業日の対応を約束する。応答時間内で15分以上未応答のスレッドは管理画面でアラート表示する。
  5. 会話履歴の保持: LINE User Data Policy に基づき、メッセージ本文の保存は業務上必要な期間に限る。既定は90日、その後は要約のみを残して本文を削除する(G-22)。

6.3.4 LINE公式の有料オプションとの関係

LINEヤフーは「AIチャットボット(β)」を提供しており、利用にはチャットProオプション(月額3,000円・税別)が必要。PDF・画像からのQ&A自動生成に対応する。

選択肢 月額 判断
自社実装(Workers AI + Vectorize) 実質数百円 既定。ナレッジをMA側に一元化でき、LP・メールと共通のFAQを使える
LINE AIチャットボット(β) 3,000円 自社実装の運用が回らない場合の代替。ただしMA側の文脈(企業属性・行動履歴)を使えない

6.4 F-32 チャネル選択エンジン

F-32 チャネル選択の判定フロー配信要求contact_id / 理由コードtransactional(相手が待つ)promotional(こちらから)LINE識別済み かつ 未ブロックLINE (push)それ以外メール重要度 最高LINE + メール 併用可配信設定が「停止」送らない頻度上限に到達延期(24h後に再判定)直近30日にLINE反応ありLINE (multicast)直近90日にLINE反応なしメール(通数を温存)LINE未識別メールメール到達不能 かつ LINE識別済みLINE重複配信の抑止(LINE導入の前提条件)・同一 content_id × contact_id の24時間以内の再送を禁止・promotional のチャネル併用を禁止・全チャネル合計で 1人あたり週2回・月6回を上限
図 27LINEを追加して「両方来る」状態を作ると、両方のチャネルを同時に失う

6.4.1 概要

同一人物に対して LINE / メール / フォームのどれで連絡するかを決定する。同じ内容を複数チャネルで重複送信しないことが最大の目的。

6.4.2 選択ロジック

入力: contact_id, 配信理由コード, 優先度(transactional/promotional)

1. transactional(相手が待っている連絡)の場合
   → LINE識別済み かつ 未ブロック  → LINE(push)
   → それ以外                      → メール
   ※ 重要度が最高(商談日時変更等)の場合は LINE + メール の併用を許可

2. promotional(こちらからの情報提供)の場合
   → 配信設定が「停止」                        → 送らない
   → 頻度上限に達している(F-33)                → 延期
   → LINE識別済み かつ 直近30日にLINE反応あり  → LINE(multicast)
   → LINE識別済み かつ 直近90日にLINE反応なし  → メール(LINEの通数を温存)
   → LINE未識別                                → メール
   → メール到達不能(バウンス)かつLINE識別済み  → LINE

3. いずれのチャネルも使えない場合
   → フォーム営業(F-06)の候補キューへ(半自動モード)

6.4.3 重複配信の抑止

ルール 内容
同一コンテンツの多重送信禁止 content_id + contact_id で送信済み判定。24時間以内の再送を禁止
チャネル併用の制限 transactional かつ重要度「最高」のみ併用可。promotional の併用は禁止
総接触回数の上限 全チャネル合計で1人あたり週2回、月6回を上限とする(v1.2 のメール上限と統合管理)

設計上の要点: LINEを追加したことで「メールも来るしLINEも来る」状態を作ると、両方のチャネルを同時に失う。チャネル選択エンジンは追加機能ではなく、LINE導入の前提条件である。


7. 機能要件 第III部 — 統制・分析(F-33〜F-35)

7.1 F-33 配信ガバナンス・ブロック抑制

F-33 送信前の3段のふるい配信対象350人① 配信設定preferences で停止/対象外− 42人② 頻度上限週1通・月4通(延期)− 18人③ ブロック確率スコア高リスクを除外− 23人実配信267人通数予算ガード(コミュニケーションプラン)60%80%95%143 / 200 通残 57通超過時:transactional のみ許可。promotional は自動的に翌月へ延期プラン移行推奨:3か月平均 > 160通 → ライト / > 4,000通 → スタンダードブロック確率スコアの特徴量直近90日の開封なし直近90日のクリックなし直近30日の受信通数が多い未識別リッチメニュー未タップLIFF未利用初期はルールベース。友だち1,000人・ブロック実績100件でロジスティック回帰へブロック率の監視(業界平均29.7%より厳しく設定する)累計ブロック率20%目標15%未満月次の新規ブロック率3%単月の急増を検知配信直後24時間のブロック数対象の1%原因の配信を特定できる
図 28通数予算・頻度上限・ブロック確率の3段のふるいを、送信前に必ず通す

7.1.1 概要

通数予算とブロック率を機能で守る。F-27 のすべての配信は本機能のチェックを通過しなければ実行できない

7.1.2 通数予算ガード

設定 既定 内容
現在のプラン コミュニケーション 無料枠 200通
月間通数上限 無料枠の100% 超過するとプランによっては送信不能になるため
警告閾値 60% / 80% / 95% ダッシュボードとSlack通知
予約配信の事前判定 有効 予約時点で「今月の残枠を超える配信」を検知して警告
超過時の挙動 transactional のみ許可 promotional は自動的に翌月へ延期

プラン移行の推奨判定

条件 推奨
直近3か月の平均通数 > 160通(無料枠の80%) ライトプランへ移行(月5,000円 / 5,000通)
直近3か月の平均通数 > 4,000通 スタンダードプランへ移行(月15,000円 / 30,000通)
一時的なスパイク(ウェビナー月のみ超過) 移行せず、promotional の延期で吸収

7.1.3 頻度上限

優先度 既定の上限 ユーザー設定による変更
promotional 週1通 / 月4通 配信設定LIFFで「月1回まで」「重要な連絡のみ」に変更可
transactional 上限なし ただし同一内容の重複は禁止

上限に達した配信は延期され、24時間後に再判定される。3回延期された配信は破棄し、その事実を配信ログに残す。

7.1.4 ブロック確率スコアとサプレッション

ブロックは事後に検知しても手遅れである。事前に確率を推定して配信対象から外す。

スコアの入力特徴量

特徴量 方向
友だち追加からの経過日数 長いほど低リスク(初期離脱が多い)
直近90日のLINEメッセージ開封(インプレッション)有無 無いほど高リスク
直近90日のリンククリック有無 無いほど高リスク
リッチメニュータップ回数 少ないほど高リスク
直近30日の受信通数 多いほど高リスク
識別状態 未識別ほど高リスク
配信設定の変更履歴(頻度を下げた) 高リスク
LIFF利用有無 無いほど高リスク

推定方法: 当社の友だち規模では機械学習モデルの学習データが不足するため、初期はルールベースのスコアリングとする。友だち数が1,000を超え、ブロック実績が100件を超えた段階でロジスティック回帰へ移行する。

サプレッション規則

スコア 扱い
高(既定: 3条件以上該当) promotional 配信の対象から除外。リッチメニューを dormant へ切替
配信頻度を自動で半減
通常配信

7.1.5 ブロック率の監視

指標 既定の警告閾値 備考
累計ブロック率 20% 業界平均29.7%より厳しく設定
月次の新規ブロック率 3% 単月での急増を検知
配信直後24時間のブロック数 配信対象の1% 特定の配信が原因であることを特定できる

配信直後のブロック急増を検知した場合、同一テンプレートを使う予約配信を自動的に保留し、管理者に確認を求める。


7.2 F-34 LINE行動計測

F-34 イベント収集からアトリビューション統合までWebhookline_followline_unfollowline_message_receivedline_postback配信エンジンline_message_sent/r/ リダイレクタline_link_clickLIFFline_liff_openline_liff_completeAnalytics Engine生イベント(90日)eventoccurred_atchannel: "line"tracking_codecompany_id / contact_idpropertiesD1に1件ずつINSERTしない(v2.0 の禁止パターン)日次集計line_daily_statsbillable_countimpression_countclick_countblock_countfriend_total(統計API)identified_total(自社DB)LINE統計APIは60req/時→ 日次1回のみ取得F-23アトリビューションline_follow中間タッチline_clickクリックline_liff_cvCVline_chat高関与 ★「開封率」の扱いLINEには厳密な開封の概念がない。統計APIのインプレッション(吹き出しの表示回数)を開封相当として扱い、メールの開封率(トラッキングピクセル)とは別指標であることをダッシュボード上に明記する。横並びにするのは CV と CPA だけ。
図 29LINEは最後の一押しに現れやすい。必ずマルチタッチで評価する

7.2.1 概要

LINE上の行動を v2.0 F-14 と同一のイベントスキーマで収集し、F-23 のチャネル横断アトリビューションに統合する。

7.2.2 イベント一覧

イベント名 発生源 主なプロパティ
line_follow Webhook user_id, link_method, tracking_code
line_unfollow Webhook user_id, days_since_follow, last_message_at
line_message_received Webhook user_id, message_type, is_first_of_session
line_message_sent 配信エンジン user_id, reason_code, send_type, template_id
line_postback Webhook user_id, postback_data, source(richmenu/button)
line_link_click /r/{tracking_code} user_id, message_id, url
line_richmenu_tap postback user_id, menu_id, area_index
line_liff_open LIFF user_id, liff_id, entry_point
line_liff_complete LIFF user_id, liff_id, result
line_block_predicted F-33 user_id, score, reasons[]

7.2.3 共通プロパティ(v2.0 F-14 と共通)

{
  "event": "line_link_click",
  "occurred_at": "2026-08-19T10:23:45.123Z",
  "channel": "line",
  "tracking_code": "xxxxxxxxxxxx",
  "company_id": 1234,
  "contact_id": 5678,
  "session_id": "...",
  "properties": { }
}

7.2.4 処理仕様

  1. 生イベントは Analytics Engine へ。D1に1件ずつINSERTしない(v2.0の禁止パターン)。
  2. 集計は日次line_daily_stats に日別・配信理由コード別で集約する。
  3. LINE公式の統計APIは補助。友だち数・ターゲットリーチ数・ブロック数はLINE側のAPIでしか取れないが、60 req/時の制限があるため日次1回のみ取得する。日中のリアルタイム値は自前計測を正とする。
  4. 「開封率」の定義: LINEには厳密な開封の概念がない。LINE側の統計APIが返すインプレッション(吹き出しの表示回数)を開封相当として扱い、メールの開封率とは別指標であることをダッシュボード上に明記する。

7.2.5 アトリビューションへの統合(F-23拡張)

追加するタッチポイント種別 内容
line_follow 友だち追加。多くの場合ファーストタッチではなく中間タッチ
line_click LINEメッセージからのクリック
line_liff_cv LIFF内でのCV(ウェビナー申込・商談予約・資料DL)
line_chat 有人チャットの発生。高関与シグナルとして重み付けを高くする

分析上の要点: LINEは「最後の一押し」に現れやすく、ラストタッチ評価だと過大評価される。一方でメールから友だち追加した場合、LINEはメールの下流でしかない。必ずマルチタッチ(F-23の既定モデル)で評価する


7.3 F-35 LINEコンプライアンス管理

F-35 ガードレール G-16〜G-27 とチェックのタイミングテンプレート保存時G-18G-21G-24G-25G-26配信実行前G-16G-17G-18G-21Webhook受信時G-19G-20日次バッチG-22G-23設定変更時G-27G-16オプトインの記録(時刻・方法・同意文言)記録なしはpromotional対象外G-17broadcast の実行禁止API層でブロックG-18配信理由コードのない配信を禁止バリデーションG-19userId はIDトークン検証を経たものだけ信用クライアント申告は拒否G-20署名検証失敗のリクエスト本文をログに残さないログ出力前にフィルタG-21ブロック以外の配信停止導線を必ず含めるテンプレート検証G-22userId 以外を24時間以上保存しない日次パージ・表示名はハッシュG-23userId を第三者へ提供しない連携先ホワイトリストG-24禁止表現の配信を防ぐv2.0 F-11 のリストを適用G-25第三者のための広告媒体としての利用を禁止承認フローでチェックG-26ステマ規制。依頼投稿には「PR」表記必須表記G-27外部送信規律。タグ設置時にポリシー公表設定画面で必須化
図 30G-16〜G-27。設定ミスがアカウント停止に直結する領域を機能で塞ぐ

7.3.1 概要

v2.0 F-24 のガードレール管理に、LINE固有のガードレール G-16〜G-27 を追加する。設定ミス・運用ミスが法令違反やアカウント停止に直結する領域を、機能で塞ぐ。

7.3.2 ガードレール一覧

ID 内容 強制方法
G-16 友だち追加時にオプトインの記録(時刻・方法・同意文言バージョン)を残す 記録なしの友だちは promotional 配信の対象外
G-17 broadcast(全友だち配信)を配信エンジンから実行できない API層でブロック。例外は admin の二重確認フロー
G-18 配信理由コードのない配信を禁止 バリデーション
G-19 LIFFから受け取った userId はIDトークン検証を経たものだけを信用する サーバー側で検証。クライアント申告の userId は拒否
G-20 Webhook署名検証に失敗したリクエストの本文をログに残さない ログ出力前にフィルタ
G-21 配信停止(ブロック以外)の導線を全ての promotional メッセージに含める テンプレート検証。リッチメニューに常設
G-22 userId 以外のLINEユーザー情報を24時間以上保存しない。友だち情報・グループ情報は保存しない 日次パージバッチ。表示名はハッシュのみ
G-23 userId を第三者(広告事業者・外部ツール)へ提供しない 外部連携先のホワイトリスト管理
G-24 禁止業種・禁止表現の配信を防ぐ v2.0 F-11 の禁止表現リストをLINEテンプレートにも適用
G-25 第三者のための広告媒体としての利用を禁止(共催セミナー等は事前確認) テンプレート承認フローで「他社商材を含むか」をチェック
G-26 ステマ規制対応。第三者への依頼投稿・アンバサダー経由の配信には「PR」表記 該当テンプレートへの必須表記
G-27 外部送信規律への対応。LINE Tag等を自社サイトに設置する場合は外部送信ポリシーを公表 設定画面でタグ設置時に公表ページの更新を必須化

7.3.3 チェックのタイミング

タイミング チェック内容
テンプレート保存時 G-18, G-21, G-24, G-25, G-26
配信実行前 G-16, G-17, G-18, G-21 + 通数予算・頻度上限(F-33)
Webhook受信時 G-19, G-20
日次バッチ G-22(パージ)、G-23(連携先監査)
設定変更時 G-27

8. ユースケース別シナリオ設計

本章は「何に使うか」を具体化する。2.1項で述べたとおり、LINEが効くのは即時性が価値を持つ場面すでに接点のある個人に限られる。

8.1 ユースケース一覧と適性

ユースケース別の適性ウェビナー運用開始直前のリマインドが刺さる展示会・イベント当日QR1つで受付〜資料配布まで完結既存顧客のサポート窓口即時性と双方向性の両方が要る商談中の連絡日程調整。正式書類はメールで残す資料DL後のナーチャリング月1回程度。頻度を上げると切られる採用広報別アカウントを推奨×新規リード獲得2.1項の4つの壁(構造的に不向き)×定期メルマガ通数コストとブロックリスクに合わない
図 31LINEが効くのは即時性が価値を持つ場面と、すでに接点のある個人に限られる
ユースケース LINEの適性 理由
ウェビナー運用 開始直前のリマインドが刺さる。参加率が大きく変わる
展示会・イベント当日 QR1つで受付・資料配布・アンケートまで完結する
既存顧客のサポート窓口 障害連絡・保守レポート・問い合わせ。即時性と双方向性の両方が要る
商談中の連絡 日程調整・資料送付。ただし正式書類はメールで残す
資料DL後のナーチャリング 月1回程度。頻度を上げるとブロックされる
採用広報 候補者との接点。ただし別アカウントを推奨
新規リード獲得 × 2.1項のとおり構造的に不向き
定期メルマガ × 通数コストとブロックリスクに見合わない

8.2 ウェビナー運用シナリオ(最優先で実装)

ウェビナー運用シナリオのタイムライン申込直後LIFF申込完了+カレンダー申込直後メール参加URL(記録として必ず)trans前日 10:00LINEリマインド+事前質問trans開始5分前LINEまもなく開始しますtrans終了直後LINEアンケート+資料DLtrans翌営業日ch選択録画URL+関連事例promo7日後ch選択個別相談(滞在長のみ)promo開封タイミングの特性(LINEヤフー公表)すぐに開封約20%3〜6時間以内約50%その日のうち約80%期待効果と注意・ウェビナーの無断欠席は申込者の30〜50%が一般的・開始5分前のリマインドはこの層に直接届く・参加URLは必ずメールでも送る(記録として残す)・#7 は参加時間が長かった人のみに送る(promotional)
図 32開始5分前のLINEリマインドは、開封の約20%が即時・約80%が当日中という特性に直接効く

v2.0 F-19 のウェビナー機能に、LINEを重ねる。

# タイミング チャネル 内容 種別
1 申込直後 LIFF内で完結 申込完了 + カレンダー登録リンク
2 申込直後 メール 参加URL(正式な記録として必ずメールでも送る) transactional
3 前日 10:00 LINE リマインド + 参加URL + 事前質問の受付 transactional
4 開始5分前 LINE 「まもなく開始します」+ 参加URL transactional
5 終了直後 LINE アンケートLIFF + 資料DLリンク transactional
6 翌営業日 チャネル選択 録画URL + 関連事例 promotional
7 7日後 チャネル選択 個別相談の案内(参加時間が長かった人のみ) promotional
8 高関与時 通知のみ 営業へSlack通知(参加+資料DL+相談LIFF閲覧)

期待効果: 参加率の改善。ウェビナーの無断欠席は申込者の30〜50%が一般的だが、開始5分前のLINEリマインドはこの層に直接届く(開封の約20%が即時、約80%が当日中)。

8.3 展示会・イベント当日シナリオ

展示会当日の6ステップ1ブース来訪QRコード掲示(tracking_code埋込)2追加直後あいさつメッセージ(無料)→ LIFF3登録完了資料一覧LIFF紙を配らない4会期中リッチメニューをidentified へ切替5翌日チャネル選択経由でお礼+相談案内6事後名刺スキャン結果とID連携を突合従来(名刺交換のみ)・「後で連絡が来る」だけ・紙の資料を持ち帰らせる(何を見たか不明)・接点は自社の手元にしか残らないLINE併用・その場で相手の端末に導線が残る・LIFFで選ばせるとDL履歴という行動データが取れる・会期中もリッチメニューから予約が入る
図 33QRコードから会社情報登録LIFFまで、当日その場で完結させる
# 場面 実装
1 ブース来訪 QRコード(tracking_code 埋め込み)を掲示 → 友だち追加
2 追加直後 あいさつメッセージ(無料)で「会社情報の登録」LIFFへ誘導
3 登録完了 資料一覧LIFFへ遷移。その場で必要な資料だけ選ばせる(紙を配らない)
4 会期中 リッチメニューを identified へ切替。デモ予約・相談枠の空き状況を表示
5 会期終了翌日 チャネル選択エンジン経由でお礼 + 個別相談の案内
6 名刺との突合 名刺スキャン結果と line_id_links を突合し、重複を統合

この用途でLINEが強い理由: 名刺交換は「後で連絡が来る」だけだが、LINEはその場で相手の端末に導線が残る。紙の資料を持ち帰らせるより、LIFFで選ばせたほうがDL履歴という行動データも取れる。

8.4 既存顧客サポートシナリオ

既存顧客サポート — 押さずに常設する毎月 push する場合12通/年 × 顧客数顧客50社なら年600通。無料枠を圧迫するリッチメニューに常設する場合0通かつメニューのタップが関与度の指標になる保守契約開始リッチメニューを customer へ切替障害発生影響顧客へ push(最優先)transactional復旧続報を pushtransactional問い合わせチャット F-31(第0〜2層で一次応答)無料月次保守レポートを LIFF で閲覧(配信しない)無料契約更新3か月前更新案内promotional
図 34月次レポートは配信せずリッチメニューから取りに来てもらう。安く、かつタップが関与度指標になる
# 場面 実装 種別
1 保守契約開始 リッチメニューを customer へ切替
2 障害発生 影響顧客へ push(最優先の transactional) transactional
3 復旧 続報を push transactional
4 問い合わせ チャット(F-31)。第0〜2層で一次応答、必要に応じ営業/技術へ 無料
5 月次 保守レポートをLIFFで閲覧(配信せず、メニューから見に来てもらう) 無料
6 契約更新3か月前 更新案内 promotional

設計上の要点: 月次レポートを毎月pushすると年12通×顧客数の通数を消費する。リッチメニューに常設して取りに来てもらうほうが安く、かつメニューのタップが関与度の指標になる。

8.5 採用広報(別アカウント推奨)

営業用の公式アカウントと採用用を分けるべき理由:

ただしアカウントを分けるとプロバイダーが同じでも公式アカウントが別になるため、userId は共通でも友だち関係は別々になる。統合分析は contacts レベルで行う。


9. 計測仕様

9.1 主要KPI

主要KPI(初年度目標)資産識別済み友だち数300識別率80%以上健全性累計ブロック率15%未満業界平均29.7%月間通数200通以内無料枠反応インプレッション率60%以上クリック率15%以上リッチメニュータップ/月友だち数×2転換LIFF完了数/月30LINE起点の商談化四半期3件F-23で按分メールと横並びにしてよい指標○ CV○ CPA✕ 開封率✕ 配信停止率開封率は定義が異なり(ピクセル読込 vs 吹き出し表示)、配信停止率もブロックが不可逆なため比較できない
図 35資産・健全性・反応・転換の4階層。友だち総数は主要KPIに含めない
階層 KPI 定義 目標(初年度)
資産 識別済み友だち数 line_id_linkscontact_id があり status=active 300
資産 識別率 識別済み友だち ÷ 友だち総数 80%以上
健全性 累計ブロック率 ブロック数 ÷ 累計友だち追加数 15%未満
健全性 月間通数 課金対象通数 200通以内(無料枠)
反応 インプレッション率 LINE統計APIのインプレッション ÷ 配信通数 60%以上
反応 クリック率 line_link_click ÷ 配信通数 15%以上
反応 リッチメニュータップ数/月 line_richmenu_tap の合計 識別済み友だち数 × 2
転換 LIFF完了数/月 line_liff_complete 30
転換 LINE起点の商談化数 F-23のアトリビューションで按分 四半期3件

9.2 メールとの比較の注意

指標 メール LINE 比較可否
開封率 トラッキングピクセルの読込 インプレッション(吹き出し表示) 不可。定義が異なる
クリック率 開封者ベース or 送信者ベース 送信者ベース 送信者ベースに揃えれば比較可
配信停止率 配信停止リンクのクリック ブロック + 配信設定変更 不可。ブロックは不可逆
CV 同一の tracking_code 基盤 同左 。これが唯一の共通土俵

ダッシュボードでは開封率をチャネル横断で並べない。CVとCPAだけを横並びにする

9.3 データ保持

データ 保持期間 根拠
生イベント(Analytics Engine) 90日 v2.0 F-14 と同じ
日次集計(line_daily_stats) 5年 分析用
メッセージ本文(受信) 90日、以後は要約のみ LINE User Data Policy / G-22
表示名・プロフィール画像URL 保存しない(ハッシュのみ) G-22
userIdcontact_id の紐付け 契約終了まで 業務上必要
ブロック済み友だちの記録 3年 再追加時の識別のため

10. 画面仕様(追加)

10.1 画面一覧

画面構成 S-28 〜 S-38分析・一覧S-28LINEダッシュボードS-29友だち一覧S-30友だち詳細S-38通数・ブロック分析配信・シナリオS-31テンプレート管理S-32配信作成・予約S-33シナリオエディタ体験・設定S-34リッチメニュー管理S-35LIFFアプリ管理S-36チャットS-37LINE設定S-28 LINEダッシュボード 最上段識別済み友だち287人前月比 +23識別率82.5%前月比 +3.1pt当月通数143 / 200残 57通友だち総数 348人 / ブロック率 12.4% ← 副次指標として小さく表示S-32 送信ボタンを押す前に必ず表示するもの送信対象数と消費通数の見積当月残枠との関係(超過時はボタン非活性)頻度上限で除外される人数と内訳ブロック確率スコアで除外される人数ガードレール検証結果(G-18/21/24/25/26)
図 36S-28〜S-38。ダッシュボードの最上段は識別済み友だち数・識別率・当月通数の3つのみ
画面ID 画面名 主な内容 ロール
S-28 LINEダッシュボード 識別済み友だち数、識別率、ブロック率、当月通数と残枠、直近の反応 admin/member
S-29 友だち一覧 識別状態・企業名・担当者名・最終反応日・ブロック確率スコアで絞り込み admin/member
S-30 友だち詳細 企業/担当者情報、配信履歴、行動履歴、チャット履歴、ID連携の手動修正 admin/member
S-31 メッセージテンプレート管理 Flex/カルーセル等のテンプレート編集、プレビュー、ガードレール検証結果 admin
S-32 配信作成・予約 対象抽出、テンプレート選択、通数見積、頻度上限の抵触表示、予約 admin/member
S-33 シナリオエディタ ステップのグラフ編集、分岐条件、チャネル指定、テスト送信 admin
S-34 リッチメニュー管理 メニュー定義、エイリアス、割当ルール、画像アップロード admin
S-35 LIFFアプリ管理 LIFF ID とアプリの対応、公開状態、利用統計 admin
S-36 チャット 有人応答。企業情報と行動履歴を横に表示。営業への割当 admin/member
S-37 LINE設定 チャネル情報、トークン、Webhook疎通、応答設定の整合チェック admin
S-38 通数・ブロック分析 月次推移、配信理由コード別の通数と反応、配信直後のブロック増加検知 admin

10.2 主要画面の補足

S-28 LINEダッシュボード

最上段に置く数字は次の3つのみとする。友だち総数は副次指標として小さく表示する(2.2項)。

┌──────────────┬──────────────┬──────────────┐
│ 識別済み友だち  │  識別率        │  当月通数      │
│    287人      │    82.5%      │  143 / 200    │
│  前月比 +23   │  前月比 +3.1pt │  残 57通       │
└──────────────┴──────────────┴──────────────┘
   友だち総数 348人 / ブロック率 12.4%

S-32 配信作成・予約

送信ボタンを押す前に、以下を必ず画面上で確定表示する。

S-36 チャット

左に会話、右に企業情報・行動履歴を並置する。営業が「誰と話しているか」を分からないまま応答する状態を作らない。未応答15分でアラート。


11. データベース設計(追加)

11.1 ER概要

テーブル構成(追加分)companies (v1.2)idnamedomainindustryline_preferencesuser_id (PK)frequencycategoriestransactional_enabledline_richmenu_stateuser_id (PK)menu_idline_richmenu_idsync_statuscontacts (v1.2)idcompany_idemailtracking_codeline_id_linksiduser_idcontact_idcompany_idlink_methodconfidenceis_activeline_friendsuser_id (PK)statusfollowed_atunfollowed_atdisplay_name_hashblock_scorelast_inbound_atline_messagesiddirectionsend_typereason_codeprioritybody / summarybillable_countidempotency_keyline_scenario_stepsidscenario_idstep_typeconfignext_step_idline_scenariosidnametrigger_typetrigger_configline_link_tokenslink_token (PK)contact_idexpires_atconsumed_atline_message_targetsmessage_iduser_idresultimpressed_atclicked_atline_daily_statsstat_date / reason_codebillable / impressionclick / blockfriend / identified_total1:N1:NN:11:11:1N:M1:N1:N設計方針user_id を主キーにし、contacts とは中間テーブルで疎結合にするbody は NULL 化可能。パージしても行は残り統計を壊さないbillable_count を明示的に持ち、LINE側の請求と突合できるSQLite / D1 いずれでも動くDDL。ORM経由でPostgreSQL移行の余地を残す追加テーブル11v1.2 / v2.0 は変更しない(line_scenario_enrollments は図示省略)
図 37contacts とは中間テーブル line_id_links で疎結合にし、連携の修正に備える
companies (v1.2) ──1:N── contacts (v1.2)
                              │
                              │ 1:N
                              ▼
                        line_id_links ──N:1── line_friends
                                                   │
                              ┌────────────────────┼────────────────────┐
                              ▼                    ▼                    ▼
                    line_messages         line_richmenu_state    line_preferences
                              │
                              ▼
                    line_message_targets

line_scenarios ──1:N── line_scenario_steps
       │
       └──1:N── line_scenario_enrollments ──N:1── contacts

line_templates ──1:N── line_messages
line_link_tokens
line_daily_stats

11.2 主要テーブル定義

line_friends

カラム 制約 内容
user_id TEXT PK LINEのuserId(U+32桁)
status TEXT NOT NULL active / blocked
followed_at TEXT NOT NULL 初回友だち追加日時(ISO8601)
refollowed_at TEXT 再追加日時
unfollowed_at TEXT ブロック日時
display_name_hash TEXT 表示名のSHA-256(平文は保存しない)
block_score REAL ブロック確率スコア(0.0〜1.0)
block_score_reasons TEXT JSON配列
last_inbound_at TEXT 最終受信日時
last_outbound_at TEXT 最終送信日時
created_at / updated_at TEXT NOT NULL

索引: status, block_score, last_inbound_at

カラム 制約 内容
id INTEGER PK AUTOINCREMENT
user_id TEXT NOT NULL, FK line_friends.user_id
contact_id INTEGER FK contacts.id
company_id INTEGER FK companies.id
link_method TEXT NOT NULL tracking_code / liff_form / self_report / manual
confidence TEXT NOT NULL high / medium / low
linked_at TEXT NOT NULL
linked_by TEXT 手動連携時のユーザー
is_active INTEGER NOT NULL 1/0。修正時は旧レコードを0にして履歴を残す

一意制約: (user_id, is_active) で active は1件のみ

line_preferences

カラム 制約 内容
user_id TEXT PK, FK
frequency TEXT NOT NULL weekly / monthly / important_only / stopped
categories TEXT NOT NULL JSON配列。["webinar","tech","case","product"]
transactional_enabled INTEGER NOT NULL 既定1
updated_at TEXT NOT NULL
updated_via TEXT liff / admin

line_messages

カラム 制約 内容
id INTEGER PK AUTOINCREMENT
direction TEXT NOT NULL outbound / inbound
send_type TEXT reply / push / multicast
reason_code TEXT 配信理由コード
priority TEXT transactional / promotional
template_id INTEGER FK
body_digest TEXT 本文のハッシュ(重複判定用)
body TEXT 受信本文。90日後にNULL化(G-22)
summary TEXT 本文削除後に残す要約
target_count INTEGER 送信対象数
billable_count INTEGER 課金通数
idempotency_key TEXT UNIQUE
status TEXT NOT NULL queued / sent / failed / deferred / discarded
sent_at TEXT
created_at TEXT NOT NULL

line_message_targets

カラム 制約 内容
message_id INTEGER PK(複合), FK
user_id TEXT PK(複合), FK
result TEXT NOT NULL sent / excluded_frequency / excluded_block_score / excluded_preference / failed
impressed_at TEXT 統計API由来(日次)
clicked_at TEXT /r/ 経由で確定

line_richmenu_state

カラム 制約 内容
user_id TEXT PK, FK
menu_id TEXT NOT NULL default/identified/in_deal/customer/dormant
line_richmenu_id TEXT LINE側のリッチメニューID
linked_at TEXT
sync_status TEXT NOT NULL pending / synced / failed

line_scenarios / line_scenario_steps / line_scenario_enrollments

テーブル 主なカラム
line_scenarios id, name, trigger_type, trigger_config(JSON), is_active, max_concurrent
line_scenario_steps id, scenario_id, step_order, step_type(wait/branch/send/tag/notify/end), config(JSON), next_step_id, branch_config(JSON)
line_scenario_enrollments id, scenario_id, contact_id, current_step_id, state(running/completed/stopped), next_fire_at, enrolled_at, stopped_reason

line_daily_stats

カラム 内容
stat_date TEXT PK(複合)
reason_code TEXT PK(複合)
billable_count INTEGER 課金通数
impression_count INTEGER LINE統計API由来
click_count INTEGER 自前計測
block_count INTEGER 当日のブロック数
friend_total INTEGER 友だち総数(LINE統計API)
identified_total INTEGER 識別済み友だち数(自社DB)

11.3 設計方針


12. API設計(追加)

12.1 公開エンドポイント(認証不要)

メソッド パス 内容
POST /line/webhook LINE Webhook受信。署名検証必須。即座に200を返す
GET /r/{tracking_code} 既存(v1.2 F-09)。?to=line でLINE友だち追加へ中継
GET /liff/{app} LIFFアプリのHTML配信
POST /liff/api/verify IDトークン検証 → セッション発行
POST /liff/api/link ID連携の確定(link_token + IDトークン)
POST /liff/api/preferences 配信設定の更新
POST /liff/api/form/{form_id} LIFF内フォーム送信(ウェビナー申込等)

12.2 管理API(認証必須)

メソッド パス 内容
GET /api/line/friends 友だち一覧。識別状態・企業・スコアで絞り込み
GET /api/line/friends/{user_id} 友だち詳細
PATCH /api/line/friends/{user_id}/link ID連携の手動修正
POST /api/line/messages 配信要求の作成(即時 or 予約)
POST /api/line/messages/estimate 送信せずに通数・除外人数を試算
GET /api/line/messages/{id} 配信結果
GET/POST/PUT /api/line/templates テンプレートCRUD
GET/POST/PUT /api/line/scenarios シナリオCRUD
POST /api/line/scenarios/{id}/test テスト送信
GET/POST/PUT /api/line/richmenus リッチメニューCRUD
POST /api/line/richmenus/assign 割当ルールの再評価
GET /api/line/stats/daily 日次統計
GET /api/line/stats/quota 当月通数と残枠
GET/PUT /api/line/settings チャネル設定
POST /api/line/settings/verify Webhook疎通確認

12.3 共通仕様

12.4 定期実行(Cron)

頻度 処理
1分 シナリオの next_fire_at 到来分の実行、配信キューの消化
15分 リッチメニュー割当の同期(sync_status=pending)
1時間 短期チャネルアクセストークンの残存時間チェック
日次 02:00 LINE統計API取得(友だち数・ターゲットリーチ・ブロック数)。60 req/時の制限内
日次 03:00 ブロック確率スコアの再計算
日次 04:00 G-22 パージ(24時間超のプロフィール情報、90日超のメッセージ本文)
日次 05:00 line_daily_stats の集計、F-23 への連携
月次 1日 通数のリセット確認、プラン推奨判定

13. 非機能要件

分類 要件
Webhook応答時間 署名検証 + 200応答までを 200ms以内。第0層・第1層の reply も含めて 500ms以内
可用性 Webhookエンドポイントは 99.9%。停止中のイベントはLINE側が再送するが、再送回数には限りがあるため冪等処理を必須とする
冪等性 同一 webhookEventId の重複処理を防ぐ。KVに24時間の重複排除キーを持つ
スループット Webhook 100 req/秒、配信 200 req/秒(multicast の制限に合わせる)
LIFF初期表示 LCP 2.0秒以内。LIFF SDK 以外の外部CDN読み込みを禁止
セキュリティ チャネルシークレット・アクセストークンは Workers Secrets に保存。管理画面での復号表示は admin のみ・監査ログ必須
署名検証 生ボディに対する HMAC-SHA256 を定数時間比較。失敗時は401、本文を記録しない
監査ログ 配信実行、ID連携の手動修正、設定変更、シークレット閲覧を記録。3年保持
バックアップ v1.2 の方針(VACUUM INTO / D1のPITR)に準拠
障害時の縮退 LINE APIが応答しない場合、transactional はメールへ自動フォールバック。promotional は延期

14. 法令・コンプライアンス

14.1 特定電子メール法は適用されない

LINE公式アカウントのメッセージ配信は、特定電子メール法の適用対象外である。

同法の「電子メール」は総務省令で定める通信方式に限定されており、その方式は次の2つである。

  1. SMTP方式(Simple Mail Transfer Protocol を用いる通信方式 = いわゆるEメール)
  2. 電話番号方式(携帯端末に電話番号を宛先として情報を伝達する方式 = SMS等)

LINEのメッセージはいずれにも該当しない。

ただしこれは「何を送ってもよい」という意味ではない。 適用されるのは以下の3層である。

規律 実務上の強さ
① 契約 LINE公式アカウント利用規約 / ガイドライン / User Data Policy 最も強い。違反時はコンテンツ削除・サービス停止・契約解除。LINEヤフーは理由の回答義務を負わない
② 法令 個人情報保護法、電気通信事業法(外部送信規律)、景品表示法、特定商取引法 通常の法令リスク
③ 自主 特電法・特商法水準のオプトイン記録とオプトアウト導線 適用がなくても揃えるのが安全

本仕様の方針: 法適用がなくても、オプトイン取得の記録(G-16)、ブロック以外の配信停止導線(G-21)、送信者の明示を特電法と同水準で実装する。ブロックしか停止手段がない設計は、そのままブロック率を押し上げる。

14.2 LINE公式アカウントガイドライン

禁止業種・禁止コンテンツのうち、当社に関係しうるものを抜粋する。

項目 内容 当社での注意点
第三者のための広告媒体としての使用禁止 自社アカウントで他社商材を配信することの禁止 共催セミナー・パートナー製品の紹介は事前確認が必要(G-25)
情報商材 禁止 該当しないが「必ず儲かる」等の表現は避ける
知的財産権侵害 他社ロゴ・キャラクターの無許可使用 事例紹介での顧客ロゴ使用は必ず許諾を取る
なりすまし 著名人・企業・LINE運営へのなりすまし 該当なし
アカウント名の要件 法人名または商品の正式名称を含めること 「シンオン株式会社」を含む名称とする
不快な配信 頻度過多を含む F-33 の頻度上限で機械的に防ぐ

14.3 個人情報保護法とLINE User Data Policy

3層の規律 — 実務上いちばん強いのは契約① 契約LINE公式アカウント利用規約 / ガイドライン / User Data Policyコンテンツ削除・サービス停止・契約解除。LINEヤフーは理由の回答義務を負わない最も強い② 法令個人情報保護法 / 電気通信事業法 / 景表法 / 特商法通常の法令リスク。特定電子メール法は適用されない適用あり③ 自主特電法・特商法と同水準のオプトイン記録とオプトアウト導線適用がなくても揃える。ブロックしか停止手段がない設計はブロック率を押し上げる本仕様の方針LINE User Data Policy による追加制約(法令より厳しい)・userId 以外の情報を24時間以上保存するには事前告知が必須・友だち情報・グループ情報は24時間以上の保存が禁止・複数サービス間でのユーザー情報の紐付けを禁止
図 38法令より契約(User Data Policy)のほうが厳しい場面が多い

userId の位置づけ

本仕様では ID連携を前提としているため、userId は最初から個人情報として扱う。プライバシーポリシーに以下を明記する。

LINE User Data Policy による追加制約(法令より厳しい)

制約 本仕様での対応
サービス提供に必要なLINEユーザー情報に限り取得・保存・利用できる 取得項目を userId と自己申告情報に限定
userId を除く情報の24時間以上の保存には事前告知が必須 表示名・画像URLは保存せず、ハッシュのみ(G-22)
友だち情報・グループ情報は24時間以上の保存禁止 取得しない
第三者提供は法令に基づく場合と業務委託先への開示のみ 外部連携先をホワイトリスト管理(G-23)
ユーザー情報の購買・販売の禁止 該当なし
複数サービス間でのユーザー情報の紐付け禁止(LINEヤフーの許可がある場合を除く) 採用用アカウントと営業用アカウントの userId を直接紐付けない。統合は contacts レベルで行う
サービス終了時・ユーザー退会後は全ユーザー情報を削除 削除手順を運用手順書に定義

14.4 令和8年改正個人情報保護法への備え

2026年7月17日に公布された改正個人情報保護法は、公布から2年を超えない範囲内で施行される(施行日は政令で確定。要確認)。LINE活用に直結する改正点は次のとおり。

改正項目 本仕様への影響
個人関連情報への規律強化(特定個人への働きかけが可能な情報の不適正利用・不正取得を禁止) userId ベースの運用が新たに規律対象になる。取得経路と利用目的の記録(G-16)がより重要になる
課徴金制度の導入(本人数1,000人以上の大規模事案が対象) 当社の規模では直ちに対象にならないが、識別済み友だちが1,000人を超えたら再点検する
オプトアウト制度の強化 該当する運用は行わない方針
16歳未満の個人情報 BtoB用途では想定しないが、採用広報では留意

14.5 外部送信規律(電気通信事業法27条の12)

14.6 景品表示法・特定商取引法

論点 本仕様での対応
ステマ規制(2023年10月1日施行) 第三者への依頼投稿・アンバサダー経由の配信には「PR」表記を必須化(G-26)
優良誤認・有利誤認 「期間限定」の常態化を禁止。v2.0 F-11 の禁止表現リストをLINEテンプレートにも適用(G-24)
打消し表示 LINEは画面が小さく、リッチメッセージ画像内の小さな注記は打消し表示として不十分と判断されうる。重要な条件は画像ではなくテキストで書く
特商法の表示事項 吹き出し内に全部は書けない。LIFF/LPの遷移先で表示事項を満たし、メッセージ本体には主要条件と遷移導線を明示する
景品規制 友だち追加キャンペーンは行わない方針(2.2項)。実施する場合は取引付随性の判定を法務確認する

15. 段階導入計画

段階導入 L0 〜 L40週2週4週6週8週10週12週14週16週L0接続と識別2〜3週プロバイダー設計 / Webhook 署名検証 / ID連携会社情報LIFF / ダッシュボードL0→ 識別率 80%以上L1常設窓口2〜3週リッチメニュー5種 / 資料DL・配信設定LIFF第0〜1層応答 / G-16〜G-22L1→ メニュー経由の行動 月20件L2配信とシナリオ3〜4週配信エンジン / 配信ガバナンス / シナリオ配信チャネル選択 / ウェビナー運用シナリオL2→ ブロック率15%未満を3か月L3計測統合とAI応答2〜3週行動計測 / F-23統合 / 第2層AI応答ブロック確率スコア / G-23〜G-27L3→ LINE起点の商談化 1件L4拡張必要時申込・予約・診断LIFF / 既存顧客サポート採用アカウント / 認証済申請L4L1 の完了条件(重要)1通も課金配信をせずに、リッチメニュー経由の資料DLが発生すること。このフェーズの成果は通数ゼロで得られる。進まない場合の判断L1で価値が出ないなら配信を増やしても出ない。L3→L4 に進めない場合は、LINEの用途をサポート窓口に限定し、獲得用途から撤退する。
図 39フェーズL1(通数ゼロ)で価値が出ないなら、配信を増やしても価値は出ない

v2.0 の段階導入(フェーズ0〜4)とは独立に進められる。ただし F-26 の識別は v1.2 F-09 の tracking_code 基盤に依存するため、それが稼働していることが前提。

フェーズL0 — 接続と識別(2〜3週間)

# 作業
1 LINE公式アカウント開設。プロバイダーを1つ作り、Messaging APIチャネルとLINEログインチャネルを同一プロバイダー配下に作成(F-25)
2 コミュニケーションプラン(月額0円)で開始
3 Webhook受信 + 署名検証 + Queues。冪等処理(F-25)
4 line_friends / line_id_links / line_link_tokens(F-26)
5 /r/{tracking_code}?to=line の中継とあいさつメッセージ→LIFFの1ホップ(F-26)
6 「会社情報の登録/確認」LIFF(F-29)
7 S-28 ダッシュボード、S-29/S-30 友だち一覧・詳細

完了条件: 社内メンバー10名で、メール経由の友だち追加が100%識別されること。

フェーズL1 — 常設窓口(2〜3週間)

# 作業
1 リッチメニュー5種の作成とユーザー単位割当(F-28)
2 「資料ダウンロード」「配信設定」LIFF(F-29)
3 第0層・第1層の応答(ポストバック・キーワード)(F-31)
4 S-34 リッチメニュー管理、S-36 チャット
5 ガードレール G-16〜G-22 の実装(F-35)

完了条件: 1通も課金配信をせずに、リッチメニュー経由の資料DLが発生すること。このフェーズの成果は通数ゼロで得られる

フェーズL2 — 配信とシナリオ(3〜4週間)

# 作業
1 配信エンジン(reply/push/multicast)(F-27)
2 配信ガバナンス(通数予算・頻度上限)(F-33)
3 シナリオ配信(F-30)
4 チャネル選択エンジン(F-32)
5 ウェビナー運用シナリオ(8.2項)の実装
6 S-31/S-32/S-33/S-38

完了条件: ウェビナー1回を LINE リマインド付きで実施し、参加率が従来比で改善すること。

フェーズL3 — 計測統合とAI応答(2〜3週間)

# 作業
1 LINE行動計測(F-34)、Analytics Engine への収集
2 F-23 アトリビューションへの統合
3 第2層 AI応答(Workers AI + Vectorize)(F-31)
4 ブロック確率スコア(F-33)
5 残りのガードレール G-23〜G-27

完了条件: LINE起点の商談化がアトリビューション上で1件以上按分されること。

フェーズL4 — 拡張(必要になったら)

15.1 各フェーズの判断基準

フェーズ 次に進む条件 進まない場合の判断
L0 → L1 識別率 80%以上 導線設計をやり直す。友だちを増やす施策は打たない
L1 → L2 リッチメニュー経由の行動が月20件以上 LIFFのコンテンツが足りない。配信を足しても解決しない
L2 → L3 ブロック率 15%未満を3か月維持 配信頻度・内容を見直す。計測を足しても解決しない
L3 → L4 LINE起点の商談化が四半期1件以上 LINEの用途をサポート窓口に限定し、獲得用途から撤退する

重要: フェーズL1(通数ゼロ)で価値が出ないなら、配信を増やしても価値は出ない。「配信すれば効果が出る」という順序で考えない


16. 今後の検討事項

# 項目 内容 判断の目安
1 認証済アカウントの申請 審査に約10営業日。友だち追加広告の利用条件でもある。LINE検索への掲載メリットあり 識別済み友だち500人到達時
2 LINEミニアプリ化 認証済ミニアプリはホーム画面ショートカット、LINE検索掲載が可能。画面サイズはFull固定。公式は新規をミニアプリで作ることを推奨している LIFFアプリが5本以上になり、利用が定着した時点
3 友だち追加広告(CPF)の再検討 4.4項の判断を覆す条件は「認証済取得済み」かつ「識別済み友だち2,000人・商談化率5%安定」 上記条件の充足時
4 LINE公式AIチャットボット(β)への切替 チャットProオプション 月額3,000円。自社実装の運用負荷が高い場合の代替 自社AI応答の保守工数が月8時間を超えた時点
5 email スコープの申請 申請には利用目的提示画面のスクリーンショットが必要。自己入力の入力率が低い場合に検討 会社情報登録LIFFの完了率が50%を下回った場合
6 複数公式アカウントのリンク LIFF v2.30.0(2026年8月)で複数公式アカウントのリンク機能への布石が入っている。営業用/採用用の統合運用に関わる LINE側の正式提供後
7 ブロック確率モデルの機械学習化 ルールベースからロジスティック回帰へ ブロック実績100件到達時
8 LINE通知メッセージ 電話番号ベースの配信。当社は電話番号を体系的に保有していないため現状は対象外 電話番号の取得が業務フローに入った場合
9 改正個人情報保護法の施行対応 施行日は政令で確定予定。個人関連情報の規律強化への対応 施行日確定時に再点検
10 LINE Tag の導入可否 LINE広告を使わない前提では導入不要。導入する場合は外部送信ポリシーの整備が前提 広告再検討時と同時

17. 出典

LINEヤフー公式 — 料金・プラン

LINEヤフー公式 — Messaging API

LINEヤフー公式 — Webhook・リッチメニュー

LINEヤフー公式 — LIFF・ミニアプリ

LINEヤフー公式 — 識別・オーディエンス・運用

LINEヤフー公式 — 規約・事例

日本の法令・官公庁

ベンダー・調査(公式一次情報ではない)

数値の取り扱いについて


改訂履歴

日付 内容
v1.0 2026年8月19日 初版作成。F-25〜F-35、S-28〜S-38、G-16〜G-27 を定義