Article
meeting-automationai-agentproductivity-toolstranscriptionsummarizationaction-item-trackingotter-ai
Automate Meeting Notes with a Summarizer Agent
Deploy a Meeting Summarizer Agent to automatically join calls, transcribe conversations, and generate summaries. It identifies action items and syncs them to your tools, creating a searchable meeting archive and saving hours on manual note-taking.
beginner30 min4 steps
The play
- Connect Your CalendarIntegrate the Meeting Summarizer Agent with your Google or Microsoft 365 calendar via its settings. This allows the agent to automatically identify upcoming meetings from your schedule and know when to join them.
- Invite the Agent to a MeetingSchedule a new meeting in your connected calendar. Add the Meeting Summarizer Agent as an attendee by inviting its unique email address (e.g., otter@otter.ai). The agent will then automatically join the Zoom, Google Meet, or Teams call at the scheduled time.
- Review the Automated SummaryAfter the meeting concludes, you'll receive an email with a link to the results. Review the generated abstract summary, key discussion points, and extracted action items. You can also access and search the full, speaker-labeled transcript.
- Configure Action Item SyncNavigate to the integrations section in the agent's settings and connect it to your project management tool (e.g., Jira, Asana, Trello). In the post-meeting review, you can now push extracted action items directly into your projects as new tasks.
Starter code
import requests
import os
# Get your API token from your account's developer settings (e.g., https://otter.ai/my-api-keys)
API_TOKEN = os.environ.get("OTTER_API_TOKEN", "YOUR_API_TOKEN")
if API_TOKEN == "YOUR_API_TOKEN":
print("Error: Please set your OTTER_API_TOKEN environment variable or replace 'YOUR_API_TOKEN' in the script.")
exit()
headers = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
# API endpoint to get the 5 most recent conversations (meetings)
url = "https://otter.ai/api/conversations?per_page=5"
print("Fetching recent meetings...")
try:
response = requests.get(url, headers=headers)
response.raise_for_status() # Raises an HTTPError for bad responses (4xx or 5xx)
data = response.json()
conversations = data.get("conversations", [])
if not conversations:
print("No recent conversations found in your account.")
else:
print("Last 5 Meetings:")
for conv in conversations:
title = conv.get('title', 'Untitled')
created_at = conv.get('created_at', 'N/A')
print(f"- Title: {title}, Created: {created_at}")
except requests.exceptions.HTTPError as err:
print(f"HTTP Error: {err}")
if err.response.status_code == 401:
print("Authentication failed. Please check your API_TOKEN.")
else:
print(f"Response Body: {err.response.text}")
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")