🚀 Impact Significantly expands the capabilities of **Antigravity Awesome Skills** by integrating official skill collections from **Microsoft** and **Google Gemini**. This update increases the total skill count to **845+**, making the library even more comprehensive for AI coding assistants. ✨ Key Changes 1. New Official Skills - **Microsoft Skills**: Added a massive collection of official skills from [microsoft/skills](https://github.com/microsoft/skills). - Includes Azure, .NET, Python, TypeScript, and Semantic Kernel skills. - Preserves the original directory structure under `skills/official/microsoft/`. - Includes plugin skills from the `.github/plugins` directory. - **Gemini Skills**: Added official Gemini API development skills under `skills/gemini-api-dev/`. 2. New Scripts & Tooling - **`scripts/sync_microsoft_skills.py`**: A robust synchronization script that: - Clones the official Microsoft repository. - Preserves the original directory heirarchy. - Handles symlinks and plugin locations. - Generates attribution metadata. - **`scripts/tests/inspect_microsoft_repo.py`**: Debug tool to inspect the remote repository structure. - **`scripts/tests/test_comprehensive_coverage.py`**: Verification script to ensure 100% of skills are captured during sync. 3. Core Improvements - **`scripts/generate_index.py`**: Enhanced frontmatter parsing to safely handle unquoted values containing `@` symbols and commas (fixing issues with some Microsoft skill descriptions). - **`package.json`**: Added `sync:microsoft` and `sync:all-official` scripts for easy maintenance. 4. Documentation - Updated `README.md` to reflect the new skill counts (845+) and added Microsoft/Gemini to the provider list. - Updated `CATALOG.md` and `skills_index.json` with the new skills. 🧪 Verification - Ran `scripts/tests/test_comprehensive_coverage.py` to verify all Microsoft skills are detected. - Validated `generate_index.py` fixes by successfully indexing the new skills.
321 lines
7.5 KiB
Markdown
321 lines
7.5 KiB
Markdown
---
|
|
name: azure-mgmt-botservice-py
|
|
description: |
|
|
Azure Bot Service Management SDK for Python. Use for creating, managing, and configuring Azure Bot Service resources.
|
|
Triggers: "azure-mgmt-botservice", "AzureBotService", "bot management", "conversational AI", "bot channels".
|
|
---
|
|
|
|
# Azure Bot Service Management SDK for Python
|
|
|
|
Manage Azure Bot Service resources including bots, channels, and connections.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
pip install azure-mgmt-botservice
|
|
pip install azure-identity
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
```bash
|
|
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
|
|
AZURE_RESOURCE_GROUP=<your-resource-group>
|
|
```
|
|
|
|
## Authentication
|
|
|
|
```python
|
|
from azure.identity import DefaultAzureCredential
|
|
from azure.mgmt.botservice import AzureBotService
|
|
import os
|
|
|
|
credential = DefaultAzureCredential()
|
|
client = AzureBotService(
|
|
credential=credential,
|
|
subscription_id=os.environ["AZURE_SUBSCRIPTION_ID"]
|
|
)
|
|
```
|
|
|
|
## Create a Bot
|
|
|
|
```python
|
|
from azure.mgmt.botservice import AzureBotService
|
|
from azure.mgmt.botservice.models import Bot, BotProperties, Sku
|
|
from azure.identity import DefaultAzureCredential
|
|
import os
|
|
|
|
credential = DefaultAzureCredential()
|
|
client = AzureBotService(
|
|
credential=credential,
|
|
subscription_id=os.environ["AZURE_SUBSCRIPTION_ID"]
|
|
)
|
|
|
|
resource_group = os.environ["AZURE_RESOURCE_GROUP"]
|
|
bot_name = "my-chat-bot"
|
|
|
|
bot = client.bots.create(
|
|
resource_group_name=resource_group,
|
|
resource_name=bot_name,
|
|
parameters=Bot(
|
|
location="global",
|
|
sku=Sku(name="F0"), # Free tier
|
|
kind="azurebot",
|
|
properties=BotProperties(
|
|
display_name="My Chat Bot",
|
|
description="A conversational AI bot",
|
|
endpoint="https://my-bot-app.azurewebsites.net/api/messages",
|
|
msa_app_id="<your-app-id>",
|
|
msa_app_type="MultiTenant"
|
|
)
|
|
)
|
|
)
|
|
|
|
print(f"Bot created: {bot.name}")
|
|
```
|
|
|
|
## Get Bot Details
|
|
|
|
```python
|
|
bot = client.bots.get(
|
|
resource_group_name=resource_group,
|
|
resource_name=bot_name
|
|
)
|
|
|
|
print(f"Bot: {bot.properties.display_name}")
|
|
print(f"Endpoint: {bot.properties.endpoint}")
|
|
print(f"SKU: {bot.sku.name}")
|
|
```
|
|
|
|
## List Bots in Resource Group
|
|
|
|
```python
|
|
bots = client.bots.list_by_resource_group(resource_group_name=resource_group)
|
|
|
|
for bot in bots:
|
|
print(f"Bot: {bot.name} - {bot.properties.display_name}")
|
|
```
|
|
|
|
## List All Bots in Subscription
|
|
|
|
```python
|
|
all_bots = client.bots.list()
|
|
|
|
for bot in all_bots:
|
|
print(f"Bot: {bot.name} in {bot.id.split('/')[4]}")
|
|
```
|
|
|
|
## Update Bot
|
|
|
|
```python
|
|
bot = client.bots.update(
|
|
resource_group_name=resource_group,
|
|
resource_name=bot_name,
|
|
properties=BotProperties(
|
|
display_name="Updated Bot Name",
|
|
description="Updated description"
|
|
)
|
|
)
|
|
```
|
|
|
|
## Delete Bot
|
|
|
|
```python
|
|
client.bots.delete(
|
|
resource_group_name=resource_group,
|
|
resource_name=bot_name
|
|
)
|
|
```
|
|
|
|
## Configure Channels
|
|
|
|
### Add Teams Channel
|
|
|
|
```python
|
|
from azure.mgmt.botservice.models import (
|
|
BotChannel,
|
|
MsTeamsChannel,
|
|
MsTeamsChannelProperties
|
|
)
|
|
|
|
channel = client.channels.create(
|
|
resource_group_name=resource_group,
|
|
resource_name=bot_name,
|
|
channel_name="MsTeamsChannel",
|
|
parameters=BotChannel(
|
|
location="global",
|
|
properties=MsTeamsChannel(
|
|
properties=MsTeamsChannelProperties(
|
|
is_enabled=True
|
|
)
|
|
)
|
|
)
|
|
)
|
|
```
|
|
|
|
### Add Direct Line Channel
|
|
|
|
```python
|
|
from azure.mgmt.botservice.models import (
|
|
BotChannel,
|
|
DirectLineChannel,
|
|
DirectLineChannelProperties,
|
|
DirectLineSite
|
|
)
|
|
|
|
channel = client.channels.create(
|
|
resource_group_name=resource_group,
|
|
resource_name=bot_name,
|
|
channel_name="DirectLineChannel",
|
|
parameters=BotChannel(
|
|
location="global",
|
|
properties=DirectLineChannel(
|
|
properties=DirectLineChannelProperties(
|
|
sites=[
|
|
DirectLineSite(
|
|
site_name="Default Site",
|
|
is_enabled=True,
|
|
is_v1_enabled=False,
|
|
is_v3_enabled=True
|
|
)
|
|
]
|
|
)
|
|
)
|
|
)
|
|
)
|
|
```
|
|
|
|
### Add Web Chat Channel
|
|
|
|
```python
|
|
from azure.mgmt.botservice.models import (
|
|
BotChannel,
|
|
WebChatChannel,
|
|
WebChatChannelProperties,
|
|
WebChatSite
|
|
)
|
|
|
|
channel = client.channels.create(
|
|
resource_group_name=resource_group,
|
|
resource_name=bot_name,
|
|
channel_name="WebChatChannel",
|
|
parameters=BotChannel(
|
|
location="global",
|
|
properties=WebChatChannel(
|
|
properties=WebChatChannelProperties(
|
|
sites=[
|
|
WebChatSite(
|
|
site_name="Default Site",
|
|
is_enabled=True
|
|
)
|
|
]
|
|
)
|
|
)
|
|
)
|
|
)
|
|
```
|
|
|
|
## Get Channel Details
|
|
|
|
```python
|
|
channel = client.channels.get(
|
|
resource_group_name=resource_group,
|
|
resource_name=bot_name,
|
|
channel_name="DirectLineChannel"
|
|
)
|
|
```
|
|
|
|
## List Channel Keys
|
|
|
|
```python
|
|
keys = client.channels.list_with_keys(
|
|
resource_group_name=resource_group,
|
|
resource_name=bot_name,
|
|
channel_name="DirectLineChannel"
|
|
)
|
|
|
|
# Access Direct Line keys
|
|
if hasattr(keys.properties, 'properties'):
|
|
for site in keys.properties.properties.sites:
|
|
print(f"Site: {site.site_name}")
|
|
print(f"Key: {site.key}")
|
|
```
|
|
|
|
## Bot Connections (OAuth)
|
|
|
|
### Create Connection Setting
|
|
|
|
```python
|
|
from azure.mgmt.botservice.models import (
|
|
ConnectionSetting,
|
|
ConnectionSettingProperties
|
|
)
|
|
|
|
connection = client.bot_connection.create(
|
|
resource_group_name=resource_group,
|
|
resource_name=bot_name,
|
|
connection_name="graph-connection",
|
|
parameters=ConnectionSetting(
|
|
location="global",
|
|
properties=ConnectionSettingProperties(
|
|
client_id="<oauth-client-id>",
|
|
client_secret="<oauth-client-secret>",
|
|
scopes="User.Read",
|
|
service_provider_id="<service-provider-id>"
|
|
)
|
|
)
|
|
)
|
|
```
|
|
|
|
### List Connections
|
|
|
|
```python
|
|
connections = client.bot_connection.list_by_bot_service(
|
|
resource_group_name=resource_group,
|
|
resource_name=bot_name
|
|
)
|
|
|
|
for conn in connections:
|
|
print(f"Connection: {conn.name}")
|
|
```
|
|
|
|
## Client Operations
|
|
|
|
| Operation | Method |
|
|
|-----------|--------|
|
|
| `client.bots` | Bot CRUD operations |
|
|
| `client.channels` | Channel configuration |
|
|
| `client.bot_connection` | OAuth connection settings |
|
|
| `client.direct_line` | Direct Line channel operations |
|
|
| `client.email` | Email channel operations |
|
|
| `client.operations` | Available operations |
|
|
| `client.host_settings` | Host settings operations |
|
|
|
|
## SKU Options
|
|
|
|
| SKU | Description |
|
|
|-----|-------------|
|
|
| `F0` | Free tier (limited messages) |
|
|
| `S1` | Standard tier (unlimited messages) |
|
|
|
|
## Channel Types
|
|
|
|
| Channel | Class | Purpose |
|
|
|---------|-------|---------|
|
|
| `MsTeamsChannel` | Microsoft Teams | Teams integration |
|
|
| `DirectLineChannel` | Direct Line | Custom client integration |
|
|
| `WebChatChannel` | Web Chat | Embeddable web widget |
|
|
| `SlackChannel` | Slack | Slack workspace integration |
|
|
| `FacebookChannel` | Facebook | Messenger integration |
|
|
| `EmailChannel` | Email | Email communication |
|
|
|
|
## Best Practices
|
|
|
|
1. **Use DefaultAzureCredential** for authentication
|
|
2. **Start with F0 SKU** for development, upgrade to S1 for production
|
|
3. **Store MSA App ID/Secret securely** — use Key Vault
|
|
4. **Enable only needed channels** — reduces attack surface
|
|
5. **Rotate Direct Line keys** periodically
|
|
6. **Use managed identity** when possible for bot connections
|
|
7. **Configure proper CORS** for Web Chat channel
|