Messaging APIの始め方:チャネル・アクセストークン・Webhook

公開 書いた人 大林 諒

体験レッスンを予約した人に前日と当日のリマインドを1人ずつ送る、問い合わせが来たらスプレッドシートに1行足す。LINE公式アカウントの標準機能では届かないこうした処理を埋めるのがMessaging APIです。この記事では、サンプル料理教室のLINE公式アカウントでMessaging APIを有効にし、チャネルアクセストークンを用意し、Webhookでイベントを受け、curlで最初のプッシュメッセージを送るところまでを順に書きます。前提は、LINE Official Account Manager(管理画面)でアカウントを作り、あいさつメッセージとリッチメニューまで設定してある状態です。仕様と料金は2026年10月時点の公式ドキュメントに合わせています。

この記事の内容
  1. 先に決めること
  2. 用語とできることの一覧
  3. 手順
  4. 料金と通数
  5. 応用
  6. できないことと、その代わり
  7. よく詰まるところ
  8. 次にやること

先に決めること

Messaging APIは、有効にするボタンを押すだけなら1分で終わります。ただ、その途中で選ぶものの中に後から変えられないものがあります。押す前に次の5つを決めておきます。

  • プロバイダーをどれにするか。プロバイダーはチャネルを束ねる「提供者」の単位で、一度選ぶと移せず、Messaging APIとの連携も解除できません。教室を運営する会社名で1つ作るのが基本です。制作会社や運用ツールの会社が管理するプロバイダーの下に作ると、契約を切ったときに困ります
  • 後でLINEログインを使うか。ユーザーIDはプロバイダーごとに別の値になります。会員ページにLINEログインを付ける予定があるなら、同じプロバイダーに置きます
  • Webhookの受け口をどこに置くか。自前のサーバー、クラウドの関数、n8nなどの自動化ツールのどれかです。HTTPSで、広く信頼された認証局の証明書が要ります。自己署名の証明書は使えません
  • 自動応答を誰が担当するか。管理画面の「応答メッセージ」に任せるのか、Webhookを受けたプログラムが返すのか。両方が返事をすると、同じ質問に2通返ります
  • 秘密の値をどこにしまうか。チャネルシークレットとトークンは、それだけで公式アカウントから送信できる鍵です。スプレッドシートやチャットに貼らず、サーバーの環境変数かパスワード管理ツールに置きます

本番の公式アカウントで試して、友だち全員に試験メッセージが飛ぶ事故が一番怖いです。動作確認用に別の公式アカウントを1つ作っておきます。公式の法人向けガイドラインでも、検証用のアカウントで確かめてから本番に適用するよう書かれています。

用語とできることの一覧

最初に、画面に出てくる言葉を整理します。

用語中身
プロバイダーチャネルを束ねる提供者の単位。会社名にする
チャネルMessaging APIを使うための通信路。公式アカウント1つにつき1つ
チャネルID・チャネルシークレットチャネルの番号と、署名の検証やトークン発行に使う秘密の値。「チャネル基本設定」タブにある
チャネルアクセストークンAPIを呼ぶときに付ける鍵
Webhook URLLINEからイベントが届く送り先
ユーザーID友だち1人ごとの識別子。Uで始まる33文字。友だち検索の「LINE ID」や表示名とは別物

Messaging APIでできることを、サンプル料理教室での使い道と並べます。

機能何をするか通数に入るかサンプル料理教室での使い道
応答メッセージ(reply)届いたイベントに返事をする入らない「レッスン日程」に今月の日程を返す
プッシュメッセージ(push)1人やグループに好きな時に送る入る体験の前日と当日のリマインド
マルチキャストメッセージユーザーIDを並べて複数人に送る(最大500人)入る体験に来た人へ入会の案内
ナローキャストメッセージ属性やオーディエンスで絞って送る入る配信をクリックした人への再案内
ブロードキャストメッセージ友だち全員に送る入る臨時休講のお知らせ
リッチメニュー作る・人ごとに出し分ける関係なし入会者だけ会員用メニュー
プロフィール取得表示名・プロフィール画像などを取る関係なし問い合わせの記録に表示名
オーディエンス送り先の集まりを作る関係なし体験参加者をまとめる
送信数・残数の取得当月の上限目安と利用状況関係なし月末の通数の確認
Webhookの受信友だち追加・メッセージ・ボタン操作を受ける関係なし問い合わせの記録

