mcpField
A
azure-mgmt-botservice-dotnet

azure-mgmt-botservice-dotnet

github.com/sickn33クラウド・DevOps48.7k49 回インストール今日更新
リポジトリ

azure-mgmt-botservice-dotnet について

azure-mgmt-botservice-dotnetは、Azure Resource Managerを通じてAzure Bot Serviceリソースを管理する.NETスキルです。Botの作成やライフサイクル操作、チャネル設定、接続設定、キー再生成を扱い、過去の例の検証と認証情報や破壊的変更の慎重な管理を促します。

主な機能

  1. 01Botリソースの作成と更新
  2. 02対応チャネルの設定
  3. 03Botとチャネルの一覧表示
  4. 04OAuth接続設定の管理
  5. 05DirectLineキーの再生成

活用シーン

  1. 01Azure Botリソースの作成
  2. 02Web ChatまたはTeamsチャネルの設定
  3. 03設定済みBotチャネルの確認
  4. 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 LineBotChannelName.DirectLineChannelDirectLineChannel
Direct Line SpeechBotChannelName.DirectLineSpeechChannelDirectLineSpeechChannel
Microsoft TeamsBotChannelName.MsTeamsChannelMsTeamsChannel
Web ChatBotChannelName.WebChatChannelWebChatChannel
SlackBotChannelName.SlackChannelSlackChannel
FacebookBotChannelName.FacebookChannelFacebookChannel
EmailBotChannelName.EmailChannelEmailChannel
TelegramBotChannelName.TelegramChannelTelegramChannel
TelephonyBotChannelName.TelephonyChannelTelephonyChannel

主な型のリファレンス

型用途
ArmClientすべての ARM 操作のエントリポイント
BotResourceAzure Bot リソースを表します
BotCollectionボットの CRUD 操作用コレクション
BotDataボットリソースの定義
BotPropertiesボットの構成プロパティ
BotChannelResourceチャネルの構成
BotChannelCollectionチャネルのコレクション
BotChannelDataチャネル構成データ
BotConnectionSettingResourceOAuth 接続設定

BotServiceKind の値

値説明
BotServiceKind.AzurebotAzure Bot(推奨)
BotServiceKind.Bot従来の Bot Framework ボット
BotServiceKind.DesignerComposer ボット
BotServiceKind.FunctionFunction ボット
BotServiceKind.SdkSDK ボット

BotServiceSkuName の値

値説明
BotServiceSkuName.F0無料プラン
BotServiceSkuName.S1Standard プラン

BotMsaAppType の値

値説明
BotMsaAppType.MultiTenantマルチテナントアプリ
BotMsaAppType.SingleTenantシングルテナントアプリ
BotMsaAppType.UserAssignedMSIユーザー割り当てマネージド ID

ベストプラクティス

  1. 常に DefaultAzureCredential を使用する — 複数の認証方法をサポートします
  2. 同期操作には WaitUntil.Completed を使用する
  3. API エラーには RequestFailedException を処理する
  4. すべての操作で非同期メソッド(*Async)を使用する
  5. MSA アプリの資格情報を安全に保存する — シークレットには Key Vault を使用する
  6. 本番環境のボットにはマネージド ID(BotMsaAppType.UserAssignedMSI)を使用する
  7. 本番環境の 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.BuilderBot Framework SDKdotnet add package Microsoft.Bot.Builder
Microsoft.Bot.Builder.Integration.AspNet.CoreASP.NET Core 統合dotnet add package Microsoft.Bot.Builder.Integration.AspNet.Core

参考リンク

リソースURL
NuGet パッケージhttps://www.nuget.org/packages/Azure.ResourceManager.BotService
API リファレンスhttps://learn.microsoft.com/dotnet/api/azure.resourcemanager.botservice
GitHub ソースhttps://github.com/Azure/azure-sdk-for-net/tree/main/sdk/botservice/Azure.ResourceManager.BotService
Azure Bot Service ドキュメントhttps://learn.microsoft.com/azure/bot-service/

使用する場面

このスキルは、概要に記載されているワークフローまたはアクションを実行する場合に適用できます。

制限事項

  • このスキルは、タスクが上記の範囲に明確に該当する場合にのみ使用してください。
  • 出力を、環境固有の検証、テスト、または専門家によるレビューの代替として扱わないでください。
  • 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中止して確認してください。

コメント