体験レッスンを予約した人に前日と当日のリマインドを1人ずつ送る、問い合わせが来たらスプレッドシートに1行足す。LINE公式アカウントの標準機能では届かないこうした処理を埋めるのがMessaging APIです。この記事では、サンプル料理教室のLINE公式アカウントでMessaging APIを有効にし、チャネルアクセストークンを用意し、Webhookでイベントを受け、curlで最初のプッシュメッセージを送るところまでを順に書きます。前提は、LINE Official Account Manager(管理画面)でアカウントを作り、あいさつメッセージとリッチメニューまで設定してある状態です。仕様と料金は2026年10月時点の公式ドキュメントに合わせています。
先に決めること
Messaging APIは、有効にするボタンを押すだけなら1分で終わります。ただ、その途中で選ぶものの中に後から変えられないものがあります。押す前に次の5つを決めておきます。
- プロバイダーをどれにするか。プロバイダーはチャネルを束ねる「提供者」の単位で、一度選ぶと移せず、Messaging APIとの連携も解除できません。教室を運営する会社名で1つ作るのが基本です。制作会社や運用ツールの会社が管理するプロバイダーの下に作ると、契約を切ったときに困ります
- 後でLINEログインを使うか。ユーザーIDはプロバイダーごとに別の値になります。会員ページにLINEログインを付ける予定があるなら、同じプロバイダーに置きます
- Webhookの受け口をどこに置くか。自前のサーバー、クラウドの関数、n8nなどの自動化ツールのどれかです。HTTPSで、広く信頼された認証局の証明書が要ります。自己署名の証明書は使えません
- 自動応答を誰が担当するか。管理画面の「応答メッセージ」に任せるのか、Webhookを受けたプログラムが返すのか。両方が返事をすると、同じ質問に2通返ります
- 秘密の値をどこにしまうか。チャネルシークレットとトークンは、それだけで公式アカウントから送信できる鍵です。スプレッドシートやチャットに貼らず、サーバーの環境変数かパスワード管理ツールに置きます
本番の公式アカウントで試して、友だち全員に試験メッセージが飛ぶ事故が一番怖いです。動作確認用に別の公式アカウントを1つ作っておきます。公式の法人向けガイドラインでも、検証用のアカウントで確かめてから本番に適用するよう書かれています。
用語とできることの一覧
最初に、画面に出てくる言葉を整理します。
| 用語 | 中身 |
|---|---|
| プロバイダー | チャネルを束ねる提供者の単位。会社名にする |
| チャネル | Messaging APIを使うための通信路。公式アカウント1つにつき1つ |
| チャネルID・チャネルシークレット | チャネルの番号と、署名の検証やトークン発行に使う秘密の値。「チャネル基本設定」タブにある |
| チャネルアクセストークン | APIを呼ぶときに付ける鍵 |
| Webhook URL | LINEからイベントが届く送り先 |
| ユーザーID | 友だち1人ごとの識別子。Uで始まる33文字。友だち検索の「LINE ID」や表示名とは別物 |
Messaging APIでできることを、サンプル料理教室での使い道と並べます。
| 機能 | 何をするか | 通数に入るか | サンプル料理教室での使い道 |
|---|---|---|---|
| 応答メッセージ(reply) | 届いたイベントに返事をする | 入らない | 「レッスン日程」に今月の日程を返す |
| プッシュメッセージ(push) | 1人やグループに好きな時に送る | 入る | 体験の前日と当日のリマインド |
| マルチキャストメッセージ | ユーザーIDを並べて複数人に送る(最大500人) | 入る | 体験に来た人へ入会の案内 |
| ナローキャストメッセージ | 属性やオーディエンスで絞って送る | 入る | 配信をクリックした人への再案内 |
| ブロードキャストメッセージ | 友だち全員に送る | 入る | 臨時休講のお知らせ |
| リッチメニュー | 作る・人ごとに出し分ける | 関係なし | 入会者だけ会員用メニュー |
| プロフィール取得 | 表示名・プロフィール画像などを取る | 関係なし | 問い合わせの記録に表示名 |
| オーディエンス | 送り先の集まりを作る | 関係なし | 体験参加者をまとめる |
| 送信数・残数の取得 | 当月の上限目安と利用状況 | 関係なし | 月末の通数の確認 |
| Webhookの受信 | 友だち追加・メッセージ・ボタン操作を受ける | 関係なし | 問い合わせの記録 |
1回のリクエストで送れるメッセージオブジェクト(吹き出し)は、どの送り方でも最大5つです。
手順
1. 管理画面でMessaging APIを有効にする
この操作はWeb版の管理画面からしかできません。LINE公式アカウントアプリには項目がありません。操作する人の権限は「管理者」が必要です。
- 「管理者」権限のあるアカウントで、PCのブラウザからLINE Official Account Managerにログインします
- サンプル料理教室のアカウントを開き、「設定」を押します
- 設定のメニューから「Messaging API」を押します
- 「Messaging APIを利用する」を押します
- LINE Developersを初めて使うアカウントでは、開発者情報の登録画面が出ます。名前とメールアドレスを入れて進みます
- プロバイダーを選ぶ画面で、既存のプロバイダーを選ぶか、新しく作ります。ここで選んだものは後から変えられません
- 利用規約を確認して「同意する」を押します
- 確認画面で「OK」を押します

既存のプロバイダーを選ぶには、そのプロバイダーのAdmin権限が要り、無いと選択肢に出てきません。
2024年9月4日以降、LINE DevelopersコンソールからMessaging APIのチャネルを直接作ることはできません。古い解説記事の「コンソールで新規チャネル作成」は今は使えず、管理画面から有効にする流れだけです。

2. LINE Developersコンソールでチャネルを確かめる
- 管理画面と同じアカウントでLINE Developersコンソールにログインします
- 手順1で選んだプロバイダーを押します
- サンプル料理教室のチャネルが並んでいることを確かめて、開きます
- 「チャネル基本設定」タブで、チャネルIDとチャネルシークレットを確かめます
- 自分のユーザー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日)。

4. Webhook URLを設定して検証する
- LINE Developersコンソールでチャネルを開きます
- 「Messaging API設定」タブを押します
- 「Webhook URL」の「編集」を押し、受け口のURL(例
https://example.com/line/webhook)を入れて「更新」を押します - 「検証」を押します。受け口が正しく応答すると、「成功」と書かれたダイアログが出るので「OK」で閉じます
- 「Webhookの利用」をオンにします
- 同じ画面の「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が送り直す機能です。回数と間隔は非公開で、確実な再送の保証もありません。

署名の検証は、届いたリクエストボディをそのままの文字列で受け取り、チャネルシークレットを鍵にして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:オン(問い合わせの記録・友だち追加の記録・リマインドの予約)
初めて作るときは、公式もあいさつメッセージと応答メッセージのオフを勧めています。どちらが返事をしたのか分からなくなるからです。動作確認の間は両方オフにし、仕組みができてから戻します。

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つを必ず記録します。

動作の確認は、テスト用のスマホで公式アカウントをブロックし、受け口のログに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で設定したデフォルトやユーザー単位のメニューを外す |
次にやること
まずは問い合わせの記録から始めます。