1回のリクエストで送れるメッセージオブジェクト(吹き出し)は、どの送り方でも最大5つです。

手順

1. 管理画面でMessaging APIを有効にする

この操作はWeb版の管理画面からしかできません。LINE公式アカウントアプリには項目がありません。操作する人の権限は「管理者」が必要です。

  1. 「管理者」権限のあるアカウントで、PCのブラウザからLINE Official Account Managerにログインします
  2. サンプル料理教室のアカウントを開き、「設定」を押します
  3. 設定のメニューから「Messaging API」を押します
  4. 「Messaging APIを利用する」を押します
  5. LINE Developersを初めて使うアカウントでは、開発者情報の登録画面が出ます。名前とメールアドレスを入れて進みます
  6. プロバイダーを選ぶ画面で、既存のプロバイダーを選ぶか、新しく作ります。ここで選んだものは後から変えられません
  7. 利用規約を確認して「同意する」を押します
  8. 確認画面で「OK」を押します
管理画面の「設定」→「Messaging API」で「Messaging APIを利用する」ボタンが見えている状態
管理画面の「設定」→「Messaging API」で「Messaging APIを利用する」ボタンが見えている状態

既存のプロバイダーを選ぶには、そのプロバイダーのAdmin権限が要り、無いと選択肢に出てきません。

2024年9月4日以降、LINE DevelopersコンソールからMessaging APIのチャネルを直接作ることはできません。古い解説記事の「コンソールで新規チャネル作成」は今は使えず、管理画面から有効にする流れだけです。

プロバイダーの選択画面(新規作成と既存の選択)
プロバイダーの選択画面(新規作成と既存の選択)

2. LINE Developersコンソールでチャネルを確かめる

  1. 管理画面と同じアカウントでLINE Developersコンソールにログインします
  2. 手順1で選んだプロバイダーを押します
  3. サンプル料理教室のチャネルが並んでいることを確かめて、開きます
  4. 「チャネル基本設定」タブで、チャネルIDとチャネルシークレットを確かめます
  5. 自分のユーザーIDは、このタブには出ません。プッシュの試し送りに使う自分のユーザーIDは、手順6で受け口に届くイベントの source.userId から控えます

古い解説記事には「チャネル基本設定」に「あなたのユーザーID」の欄があると書かれていますが、管理画面から有効にしたサンプル料理教室のチャネルには出ていませんでした(2026年10月時点)。このタブにあるのは、チャネルID・チャネルアイコン・チャネル名・チャネル説明・メールアドレス・プライバシーポリシーURL・サービス利用規約URL・アプリタイプ・権限・チャネルシークレット・アサーション署名キーです。

3. チャネルアクセストークンを用意する

APIを呼ぶときは、必ずヘッダーにチャネルアクセストークンを付けます。種類は4つあります。

種類有効期間発行のしかた発行できる数取り消し
任意の有効期間を指定できるもの(v2.1)最大30日の範囲で指定JWTを作ってAPIで発行チャネルごとに30件。超えると発行を拒否できる
ステートレス15分チャネルIDとシークレット、またはJWTからAPIで発行上限なしできない
短期30日チャネルIDとシークレットからAPIで発行チャネルごとに30件。超えると古いものから取り消しできる
長期無期限「Messaging API設定」タブの発行ボタンチャネルごとに1件できる

公式の推奨はv2.1です。長期は画面のボタン1つで出せて手軽ですが、漏れたら取り消すまで使えてしまいます。再発行すると今のトークンは無効になります(最大24時間の延命は可)。使い分けは次のとおりです。

  • 最初の動作確認:長期。画面で発行してcurlで試す
  • 本番で常に動くサーバー:v2.1。期限が切れる前に自動で発行し直す
  • 呼ばれたときだけ動く関数や自動化ツール:ステートレス。動くたびに発行する

長期を本番でも使うなら、「セキュリティ設定」タブでAPIを呼べるサーバーのIPアドレスを絞れます。これはこちらからLINEへ出ていく通信の制限で、LINEから届くWebhookを送信元IPで絞るのは開発ガイドラインで禁止されています。

ステートレスのトークンは、チャネルIDとシークレットだけで発行できます。

curl -X POST https://api.line.me/oauth2/v3/token \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id=YOUR_CHANNEL_ID' \
--data-urlencode 'client_secret=YOUR_CHANNEL_SECRET'

