Automated Slack introductions for new team members - Schedule virtual coffee chats and team meetups
| Feature | Description |
|---|---|
| 🤖 Automated Introductions | Auto-detect new hires and send welcome messages |
| ☕ Coffee Chat Scheduling | Schedule random 1:1 introductions with team members |
| 📅 Calendar Integration | Check availability before scheduling |
| 🎯 Smart Matching | Match new starters with relevant team members |
| 📊 Analytics | Track engagement and participation |
| ⚡ Serverless | AWS Lambda for cost-effective scaling |
| 🔔 Reminders | Send follow-up reminders for scheduled meetups |
| Requirement | Version |
|---|---|
| Python | 3.11+ |
| AWS Account | With Lambda access |
| Slack App | With Bot Token |
| Slack Workspace | Admin access for app installation |
git clone https://github.com/CaputoDavide93/new-starters-meetup.git
cd new-starters-meetupcp .env.example .env
# Edit .env with your settingspip install -r requirements.txtcd deploy
./deploy.sh# Package the Lambda function
cd Layer
zip -r lambda_layer.zip python/
# Deploy using AWS CLI
aws lambda publish-layer-version \
--layer-name newstarters-deps \
--zip-file fileb://lambda_layer.zipSchedule the function to run periodically:
{
"schedule": "cron(0 9 ? * MON-FRI *)"
}| Variable | Description | Required |
|---|---|---|
SLACK_BOT_TOKEN |
Slack Bot OAuth token | ✅ |
SLACK_SIGNING_SECRET |
Slack app signing secret | ✅ |
SLACK_CHANNEL_ID |
Channel for introductions | ✅ |
NEW_HIRE_CHANNEL |
New hire tracking channel | ✅ |
MATCHING_ALGORITHM |
Matching strategy | ❌ |
INTRO_DELAY_DAYS |
Days before first intro | ❌ |
Required Bot Token Scopes:
channels:read
chat:write
users:read
users:read.email
im:write
# config.yaml
slack:
bot_token: "${SLACK_BOT_TOKEN}"
channel: "#new-starters"
matching:
algorithm: "random" # or "department", "role"
max_matches: 3
delay_days: 2
messages:
welcome: "👋 Welcome to the team, {name}!"
intro_request: "☕ Time for a virtual coffee chat?"python src/main.py --trigger-nowpython src/main.py --dry-runpython src/main.py --list-pendinggraph LR
A[CloudWatch Event] --> B[Lambda Function]
B --> C[Slack API]
C --> D[Send DMs]
B --> E[DynamoDB]
E --> F[Track Matches]
new-starters-meetup/
├── src/
│ ├── common/ # Shared utilities (Lambda Layer)
│ │ ├── config.py # Secrets Manager loader
│ │ ├── azure_sync.py # Azure AD group sync
│ │ ├── calendar_utils.py # Google Calendar ops
│ │ └── dynamo_utils.py # DynamoDB weight mgmt
│ ├── ui_lambda/
│ │ └── ui_entry.py # Slack UI handler
│ └── worker_lambda/
│ └── worker_entry.py # Background worker
├── Layer/
│ └── python/ # Lambda dependencies
├── deploy/
│ └── deploy.sh # Deployment script
├── scripts/
│ └── build.sh # Build script
└── .env.example # Environment template
# UI Lambda logs
aws logs tail /aws/lambda/IntroUI-Lambda --follow
# Worker Lambda logs
aws logs tail /aws/lambda/IntroWorker-Lambda --follow| Issue | Solution |
|---|---|
Slack API not_authed |
Verify your bot token with curl -X POST https://slack.com/api/auth.test -H "Authorization: Bearer $SLACK_BOT_TOKEN" |
| "No partner available" | Check Azure AD group sync and DynamoDB table |
| "Calendar slot not found" | Verify Google Calendar permissions |
FreeBusy notFound errors |
The user's Google Calendar is not accessible. Ensure the service account has domain-wide delegation and the user has a Google Workspace account. Users with only Microsoft 365 accounts will have their calendar errors logged as warnings |
| "Timeout" | Increase Lambda memory/timeout, reduce meeting count |
| "Signature mismatch" | Verify Slack signing secret |
| "Permission denied" | Check IAM roles and policies |
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
- Fork the repository
- Create a 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 a Pull Request
Please see SECURITY.md for reporting vulnerabilities.
This project is licensed under the MIT License - see the LICENSE file for details.