Microsoft Teams から使う
Microsoft Teams から使う
対象環境: Microsoft Teams 連携は オンプレミス導入向け です。iknow.dev(SaaS)では Teams 連携は利用できません。
iknow.dev のエージェントを Microsoft Teams のチャットから 利用できるようにする方法です。Teams ユーザーは Teams を抜けずに iknow.dev のエージェントに質問でき、回答もそのまま Teams 上に返ります(Web チャットと同様、ナレッジに基づく回答です)。
社内で Teams 連携が すでに構築済み の一般ユーザーは、「Teams 上での使い方」だけ読めば十分です。初めて組織に導入する 管理者 は「全体の流れ」から順に進めてください。
この機能でできること
| やりたいこと | 誰向け |
|---|---|
| Teams の 1:1 チャットやチャネルからエージェントに質問する | 一般ユーザー |
| 社内用に iknow ボットをセットアップする | 管理者(Entra ID / Azure Bot 操作権限) |
| 複数エージェントを 1 つの Bot プロセスで運用する | 管理者 |
Web チャットとの違い
| 項目 | Web チャット | Teams |
|---|---|---|
| 会話の表示場所 | チャットアプリのサイドバー(エージェント内で共有) | Teams のチャットスレッド |
| チャット履歴 | 個人の閲覧・発言履歴として記録 | 表示されない(別経路として隔離) |
| 回答の根拠 | 同じナレッジ | 同じナレッジ |
Teams 経由の会話はプライバシー保護のため、iknow.dev の Web チャットアプリのサイドバー一覧には表示されません。
Teams 上での使い方(一般ユーザー向け)
セットアップが完了していれば、次の手順で利用できます。
- Teams で iknow ボットを追加する — 管理者が配布した Teams アプリ(マニフェストで設定したアプリ名)を検索し、追加します。
- 質問を送る — 1:1 チャットまたはチームのチャネルでボットにメッセージを送信します。
- 回答を確認する — iknow.dev のエージェントがナレッジに基づいて回答し、Teams 上のメッセージとして表示されます。
Teams で初めて発言したユーザーが iknow.dev 上にまだアカウントを持っていない場合、Teams の Entra ID 情報をキーに 自動でアカウントが作成 されます。
全体の流れ(管理者向け・5 ステップ)
flowchart TD
S1["1. Microsoft Entra ID でアプリを登録する"] --> S2["2. iknow.dev でボットシークレットを発行する"]
S2 --> S3["3. Teams Bot(Node.js)を設定・起動する"]
S3 --> S4["4. Azure Bot の Messaging Endpoint を設定する"]
S4 --> S5["5. Teams アプリ(manifest)を作成・サイドロードする"]
概要と前提
| 項目 | 内容 |
|---|---|
| 担当 | 管理者(Microsoft Entra ID と Azure Bot を操作できる権限が必要) |
| 必要なスキル | Node.js / Azure Portal / Teams Developer Portal の基本操作 |
| 必要なソフトウェア | Node.js 18 以上(LTS 推奨) |
| 前提条件 | iknow.dev の管理画面で 対象エージェント用のボットシークレットを発行済み |
Step 1: Microsoft Entra ID でアプリを登録する
- Microsoft Entra 管理センター にサインインします。
- 「アプリの登録」→「新規登録」で必要項目を入力して登録します。
- 次の値を控えます。
| 値 | 用途 |
|---|---|
| Application (client) ID | 後述の MicrosoftAppId |
| Directory (tenant) ID | 後述の MicrosoftAppTenantId |
- 「証明書とシークレット」からクライアントシークレットを作成し、値を控えます →
MicrosoftAppPassword。
Step 2: iknow.dev でボットシークレットを発行する
対象エージェントごとに、運営用 Blocs 管理画面(/admin/agent/{agentId}/edit)の「Microsoft Teams ボット」カードから Teams ボットシークレット を発行します。発行された平文は 再表示不可 のため、即コピーして IKNOW_TEAMS_BOT_SECRET(または複数モードの secret)に設定します。
エージェント一覧では発行できません。 手順の詳細は「エージェントごとの Teams ボット資格情報」(No.6.5)。エージェントコードの確認は「エージェント一覧」(No.3.1)。
Step 3: Teams Bot(Node.js)を設定・起動する
Teams Bot は iknow.dev のリポジトリに同梱されている teams-bot/ ディレクトリで動かします。
環境変数(単一エージェントモード)
teams-bot/.env に次の変数を設定します。
| 変数 | 内容 | 取得元 |
|---|---|---|
MicrosoftAppId |
Application (client) ID | Step 1 |
MicrosoftAppPassword |
クライアントシークレット | Step 1 |
MicrosoftAppTenantId |
Directory (tenant) ID | Step 1 |
IKNOW_TEAMS_API_URL |
iknow のオリジン(例: https://iknow.dev) |
— |
IKNOW_TEAMS_BOT_SECRET |
ボットシークレット | Step 2 |
IKNOW_TEAMS_AGENT_CODE |
紐づけるエージェントのコード | iknow.dev 管理画面 |
PORT |
待受ポート(既定: 3978) |
— |
起動
cd teams-bot
cp .env.example .env
# .env を編集
npm install
npm start
Messaging Endpoint のデフォルトは 単一エージェントモード では http://localhost:3978/api/messages です。複数エージェントモード では /api/messages は登録されず、エージェントごとに /{agentCode}/api/messages(例: http://localhost:3978/sales-bot/api/messages)が公開されます。
ローカル開発時:
ngrokなどを使って HTTPS の公開 URL を払い出してください。末尾は単一エージェントモードなら/api/messages、複数エージェントモードなら/{agentCode}/api/messagesにします。
Step 4: Azure Bot の Messaging Endpoint を設定する
対象: 単一エージェントモードの手順です。複数エージェントを 1 プロセスで運用する場合は後述の「複数エージェントを連携する場合」へ進んでください。
- Azure ポータルで対象の Bot Channels Registration を開きます。
- 「Configuration」の Messaging endpoint に以下を設定します。
https://<公開URL>/api/messages
Step 5: Teams アプリの manifest を作成・サイドロード
teams-bot/manifest/manifest.template.jsonをコピーしてmanifest.jsonを作ります。- プレースホルダー
{{BOT_APP_ID}}(Application client ID)と{{TEAMS_APP_MANIFEST_ID}}(新規 GUID)を置換します。 validDomainsに Bot の公開ホスト名(Messaging Endpoint のホスト。例:bot.example.com)を追加します。manifest.template.jsonの既定は空配列のため、必ずここに追記してください(Teams の検証でエラーになります)。color.pngとoutline.pngをteams-bot/manifest/に配置します。manifest.json/color.png/outline.pngの 3 ファイルを zip のルート直下 に入れて圧縮します(ディレクトリで包まないように注意)。- Teams クライアントまたは Developer Portal から zip をアップロードします。
複数エージェントを Teams 連携する場合
1 つの Bot プロセスで複数のエージェントを同時に運用できます。エージェントごとに URL パスが分かれるため、エージェント追加時にリバースプロキシの設定変更は不要です。
エージェントごとに必要なリソース
| リソース | 備考 |
|---|---|
| Microsoft Entra ID アプリ登録 | appId / appPassword がエージェントごとに異なる。MicrosoftAppTenantId は同一テナントなら共通 |
| Azure Bot リソース | Messaging Endpoint がエージェントごとに異なるため個別に作成 |
| iknow ボットシークレット | iknow.dev 管理画面で対象エージェントごとに発行 |
| Teams アプリ manifest | BOT_APP_ID / TEAMS_APP_MANIFEST_ID / アプリ名がエージェントごとに異なる |
環境変数(複数エージェントモード)
teams-bot/.env に IKNOW_TEAMS_AGENTS を JSON 配列で設定します。
IKNOW_TEAMS_API_URL=https://iknow.dev
MicrosoftAppTenantId=<共通テナントID>
IKNOW_TEAMS_AGENTS=[{"code":"agent-a","appId":"<A の AppId>","appPassword":"<A の Password>","secret":"<A のボットシークレット>"},{"code":"agent-b","appId":"<B の AppId>","appPassword":"<B の Password>","secret":"<B のボットシークレット>"}]
| フィールド | 内容 |
|---|---|
code |
iknow.dev のエージェントコード |
appId |
Microsoft Entra ID の Application (client) ID |
appPassword |
Microsoft Entra ID のクライアントシークレット |
secret |
iknow.dev で発行したボットシークレット |
エージェントを追加するには配列にエントリを足してプロセスを再起動するだけです。
Azure Bot の Messaging Endpoint(複数エージェント)
各 Azure Bot の Messaging Endpoint を エージェントコード入りの URL で設定します。
https://<公開URL>/<エージェントコード>/api/messages
例:
- エージェント A (
agent-a):https://bot.example.com/agent-a/api/messages - エージェント B (
agent-b):https://bot.example.com/agent-b/api/messages
Teams アプリ manifest(複数エージェント)
エージェントごとに manifest を作成し、name.short をエージェント名に合わせるとユーザーがアプリを区別しやすくなります(例:「iknow - 営業アシスタント」「iknow - 技術サポート」)。
起動確認
起動コマンドは単一エージェントモードと同じです。起動時のログで登録されたエージェント数を確認できます。
iknow Teams bot listening on 3978 [複数エージェントモード (2 agents)]
IKNOW_TEAMS_AGENTSが未設定の場合は、従来の環境変数(MicrosoftAppId/MicrosoftAppPassword/IKNOW_TEAMS_AGENT_CODE/IKNOW_TEAMS_BOT_SECRET)を使った単一エージェントモードで動作します。既存設定は変更不要です。
ユーザー識別の仕組み
| 項目 | 内容 |
|---|---|
| Teams 側の識別子 | aadObjectId(Entra ID のオブジェクト ID) |
| iknow.dev 側の紐づけ | microsoft_id で専門家(Expert)を作成・更新 |
tenant_id |
会話の成立に必須(取得できないとエラー応答)。DB には保存しない |
困ったとき
| 症状 | 確認 |
|---|---|
| Bot が応答しない | Azure Bot の Messaging Endpoint URL が正しいか、Bot プロセスが起動中か |
| 401 で拒否される | ボットシークレットが一致しているか(単一: IKNOW_TEAMS_BOT_SECRET、複数: IKNOW_TEAMS_AGENTS 各要素の secret)。Azure 側は MicrosoftAppPassword も確認 |
| 429(Too Many Requests)が返る | iknow API 側のレート制限(throttle:teams-bot)に達した。既定は 20 回/分・エージェントコード単位(RATE_LIMIT_TEAMS_BOT 環境変数で変更可)。Bot プロセス自体にはレート制限はないため、iknow.dev 側の制限が適用される |
| ローカル開発で Teams から到達できない | ngrok 等で HTTPS の公開 URL を払い出しているか。末尾が /api/messages か /{agentCode}/api/messages か |
| Teams アプリの検証でドメインエラーが出る | manifest の validDomains に Bot 公開ホスト名を追加しているか(Step 5 手順 3) |
| 起動時に「複数エージェントモード」と出ない | IKNOW_TEAMS_AGENTS の JSON が正しい配列形式か |