v2.1は、RSAの鍵ペアを作って公開鍵を「チャネル基本設定」タブに登録し、返ってきたkidを入れたJWTを秘密鍵で署名してから、https://api.line.me/oauth2/v2.1/tokenに送って発行します。JWT自体の有効期間は最大30分、トークンの有効期間はtoken_expに秒で入れます(最大30日)。

「Messaging API設定」タブの一番下、チャネルアクセストークン(長期)の発行ボタン
「Messaging API設定」タブの一番下、チャネルアクセストークン(長期)の発行ボタン

4. Webhook URLを設定して検証する

  1. LINE Developersコンソールでチャネルを開きます
  2. 「Messaging API設定」タブを押します
  3. 「Webhook URL」の「編集」を押し、受け口のURL(例 https://example.com/line/webhook)を入れて「更新」を押します
  4. 「検証」を押します。受け口が正しく応答すると、「成功」と書かれたダイアログが出るので「OK」で閉じます
  5. 「Webhookの利用」をオンにします
  6. 同じ画面の「Webhookの再送」と「エラーの統計情報」もオンにしておきます

URLを入れて「更新」を押すまでは、「Webhook設定」の欄には「Webhook URL」と「編集」しか出ていません。「検証」「Webhookの利用」「Webhookの再送」「エラーの統計情報」は、URLを保存したあとに出ます。保存した直後は「Webhookの利用」がオン、「Webhookの再送」と「エラーの統計情報」はオフになっていました。

Webhook URLは1チャネルに1つだけ、500文字以内です。「検証」を押すと、eventsが空のリクエストが届きます。

{
  "destination": "xxxxxxxxxx",
  "events": []
}

これにも200を返さないと検証は失敗します。イベントが無いときにエラーを返す作りだと、ここで止まります。

受け口が守ることは3つです。2秒以内に200を返す、重い処理は返事の後に回す、署名を検証してから中身を使う。2秒を超えると、エラーの統計情報にrequest_timeoutとして残ります。統計はオンにした後の分しか集計されないので、最初からオンにします。「Webhookの再送」は、受け口が200番台を返さなかったときにLINEが送り直す機能です。回数と間隔は非公開で、確実な再送の保証もありません。

「Messaging API設定」タブのWebhook設定欄(Webhook URL・検証・Webhookの利用・Webhookの再送・エラーの統計情報)
「Messaging API設定」タブのWebhook設定欄(Webhook URL・検証・Webhookの利用・Webhookの再送・エラーの統計情報)

署名の検証は、届いたリクエストボディをそのままの文字列で受け取り、チャネルシークレットを鍵にしてHMAC-SHA256を計算し、Base64にした値をx-line-signatureヘッダーと比べる手順です。JSONに変換してから計算すると一致しません。Pythonで書くと次のようになります。

import base64, hashlib, hmac, os
from flask import Flask, request, abort

app = Flask(__name__)
CHANNEL_SECRET = os.environ["LINE_CHANNEL_SECRET"]

@app.post("/line/webhook")
def webhook():
    body = request.get_data()  # 変換する前の生のボディ
    signature = request.headers.get("x-line-signature", "")
    digest = hmac.new(CHANNEL_SECRET.encode("utf-8"), body, hashlib.sha256).digest()
    if not hmac.compare_digest(base64.b64encode(digest).decode("utf-8"), signature):
        abort(400)
    for event in request.get_json().get("events", []):
        print(event["type"], event.get("source", {}).get("userId"))
    return "OK", 200

ヘッダー名の大文字小文字は予告なく変わることがあるため、区別せずに読みます。

5. 管理画面の応答設定と組み合わせる

チャネルを作った時点で、管理画面の「あいさつメッセージ」と「応答メッセージ」は有効が初期値です。放っておくと、Webhookのプログラムの返事に加えて応答メッセージも返ります。

Webhookのオンとオフは、LINE Developersコンソールの「Messaging API設定」でも、管理画面の「設定」→「応答設定」でも切り替えられ、両者は同期します。組み合わせの禁止は1つだけです。

Webhook応答メッセージ・あいさつメッセージ設定できるか
オン使うできる
オン使わないできる
オフ使うできる
オフ使わないできない

Webhookも自動応答も使わないと、公式アカウントから誰にも何も返らないため、この組み合わせは許可されていません。

チャットとWebhookは併用できます(2022年12月1日のお知らせ)。スタッフがチャットで手で返事をしながら、同じメッセージをWebhookでも受けてスプレッドシートに記録できます。

サンプル料理教室では、次の設定にしました。

  • あいさつメッセージ:管理画面のものを使う(友だち追加した人に加え、ブロックを解除した人にも届く)
  • 応答メッセージ:オフ(リッチメニューのボタンへの返事はWebhookのプログラムが返す)
  • チャット:オン(問い合わせにはスタッフが返事をする)
  • Webhook:オン(問い合わせの記録・友だち追加の記録・リマインドの予約)

初めて作るときは、公式もあいさつメッセージと応答メッセージのオフを勧めています。どちらが返事をしたのか分からなくなるからです。動作確認の間は両方オフにし、仕組みができてから戻します。

管理画面「設定」→「応答設定」の応答機能(チャット・あいさつメッセージ・Webhook・応答メッセージ)
管理画面「設定」→「応答設定」の応答機能(チャット・あいさつメッセージ・Webhook・応答メッセージ)

6. Webhookで届くイベントの中身を見る

Webhookで届くイベントの種類は次のとおりです。

イベントtypeいつ届くか返事(reply)できるか
メッセージmessageテキスト・画像・スタンプなどが送られたできる
フォローfollow友だち追加、またはブロック解除されたできる
フォロー解除unfollowブロックされた(1対1のみ)できない
ポストバックpostbackポストバックのボタンが押されたできる
送信取消unsend利用者がメッセージを取り消したできない
グループ関連join leave memberJoined memberLeft messageEditedグループへの参加・退出、メンバーの増減、メッセージの編集退出系以外はできる
動画視聴完了videoPlayComplete送った動画を最後まで見た(1対1のみ)できる
その他beacon accountLink membershipビーコン、アカウント連携、メンバーシップできる

1回のWebhookに複数のイベントが入って届くことがあります。Aさんのメッセージと、Bさんの友だち追加が同じリクエストに入ることもあります。eventsは必ず配列として1件ずつ回します。

友だち追加のときのイベントです。userIdをここで記録しておくと、あとでその人にプッシュを送れます。

{
  "destination": "xxxxxxxxxx",
  "events": [
    {
      "replyToken": "85cbe770fa8b4f45bbe077b1d4be4a36",
      "type": "follow",
      "mode": "active",
      "timestamp": 1705891467176,
      "source": {
        "type": "user",
        "userId": "U3d3edab4f36c6292e6d8a8131f141b8b"
      },
      "webhookEventId": "01HMQGW40RZJPJM3RAJP7BHC2Q",
      "deliveryContext": {
        "isRedelivery": false
      },
      "follow": {
        "isUnblocked": false
      }
    }
  ]
}

follow.isUnblockedがtrueならブロック解除ですが、完全に正確とは限りません。厳密には自分の記録で見ます。

1対1でテキストが届いたときは、次の形です。

{
  "destination": "xxxxxxxxxx",
  "events": [
    {
      "replyToken": "757913772c4646b784d4b7ce46d12671",
      "type": "message",
      "mode": "active",
      "timestamp": 1625665242211,
      "source": {
        "type": "user",
        "userId": "U80696558e1aa831..."
      },
      "webhookEventId": "01FZ74A0TDDPYRVKNK77XKC3ZR",
      "deliveryContext": {
        "isRedelivery": false
      },
      "message": {
        "type": "text",
        "id": "14353798921116",
        "quoteToken": "q3Plxr4AgKd...",
        "text": "土曜の体験レッスンは空いていますか"
      }
    }
  ]
}

リッチメニューの「レッスン日程」をポストバックのボタンにしておくと、押されたときに"type": "postback"のイベントが届き、messageの代わりに"postback": {"data": "action=schedule&month=2026-11"}のような中身が入ります。dataの文字列は作る側が自由に決められます。

共通の項目では、timestamp(起きた時刻。UNIX時間のミリ秒で、再送でも変わらない)、webhookEventId(イベントごとの固有ID。再送の重複除けに使う)、deliveryContext.isRedelivery(再送ならtrue)の3つを必ず記録します。

受け口のログに出た、友だち追加のイベントのJSON
受け口のログに出た、友だち追加のイベントのJSON

動作の確認は、テスト用のスマホで公式アカウントをブロックし、受け口のログにunfollowが出るかを見るのが早いです。ブロックを解除すると今度はfollowが届きます。友だち追加は「Messaging API設定」タブのQRコードからできます。

7. curlで最初のプッシュメッセージを送る

手順3の長期のトークンと、手順6で受け口のログから控えた自分のユーザーID(source.userId の、Uで始まる33文字)で試します。宛先は自分なので友だちには届きません。先にテスト用のスマホで友だち追加しておきます。

curl -v -X POST https://api.line.me/v2/bot/message/push \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_CHANNEL_ACCESS_TOKEN' \
-H "X-Line-Retry-Key: $(uuidgen | tr 'A-Z' 'a-z')" \
-d '{
  "to": "YOUR_USER_ID",
  "messages": [
    {
      "type": "text",
      "text": "サンプル料理教室です。明日19時からの体験レッスンでお待ちしています。"
    }
  ]
}'

