Skip to content

Anybot などの外部ツールから会員情報を連携する

Anybot などの外部システムは、サブスクラインの MCP エンドポイントへ HTTP リクエストを送り、会員プロフィールの取得と部分更新ができます。このページでは、外部システムの担当者が実装するときに必要な情報をまとめます。

MCP の JSON-RPC API です

この会員プロフィールツールは拡張版の /api/v2/mcp でのみ利用できます。通常の REST API ではありません。すべて同じ MCP エンドポイントへ POST し、JSON 本文の methodparams.name で操作を指定します。

接続情報

項目
HTTP メソッドPOST
エンドポイントhttps://api.subscline.jp/api/v2/mcp
認証Authorization: Bearer subscline_...
Content-Typeapplication/json
形式JSON-RPC 2.0(MCP Streamable HTTP)

1. 接続トークンを発行する

サブスクライン管理画面の「設定」>「AI/MCP 連携」>「接続を作成」で、外部ツール専用の接続を作成します。

  • 会員情報を取得する場合: read
  • 会員情報を更新する場合: member_profile_write
  • 取得と更新の両方を行う場合: readmember_profile_write

write は配信などの下書き作成用です。write だけでは updateMemberProfile はツール一覧に表示されず、直接呼び出してもscope不足になります。会員の個人情報を更新する必要がある接続にだけ member_profile_write を明示的に付けてください。

postback は自動応答の外部発火専用です。会員情報の取得・更新には使用せず、read / write / member_profile_write と同じトークンにも設定できません。

トークンは作成直後に一度だけ表示されます。外部ツールのサーバー側で秘密情報として保管し、HTML や JavaScript、URL のクエリには入れないでください。

2. 利用可能なツールを確認する

発行したトークンで tools/list を呼ぶと、許可されたスコープのツールだけが返ります。

bash
curl --request POST 'https://api.subscline.jp/api/v2/mcp' \
  --header 'Authorization: Bearer subscline_xxxxxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/list",
    "params": {}
  }'

会員プロフィール連携で使うツールは次の 2 つです。

ツール必要なスコープ内容
getMemberProfileread会員プロフィールを取得する
updateMemberProfilemember_profile_write指定したプロフィール項目だけを更新する

3. 対象会員を指定する

対象会員は、次のどちらかで指定します。2 方式を同じリクエストで併用することはできません。

サブスクラインの会員 ID で指定する

すでにサブスクラインの memberId を外部ツール側で保持している場合に使います。

json
{
  "memberId": "member_example_123"
}

LINE ユーザー ID で指定する

lineConfigIdlineUserId を組み合わせて指定します。

json
{
  "lineConfigId": "line_config_example_123",
  "lineUserId": "U0123456789abcdef0123456789abcdef"
}

LINE Provider を確認してください

LINE ユーザー ID は LINE Provider ごとに異なります。外部ツールが取得した lineUserId と、サブスクラインに接続している LINE 公式アカウントが同じ LINE Provider に属している必要があります。異なる Provider のユーザー ID では同じ利用者を特定できません。

lineConfigId はサブスクライン管理画面で対象の LINE 公式アカウントを開いた URL や、サブスクライン担当者から共有された値を使用します。トークンを発行したテナントと異なる memberId / lineConfigId を指定しても取得・更新できません。

4. 会員プロフィールを取得する(read)

bash
curl --request POST 'https://api.subscline.jp/api/v2/mcp' \
  --header 'Authorization: Bearer subscline_xxxxxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "getMemberProfile",
      "arguments": {
        "lineConfigId": "line_config_example_123",
        "lineUserId": "U0123456789abcdef0123456789abcdef"
      }
    }
  }'

成功時は result.isErrorfalse になり、result.content[0].text に JSON 文字列でプロフィールが入ります。

json
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"memberId\":\"member_example_123\",\"email\":\"user@example.com\",\"tel\":\"09012345678\"}"
      }
    ],
    "isError": false
  }
}

5. 会員プロフィールを更新する(member_profile_write)

profile に指定した項目だけを更新します。たとえばメールアドレスと電話番号だけを送った場合、氏名や住所などの既存値は変更しません。

bash
curl --request POST 'https://api.subscline.jp/api/v2/mcp' \
  --header 'Authorization: Bearer subscline_xxxxxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --data '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "updateMemberProfile",
      "arguments": {
        "lineConfigId": "line_config_example_123",
        "lineUserId": "U0123456789abcdef0123456789abcdef",
        "profile": {
          "email": "user@example.com",
          "tel": "09012345678",
          "prefCode": 13,
          "zipCode": "1000001",
          "address": "東京都千代田区"
        }
      }
    }
  }'

成功時の result.content[0].text には、更新結果と更新対象の項目名だけが入ります。member_profile_write だけを許可した接続へ既存の会員情報は返りません。更新後の値を取得する必要がある場合は、read も許可した接続で別途 getMemberProfile を呼び出してください。

json
{
  "updated": true,
  "updatedFields": ["email", "tel", "prefCode", "zipCode", "address"]
}

更新できる項目は次のとおりです。

項目内容・形式
displayName表示名
firstName / lastName名 / 姓
furigana氏名のフリガナ(カタカナ)
firstNameKana / lastNameKana名 / 姓のカナ
genderMALE / FEMALE / NO_ANSWER
emailメールアドレス
birthday生年月日。例: 1990-01-31
tel電話番号。例: 09012345678
prefCode都道府県 ID。例: 東京都は 13
zipCode郵便番号。例: 1000001
address / address2住所 / 建物名など

zipCode または address を更新する場合は、住所とセグメント判定に使う都道府県が食い違わないよう、同じ profileprefCode も指定してください。空文字での削除や、表にない項目の更新はできません。同じ内容を再送しても予約・契約・配信・通知などの追加処理は発生しませんが、プロフィールの更新日時は再送のたびに更新されます。

エラーの確認

  • HTTP 401: Bearer トークンがない、無効化済み、または値が誤っている
  • result.isError: true で権限エラー: トークンに必要な read / member_profile_write がない
  • result.isError: true でスタッフ権限エラー: 接続を作成・認可したアカウントにユーザー閲覧権限、またはユーザー情報編集権限がない
  • result.isError: true で「指定された会員が見つかりません」: ID が誤っている、LINE Provider が異なる、またはトークンと対象会員のテナントが異なる
  • result.isError: true で形式エラー: メールアドレス、電話番号、生年月日などの値を確認する
  • result.isError: true で都道府県エラー: prefCode が有効か、zipCode / address と一緒に指定しているか確認する
  • HTTP 429: 1 分あたりのリクエスト上限を超えているため、間隔を空けて再試行する

実装前の接続確認では、最初に tools/list、次にテスト用会員への getMemberProfile、最後にテスト用会員だけを対象とした updateMemberProfile の順で確認してください。実在のお客様を接続試験に使用しないでください。