● LINE Messaging API

LINE 公式アカウント連携 セットアップ手順

テスト用の公式アカウントを作成し、このバックエンドの Webhook(POST /api/line/webhook)に接続するまでの手順です。CLI だけでは完結しない「Web コンソール操作」を、画面モックアップ付きで順に説明します。

所要時間 約15〜25分 前提 LINEアカウント / バックエンドが :8000 で起動済み 最終成果 .env に3つのキー+疎通確認
このページのゴール — 下の3つを .env に設定し、サーバ再起動後に「テスト送信」が LINE に届けば連携完了です。
# LINE Messaging API
LINE_CHANNEL_SECRET=(手順6でコピー)
LINE_CHANNEL_ACCESS_TOKEN=(手順7でコピー)
LINE_DEFAULT_TO=(最後にボットへ送信して取得)
用語の整理: Channel secret=受信Webhookの署名検証用 / Channel access token=こちらから送信する時のBearer認証用。混同しないこと。
CLI で自動化できる範囲(clasp相当は不可) — LINE には「チャネル/公式アカウントを CLI で新規作成」する公開APIが無く、作成・認証情報の取得・「Use webhook」トグル・OA応答設定は Webコンソール専用です。一方、作成後の設定はCLIで自動化できます(本リポジトリの line_cli.py)。
操作方法
Webhook URL 設定 / 確認 / テストpython line_cli.py setup <https URL>(手順8〜10をまとめて)
トークン発行(channel id+secretのみ・無依存)python line_cli.py issue-token --short-lived --write-env
Bot情報の確認python line_cli.py bot-info
チャネル/OA 作成・secret取得・Use webhook・応答設定Webコンソール専用(CLI不可) ↓ 以下の手順

第1部チャネルの作成(LINE Developers Console)

送信元となる Messaging API チャネルを作ります。コンソール: developers.line.biz/console

1

ログイン

LINE Developers Console
developers.line.biz/console
LINE Developers
LINE アカウントでログイン ビジネスアカウントでログイン

LINE アカウントでログイン を選択。初回は開発者登録(開発者名・メール)と Developer Agreement への同意が必要です。

2

プロバイダーの作成

LINE Developers Console
developers.line.biz/console/
LINE Developers
Providers+ Create
例: Tripport Test
Create

Create →「Create a new provider」モーダルで Provider name(例 Tripport Test)を入力して作成。プロバイダー=チャネルをまとめる箱です。

3

Messaging API チャネルを選択

LINE Developers Console
developers.line.biz/console/provider/...
Tripport Test

Create a new channel

これ💬Messaging API
🔑LINE Login
📊LINE MINI App

プロバイダー内で Messaging API タイルを選びます。(環境によっては先に LINE 公式アカウントを作るフローを経由します。指示に従えばOK)

4

チャネル情報を入力 → 作成

LINE Developers Console
developers.line.biz/console/...
New Messaging API channel
例: Tripport Bot
予約通知ボット
選択
you@example.com
利用規約に同意
Create

第2部認証情報のコピー(→ .env)

作成したチャネルから「秘密鍵(受信検証用)」と「アクセストークン(送信用)」を取得します。

5

Channel secret をコピー

Basic settings タブ
.../channel/.../basic
Tripport Bot
Basic settings
コピー
a1b2c3d4e5f6...(32桁hex)⧉ Copy
コピーChannel secret貼り付け先: .env の LINE_CHANNEL_SECRET
コピーChannel ID貼り付け先: .env の LINE_CHANNEL_ID(CLIでのトークン発行に使用)

場所: チャネル → Basic settings タブ。同じ画面に Channel secret(32桁の16進・受信Webhookの x-line-signature 検証用)と Channel ID(数字・line_cli.py issue-token でのトークン発行用)が並んでいます。両方コピーします。

6

Channel access token を発行してコピー

Messaging API タブ
.../channel/.../messaging-api
Tripport Bot
Messaging API
Issue→コピー
(空)Issue

Issue を押すと長い文字列のトークンが表示されます

Issue → コピーChannel access token (long-lived)貼り付け先: .env の LINE_CHANNEL_ACCESS_TOKEN

場所: チャネル → Messaging API タブ → Channel access token (long-lived)Issue をクリック → 生成された文字列をコピー。こちらから送信する際の Bearer 認証に使います。

secret(受信検証)と access token(送信認証)は別物です。取り違え注意。

第3部localhost を公開 HTTPS にする(ターミナル)

LINE の Webhook は 公開 HTTPS(CA署名証明書)必須。ローカルの :8000 をトンネルで公開します。

7

ngrok で公開(推奨)

ローカルターミナル
$ brew install ngrok
$ ngrok config add-authtoken <あなたのトークン> # 初回のみ。dashboard.ngrok.com で取得
$ ngrok http 8000

ngrok
Session Status online
Forwarding https://a1b2-xx.ngrok-free.app -> http://localhost:8000
組み立てるhttps://<sub>.ngrok-free.app/api/line/webhookこれが Webhook URL(次の手順でコンソールに貼る)
⚠ このターミナル(ngrok)と バックエンド(:8000)は起動したままにしてください。無料トンネルのURLは再起動で変わります。

第4部Webhook の設定と検証(LINE Developers Console)

8

Webhook URL を設定 → Verify → Use webhook を ON