成功すると200と次の中身が返り、スマホに届きます。

{
  "sentMessages": [
    {
      "id": "461230966842064897",
      "quoteToken": "IStG5h1Tz7b..."
    }
  ]
}

X-Line-Retry-Keyは送り直すときの二重送信除けで、同じキーの2回目は409が返って送られません。キーは自分でUUIDを作ります。

テスト用スマホのトーク画面に届いたプッシュメッセージ
テスト用スマホのトーク画面に届いたプッシュメッセージ

当月の上限目安はGET https://api.line.me/v2/bot/message/quota、使った数(概算)はGET https://api.line.me/v2/bot/message/quota/consumptionで取れます。どちらも管理画面から送った分を含みます。

返事(reply)は、Webhookで受けたreplyTokenを使います。応答トークンは一度しか使えず、受け取ってから1分以内に使います。再送されたWebhookのものも受け取ってから1分以内なら使えますが、元のトークンを使用済みの場合と、イベントから20分たった場合は使えません。

curl -X POST https://api.line.me/v2/bot/message/reply \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_CHANNEL_ACCESS_TOKEN' \
-d '{
  "replyToken": "受け取ったreplyToken",
  "messages": [
    {
      "type": "text",
      "text": "11月のレッスン日程です。平日19時、土日10時と14時です。"
    }
  ]
}'

