Meeting Bot is a production-ready, AI-powered assistant that automatically joins online meetings, records audio, transcribes conversations using Google Gemini AI, analyzes sales calls against a 12-point checklist, and updates CRM leads in Bitrix24.
- 🎙️ Automatic Meeting Recording - Joins meetings via headless browser and captures audio
- 📝 AI Transcription - Converts speech to text using Google Gemini AI
- 📊 Sales Analysis - Evaluates calls against a comprehensive 12-point sales checklist
- 🔔 Telegram Integration - Control the bot and receive reports via Telegram
- 🔄 Bitrix24 CRM Sync - Automatically updates lead records with analysis results
- 🐳 Docker Ready - Fully containerized for easy deployment
- 📈 Production Grade - Logging, health checks, error handling, and monitoring
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Telegram │────▶│ Express │────▶│ Gemini │
│ Bot │ │ API │ │ AI │
└─────────────┘ └──────────────┘ └─────────────┘
│
▼
┌──────────────┐ ┌─────────────┐
│ Puppeteer │────▶│ Bitrix24 │
│ (Browser) │ │ CRM │
└──────────────┘ └─────────────┘
│
▼
┌──────────────┐
│ Recording │
│ (WAV/FFmpeg)│
└──────────────┘
- Node.js 18+ or Docker
- Google Gemini API key
- Bitrix24 webhook URL (optional)
- Telegram Bot token (optional)
# Clone repository
git clone https://github.com/your-org/meeting-bot.git
cd meeting-bot
# Copy environment file
cp .env.example .env
# Edit .env with your credentials
nano .env
# Start with Docker Compose
docker-compose up -d
# Check logs
docker-compose logs -f# Install dependencies
npm install
# Copy environment file
cp .env.example .env
# Edit .env with your credentials
# Required: GEMINI_API_KEY
# Optional: BITRIX_BASE_URL, TELEGRAM_BOT_TOKEN, ADMIN_CHAT_ID
# Start development server
npm run dev
# Or production server
npm startServer will start on http://localhost:3000
| Variable | Required | Description | Example |
|---|---|---|---|
PORT |
No | Server port | 3000 |
NODE_ENV |
No | Environment mode | production |
LOG_LEVEL |
No | Logging level | info, debug, error |
GEMINI_API_KEY |
Yes | Google Gemini API key | AIza... |
BITRIX_BASE_URL |
No | Bitrix24 REST API URL | https://domain.bitrix24.ru/rest/webhook/ |
TELEGRAM_BOT_TOKEN |
No | Telegram bot token | 123456:ABC-DEF... |
ADMIN_CHAT_ID |
No | Admin Telegram chat ID | -1001234567890 |
REC_DIR |
No | Recording output directory | /tmp/recordings |
REC_MAX_SECONDS |
No | Max recording duration | 3600 |
CHROME_BIN |
No | Chrome/Chromium binary path | /usr/bin/google-chrome-stable |
- Visit Google AI Studio
- Create an API key
- Add to
.envasGEMINI_API_KEY
- Go to your Bitrix24 portal
- Navigate to Marketplace → Webhooks
- Create an incoming webhook with permissions:
CRM - Copy the URL to
.envasBITRIX_BASE_URL
- Message @BotFather on Telegram
- Send
/newbotand follow instructions - Copy the token to
.envasTELEGRAM_BOT_TOKEN
GET /health
# Response: okPOST /join
Content-Type: application/json
{
"meetingUrl": "https://meet.google.com/abc-defg-hij",
"leadId": "12345"
}
# Response:
{
"ok": true,
"leadId": "12345",
"transcriptChars": 5432,
"analysis": {
"overallScore": 85,
"category": "B",
"summary": "...",
"points": { ... }
}
}POST /analyze
Content-Type: application/json
{
"transcript": "Full meeting transcript text..."
}
# Response:
{
"success": true,
"report": {
"overallScore": 85,
"category": "B",
"points": { ... },
"summary": "..."
}
}| Command | Description |
|---|---|
/start |
Welcome message and help |
/process |
Start meeting analysis flow |
/analyze |
Analyze a transcript directly |
/status |
Check bot status |
- Send
/processto start - Bot asks for meeting URL
- Send the URL
- Bot asks for Bitrix Lead ID
- Send the Lead ID
- Bot processes and returns analysis
Or use /analyze to analyze existing transcripts:
- Send
/analyze - Paste the transcript text
- Receive structured analysis report
The bot evaluates meetings against 12 criteria:
- Business Analysis - Understanding client's current business state
- Pain Points Discovery - Identifying problems and needs
- Objection Handling - How objections were addressed
- Lead Generation Model Reaction - Client's response to the approach
- Service Interest - Specific aspects that interested the client
- Opportunities Found - Potential value propositions identified
- Manager Mistakes - Errors made during the call
- Path to Close - Progress toward closing the deal
- Conversation Tone - Overall atmosphere
- Dialogue Control - Who dominated the conversation
- Recommendations - Specific improvement suggestions
- Client Category - A (hot), B (warm), C (cold) classification
# Run tests (when implemented)
npm test
# Test health endpoint
curl http://localhost:3000/health
# Test join endpoint
curl -X POST http://localhost:3000/join \
-H "Content-Type: application/json" \
-d '{"meetingUrl": "https://example.com/meeting", "leadId": "123"}'meeting-bot/
├── src/
│ ├── index.js # Main entry point & Express server
│ ├── config.js # Configuration management
│ ├── browser.js # Puppeteer browser automation
│ ├── recording.js # Audio recording utilities
│ ├── transcribe.js # Speech-to-text via Gemini
│ ├── gemini.js # AI analysis & checklist
│ ├── bitrix.js # Bitrix24 CRM integration
│ └── telegram.js # Telegram bot handler
├── .env.example # Environment template
├── .gitignore
├── Dockerfile
├── docker-compose.yml
├── package.json
└── README.md
- Environment Variables: Never commit
.envfiles - API Keys: Store securely, rotate regularly
- Rate Limiting: Implement for production use
- Input Validation: All inputs are validated
- HTTPS: Use reverse proxy (nginx) in production
- Access Control: Restrict API access in production
# Ensure Chromium is installed
which chromium-browser || which google-chrome-stable
# Update CHROME_BIN in .env
CHROME_BIN=/usr/bin/chromium-browser# Check PulseAudio is running
pulseaudio --check
# Install audio tools
apt-get install ffmpeg sox pulseaudio-utils- Verify API key is valid
- Check quota limits in Google Cloud Console
- Ensure transcript isn't too large (>1MB)
- Verify webhook URL is correct
- Check webhook permissions include CRM
- Test URL in browser:
{webhook_url}/crm.lead.get.json
- Concurrent Meetings: Queue system for multiple simultaneous meetings
- Caching: Cache Gemini responses for similar transcripts
- Database: Add PostgreSQL/MongoDB for persistence
- Redis: Session management and rate limiting
- CDN: Serve static assets via CDN
- Multi-platform meeting support (Zoom, Teams, etc.)
- Real-time transcription streaming
- Sentiment analysis
- Action items extraction
- Follow-up email generation
- Calendar integration
- Multi-language support
- Custom checklists
- Analytics dashboard
MIT License - see LICENSE file for details.
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open Pull Request
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with ❤️ by your team