> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qoder.com/llms.txt
> Use this file to discover all available pages before exploring further.

# メッセージチャネル連携ガイド

> Forward Channel API を通じて外部 IM プラットフォームを連携するユーザーに向けて、推奨される QR コードバインディングのフロー、および各チャネルでのアプリ / ボットの作成方法、必要な権限の設定、取得すべき認証情報について説明します。

<Warning>
  **現段階では「QR コードバインディング」によるチャネル認可の利用を推奨します。必要でない限り、認証情報の直接設定は推奨しません。**

  DingTalk、Feishu、WeCom、個人 WeChat のいずれも QR コードバインディングをサポートします。Channel 作成時に `channel_config.credentials` を省略し、QR Session による QR スキャン認可でバインディングを完了できます。App Secret などの機微な認証情報をアプリ側に保存する必要がなく、セキュリティ性が高く、運用コストも低くなります。

  QR コードバインディングでは要件を満たせない場合（無人のサーバーサイド自動化など）のみ、以下の各チャネルの「直接認証情報」方式を検討してください。
</Warning>

## QR コードバインディングのフロー（推奨）

QR コードバインディングは `dingtalk`、`feishu`、`wecom`、`wechat` のすべてのチャネルで利用でき、手順は次のとおりです:

1. **Channel を作成する**: [Channel の作成](/ja/cloud-agents/api/forward/channels/create) API を呼び出し、`name`、`channel_type`、`identity_id`、`template_id` を渡します。**`channel_config.credentials` は省略します**。
2. **QR Session を作成する**: [Channel QR Session の作成](/ja/cloud-agents/api/forward/channels/create-qr-session) API を呼び出し、`qr_code_image_base64`（QR コード画像）または `qr_code_content`（認可 URL）、および推奨ポーリング間隔 `poll_interval_seconds` を取得します。
3. **QR コードを表示して認可する**: QR コードをユーザーに表示し、対応するチャネルのクライアントで QR コードを読み取り、認可を確認します。
4. **認可状態をポーリングする**: `poll_interval_seconds` の間隔で [Channel QR Session の取得](/ja/cloud-agents/api/forward/channels/get-qr-session) を呼び出し、`status` が `confirmed` になるまでポーリングします（他の状態: `waiting`、`scanned`、`expired`、`denied`、`error`）。
5. **バインディングを完了する**: `status=confirmed` の後に Channel の詳細を更新すると、`binding_status` が `bound` になり、受信メッセージを受け取って自動返信できるようになります。

<Note>
  QR コードの有効期限は短めです。`expired` または `denied` になった場合は、QR Session を再作成して再度読み取ってください。
</Note>

## 直接認証情報による連携（必要に応じて）

直接認証情報を使用する必要がある場合は、対応する開放プラットフォームでアプリ / ボットを作成し、権限を設定して認証情報を取得したうえで、[Channel の作成](/ja/cloud-agents/api/forward/channels/create) API の `channel_config.credentials` に渡します。各チャネルの `channel_type` と認証情報フィールドの対応:

| チャネル      | `channel_type` | `channel_config.credentials` フィールド | QR バインディングをサポート |
| --------- | -------------- | ---------------------------------- | --------------- |
| DingTalk  | `dingtalk`     | `client_id`、`client_secret`        | はい（推奨）          |
| Feishu    | `feishu`       | `app_id`、`app_secret`              | はい（推奨）          |
| WeCom     | `wecom`        | `bot_id`、`secret`                  | はい（推奨）          |
| 個人 WeChat | `wechat`       | 認証情報は不要                            | QR バインディングのみ    |

<Note>
  認証情報は Channel の作成 / 更新時にのみ書き込まれ、平文では返されません。
</Note>

## DingTalk

### DingTalk アプリを作成する