料金と通数

Messaging APIの利用自体は無料です。お金がかかるのは、通数に入る送り方で送ったメッセージだけです。2026年10月時点の日本の料金プランは次のとおりです(月額・税別)。

プラン月額無料メッセージ通数追加メッセージ
コミュニケーションプラン0円200通送れない
ライトプラン5,000円5,000通送れない
スタンダードプラン15,000円30,000通〜3円/通(送る数で単価が変わる)

追加メッセージの料金は2026年10月1日に改定されています。単価の段階は料金ページの最新の表で確かめます。

通数に入るものと入らないものは、管理画面の配信もMessaging APIも同じ考え方です。

送り方通数に入るか
管理画面のメッセージ配信(絞り込み・ステップ配信を含む)入る
Messaging APIのプッシュ・マルチキャスト・ブロードキャスト・ナローキャスト入る
Messaging APIの応答メッセージ(reply)入らない
管理画面の応答メッセージ・あいさつメッセージ入らない
チャットの送受信入らない

数え方は「送った相手の人数」です。1回のプッシュに吹き出しを4つ入れても、1人に送れば1通です。ブロックしている人や存在しないユーザーIDへの送信は数えません。上限を超えるとエラーが返り、送られません。追加メッセージはスタンダードプランだけで、管理画面で追加メッセージ数の上限目安を設定しておきます。

サンプル料理教室で試算します。体験の予約が月40件で、1件につき前日と当日の2回プッシュを送ると月80通です。予約時の「受け付けました」は返事(reply)なので0通です。友だち300人への月4回の配信1,200通を足すと月1,280通で、ライトプランの範囲です。

返事で済むものは返事で返すのが、通数を抑える一番の手です。リッチメニューの「レッスン日程」「よくある質問」も、押されたときに返事で返せば何人に押されても0通です。

応用

