Forward Channel API を通じて外部 IM プラットフォームを連携するユーザーに向けて、チャネル認可、fixed/pairing 実行コンテキストモード、および各チャネルでのアプリ / ボットの作成方法、必要な権限の設定、取得すべき認証情報について説明します。
チャネル認可と Channel Pairing の区別
Forward Channel には 2 つの独立した設定次元があります:
| 次元 | 解決する課題 | 選択肢 |
|---|---|---|
| チャネル認可 | Forward が IM ボット接続と送受信権限を取得する方法 | QR Session スキャン(推奨)または直接認証情報 |
| Identity 解決 | 受信メッセージに対してどの Identity と Template を使用するか | fixed または pairing |
pairing モードの Channel も、まずチャネル認可を完了して binding_status=bound にする必要があります。その後、実際の IM 会話で初めてメッセージがトリガーされると、Forward はペアリングコードを生成してそのメッセージスコープの実行コンテキストをバインドします。
QR コードバインディングのフロー(推奨)
QR コードバインディングは dingtalk、feishu、wecom、wechat のすべてのチャネルで利用でき、手順は次のとおりです:
- Channel を作成する: Channel の作成 API を呼び出し、
name、channel_type、および希望する Identity 解決モードを渡します。channel_config.credentialsは省略します。fixedモードではidentity_idとtemplate_idも渡します。pairingモードではidentity_resolution.mode=pairingを渡し、identity_idやtemplate_idは渡しません。 - QR Session を作成する: Channel QR Session の作成 API を呼び出し、
qr_code_image_base64(QR コード画像)またはqr_code_content(認可 URL)を取得します。poll_interval_secondsはオプションの互換性フィールドであり、安定した返却値として依存すべきではありません。 - QR コードを表示して認可する: QR コードをユーザーに表示し、対応するチャネルのクライアントで QR コードを読み取り、認可を確認します。
- 認可状態をポーリングする: Channel QR Session の取得 を呼び出し、
statusをポーリングします。poll_interval_secondsがある場合はその値を使用し、なければデフォルトの 3 秒間隔でポーリングします。confirmedになるまで継続します(他の状態:waiting、scanned、expired、denied、error)。 - チャネル認可を完了する:
status=confirmedの後に Channel の詳細を再取得すると、binding_statusがboundになります。fixedモードの Channel は固定の実行コンテキストで受信メッセージを処理できます。pairingモードの Channel はペアリングされていないメッセージに対してペアリングコードを返します。メッセージが Agent に到達する前に Channel Pairing(下記)を完了してください。
QR コードの有効期限は短めです。
expired または denied になった場合は、QR Session を再作成して再度読み取ってください。Identity 解決モード
fixed モード
fixed がデフォルトです。Channel 作成時に identity_id と template_id を指定する必要があり、すべての受信メッセージはこの固定の実行コンテキストを使用します:
pairing モード
pairing モードでは、Channel は IM トランスポート接続のみを表し、作成時に Identity や Template は指定しません:
- ユーザーが実際の IM の個人チャットまたはグループチャットからボットにメッセージを送信します。
- Channel Gateway はペアリングされていない direct/room スコープにペアリング待ちのレコードを作成し、ペアリングコードの案内を送信します。Session は作成されません。
- 管理者が Channel のペアリング API を
code + identity_id + template_idで呼び出します。認可を自動化する場合は、先にペアリングの一覧を取得し、channel_id + scope_type + scope_external_idを独自のルールと照合してから、channel_pairing_id + identity_id + template_idを送信できます。 - 以降のメッセージは Pairing を通じて Identity と Template を解決し、Session を作成または再利用します。
- バインディングを解除するには、Pair レスポンスの
idを使用して Channel のペアリング解除 API を呼び出します。
直接認証情報による連携(必要に応じて)
直接認証情報を使用する必要がある場合は、対応する開放プラットフォームでアプリ / ボットを作成し、権限を設定して認証情報を取得したうえで、Channel の作成 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 バインディングのみ |
| Microsoft Teams(Global) | teams | app_id、tenant_id、client_secret | いいえ |
認証情報は Channel の作成 / 更新時にのみ書き込まれ、平文では返されません。
DingTalk
DingTalk アプリを作成する
- DingTalk 開放プラットフォーム にアクセスします。開発者権限を持つ組織を選択するか、いずれかの組織を選択して開発者権限を取得してください。適切な組織がない場合は、モバイル版 DingTalk で QR コードをスキャンして組織を素早く作成できます。
- トップナビゲーションの アプリ開発 をクリックし、DingTalk アプリのページで アプリを作成 をクリックします。
DingTalk ボットを作成する
- アプリを作成したら、左側ナビゲーションで アプリ機能を追加 を選択し、右側のボットカード下の 追加 ボタンをクリックします。
- ボット設定ページで、ボット設定を有効にします。
- メッセージ受信モード で Stream モード を選択し、公開 をクリックしてボット設定を完了します。
権限を設定する
アプリの 権限管理 で、以下の権限を有効にします:
| 権限 | 説明 |
|---|---|
Card.Streaming.Write | カードメッセージのストリーミング書き込み |
Card.Instance.Write | カードインスタンスの作成 / 更新 |
qyapi_robot_sendmsg | ボットのメッセージ送信 |
アプリを公開する
- 左側ナビゲーションで バージョン管理と公開 を選択し、新規バージョンを作成 をクリックします。
- アプリのバージョン番号とバージョン説明を入力し、業務のニーズに応じてアプリの利用可能範囲を選択し、保存 をクリックして公開を完了します。
利用可能範囲を全社員に設定すると、公開後、現在の企業内のすべての社員に対してアプリが表示されます。
認証情報を取得する
左側ナビゲーションの 認証情報と基本情報 ページで Client ID と Client Secret を記録します。これらはそれぞれ API の client_id と client_secret に対応します。
Feishu
Feishu アプリを作成する
- Feishu 開放プラットフォーム にアクセスし、右上の 開発者コンソール をクリックします。
- 企業向けカスタムアプリを作成 をクリックし、必要な情報を入力して 作成 をクリックします。
ボットの追加と設定
- 左側ナビゲーションで アプリ機能を追加 を選択し、ボットカードの 追加 ボタンをクリックします。
- ボット設定カードの「利用の始め方」の右側にある編集アイコンをクリックします。
- メッセージカードのコールバックリクエスト方式 領域で 設定へ をクリックし、購読方式として 長時間接続によるコールバック受信 を選択して保存します。
- イベント設定 をクリックし、購読方式として同様に 長時間接続によるコールバック受信 を選択して保存します。
- イベント設定ページで、次の 4 つのイベントを追加して保存します:
- ボットがグループに参加
- ボットがグループから削除
- メッセージ既読
- メッセージ受信
権限を設定する
権限管理 > 権限の有効化 で 権限の一括インポート / エクスポート をクリックし、以下の JSON を貼り付けて必要な権限をワンクリックでインポートし、確認後 申請して有効化 をクリックします:
アプリを公開する
- 左側ナビゲーションで バージョン管理と公開 を選択します。
- バージョンを作成 をクリックし、必要な情報を入力して 保存 をクリックします。
認証情報を取得する
アプリの 認証情報と基本情報 ページで App ID(cli_xxx のような形式)と App Secret をコピーします。これらはそれぞれ API の app_id と app_secret に対応します。
WeCom
スマートボットを作成する
- WeCom 管理コンソール にアクセスし、左側ナビゲーションで セキュリティと管理 > 管理ツール をクリックし、ボットを作成 をクリックしてから 手動で作成 をクリックします。
- ボットの表示範囲を設定します。
- ページの下部までスクロールして API モードで作成 をクリックし、接続方法として 長時間接続を使用 を選択します。
認証情報を取得する
設定方法の Secret 領域で クリックして取得 をクリックし、Bot ID と Secret を記録します。これらはそれぞれ API の bot_id と secret に対応します。
個人 WeChat
個人 WeChat は QR コードバインディング のみをサポートし、開放プラットフォームでアプリを作成する必要も、直接認証情報を設定する必要もありません。Channel 作成時に channel_type に wechat を渡し、上記の QR コードバインディングのフロー(推奨) に従って認可を完了してください。
Microsoft Teams 連携
Microsoft Teams は Global でのみ利用できます。連携する前に、顧客の Microsoft Entra テナントでアプリケーションを作成し、対応する Bot を Teams にインストールしてください。現在、個人チャット、標準 Team チャネル、グループチャットのテキスト、画像、ファイルメッセージをサポートしています。
Microsoft Entra アプリケーションを作成する
- Microsoft Entra 管理センター を開き、対象テナントでアプリ登録を作成します。
- Supported account types を Single tenant に設定します。
- Application (client) ID と Directory (tenant) ID を記録し、それぞれ
app_idとtenant_idとして使用します。 - Certificates & secrets で Client secret を作成し、その Value を
client_secretとして記録します。
Client secret の Value は作成時に一度だけ表示されます。Secret ID を代わりに使用しないでください。
ファイル送受信に必要な Microsoft Graph 権限を設定する
Teams のグループチャットとチャネルのファイルは、OneDrive または SharePoint に保存されます。グループチャットと標準 Team チャネルでファイルを送受信するには、上記で作成した Entra アプリケーションに、以下の Microsoft Graph Application permissions(アプリケーション権限。Delegated permissions ではありません)を付与する必要があります。
| 権限 | 用途 |
|---|---|
Sites.ReadWrite.All | SharePoint/OneDrive のファイルを読み書きし、受信ファイルのダウンロードと送信ファイルのアップロード・共有に使用します。 |
ChatMember.Read.All | グループチャットの全メンバー一覧を読み取り、グループメンバーのみがアクセスできる送信ファイルの共有リンクを作成します。 |
- Microsoft Entra 管理センターで対象のアプリ登録を開き、API permissions に移動します。
- Add a permission > Microsoft Graph > Application permissions を選択します。
Sites.ReadWrite.AllとChatMember.Read.Allを追加します。- テナント管理者が Grant admin consent を選択し、両方の権限が付与済みになっていることを確認します。
権限の範囲: これらはテナント全体に適用されるアプリケーション権限です。
Sites.ReadWrite.All はテナント内のすべてのサイトコレクションのドキュメントとリスト項目を読み書きでき、ChatMember.Read.All はすべてのチャットのメンバー情報を読み取れます。顧客のテナント管理者が評価したうえで同意してください。個人チャットで Teams FileConsent を使用してファイルを送受信する場合、この 2 つの Graph 権限は不要ですが、Teams アプリの manifest で supportsFiles を有効にする必要があります。Azure Bot を作成して設定する
- Azure Portal で Azure Bot を作成し、Microsoft App Type に Single Tenant を選択します。
- Entra アプリケーションの App ID と Tenant ID を Azure Bot に関連付けます。
- Configuration で、Messaging endpoint に Global 環境から提供された完全な Teams コールバック URL を設定します。パスは
/channels/teams/messagesです。 - Azure Bot で Microsoft Teams チャネルを有効にします。
Teams アプリを作成して公開する
- Developer Portal for Teams を開き、Teams アプリを作成します。
- Bot capability を追加し、Azure Bot と同じ App ID を関連付けます。
- 必要な
personal、team、groupChatスコープを選択します。 - Teams アプリの manifest の Bot 設定で
supportsFiles: trueを指定し、個人チャットでの FileConsent によるファイル送受信を有効にします。 - manifest v1.12 以降で、グループチャットとチャネルの受信ファイルを解析するための RSC メッセージ読み取り権限を宣言します。グループチャットには
ChatMessage.Read.Chat、標準 Team チャネルにはChannelMessage.Read.Groupを使用します。 - アプリパッケージをダウンロードし、顧客の Teams 管理センターまたは組織の App catalog から公開して、対象の個人チャット、グループチャット、または Team にインストールします。manifest の権限を更新した後は、アプリを再公開し、対象のグループチャットまたは Team で再インストールまたは再同意が必要です。
ChatMessage.Read.Chat と ChannelMessage.Read.Group を使用して、Graph からそのメッセージと添付ファイルを補完取得します。これらの権限を付与しても、既存の @Bot によるトリガー要件は変わりません。
標準 Team チャネルとグループチャットでは、ユーザーが明示的に @Bot をメンションする必要があります。個人チャットではメンションは不要です。
Teams Channel を作成する
Channel の作成 を呼び出し、channel_type=teams を設定して、channel_config.credentials に app_id、tenant_id、client_secret を指定します。
作成後、enabled=true かつ binding_status=bound であることを確認し、個人チャット、標準 Team チャネル、グループチャットのそれぞれでテキスト、画像、ファイルの送受信をテストします。グループチャットとチャネルでは、明示的に @Bot をメンションしたメッセージでテストしてください。
現在の Teams 連携は、テキスト、画像、ファイルメッセージとテキストベースの承認操作をサポートします。個人チャットのファイル送受信には Teams FileConsent を使用し、グループチャットと標準 Team チャネルのファイルは SharePoint/OneDrive と Bot Connector で処理します。汎用カード、プロアクティブメッセージ、会議、音声は引き続きサポートしません。グループチャットとチャネルの受信ファイル情報を補完取得するには、上記の RSC 権限が必要です。ただし、現在も個人チャットのメッセージ、または明示的に
@Bot をメンションしたグループチャット / チャネルのメッセージのみを処理し、すべてのメッセージを監視するわけではありません。- Microsoft Graph permissions reference
- Send and receive files
- Get chatMessage in a channel or chat
- Grant RSC permissions to an app

