azure-mgmt-botservice-dotnet について
azure-mgmt-botservice-dotnetは、Azure Resource Managerを通じてAzure Bot Serviceリソースを管理する.NETスキルです。Botの作成やライフサイクル操作、チャネル設定、接続設定、キー再生成を扱い、過去の例の検証と認証情報や破壊的変更の慎重な管理を促します。
主な機能
- 01Botリソースの作成と更新
- 02対応チャネルの設定
- 03Botとチャネルの一覧表示
- 04OAuth接続設定の管理
- 05DirectLineキーの再生成
活用シーン
- 01Azure Botリソースの作成
- 02Web ChatまたはTeamsチャネルの設定
- 03設定済みBotチャネルの確認
- 04慎重なDirectLineキーのローテーション
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill azure-mgmt-botservice-dotnetインストール後、Claude Code で/azure-mgmt-botservice-dotnetを入力して読み込まれたか確認します。
詳細
Azure.ResourceManager.BotService(.NET)
Azure Resource Manager を介して Azure Bot Service リソースをプロビジョニングおよび管理するための管理プレーン SDK です。
プロビジョニングとライフサイクルの対象範囲
これらは過去の SDK の断片です。リソースを作成する前に、現在のパッケージとサービスのライフサイクル、サポートされるアプリ ID の種類、対象テナントを確認してください。新しいボットで、すべてのチャネルやマルチテナント構成を利用できるとは限りません。意図しない既定値に頼らず、対象のサブスクリプションとリソースグループを正確に選択してください。パッケージのバージョンを固定し、署名とインポートを検証して、承認済みのテストリソースを使用してください。チャネルを作成するとメッセージングの接点が公開されます。また、ボットを削除したり DirectLine キーを再生成したりすると、クライアントが中断される場合があります。対応するユーザー権限を確認し、段階的にローテーションを行い、返されたキーがログに記録されないよう保護してください。本番環境で使用する資格情報チェーンは、意図的に選択してください。
インストール
dotnet add package Azure.ResourceManager.BotService
dotnet add package Azure.Identity
過去のサンプルバージョン:v1.1.1 / v1.1.0-beta.1。使用前に、サポートされるバージョンと移行ガイダンスを確認してください。
環境変数
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
# For service principal auth (optional)
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>
認証
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.BotService;
// Authenticate using DefaultAzureCredential
var credential = new DefaultAzureCredential();
ArmClient armClient = new ArmClient(credential);
// Get subscription and resource group
SubscriptionResource subscription = await armClient.GetDefaultSubscriptionAsync();
ResourceGroupResource resourceGroup = await subscription.GetResourceGroups().GetAsync("myResourceGroup");
// Access bot collection
BotCollection botCollection = resourceGroup.GetBots();
リソース階層
ArmClient
└── SubscriptionResource
└── ResourceGroupResource
└── BotResource
├── BotChannelResource (DirectLine, Teams, Slack, etc.)
├── BotConnectionSettingResource (OAuth connections)
└── BotServicePrivateEndpointConnectionResource
主なワークフロー
1. ボットリソースを作成する
using Azure.ResourceManager.BotService;
using Azure.ResourceManager.BotService.Models;
// Create bot data
var botData = new BotData(AzureLocation.WestUS2)
{
Kind = BotServiceKind.Azurebot,
Sku = new BotServiceSku(BotServiceSkuName.F0),
Properties = new BotProperties(
displayName: "MyBot",
endpoint: new Uri("https://mybot.azurewebsites.net/api/messages"),
msaAppId: "<your-msa-app-id>")
{
Description = "My Azure Bot",
MsaAppType = BotMsaAppType.MultiTenant
}
};
// Create or update the bot
ArmOperation<BotResource> operation = await botCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"myBotName",
botData);
BotResource bot = operation.Value;
Console.WriteLine($"Bot created: {bot.Data.Name}");
2. DirectLine チャネルを構成する
// Get the bot
BotResource bot = await resourceGroup.GetBots().GetAsync("myBotName");
// Get channel collection
BotChannelCollection channels = bot.GetBotChannels();
// Create DirectLine channel configuration
var channelData = new BotChannelData(AzureLocation.WestUS2)
{
Properties = new DirectLineChannel()
{
Properties = new DirectLineChannelProperties()
{
Sites =
{
new DirectLineSite("Default Site")
{
IsEnabled = true,
IsV1Enabled = false,
IsV3Enabled = true,
IsSecureSiteEnabled = true
}
}
}
}
};
// Create or update the channel
ArmOperation<BotChannelResource> channelOp = await channels.CreateOrUpdateAsync(
WaitUntil.Completed,
BotChannelName.DirectLineChannel,
channelData);
Console.WriteLine("DirectLine channel configured");
3. Microsoft Teams チャネルを構成する
var teamsChannelData = new BotChannelData(AzureLocation.WestUS2)
{
Properties = new MsTeamsChannel()
{
Properties = new MsTeamsChannelProperties()
{
IsEnabled = true,
EnableCalling = false
}
}
};
await channels.CreateOrUpdateAsync(
WaitUntil.Completed,
BotChannelName.MsTeamsChannel,
teamsChannelData);
4. Web Chat チャネルを構成する
var webChatChannelData = new BotChannelData(AzureLocation.WestUS2)
{
Properties = new WebChatChannel()
{
Properties = new WebChatChannelProperties()
{
Sites =
{
new WebChatSite("Default Site")
{
IsEnabled = true
}
}
}
}
};
await channels.CreateOrUpdateAsync(
WaitUntil.Completed,
BotChannelName.WebChatChannel,
webChatChannelData);
5. ボットを取得してチャネルを一覧表示する
// Get bot
BotResource bot = await botCollection.GetAsync("myBotName");
Console.WriteLine($"Bot: {bot.Data.Properties.DisplayName}");
Console.WriteLine($"Endpoint: {bot.Data.Properties.Endpoint}");
// List channels
await foreach (BotChannelResource channel in bot.GetBotChannels().GetAllAsync())
{
Console.WriteLine($"Channel: {channel.Data.Name}");
}
6. DirectLine キーを再生成する
var regenerateRequest = new BotChannelRegenerateKeysContent(BotChannelName.DirectLineChannel)
{
SiteName = "Default Site"
};
BotChannelResource channelWithKeys = await bot.GetBotChannelWithRegenerateKeysAsync(regenerateRequest);
7. ボットを更新する
BotResource bot = await botCollection.GetAsync("myBotName");
// Update using patch
var updateData = new BotData(bot.Data.Location)
{
Properties = new BotProperties(
displayName: "Updated Bot Name",
endpoint: bot.Data.Properties.Endpoint,
msaAppId: bot.Data.Properties.MsaAppId)
{
Description = "Updated description"
}
};
await bot.UpdateAsync(updateData);
8. ボットを削除する
BotResource bot = await botCollection.GetAsync("myBotName");
await bot.DeleteAsync(WaitUntil.Completed);
サポートされるチャネルの種類
| チャネル | 定数 | クラス |
|---|---|---|
| Direct Line | BotChannelName.DirectLineChannel | DirectLineChannel |
| Direct Line Speech | BotChannelName.DirectLineSpeechChannel | DirectLineSpeechChannel |
| Microsoft Teams | BotChannelName.MsTeamsChannel | MsTeamsChannel |
| Web Chat | BotChannelName.WebChatChannel | WebChatChannel |
| Slack | BotChannelName.SlackChannel | SlackChannel |
BotChannelName.FacebookChannel | FacebookChannel | |
BotChannelName.EmailChannel | EmailChannel | |
| Telegram | BotChannelName.TelegramChannel | TelegramChannel |
| Telephony | BotChannelName.TelephonyChannel | TelephonyChannel |
主な型のリファレンス
| 型 | 用途 |
|---|---|
ArmClient | すべての ARM 操作のエントリポイント |
BotResource | Azure Bot リソースを表します |
BotCollection | ボットの CRUD 操作用コレクション |
BotData | ボットリソースの定義 |
BotProperties | ボットの構成プロパティ |
BotChannelResource | チャネルの構成 |
BotChannelCollection | チャネルのコレクション |
BotChannelData | チャネル構成データ |
BotConnectionSettingResource | OAuth 接続設定 |
BotServiceKind の値
| 値 | 説明 |
|---|---|
BotServiceKind.Azurebot | Azure Bot(推奨) |
BotServiceKind.Bot | 従来の Bot Framework ボット |
BotServiceKind.Designer | Composer ボット |
BotServiceKind.Function | Function ボット |
BotServiceKind.Sdk | SDK ボット |
BotServiceSkuName の値
| 値 | 説明 |
|---|---|
BotServiceSkuName.F0 | 無料プラン |
BotServiceSkuName.S1 | Standard プラン |
BotMsaAppType の値
| 値 | 説明 |
|---|---|
BotMsaAppType.MultiTenant | マルチテナントアプリ |
BotMsaAppType.SingleTenant | シングルテナントアプリ |
BotMsaAppType.UserAssignedMSI | ユーザー割り当てマネージド ID |
ベストプラクティス
- 常に
DefaultAzureCredentialを使用する — 複数の認証方法をサポートします - 同期操作には
WaitUntil.Completedを使用する - API エラーには
RequestFailedExceptionを処理する - すべての操作で非同期メソッド(
*Async)を使用する - MSA アプリの資格情報を安全に保存する — シークレットには Key Vault を使用する
- 本番環境のボットにはマネージド ID(
BotMsaAppType.UserAssignedMSI)を使用する - 本番環境の DirectLine チャネルではセキュアサイトを有効にする
エラー処理
using Azure;
try
{
var operation = await botCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
botName,
botData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
Console.WriteLine("Bot already exists");
}
catch (RequestFailedException ex)
{
Console.WriteLine($"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}
関連 SDK
| SDK | 目的 | インストール |
|---|---|---|
Azure.ResourceManager.BotService | ボット管理(この SDK) | dotnet add package Azure.ResourceManager.BotService |
Microsoft.Bot.Builder | Bot Framework SDK | dotnet add package Microsoft.Bot.Builder |
Microsoft.Bot.Builder.Integration.AspNet.Core | ASP.NET Core 統合 | dotnet add package Microsoft.Bot.Builder.Integration.AspNet.Core |
参考リンク
使用する場面
このスキルは、概要に記載されているワークフローまたはアクションを実行する場合に適用できます。
制限事項
- このスキルは、タスクが上記の範囲に明確に該当する場合にのみ使用してください。
- 出力を、環境固有の検証、テスト、または専門家によるレビューの代替として扱わないでください。
- 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中止して確認してください。