Messaging API タブ
.../channel/.../messaging-api
Tripport Bot
Webhook settings
https://a1b2-xx.ngrok-free.app/api/line/webhook Edit
Verify✓ Success
ONUse webhook
Verify は到達性のみの確認です。署名検証や応答ロジックの正しさは保証しません(それは第6部のテストで確認)。
署名検証について: LINE_CHANNEL_SECRET 未設定の間は検証をスキップするので、設定途中でも Verify は通ります。secret を .env に入れてサーバを再起動すると署名検証が有効化され、不正な署名は 400 で弾かれます。
CLIで一括: この手順8(URL設定→Verify相当のtest→activeチェック)は python line_cli.py setup https://<sub>.ngrok-free.app/api/line/webhook でまとめて実行できます(要 LINE_CHANNEL_ACCESS_TOKEN)。ただし Use webhook トグルのON だけはAPI不可なので、下の手順で手動ONにしてください。

第5部応答設定(LINE Official Account Manager)

LINEの自動応答とボットの二重返信を防ぎ、Webhook を有効化します。manager.line.biz

9

応答設定を Bot モード+Webhook ON+自動応答/あいさつ OFF

LINE Official Account Manager
manager.line.biz/account/.../settings/response
設定 › 応答設定
チャット 選択Bot
あいさつメッセージ
応答メッセージ(自動応答)
Webhook

場所: manager.line.biz → 同じLINEアカウントでログイン → 対象アカウント → 右上 設定(歯車)応答設定

第6部友だち追加 → 送信先IDの取得 → 動作確認

10

QRコードでボットを友だち追加

Messaging API タブ / OA Manager
.../messaging-api
Tripport Bot

Bot information

友だち追加用 QRコード

スマホのLINE → ホーム → 友だち追加 → QRコード でスキャンして追加。これでDMを送ると Webhook にイベントが届きます。

11

送信先ID(LINE_DEFAULT_TO)を取得

ボット宛に送信 → 管理API

追加したボットに何かメッセージを送ると、サーバが source.userId を捕捉して line_state.json に保存します。エコー(受信しました: …)が返れば受信成功。

# 直近に捕捉した送信先IDを取得
$ curl -s localhost:8000/api/admin/line/source
{"line_last_source_id":"U1234567890abcdef..."}
コピーline_last_source_id貼り付け先: .env の LINE_DEFAULT_TO

取得した値を .envLINE_DEFAULT_TO= に設定 → サーバを再起動

12

テスト送信で疎通確認

管理API
$ curl -s -X POST localhost:8000/api/admin/line/test \
  -H 'Content-Type: application/json' -d '{"text":"連携テスト"}'
{"ok":true,"to":"U1234..."}

LINE に 「連携テスト」が届けば連携完了です 🎉 以降、予約取り込み時の通知(要確認アラート等)が Slack と同じ内容で LINE にも届きます。

設定状況はいつでも GET /api/admin/line/status で確認できます(トークン/secret/宛先の有無、直近の送信先ID)。

第7部(任意)LIFF — LINE内で承認・修正フローを完結

LINE内にWebビューを開き、承認モーダル(ツアー名/日付/時刻/人数/代表者の修正・再判定・承認/却下・クラスタまとめ承認)をそのまま操作できます。IDトークンで管理者認証。

13

LIFFアプリを追加

Messaging API チャネル → LIFF タブ
.../channel/.../liff
Tripport Bot — LIFF
+ Add
https://<公開URL>/liff
Full
必須
☑ openid ☑ profile
コピーLIFF ID貼り付け先: .env の LINE_LIFF_ID
コピーChannel ID(手順5)貼り付け先: .env の LINE_LOGIN_CHANNEL_ID(IDトークン検証用。Messaging APIチャネルのChannel IDと同じ)
14

LINEで開く

.env設定→再起動後

.envLINE_LIFF_ID / LINE_LOGIN_CHANNEL_ID を設定してサーバ再起動 → LINEで https://liff.line.me/<LIFF_ID> を開く(自分宛に送ってタップ、またはリッチメニューに設定)。

管理者(LINE_DEFAULT_TO / LINE_ADMIN_IDS)以外が開くと「管理者のみ」表示で操作不可。承認・却下・修正・再判定・クラスタまとめ承認はすべて既存のウェブと同じロジックを呼びます。

仕上げ最終的な .env

# LINE Messaging API(必須)
LINE_CHANNEL_SECRET=a1b2c3d4e5f6...(手順5)
LINE_CHANNEL_ACCESS_TOKEN=eyJhbGci...(手順6)
LINE_DEFAULT_TO=U1234567890...(手順11/管理者にも自動採用)
LINE_CHANNEL_ID=1234567890(手順5・CLIのトークン発行/LIFF検証用)
# 任意
LINE_ADMIN_IDS=追加の管理者userId(カンマ区切り)
LINE_LIFF_ID=(手順13・LIFFを使う場合)
LINE_LOGIN_CHANNEL_ID=Channel IDと同じ(LIFFを使う場合)

3つを設定して再起動すれば、Webhook受信(署名検証つき)と通知送信の両方が有効になります。

付録Aよくあるハマりどころ

付録B早見表

取得するもの場所操作 / フィールド貼り付け先
Channel secretDevelopers Console → Basic settingsChannel secret をコピー.env: LINE_CHANNEL_SECRET
Channel access tokenDevelopers Console → Messaging APIIssue → コピー.env: LINE_CHANNEL_ACCESS_TOKEN
公開HTTPS URLローカル端末ngrok http 8000LINEコンソール(Webhook URL)
Webhook URLDevelopers Console → Messaging APIEdit→貼付→Update→Verify→Use webhook ON
応答設定OA Manager → 応答設定Bot / Webhook ON / 自動応答・あいさつ OFF
送信先IDボットに送信 → GET /api/admin/line/sourceline_last_source_id をコピー.env: LINE_DEFAULT_TO
疎通確認POST /api/admin/line/testLINEに届けばOK