Automated Slack introductions for new team members - Schedule virtual coffee chats and team meetups
Features β’ Quick Start β’ Configuration β’ Contributing
| 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.