Custom n8n nodes for Microsoft Teams event triggers, including transcription notifications.
-
Microsoft Teams Transcription Trigger: Receive notifications when new meeting transcriptions become available
- Watch all meetings across the tenant
- Watch meetings organized by a specific user
- Watch a specific meeting
-
Microsoft Teams Transcript: Retrieve and manage meeting transcriptions
- List all transcripts for a specific meeting
- List all transcripts for a user's meetings
- Get transcript metadata
- Get transcript content (VTT or plain text format)
- Install the package in your n8n instance:
npm install n8n-nodes-teams-events- Restart your n8n instance to load the new nodes
- Go to the Azure Portal
- Navigate to Azure Active Directory > App registrations > New registration
- Enter a name for your application
- Set the redirect URI to your n8n webhook URL:
https://your-n8n-instance.com/rest/oauth2-credential/callback - Click Register
For the Microsoft Teams Transcription Trigger, you need to add the following API permissions:
OnlineMeetings.Read- Read online meetingsOnlineMeetings.ReadWrite- Read and create online meetingsOnlineMeetingTranscript.Read.All- Read all transcripts for meetingsUser.Read.All- Read all users' profiles
OnlineMeetingTranscript.Read.All- Read all transcripts across the tenantUser.Read.All- Read all users' profiles
Important Notes:
- Application permissions require admin consent
- For watching all meetings (
communications/onlineMeetings/getAllTranscripts), you must use application permissions - For watching specific user meetings, you can use either delegated or application permissions
- In your Azure AD app registration, go to Certificates & secrets
- Click New client secret
- Add a description and set an expiration period
- Copy the Value (not the Secret ID) - you'll need this for n8n
- In n8n, create new credentials for Microsoft Teams OAuth2 API
- Enter the following information:
- Client ID: Your Azure AD application's Application (client) ID
- Client Secret: The secret value you copied
- Tenant ID: Your Azure AD tenant ID (optional, defaults to 'common')
- Click Connect my account and complete the OAuth flow
This trigger node fires when a new transcription becomes available for Microsoft Teams meetings.
1. New Transcript (All Meetings)
- Watches for transcripts across all meetings in the tenant
- Requires
OnlineMeetingTranscript.Read.Allapplication permission - Option to watch all meetings or a specific meeting
2. New Transcript (User's Meetings)
- Watches for transcripts from meetings organized by a specific user
- Can use delegated permissions
- Select user by list, ID, or email
- Add the Microsoft Teams Transcription Trigger node to your workflow
- Select the trigger type:
- New Transcript (All Meetings): For tenant-wide notifications
- New Transcript (User's Meetings): For user-specific notifications
- Configure the watch settings:
- For all meetings: Toggle "Watch All Meetings" on/off
- For user meetings: Select the user
- Save and activate your workflow
When a transcription becomes available, the trigger receives:
{
"subscriptionId": "subscription-uuid",
"changeType": "created",
"resource": "communications/onlineMeetings/{meetingId}/transcripts/{transcriptId}",
"resourceData": {
"@odata.type": "#Microsoft.Graph.callTranscript",
"id": "transcript-id",
...
},
"tenantId": "tenant-uuid",
"subscriptionExpirationDateTime": "2025-12-21T13:00:00Z"
}-
HTTPS Required: Microsoft Graph webhooks require HTTPS. Your n8n instance must be accessible via HTTPS.
-
Subscription Expiration: Subscriptions are created with a 30-day expiration (maximum for most resources). The node includes a lifecycle notification URL to handle subscription renewals.
-
Validation Token: When the webhook is first created, Microsoft Graph sends a validation request. The node automatically handles this validation.
-
Transcript Availability: Transcripts typically become available a few minutes after the meeting ends. The exact timing depends on meeting length and processing time.
-
Required Permissions Summary:
Scope Permission Type Description Tenant-wide (all meetings) OnlineMeetingTranscript.Read.AllApplication Read all transcripts User's meetings OnlineMeetingTranscript.Read.AllDelegated or Application Read user's transcripts List users User.Read.AllDelegated or Application Required for user selection List meetings OnlineMeetings.ReadDelegated Required for meeting selection
This action node allows you to retrieve transcriptions from Microsoft Teams meetings.
1. Get All Transcripts
- Retrieves all transcripts for a specific meeting
- Requires user and meeting selection
- Supports filtering and limiting results
2. Get All User Transcripts
- Retrieves all transcripts from meetings organized by a specific user
- Only requires user selection
- Supports filtering and limiting results
- Useful for bulk transcript retrieval
3. Get Transcript
- Retrieves metadata for a specific transcript
- Returns transcript details including:
- Transcript ID
- Meeting ID
- Created date/time
- End date/time
- Meeting organizer
- Content correlation ID
4. Get Transcript Content
- Downloads the actual transcript content
- Supports two formats:
- VTT (WebVTT): Includes timestamps and speaker information
- Text: Plain text format without timestamps
- Returns content as binary data for further processing
- Add the Microsoft Teams Transcript node to your workflow
- Select Get All Transcripts operation
- Select the user who organized the meeting
- Select the meeting
- (Optional) Configure options:
- Limit: Maximum number of transcripts to return
- Filter: OData filter query (e.g.,
meetingOrganizer/user/id eq 'user-id')
- Select Get All User Transcripts operation
- Select the user
- (Optional) Configure options:
- Limit: Maximum number of transcripts to return
- Filter: OData filter query
- Select Get Transcript operation
- Select the user who organized the meeting
- Select the meeting
- Enter the transcript ID
- Select Get Transcript Content operation
- Select the user who organized the meeting
- Select the meeting
- Enter the transcript ID
- Select the format (VTT or Text)
- Specify the field name for the content (default:
data)
Get All Transcripts / Get Transcript:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('user-id')/onlineMeetings('meeting-id')/transcripts",
"id": "MSMjMCMjZDAwYWU3NjUtNmM2Yi00NjQxLTgwMWQtMTkzMmFmMjEzNzdh",
"meetingId": "MSo1N2Y5ZGFjYy03MWJmLTQ3NDMtYjQxMy01M2EdFGkdRWHJlQ",
"callId": "af1a9d00-6c6b-4641-801d-1932af21377a",
"createdDateTime": "2025-01-15T14:30:45.6463915Z",
"endDateTime": "2025-01-15T15:00:45.6463915Z",
"contentCorrelationId": "bc842d7a-2f6e-4b18-a141-94c1e4da1b7a",
"transcriptContentUrl": "https://graph.microsoft.com/v1.0/users/user-id/onlineMeetings/meeting-id/transcripts/transcript-id/content",
"meetingOrganizer": {
"application": null,
"device": null,
"user": {
"id": "user-id",
"displayName": "John Doe",
"tenantId": "tenant-id"
}
}
}Get Transcript Content:
- Returns binary data that can be:
- Saved to file using the "Write Binary File" node
- Processed with text manipulation nodes
- Sent via email or other communication channels
VTT format example:
WEBVTT
00:00:00.000 --> 00:00:03.120
<v John Doe>Welcome everyone to today's meeting.</v>
00:00:03.120 --> 00:00:06.450
<v Jane Smith>Thank you for having me.</v>
-
Automated Meeting Summary
- Trigger on new transcript → Get transcript content → Send to AI for summarization
-
Transcript Archive
- Get all user transcripts → Download content → Store in cloud storage
-
Compliance and Record-keeping
- Scheduled workflow to retrieve and archive all meeting transcripts
-
Meeting Analytics
- Retrieve transcripts → Analyze content for keywords, sentiment, action items
-
Permissions Required:
OnlineMeetingTranscript.Read.All(Application or Delegated)OnlineMeetings.Read(Delegated) - for meeting selectionUser.Read.All(Delegated or Application) - for user selection
-
Transcript Availability:
- Transcripts are only available if recording/transcription was enabled during the meeting
- It may take a few minutes after the meeting ends for transcripts to become available
- Not all meetings will have transcripts
-
Format Support:
- VTT format includes speaker identification and timestamps
- Text format is plain text without metadata
- The older DOCX format was deprecated as of May 31, 2023
-
Rate Limits:
- Microsoft Graph API has rate limits that may affect bulk operations
- Consider using the limit option for large datasets
The trigger uses the following Microsoft Graph API subscription resource paths:
- Tenant-level (all meetings):
communications/onlineMeetings/getAllTranscripts - User-level:
users/{userId}/onlineMeetings/getAllTranscripts - Specific meeting:
communications/onlineMeetings/{meetingId}/transcripts
The trigger subscribes to the created change type, which fires when a new transcription becomes available.
- Initial Expiration: 30 days (43,200 minutes)
- Minimum Expiration: 45 minutes (enforced by Microsoft Graph)
- Lifecycle Notifications: Automatically configured for subscriptions > 1 hour
- Ensure your n8n instance is accessible via HTTPS
- Verify the webhook URL is publicly accessible
- Check that your firewall allows incoming HTTPS connections
- Verify you've added the required API permissions in Azure AD
- Ensure admin consent has been granted for application permissions
- Reconnect your credentials in n8n
- Check that transcription is enabled in your Teams meetings
- Verify the subscription was created successfully (check workflow execution logs)
- Ensure the webhook URL is correct and accessible
- Note: Transcripts may take a few minutes to process after a meeting ends
- The node automatically checks for existing subscriptions
- If a valid subscription exists, it will reuse it
- You can manually delete subscriptions via the Microsoft Graph API if needed
npm install
npm run buildnpm run lint
npm run lintfixMIT
Created for use with n8n - Workflow Automation Tool