This guide covers how to use the Copilot Adoption Bot to create and send adaptive cards to users.
- Access the Application: Navigate to the web application and authenticate
- Navigate to Templates: Go to the "Message Templates" page
- Create a Template:
- Click "New Template"
- Enter a template name
- Paste your adaptive card JSON payload
- Click "Create"
{
"type": "AdaptiveCard",
"version": "1.3",
"body": [
{
"type": "TextBlock",
"text": "💡 Copilot Tip: Use Specific Prompts",
"size": "Large",
"weight": "Bolder"
},
{
"type": "TextBlock",
"text": "Get better results from Copilot by being specific in your requests. Instead of 'summarize this', try 'create a 3-bullet executive summary focusing on budget and timeline'.",
"wrap": true
},
{
"type": "ActionSet",
"actions": [
{
"type": "Action.OpenUrl",
"title": "Learn More",
"url": "https://aka.ms/copilot-prompts"
}
]
}
]
}- Navigate to the "Message Templates" page
- Find the template you want to edit
- Click the edit icon (pencil)
- Modify the template name or JSON payload
- Click "Save"
- Navigate to the "Message Templates" page
- Find the template you want to delete
- Click the delete icon (trash can)
- Confirm the deletion
- Navigate to the "Message Templates" page
- Click the eye icon next to the template
- The JSON payload will be displayed in a modal
Messages are sent via the Teams bot using the stored templates.
When a message is sent, the bot:
- Retrieves the template metadata from Azure Table Storage
- Downloads the JSON payload from Azure Blob Storage
- Parses the adaptive card JSON
- Sends the card to specified users or channels
- Logs the delivery status
- Template metadata (name, creator, dates) is stored in Azure Table Storage for fast queries
- JSON payloads are stored in Azure Blob Storage (
message-templatescontainer) to handle large adaptive cards - Each template's blob is named
{templateId}.json - Table storage references the blob URL for retrieval
To send a nudge to specific users:
- Navigate to the "Send Nudge" page
- Select a template from the dropdown
- Choose target users or groups
- Click "Send Nudge"
The bot supports several targeting options:
- Individual users: Select specific users by name
- Smart groups: AI-powered dynamic groups based on natural language (requires AI Foundry)
- Copilot usage groups: Target users based on their Copilot activity
- All users: Send to everyone in your tenant
Navigate to the message logs section to view detailed delivery information.
Each log entry includes:
- Timestamp: When the message was sent
- Template: Which template was used
- Recipient: User who received the message
- Status: Delivery status (Sent, Failed, Pending)
- Error details: If delivery failed, error information is included
Filter logs by:
- Date range
- Template
- Recipient
- Status
- Navigate to the message logs page
- Apply desired filters
- Click "Export to CSV"
- The filtered logs will be downloaded
All API endpoints require authentication. See the Setup Guide for authentication configuration.
GET /api/MessageTemplate/GetAllReturns all templates with metadata (without JSON payloads).
Response:
[
{
"id": "template-id",
"name": "Welcome Message",
"created": "2024-01-15T10:30:00Z",
"createdBy": "user@domain.com",
"modified": "2024-01-20T14:45:00Z",
"modifiedBy": "user@domain.com"
}
]GET /api/MessageTemplate/Get/{id}Returns template metadata for a specific template.
GET /api/MessageTemplate/GetJson/{id}Returns the adaptive card JSON payload for a template.
Response:
{
"type": "AdaptiveCard",
"version": "1.3",
"body": [...]
}POST /api/MessageTemplate/Create
Content-Type: application/json
{
"name": "New Template",
"jsonPayload": "{\"type\":\"AdaptiveCard\"...}"
}Creates a new template and stores it in Azure Storage.
PUT /api/MessageTemplate/Update/{id}
Content-Type: application/json
{
"name": "Updated Template",
"jsonPayload": "{\"type\":\"AdaptiveCard\"...}"
}Updates an existing template.
DELETE /api/MessageTemplate/Delete/{id}Deletes a template from Azure Storage (both metadata and JSON payload).
POST /api/MessageTemplate/LogSend
Content-Type: application/json
{
"templateId": "template-id",
"recipientId": "user-id",
"recipientName": "User Name",
"status": "Sent"
}Logs a message send event.
GET /api/MessageTemplate/GetLogs?startDate=2024-01-01&endDate=2024-01-31Returns all message logs, optionally filtered by date range.
GET /api/MessageTemplate/GetLogsByTemplate/{templateId}Returns all logs for a specific template.
POST /api/UserCache/UpdateTriggers a full user cache update from Microsoft Graph.
GET /api/UserCache/GetUsersReturns all cached users with their metadata.
POST /api/UserCache/UpdateCopilotStatsUpdates Copilot usage statistics for all users (requires Reports.Read.All permission).
For detailed information on Copilot usage statistics, see FEATURES.md.
- Keep it concise: Users receive these in Teams chat - make them scannable
- Use clear CTAs: Include action buttons with clear purpose
- Brand consistently: Use your organization's colors and tone
- Test thoroughly: Preview cards in the Adaptive Cards Designer before deploying
- Start small: Test with a small group before rolling out widely
- Respect frequency: Don't overwhelm users with too many nudges
- Use smart groups: Leverage AI-powered targeting for relevant messages
- Track engagement: Monitor logs to see what resonates
- Progressive learning: Start with basics, build to advanced topics
- Contextual tips: Send tips related to what users are working on
- Regular cadence: Establish a predictable schedule (e.g., weekly tips)
- Mix content types: Combine tips, prompts, announcements, and resources
- Adaptive Cards Designer - Visual designer for creating cards
- Adaptive Cards Documentation - Official documentation
- Adaptive Cards Samples - Example cards for inspiration
- Teams Adaptive Cards - Teams-specific features
- Features: Learn about all features in FEATURES.md
- Security: Review security best practices in SECURITY.md
- Troubleshooting: Get help with TROUBLESHOOTING.md