Feeling under the weather? Called away for an urgent matter? Don't let unexpected circumstances force you to miss important online meetings. PROXY-MEET seamlessly handles your meeting attendance, ensuring you maintain your commitments even when life gets in the way.
Whether you're dealing with illness, family emergencies, or conflicting priorities, PROXY-MEET provides reliable meeting coverage so you never have to choose between your responsibilities and your well-being.
An intelligent meeting automation system that acts as your proxy in online meetings, providing automated attendance, interacts when your name is called, generates structured meeting notes using multiple AI agents and logs it into Notion, and creates professional Minutes of Meeting (MoM) email drafts.
- Automated Meeting Attendance: Joins scheduled Zoom meetings automatically
- Intelligent Interaction: AI-powered response via voice and in message window when your name is called
- Meeting Logging: Automatic audio and transcript logging in
archives/
- Advanced Transcription: Uses Google Gemini 2.5 Pro for accurate transcription with speaker diarization
- Dual Note-taking Strategy:
- Predefined structured format
- AI-recommended format based on meeting type (progress updates, brainstorming, 1-on-1s, interviews, etc.)
- Automated Email Distribution: Creates MoM email drafts in Gmail
- Multi-Agent Analysis: Uses CrewAI with specialized agents for comprehensive meeting analysis
- Professional Output: Generates structured notes in Markdown format
- Notion Logging: Automatically logs both the meeting-notes in an organized mannner in Notion
- Streamlit Dashboard: User-friendly web interface
The application uses a multi-agent system powered by CrewAI:
- Meeting Analyst - Extracts core content and themes
- Action Item Specialist - Identifies actionable tasks
- Content Organizer - Structures information hierarchically
- Quality Assurance Editor - Ensures accuracy and formatting
- Meeting Strategist - Determines optimal documentation framework
- Strategic Note Curator - Applies sophisticated note-taking methodologies
- Email Assistant - Formats and distributes meeting minutes
Before setting up Proxy-Meet, ensure you have:
- Python 3.8 or higher
- OBS Studio
- ffmpeg
- VB-CABLE (Virtual Audio Device)
- Google Cloud Platform Account
- Google API key (for Gemini AI)
- Notion API key & Database Id
- AssemblyAI API key
- Stable internet connection
git clone https://github.com/YOUR_USERNAME/Proxy-Meet.git
cd Proxy-Meet
# Create virtual environment
python -m venv venv
# Activate virtual environment
venv\Scripts\activate.bat
pip install -r requirements.txt
Create a .env
file in the project root:
# Notion APIs
NOTION_API_KEY="your_notion_internal_integration_secret_key"
NOTION_DATABASE_ID="your_notion_database_id"
# Zoom Configuration
ZOOM_LINK="your_zoom_meeting_link"
WAIT_INTERVAL="30"
MAX_WAIT_TIME="3600"
# AI Configuration
GOOGLE_API_KEY=your_google_api_key
AAI_API_KEY=your_assemblyai_api_key
LANGFUSE_PUBLIC_KEY="your_langfuse_publickey"
LANGFUSE_SECRET_KEY="your_langfuse_secretkey"
LANGFUSE_HOST="https://cloud.langfuse.com"
- Record a short video of yourself (
me.mp4
) for avatar purposes - Place it in the project root
- Ensure good lighting
- Download OBS Studio:
- Go to OBS Studio
- Download the installer for Windows
- Run the installer and complete the installation (make sure the installation location is in
C:\Program Files\
)
-
Scene Setup:
- Launch OBS Studio
- Under Scenes panel (bottom left), create one profile:
- Right-click in Scenes area β Add β Enter scene name β OK
-
Source Configuration:
- Under Sources panel (bottom center), add media source:
- Click the + button β Select Media Source β Create New β OK
- Configure Media Source:
- Browse and select your pre-recorded video file
- Check the following options:
- β Loop
- β Restart playback when source becomes active
- Click OK to save settings
- Under Sources panel (bottom center), add media source:
-
Verify Setup:
# Your video should now be playing in the preview window # The video will loop continuously and restart when switching scenes
Note: This OBS configuration will allow your Proxy-Meet application to use the pre-recorded video as a virtual camera source during meetings.
FFmpeg is required for audio processing in Proxy-Meet. Follow these steps to install it on Windows:
- Go to FFmpeg
- Under "Windows EXE Files", select "Built by BtBN"
- Look for the Assets section and download:
ffmpeg-master-latest-win64-gpl.zip
- Note: If the Assets section is not visible, click to expand it
- Extract the downloaded ZIP file to a temporary location
- Create a new directory named
ffmpeg
directly under your C drive:C:\ffmpeg\
- Copy all contents from the extracted
ffmpeg-master-latest-win64-gpl
folder directly intoC:\ffmpeg\
The final structure should look like:
C:\ffmpeg
βββ bin
β βββ ffmpeg.exe
β βββ ffplay.exe
β βββ ffprobe.exe
βββ doc\
βββ LICENSE
- Right-click "This PC" β Properties β Advanced system settings
- Click "Environment Variables"
- Under "System Variables", find and select "Path", then click "Edit"
- Click "New" and add:
C:\ffmpeg\bin
- Click "OK" to close all dialogs
- Restart your command prompt/terminal
Open a new command prompt and test:
ffmpeg -version
You should see FFmpeg version information if installed correctly.
- Go to VB-CABLE
- Download the latest VB-CABLE Driver and follow the on-page installation instruction to Install
-
Create Notion Account:
- Go to Notion
- Sign up for a new account or log in to existing account
-
Create Integration and Get API:
- Go to Notion Integration
- Click + New integration
- Give your integration a name (e.g., "Proxy-Meet Integration")
- Select your workspace
- Click Submit
- Copy the Internal Integration Token
-
Create Meeting Notes Page:
- In your Notion workspace, create a new page
- Add heading: Meeting-Notes
-
Create Database:
- Under the Meeting-Notes page, create a new inline database called "Notes"
- Add the following columns with their respective types:
Column Name Type Title Title Date Date Type Select Summary Text Action Items Text Detailed Notes Text Status Select (add option New) Key Decisions Text -
Get Database ID:
- Click the six dots besides "Notes" heading of your database and click Open as page
- Click the three dots (top right corner) and Copy the URL from your browser
- The database ID is the 32-character string in the URL
- Format:
https://notion.so/your-workspace/DATABASE_ID?v=...
-
Configure Environment Variables:
- Open your
.env
file in the Proxy-Meet project - Add the following variables:
# Notion Integration NOTION_API_KEY=your_internal_integration_token_here NOTION_DATABASE_ID=your_database_id_here
- Open your
- On the Integration page, click Access
- Grant it Full access permissions to your Meeting-Notes page
- Go to the Google Cloud Console
- Create a new project or select an existing one
- Enable the Gmail API:
- Navigate to APIs & Services > Library
- Search for "Gmail API"
- Click on it and press "Enable"
- Go to APIs & Services > Credentials
- Click Create Credentials > OAuth client ID
- Choose Desktop application as the application type
- Give it a name (e.g., "Proxy-Meet")
- Download the credentials JSON file
- Rename it to
credentials.json
and place it in your project root directory
- Go to APIs & Services > OAuth consent screen
- Choose External user type (unless you're using Google Workspace)
- Fill in the required information:
- App name: "Meeting Analyzer AI"
- User support email: Your email
- Developer contact information: Your email
- Add scopes:
- Click Add or Remove Scopes
- Add
https://mail.google.com/
(full Gmail access)
- Add test users (your email address) in the Test users section
- Save and continue
-
Google API Key:
- Get from Google AI Studio
- Used for Gemini AI transcription and analysis
-
AssemblyAI API Key:
- Get from AssemblyAI
- For transcription service
-
Langfuse Keys:
- Sign up at Langfuse
- For tracking and monitoring AI interactions
- Run the application for the first time:
python zoom_bot.py
- When you first use a Gmail feature, you'll be redirected to Google's OAuth consent screen
- Sign in with your Google account
- Grant the necessary permissions
- A
token.json
file will be created automatically in your project directory - As soon as the
token.json
file is created, interrupt the run with Ctrl+C
Configure the bot settings to personalize your meeting assistant by going to zoom_bot.py
:
-
Set Bot Name: Change the bot name to your preferred name
BOT_NAME = "prasun" # Replace "prasun" with your name
-
Customize Response Message: Update the automated response text
RESPONSE_TEXT = "Hi, this is Prasun's assistant. Prasun is ill today, his bot is attending the meet !!" # Change to your preferred response message
-
Set Meeting Display Name:
- Use Ctrl+F to search for the line containing
name_input.send
- Find this line:
name_input.send_keys("Prasun-Bot")
- Change
"Prasun-Bot"
to the name you want to appear in the meeting
- Use Ctrl+F to search for the line containing
Example Configuration:
BOT_NAME = "john"
RESPONSE_TEXT = "Hello! This is John's AI assistant. John is temporarily unavailable !!"
name_input.send_keys("John-Assistant")
Proxy-Meet/
βββ venv/ # Virtual environment (excluded from git)
βββ archives/ # Meetings (excluded from git)
β βββ meeting_*/ # Individual meetings
β βββ Meeting_Notes.md # Structured Notes using predefined format
β βββ Meeting_Notes2.md # AI-recommended format based on meeting type
β βββ recording.mp3 # Meeting Recording
β βββ recording_transcript_*.json # Full Transcript with speaker identification in json format
β βββ recording_transcript_*.txt # Full Transcript with speaker identification in human readable format
βββ credentials.json # Google API credentials (excluded from git)
βββ .env # Environment variables (excluded from git)
βββ me.mp4 # Personal video/avatar (excluded from git)
βββ token.json # OAuth tokens (excluded from git)
βββ requirements.txt # Python dependencies
βββ meeting_pipeline.py # Core meeting processing pipeline
βββ tools.py # Utility functions and tools
βββ utils.py # Helper utilities
βββ zoom_bot.py # Zoom meeting automation bot
βββ agents.py # AI agents for meeting interactions
βββ notion_logger.py # Logging Notes into Notion
βββ streamlit_app.py # Web interface using Streamlit
βββ scheduler_runner.py # Automated scheduler execution
βββ meeting_scheduler.py # Meeting scheduling and management
Choose your preferred method below to get started.
-
Launch the Application
streamlit run meeting_scheduler.py
-
Configure Your Meeting
- Enter your desired meeting date
- Set the meeting time
- Add your Zoom meeting link
-
Relax and Let Proxy-Meet Handle the Rest π
-
Environment Setup
- Navigate to your project folder
- Update the
.env
file with your Zoom meeting link in theZOOM_LINK
variable
-
Execute the Bot
python zoom_bot.py
-
You're All Set! π
Once your meeting concludes, Proxy-Meet automatically springs into action:
β Gmail Integration - Creates a comprehensive Minutes of Meeting (MoM) draft in your Gmail
β Notion Logging - Saves detailed meeting notes to your Notion workspace
β Interactive Dashboard - Opens a beautiful Streamlit interface featuring:
- π΅ Complete meeting audio recording
- π Full meeting transcript
- π Organized meeting notes and insights
- "File not found" errors: Ensure all required files are in the project root
- Authentication errors: Check that
credentials.json
is properly configured - API quota exceeded: Monitor your Google API usage in the Cloud Console
- Transcription failures: If nothing was spoken during meet, audio too low or extremely poor audio quality
- Refresh token expired: Delete
token.json
and re-authenticate - Scope errors: Ensure the Gmail API is enabled in your Google Cloud project
- Permission denied: Check that your app is not in testing mode restrictions
- Issue: The bot may occasionally fail to join Zoom meetings due to browser popup sequence variations.
- Root Cause: Chrome's popup order can vary between sessions, affecting the automated joining process.
- Workaround: If you encounter joining issues, modify the popup handling logic in the
join_zoom_and_record()
function inzoom_bot.py
to match your browser's current popup sequence.
- Issue: The bot fails to properly detect meeting termination when the host leaves instead of ending the session.
- Root Cause: The application is designed to detect "meeting ended" signals, but when hosts simply leave the meeting (rather than formally ending it), this trigger is not activated.
- Workaround: Ensure meeting hosts use the "End Meeting" option rather than just leaving the session for proper bot functionality.
- Credentials: Never commit
credentials.json
,token.json
, or.env
files - Video Data: Personal video (
me.mp4
) stays local and is not uploaded - Meeting Data: All meeting logs are stored locally by default
- API Keys: Store securely in environment variables
- Network: Use HTTPS for all external API calls
- Built with CrewAI for multi-agent orchestration
- Uses Google Gemini for advanced AI capabilities
- Powered by Streamlit for the web interface
- Integrates with Gmail API for email automation
This project is licensed under the GNU GPLv3 - see the LICENSE file for details. Made with β€οΈ by Prasun