はじめに
Microsoft Teams は企業コラボレーションの主要プラットフォームの一つであり、さまざまな組織や企業で広く利用されています。OpenClaw を Teams に接続することで、企業内に安全でコントロール可能な AI アシスタントを提供できます。本記事では、Azure AD アプリ登録から Teams アプリのデプロイまでの完全な手順を詳しくご説明します。
前提条件
- OpenClaw がインストール済みで正常に稼働していること
- Microsoft 365 組織アカウントを所有していること(個人アカウントは機能制限あり)
- Azure サブスクリプションを所有していること(Free tier で十分)
- Teams 管理者権限を持っていること(または管理者にアプリ承認を依頼できること)
- OpenClaw サービスがパブリック HTTPS アドレスでアクセス可能であること
アーキテクチャ概要
Teams Bot のメッセージフローは以下の通りです。
ユーザーが Teams でメッセージを送信
↓
Microsoft Bot Framework Service
↓
HTTPS Webhook 経由で OpenClaw に送信
↓
OpenClaw がメッセージを処理し AI モデルを呼び出し
↓
Bot Framework API 経由で返信を送信
↓
ユーザーが Teams で返信を受信
ステップ1:Azure AD アプリ登録
1.1 アプリ登録の作成
- Azure Portal にログイン
- Azure Active Directory → アプリの登録 を検索して移動
- 新規登録 をクリック
- 以下の情報を入力:
| フィールド | 値 |
|---|---|
| 名前 | OpenClaw Teams Bot |
| サポートされるアカウントの種類 | 任意の組織ディレクトリ内のアカウント(マルチテナント) |
| リダイレクト URI | 空のまま |
- 登録 をクリック
1.2 重要な情報の記録
登録完了後、概要 ページで以下の情報を記録します。
アプリケーション(クライアント)ID: 12345678-abcd-efgh-ijkl-123456789012
ディレクトリ(テナント)ID: 87654321-dcba-hgfe-lkji-210987654321
1.3 クライアントシークレットの作成
- 左側メニューで 証明書とシークレット をクリック
- 新しいクライアント シークレット をクリック
- 説明を入力(例:「OpenClaw Bot Secret」)
- 有効期限を選択(24ヶ月を推奨)
- 追加 をクリック
- すぐにシークレット値をコピーしてください(ページを離れると再表示できません)
クライアントシークレット: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
注意:このシークレットはすぐに保存してください。ページを更新すると再度表示できません!
ステップ2:Bot リソースの作成
2.1 Azure Bot の作成
- Azure Portal で Azure Bot を検索
- 作成 をクリック
- 以下の情報を入力:
| フィールド | 値 |
|---|---|
| Bot ハンドル | openclaw-teams-bot |
| サブスクリプション | Azure サブスクリプションを選択 |
| リソース グループ | 新規作成または既存を選択 |
| 価格レベル | F0(無料) |
| Microsoft アプリ ID の種類 | マルチテナント |
| 作成の種類 | 既存のアプリ登録を使用 |
| アプリ ID | 前のステップで取得したアプリケーション(クライアント)ID |
- 確認と作成 → 作成 をクリック
2.2 メッセージングエンドポイントの設定
Bot リソースの作成完了後:
- Bot リソースページに移動
- 左側メニューで 構成 をクリック
- メッセージング エンドポイント に以下を入力:
https://your-domain.com/webhook/teams/messages
- 適用 をクリック
2.3 Teams チャンネルの有効化
- Bot リソースの左側メニューで チャネル をクリック
- 利用可能なチャンネルリストで Microsoft Teams をクリック
- サービス規約に同意
- 適用 をクリック
Teams チャンネルが有効化されると、ステータスは 実行中 と表示されるはずです。
ステップ3:OpenClaw の設定
3.1 設定ファイルで設定
~/.config/openclaw/openclaw.json5 を編集します。
{
channels: {
teams: {
enabled: true,
// Azure AD アプリケーション(クライアント)ID
appId: "12345678-abcd-efgh-ijkl-123456789012",
// Azure AD クライアントシークレット
appPassword: "your-client-secret-value",
// テナント ID(マルチテナントモードの場合は空のままで可)
tenantId: "",
// Webhook パス
webhookPath: "/webhook/teams/messages",
// メッセージ処理設定
message: {
// チームチャンネルで @Bot が必要か
mentionRequired: true,
// 1対1チャットで自動返信
personalChatEnabled: true,
// グループチャットで有効化するか
groupChatEnabled: true
},
// 返信設定
reply: {
// Adaptive Card 形式を使用するか(より美しい表示)
useAdaptiveCard: true,
// 「入力中」インジケーターを表示
showTyping: true,
// 長いメッセージの分割閾値
maxLength: 28000
}
}
}
}
3.2 環境変数で設定
export TEAMS_APP_ID="12345678-abcd-efgh-ijkl-123456789012"
export TEAMS_APP_PASSWORD="your-client-secret-value"
3.3 再起動と検証
openclaw restart
# Teams チャンネルのログを確認
openclaw logs -f --component channel:teams
成功時のログ:
[INFO] [channel:teams] Teams Bot 服务已启动
[INFO] [channel:teams] App ID: 12345678-abcd-****-****-************
[INFO] [channel:teams] Webhook 路径: /webhook/teams/messages
[INFO] [channel:teams] 等待接收消息...
ステップ4:Teams アプリパッケージの作成
Teams クライアントで Bot を見つけて使用するには、Teams アプリパッケージを作成する必要があります。
4.1 アプリマニフェストの作成
manifest.json ファイルを作成します。
{
"$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.16/MicrosoftTeams.schema.json",
"manifestVersion": "1.16",
"version": "1.0.0",
"id": "12345678-abcd-efgh-ijkl-123456789012",
"developer": {
"name": "Your Organization",
"websiteUrl": "https://your-domain.com",
"privacyUrl": "https://your-domain.com/privacy",
"termsOfUseUrl": "https://your-domain.com/terms"
},
"name": {
"short": "OpenClaw AI",
"full": "OpenClaw AI Assistant for Teams"
},
"description": {
"short": "AI インテリジェントアシスタント",
"full": "OpenClaw ベースの AI インテリジェントアシスタント。複数の大規模言語モデルに対応し、チームにリアルタイムのインテリジェント Q&A サービスを提供します。"
},
"icons": {
"outline": "outline.png",
"color": "color.png"
},
"accentColor": "#5B5FC7",
"bots": [
{
"botId": "12345678-abcd-efgh-ijkl-123456789012",
"scopes": ["personal", "team", "groupChat"],
"supportsFiles": false,
"isNotificationOnly": false,
"commandLists": [
{
"scopes": ["personal", "team", "groupChat"],
"commands": [
{
"title": "ask",
"description": "AI に質問する"
},
{
"title": "model",
"description": "AI モデルを切り替え"
},
{
"title": "reset",
"description": "会話コンテキストをリセット"
},
{
"title": "help",
"description": "ヘルプ情報を表示"
}
]
}
]
}
],
"permissions": ["identity", "messageTeamMembers"],
"validDomains": ["your-domain.com"]
}
4.2 アイコンの準備
2つのアイコンファイルを準備します。
| ファイル名 | サイズ | 説明 |
|---|---|---|
color.png |
192x192 ピクセル | カラーアイコン、アプリリストで使用 |
outline.png |
32x32 ピクセル | アウトラインアイコン、透明背景に白いフォアグラウンド |
4.3 アプリのパッケージング
manifest.json、color.png、outline.png を ZIP ファイルにパッケージします。
zip teams-app.zip manifest.json color.png outline.png
4.4 Teams へのアップロード
開発者アップロード(個人使用):
- Teams クライアントを開く
- 左側の アプリ → アプリの管理 をクリック
- アプリのアップロード → カスタムアプリのアップロード をクリック
teams-app.zipファイルを選択
組織レベルのデプロイ(管理者操作):
- Teams 管理センター にログイン
- Teams アプリ → アプリの管理 に移動
- 新しいアプリのアップロード をクリック
teams-app.zipファイルを選択- 審査して組織アプリストアに公開
使い方
1対1チャット
- Teams で OpenClaw AI アプリを見つける
- チャットの開始をクリック
- 質問を直接入力すると AI の返信を受け取れます
チームチャンネルでの使用
- 対象のチームチャンネルで @OpenClaw AI と入力
- 質問を入力
@OpenClaw AI プロジェクト週報のテンプレートを作成してください
グループチャットでの使用
- OpenClaw AI をグループチャットに追加
- @Bot の後に質問を入力
Adaptive Card フォーマット
Adaptive Card を有効にすると、Bot の返信がより美しく構造化されて表示されます。
{
channels: {
teams: {
reply: {
useAdaptiveCard: true,
adaptiveCard: {
// コードブロックに等幅フォントを使用
codeStyle: true,
// モデル情報を表示
showModelInfo: true,
// 処理時間を表示
showLatency: true,
// 「質問を続ける」ボタンを追加
actionButtons: true
}
}
}
}
}
Adaptive Card は返信をスタイル付きカードとしてフォーマットし、以下を含みます。
- タイトルエリアに Bot 名とモデルを表示
- 本文エリアで Markdown レンダリングに対応
- コードブロックにシンタックスハイライトとコピーボタン
- 下部にトークン消費量と処理時間を表示
企業デプロイの注意事項
コンプライアンスとデータセキュリティ
| 検討事項 | 推奨事項 |
|---|---|
| データ所在地 | AI モデル API のデータ処理地域がコンプライアンス要件を満たすか確認 |
| データ保持 | 会話記録の保持とクリーンアップポリシーを設定 |
| 監査ログ | 詳細なログ記録を有効にし、監査要件を満たす |
| アクセス制御 | Bot を使用できるユーザーとチームを制限 |
ユーザー権限制御
{
channels: {
teams: {
security: {
// 使用を許可するユーザーメールアドレスリスト
allowedUsers: [
"*@your-company.com" // 会社ドメイン下のすべてのユーザーを許可
],
// 管理者ユーザー
adminUsers: [
"[email protected]"
],
// 許可するチーム ID
allowedTeams: [],
// ユーザーごとの1日あたりのメッセージ制限
dailyLimit: 100
}
}
}
}
高可用性デプロイ
企業レベルのデプロイでは、以下の設定をお勧めします。
{
channels: {
teams: {
// リクエストタイムアウト設定(ミリ秒)
timeout: 60000,
// リトライ設定
retry: {
maxAttempts: 3,
backoffMs: 1000
},
// 同時実行制限
concurrency: {
maxConcurrent: 50,
queueSize: 200
}
}
}
}
Webhook と Connector の比較
Bot Framework 方式のほか、Teams は Incoming Webhook や Connector を通じた統合もサポートしています。
| 方式 | 双方向通信 | 設定の複雑さ | 機能の充実度 |
|---|---|---|---|
| Bot Framework | 対応 | 高 | 最も充実 |
| Incoming Webhook | 送信のみ | 低 | 基本的 |
| Connector | 送信のみ | 中 | 中程度 |
Bot Framework はユーザーメッセージの受信と返信をサポートする唯一の方式であるため、OpenClaw の推奨ソリューションです。Webhook と Connector は一方向の通知シーンにのみ適しています。
トラブルシューティング
Bot が応答しない
# OpenClaw のログを確認
openclaw logs --level error --component channel:teams
# よくある原因:
# 1. メッセージングエンドポイント URL に到達できない
# 2. App ID または Password が不正
# 3. Bot の Teams チャンネルが有効化されていない
403 Forbidden エラー
# 通常は App Password の期限切れまたは不正が原因
# Azure AD → アプリの登録 → 証明書とシークレット で新しいパスワードを再生成
# OpenClaw の設定を更新して再起動
openclaw config set channels.teams.appPassword "new-password"
openclaw restart
アプリを Teams にアップロードできない
以下の点を確認してください。
- Teams 管理センターでカスタムアプリのアップロードが許可されているか
manifest.jsonのidが Azure AD アプリ ID と一致しているか- アイコンファイルのサイズとフォーマットが正しいか
- ZIP パッケージの構造が正しいか(ファイルがルートディレクトリにあり、サブフォルダー内にないこと)
返信タイムアウト
Teams Bot Framework は15秒以内の返信を要求します。AI モデルの応答が遅い場合:
{
channels: {
teams: {
reply: {
// 「入力中」インジケーターを有効にしてユーザーにフィードバック
showTyping: true,
// 先に「処理中」のメッセージを送信
thinkingMessage: "考え中です...",
// 完了後に元のメッセージを更新(新しいメッセージを送信する代わりに)
updateMessage: true
}
}
}
}
まとめ
OpenClaw を Microsoft Teams に接続するには多くのステップが必要ですが、企業に安全でコントロール可能な AI アシスタントを提供できます。主要な手順:
- Azure AD でアプリを登録して認証情報を取得
- Azure Bot リソースを作成して Teams チャンネルを有効化
- OpenClaw に App ID と Password を設定
- Teams アプリをパッケージしてデプロイ
- セキュリティポリシーとアクセス制御を設定
企業シーンでは、データセキュリティ、コンプライアンス要件、アクセス制御に必ず注意を払ってください。まずテストチームで検証し、すべてが正常であることを確認してから組織全体に展開することをお勧めします。