Detailed documentation of all Copilot Adoption Bot features.
Create and manage adaptive card templates for sending to users.
Features:
- Create templates with JSON adaptive card payloads
- Edit existing templates
- Delete templates
- Preview templates before sending
- Store large payloads in Azure Blob Storage (no 64KB limit)
Storage Architecture:
- Template metadata stored in Azure Table Storage
- JSON payloads stored in Azure Blob Storage
- Automatic blob container creation on first run
Send adaptive cards directly to users via Teams bot conversations.
Features:
- Proactive messaging to users
- Interactive adaptive cards
- Bot installation management
- Activity feed notifications
Requirements:
- Teams bot registered in Teams Developer Portal
TeamsAppInstallation.ReadWriteForUser.Allpermission- Bot messaging endpoint configured
Track message delivery status and recipients.
Features:
- Log every message send event
- Track delivery status (Sent, Failed, Pending)
- Record recipient information
- Timestamp all events
- Query logs by template, date, or recipient
Storage:
- Logs stored in Azure Table Storage
- Efficient queries with partition keys
- Automatic cleanup options
Efficient user data caching with incremental synchronization from Microsoft Graph.
Features:
- Full user cache from Microsoft Graph
- Delta query support for incremental updates
- Cached metadata: department, manager, location
- Configurable refresh intervals
- Manual cache refresh option
Benefits:
- Reduces API calls to Microsoft Graph
- Faster user lookups
- Supports offline scenarios
- Tracks user changes over time
See User Cache Management for details.
Flexible authentication options for different scenarios.
Supported Methods:
- Teams SSO: Seamless authentication within Teams
- MSAL Browser: Standard Azure AD authentication for web
- Service Principal: Backend service authentication
Features:
- Single sign-on experience
- Token caching
- Automatic token refresh
- Multi-tenant support
React-based web interface with Fluent UI components.
Features:
- Responsive design
- Light/dark theme support
- Teams theme integration
- Accessible components
- Real-time updates
Technology:
- React 18
- TypeScript
- Fluent UI v9
- Vite for fast builds
Track and cache Microsoft 365 Copilot usage statistics for users in your tenant.
The Copilot stats feature helps identify active Copilot users and enables targeted adoption campaigns based on actual usage data.
Per-user activity tracking across all Microsoft 365 Copilot surfaces:
- Microsoft 365 Copilot Chat
- Microsoft Teams Copilot
- Word Copilot
- Excel Copilot
- PowerPoint Copilot
- Outlook Copilot
- OneNote Copilot
- Loop Copilot
Cached statistics to reduce API calls and improve performance:
- Activity dates stored with user cache
- Configurable refresh intervals
- Manual update option
- Microsoft Graph Permission:
Reports.Read.Allapplication permission with admin consent - Copilot Licenses: Microsoft 365 Copilot licenses assigned to users
- Active Usage: The Microsoft Graph reports API only returns data for users with recent activity
Copilot stats are automatically enabled if the Reports.Read.All permission is granted.
Configurable Settings:
| Setting | Default | Description |
|---|---|---|
CopilotStatsPeriod |
D30 | Reporting period: D7, D30, D90, or D180 days |
CopilotStatsRefreshInterval |
24 hours | How often to refresh statistics from Microsoft Graph |
CacheExpiration |
1 hour | How long user cache remains valid before resync |
- Navigate to the Settings page in the web interface
- In the "User Cache Management" section, click "Update Copilot Stats"
- The system fetches the latest Copilot usage data from Microsoft Graph
- Statistics are stored in Azure Table Storage with the user cache
Clearing Stats (Force Refresh):
- Navigate to the Settings page
- Click "Clear Copilot Stats"
- This clears the last update timestamp, forcing a fresh data pull on the next update
# Update Copilot stats
POST /api/UserCache/UpdateCopilotStats
# Clear stats metadata (force refresh)
POST /api/UserCache/ClearCopilotStats// Update stats
await userCacheManager.UpdateCopilotStatsAsync();
// Clear stats metadata to force refresh
var metadata = await userCacheManager.GetSyncMetadataAsync();
metadata.LastCopilotStatsUpdate = null;
await userCacheManager.UpdateSyncMetadataAsync(metadata);Targeted Campaigns:
- Send advanced tips to active users
- Send getting-started guides to new or inactive users
- Celebrate milestones with power users
Adoption Insights:
- Identify departments with low adoption
- Track adoption trends over time
- Measure campaign effectiveness
Smart Targeting:
- Combine with Smart Groups for AI-powered targeting
- Filter users by app-specific usage
- Target users based on usage patterns
- Statistics only include activity dates, not content or prompts
- Data retrieved from Microsoft's official reporting APIs
- Stored in your Azure Storage account under your control
- Same privacy and compliance policies as other Microsoft 365 reports
- Tenant Requirements: Only available for tenants with Microsoft 365 Copilot licenses
- Data Delay: Microsoft Graph reports typically have a 24-48 hour delay
- Permission Errors: Without
Reports.Read.Allpermission, the feature logs errors but doesn't impact core functionality - Regional Availability: Must be available in your tenant's region
"Reports.Read.All permission not granted" errors:
- Verify the permission is added in Azure Portal
- Ensure admin consent has been granted
- Wait 5-10 minutes for permission changes to propagate
- Try calling the API again
No data returned:
- Verify your tenant has active Copilot licenses
- Check that users have actually used Copilot features
- Remember reports have a 24-48 hour data delay
- Verify the reporting period (D7, D30, etc.) has usage
API rate limiting:
- The service caches tokens and reuses them
- Default refresh interval is 24 hours to minimize API calls
- Consider increasing
CopilotStatsRefreshIntervalif needed
AI-powered dynamic user groups based on natural language descriptions.
Smart Groups use Azure AI Foundry to create dynamic user groups using natural language. Instead of manually selecting users, describe who you want to target and let AI figure it out.
- Azure AI Foundry resource with a deployed model (e.g., GPT-4o)
AIFoundryConfigconfigured in application settings
- "All users in the Sales department"
- "Users who haven't used Copilot in the last 30 days"
- "Managers in the Engineering organization"
- "New employees hired in the last 60 days"
- You enter a natural language description
- AI analyzes your cached user data
- AI returns matching users with reasoning
- You review and confirm the selection
- Send your message to the group
Authentication to Azure AI Foundry uses Azure RBAC only. Grant the application's identity (Managed Identity in Azure, your user via az login locally) a role such as Cognitive Services OpenAI User on the AI Foundry resource.
{
"AIFoundryConfig": {
"Endpoint": "https://your-resource.openai.azure.com/",
"DeploymentName": "gpt-4o-mini",
"MaxTokens": 2000,
"Temperature": 0.7
}
}- Natural language: No complex filter syntax
- Flexible: Combine multiple criteria easily
- Exploratory: Try different targeting approaches
- Time-saving: No manual user selection
- Requires AI Foundry subscription (additional cost)
- Accuracy depends on user cache metadata quality
- May require iteration to get desired results
- Currently supports only single-language queries
Optional Azure AI Foundry integration for intelligent bot responses.
When enabled, the bot can engage in natural conversations with users about Copilot adoption, answer questions, and provide contextual guidance.
- Azure AI Foundry resource with a deployed model
AIFoundryConfigconfigured in application settings
- Conversational support: Answer user questions about Copilot
- Contextual help: Provide guidance based on user's role and usage
- Proactive tips: Suggest relevant tips based on conversation
- Feedback collection: Gather user feedback through natural conversation
Same as Smart Groups - uses the same AI Foundry configuration.
- Help desk deflection: Answer common Copilot questions
- Onboarding: Guide new users through Copilot features
- Feedback: Collect qualitative feedback from users
- Discovery: Help users discover relevant Copilot features
Efficient caching of user data from Microsoft Graph with delta query support.
The user cache stores user information from Microsoft Graph in Azure Table Storage for fast lookups and reduced API calls.
Full Cache:
- All users from Microsoft Graph
- User metadata: display name, email, department, manager, location
- Job title and other profile information
Delta Queries:
- Incremental updates using Microsoft Graph delta queries
- Only syncs changed users
- Tracks delta tokens in sync metadata
Automatic Refresh:
- Configurable refresh intervals
- Manual refresh option
- Stale cache detection
For each user, the cache stores:
- User principal name (UPN)
- Display name
- Email address
- Department
- Manager (UPN and name)
- Office location
- Job title
- Copilot usage statistics (if enabled)
- Users stored in Azure Table Storage
- Partition key: First letter of UPN
- Row key: Full UPN
- Supports efficient queries
# Full cache update
POST /api/UserCache/Update
# Get all cached users
GET /api/UserCache/GetUsers
# Get sync metadata (last sync time, delta token)
GET /api/UserCache/GetMetadata
# Clear cache
DELETE /api/UserCache/Clear{
"UserCacheConfig": {
"RefreshInterval": "01:00:00", // 1 hour
"EnableDeltaQueries": true,
"CacheExpiration": "24:00:00" // 24 hours
}
}- Fast: No API calls for cached data
- Efficient: Delta queries minimize data transfer
- Reliable: Works even if Graph API is temporarily unavailable
- Cost-effective: Reduces Microsoft Graph API calls
Manual Refresh:
- Navigate to Settings → User Cache Management
- Click "Refresh User Cache"
- Wait for completion notification
Automatic Refresh:
- Runs on configurable schedule
- Checks cache age before refresh
- Uses delta queries when possible
Clear Cache:
- Deletes all cached users
- Resets delta token
- Next refresh will be full sync
- Usage: Learn how to use these features in USAGE.md
- Setup: Configure features in SETUP.md
- Security: Review security implications in SECURITY.md
- Troubleshooting: Get help with TROUBLESHOOTING.md