1. [DingTalk 開放プラットフォーム](https://open-dev.dingtalk.com/) にアクセスします。開発者権限を持つ組織を選択するか、いずれかの組織を選択して開発者権限を取得してください。適切な組織がない場合は、モバイル版 DingTalk で QR コードをスキャンして組織を素早く作成できます。
2. トップナビゲーションの **アプリ開発** をクリックし、DingTalk アプリのページで **アプリを作成** をクリックします。

### DingTalk ボットを作成する

1. アプリを作成したら、左側ナビゲーションで **アプリ機能を追加** を選択し、右側のボットカード下の **追加** ボタンをクリックします。
2. ボット設定ページで、ボット設定を有効にします。
3. **メッセージ受信モード** で **Stream モード** を選択し、**公開** をクリックしてボット設定を完了します。

### 権限を設定する

アプリの **権限管理** で、以下の権限を有効にします:

| 権限                     | 説明                   |
| ---------------------- | -------------------- |
| `Card.Streaming.Write` | カードメッセージのストリーミング書き込み |
| `Card.Instance.Write`  | カードインスタンスの作成 / 更新    |
| `qyapi_robot_sendmsg`  | ボットのメッセージ送信          |

### アプリを公開する

1. 左側ナビゲーションで **バージョン管理と公開** を選択し、**新規バージョンを作成** をクリックします。
2. アプリのバージョン番号とバージョン説明を入力し、業務のニーズに応じてアプリの利用可能範囲を選択し、**保存** をクリックして公開を完了します。

<Note>
  利用可能範囲を全社員に設定すると、公開後、現在の企業内のすべての社員に対してアプリが表示されます。
</Note>

### 認証情報を取得する

左側ナビゲーションの **認証情報と基本情報** ページで **Client ID** と **Client Secret** を記録します。これらはそれぞれ API の `client_id` と `client_secret` に対応します。

## Feishu

### Feishu アプリを作成する

1. [Feishu 開放プラットフォーム](https://open.feishu.cn/) にアクセスし、右上の **開発者コンソール** をクリックします。
2. **企業向けカスタムアプリを作成** をクリックし、必要な情報を入力して **作成** をクリックします。

### ボットの追加と設定

1. 左側ナビゲーションで **アプリ機能を追加** を選択し、ボットカードの **追加** ボタンをクリックします。
2. ボット設定カードの「利用の始め方」の右側にある編集アイコンをクリックします。
3. **メッセージカードのコールバックリクエスト方式** 領域で **設定へ** をクリックし、購読方式として **長時間接続によるコールバック受信** を選択して保存します。
4. **イベント設定** をクリックし、購読方式として同様に **長時間接続によるコールバック受信** を選択して保存します。
5. イベント設定ページで、次の 4 つのイベントを追加して保存します:
   * ボットがグループに参加
   * ボットがグループから削除
   * メッセージ既読
   * メッセージ受信

### 権限を設定する

**権限管理 > 権限の有効化** で **権限の一括インポート / エクスポート** をクリックし、以下の JSON を貼り付けて必要な権限をワンクリックでインポートし、確認後 **申請して有効化** をクリックします:

```json theme={null}
{
  "scopes": {
    "tenant": [
      "contact:contact.base:readonly",
      "docx:document:readonly",
      "im:chat:read",
      "im:chat:update",
      "im:message.group_at_msg:readonly",
      "im:message.p2p_msg:readonly",
      "im:message.pins:read",
      "im:message.pins:write_only",
      "im:message.reactions:read",
      "im:message.reactions:write_only",
      "im:message:readonly",
      "im:message:recall",
      "im:message:send_as_bot",
      "im:message:send_multi_users",
      "im:message:send_sys_msg",
      "im:message:update",
      "im:resource",
      "application:application:self_manage",
      "cardkit:card:write",
      "cardkit:card:read"
    ],
    "user": [
      "contact:user.employee_id:readonly",
      "offline_access",
      "base:app:copy",
      "base:field:create",
      "base:field:delete",
      "base:field:read",
      "base:field:update",
      "base:record:create",
      "base:record:delete",
      "base:record:retrieve",
      "base:record:update",
      "base:table:create",
      "base:table:delete",
      "base:table:read",
      "base:table:update",
      "base:view:read",
      "base:view:write_only",
      "base:app:create",
      "base:app:update",
      "base:app:read",
      "board:whiteboard:node:create",
      "board:whiteboard:node:read",
      "calendar:calendar:read",
      "calendar:calendar.event:create",
      "calendar:calendar.event:delete",
      "calendar:calendar.event:read",
      "calendar:calendar.event:reply",
      "calendar:calendar.event:update",
      "calendar:calendar.free_busy:read",
      "contact:contact.base:readonly",
      "contact:user.base:readonly",
      "contact:user:search",
      "docs:document.comment:create",
      "docs:document.comment:read",
      "docs:document.comment:update",
      "docs:document.media:download",
      "docs:document:copy",
      "docx:document:create",
      "docx:document:readonly",
      "docx:document:write_only",
      "drive:drive.metadata:readonly",
      "drive:file:download",
      "drive:file:upload",
      "im:chat.members:read",
      "im:chat:read",
      "im:message",
      "im:message.group_msg:get_as_user",
      "im:message.p2p_msg:get_as_user",
      "im:message:readonly",
      "search:docs:read",
      "search:message",
      "space:document:delete",
      "space:document:move",
      "space:document:retrieve",
      "task:comment:read",
      "task:comment:write",
      "task:task:read",
      "task:task:write",
      "task:task:writeonly",
      "task:tasklist:read",
      "task:tasklist:write",
      "wiki:node:copy",
      "wiki:node:create",
      "wiki:node:move",
      "wiki:node:read",
      "wiki:node:retrieve",
      "wiki:space:read",
      "wiki:space:retrieve",
      "wiki:space:write_only"
    ]
  }
}
```

### アプリを公開する

1. 左側ナビゲーションで **バージョン管理と公開** を選択します。
2. **バージョンを作成** をクリックし、必要な情報を入力して **保存** をクリックします。

### 認証情報を取得する

アプリの **認証情報と基本情報** ページで **App ID**（`cli_xxx` のような形式）と **App Secret** をコピーします。これらはそれぞれ API の `app_id` と `app_secret` に対応します。

## WeCom

### スマートボットを作成する

1. [WeCom 管理コンソール](https://work.weixin.qq.com/) にアクセスし、左側ナビゲーションで **セキュリティと管理 > 管理ツール** をクリックし、**ボットを作成** をクリックしてから **手動で作成** をクリックします。
2. ボットの表示範囲を設定します。
3. ページの下部までスクロールして **API モードで作成** をクリックし、接続方法として **長時間接続を使用** を選択します。

### 認証情報を取得する

設定方法の **Secret** 領域で **クリックして取得** をクリックし、**Bot ID** と **Secret** を記録します。これらはそれぞれ API の `bot_id` と `secret` に対応します。

## 個人 WeChat

個人 WeChat は **QR コードバインディング** のみをサポートし、開放プラットフォームでアプリを作成する必要も、直接認証情報を設定する必要もありません。Channel 作成時に `channel_type` に `wechat` を渡し、上記の [QR コードバインディングのフロー（推奨）](#qr-コードバインディングのフロー推奨) に従って認可を完了してください。

## 関連

<CardGroup cols={2}>
  <Card title="Channel の作成" icon="plus" href="/ja/cloud-agents/api/forward/channels/create" />

  <Card title="Channel QR Session の作成" icon="qrcode" href="/ja/cloud-agents/api/forward/channels/create-qr-session" />

  <Card title="Channel の一覧" icon="list" href="/ja/cloud-agents/api/forward/channels/list" />
</CardGroup>