サンプル料理教室で実際に足す順番で並べます。

  • 友だち追加の記録:followを受けたら、ユーザーIDと時刻、プロフィール取得で得た表示名をスプレッドシートに1行足す。予約と結びつける台帳になる
  • 問い合わせの記録:messageを受けたら本文とユーザーIDを記録し、スタッフに通知する。返事はチャットで手で返す
  • 予約のリマインド:予約システムの予約日時を見て、前日の18時と当日の朝にプッシュを送る。X-Line-Retry-Keyを予約番号と送る回(前日・当日)から決まるUUIDにしておくと、処理が途中で落ちて送り直したときも二重に届かない
  • 入会した人のメニュー切り替え:ユーザー単位のリッチメニューを入会者にリンクする。Messaging APIで設定したユーザー単位のメニューは、管理画面で設定したメニューより優先して表示され、すぐに反映される
  • 配信ごとの集計:プッシュとマルチキャストにcustomAggregationUnitsで名前(半角英数字とアンダースコアで30文字まで)を付けると、その名前ごとの統計を後で取れる。所定の申請を済ませた法人ユーザー向けの機能で、未申請なら予約ページのURLのパラメータで追う

自前でサーバーを持たずにここまでやるなら、n8nやMakeのような自動化ツールでWebhookを受けるのが現実的です。注意したいのは、Webhook URLが1つのチャネルに1つしか登録できないことです。拡張ツールなど別の仕組みにWebhook URLを向けている間は、自前の受け口を同じチャネルに並べて登録できません。両方を使いたいときは、どちらか一方で受けてから、もう一方へ転送する形にします。

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

できないこと代わりの手
公式アカウントを残してMessaging APIのチャネルだけ消す消せない。止めたいときは「Webhookの利用」をオフにし、トークンを取り消す。管理画面の表示は「利用中」のまま残る
プロバイダーを後から変える変えられない。有効にする前に決める
友だち全員のユーザーIDを一覧で取る(未認証アカウント)一覧のAPIは認証済アカウントかプレミアムアカウントだけ。followを受けた時点で自分の台帳に貯める
50人未満にナローキャストで送る属性やオーディエンスで絞った送り先が50人以上でないと送れない。人数が少ないときはユーザーIDを並べてマルチキャストで送る
友だちでない人にプッシュを送る届かない。例外は、1対1で7日以内にメッセージをくれた人だけ
管理画面で作ったリッチメニューをAPIで直す(逆も)作った側でしか取得・編集できない。どちらで管理するかを1つに決める
LINEの送信元IPアドレスでWebhookを絞るIPアドレスは開示されておらず、禁止されている。署名の検証で守る

よく詰まるところ

症状原因直し方
「検証」を押すと失敗するeventsが空のリクエストに200を返していない。または自己署名の証明書、中間証明書の入れ漏れイベントが無くても200を返す。公的な認証局の証明書を入れ、証明書チェーンを完全にする
検証は成功するのにイベントが届かない「Webhookの利用」がオフ「Messaging API設定」タブでオンにする
返事が2通ずつ返る管理画面の応答メッセージも有効のまま「応答設定」で応答メッセージをオフにする
401が返るトークンの貼り間違い、期限切れ、長期トークンを再発行して古いものが無効今有効なトークンを使う。v2.1と短期は期限前に発行し直す
Invalid reply tokenが返る応答トークンを2回使った、または1分を過ぎた受けたらすぐ返事を送る。重い処理の後に送るならプッシュに切り替える
200なのに届かない相手がブロックしている、友だちでない、アカウントを消しているブロックの状況はunfollowで記録しておく
400で送れない別のプロバイダーで取ったユーザーIDを宛先にしている同じプロバイダーのチャネルで取ったユーザーIDを使う
通数が残っているのに429(You have reached your monthly limit.)ナローキャストの配信中は上限目安がまとめて予約される先の配信が終わって件数が決まってから送り直す
署名の検証が毎回合わないボディをJSONに変換してから計算している、シークレットが古い変換前の生のボディで計算する。再発行したら新しいシークレットに替える
エラーの統計情報にrequest_timeoutが並ぶ返事を作り終えてから200を返している先に200を返し、処理は後に回す
同じ問い合わせが2行記録される再送で同じイベントが2回届いたwebhookEventIdが記録済みなら捨てる
「Messaging APIを利用する」が見当たらないアプリで探している、または「管理者」権限が無いWeb版の管理画面に、管理者権限のアカウントでログインする
リッチメニューを差し替えても変わらないMessaging APIで設定したメニューが優先されているAPIで設定したデフォルトやユーザー単位のメニューを外す

次にやること

まずは問い合わせの記録から始めます。

あわせて読む