1957f839ff
## Background This is team Comfortably Summed's submission for Twenty's Hacktoberfest. We built an activity summary application that can periodically send messages to the following platforms: Slack; Discord; and WhatsApp. ### Features - 🧑💻 **People & Company Tracking**: Summarizes newly created people and companies - 🎯 **Opportunity Monitoring**: Reports on new opportunities created, broken down by stage - ✅ **Task Analytics**: - Tracks task creation - Calculates on-time completion rates - Identifies team members with the most overdue tasks (the "slackers") - 🔔 **Multi-Platform Notifications**: Send reports to Slack, Discord, and/or WhatsApp - ⏰ **Configurable Time Range**: Look back any number of days ### Summary of Changes - Adds a new Twenty app called Activity Summary - Contains a single index.ts file which utilises exported functions from opportunity-creation-summariser.ts, people-creation-summariser.ts, task-creation-summariser.ts, and senders.ts - Implementation of sending a message to Slack, Discord, and WhatsApp can be found in senders.ts - Retrieval and summarising of Opportunity creation can be found in opportunity-creation-summariser.ts - Retrieval and summarising of People creation can be found in people-creation-summariser.ts - Retrieval and summarising of Task creation can be found in task-creation-summariser.ts ## Screenshots ### Message to our Slack channel <details> <summary>Screenshot</summary> <img width="326" height="242" alt="Screenshot 2025-11-01 at 22 05 30" src="https://github.com/user-attachments/assets/57c5d50b-959d-4c3f-bd7d-00f42bf545b2" /> </details> ### Message to our Discord server's channel <details> <summary>Screenshot</summary> <img width="472" height="386" alt="Screenshot 2025-11-01 at 22 06 44" src="https://github.com/user-attachments/assets/f4a38d7f-e82d-47b0-a4b3-7bcf063fa575" /> </details> ### Message to our WhatsApp number <details> <summary>Screenshot</summary> <img width="972" height="548" alt="IMG_2024" src="https://github.com/user-attachments/assets/5533fc4d-a3ee-4e11-a9e7-9cc6a96316fc" /> </details> ### App-level configuration <details> <summary>Screenshot</summary> <img width="442" height="385" alt="Screenshot 2025-11-01 at 22 02 14" src="https://github.com/user-attachments/assets/c9948f57-f22c-42a0-972f-3348f480aa30" /> </details> ### Serverless functions <details> <summary>Screenshot</summary> <img width="413" height="378" alt="Screenshot 2025-11-01 at 22 03 48" src="https://github.com/user-attachments/assets/d297967b-52ce-4690-bb04-a16d89729d94" /> </details> ### Cron configuration Default value in place due to Cron having a non-editable text input. <details> <summary>Screenshot</summary> <img width="395" height="386" alt="Screenshot 2025-11-01 at 22 08 03" src="https://github.com/user-attachments/assets/a95a708c-7136-4512-99c3-a6723adc0da5" /> </details> ## Testing Sync the application to your Twenty instance and ensure the following variables have values: - `TWENTY_API_KEY` - Your Twenty CRM API key - `DAYS_AGO` - Number of days to look back for the report Choose any of the supported platforms and you shall see a summary being sent!
152 lines
4.8 KiB
Markdown
152 lines
4.8 KiB
Markdown
# Twenty CRM Activity Reporter ��
|
|
|
|
A TypeScript-based reporting bot that summarizes activity from your Twenty CRM workspace and sends daily/periodic reports to Slack, Discord, and WhatsApp. Meet Kylian Mbaguette, your friendly CRM activity reporter!
|
|
|
|
## Features
|
|
|
|
- 🧑💻 **People & Company Tracking**: Summarizes newly created people and companies
|
|
- 🎯 **Opportunity Monitoring**: Reports on new opportunities created, broken down by stage
|
|
- ✅ **Task Analytics**:
|
|
- Tracks task creation
|
|
- Calculates on-time completion rates
|
|
- Identifies team members with the most overdue tasks (the "slackers")
|
|
- 🔔 **Multi-Platform Notifications**: Send reports to Slack, Discord, and/or WhatsApp
|
|
- ⏰ **Configurable Time Range**: Look back any number of days
|
|
|
|
## Prerequisites
|
|
|
|
- Node.js (v14 or higher recommended)
|
|
- TypeScript
|
|
- A [Twenty CRM](https://twenty.com) account with API access
|
|
- Optional: Slack webhook, Discord webhook, and/or WhatsApp Business API access
|
|
|
|
## Installation
|
|
```bash
|
|
# Clone the repository
|
|
git clone <your-repo-url>
|
|
cd <project-directory>
|
|
|
|
# Install dependencies
|
|
npm install
|
|
```
|
|
|
|
## Configuration
|
|
|
|
Create a `.env` file in the root directory with the following variables:
|
|
```bash
|
|
# Required
|
|
TWENTY_API_KEY=your_twenty_api_key_here
|
|
DAYS_AGO=7 # Number of days to look back
|
|
|
|
# Optional - Include only the platforms you want to use
|
|
SLACK_HOOK_URL=https://hooks.slack.com/services/YOUR/WEBHOOK/URL
|
|
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR/WEBHOOK/URL
|
|
FB_GRAPH_TOKEN=your_facebook_graph_api_token
|
|
WHATSAPP_RECIPIENT_PHONE_NUMBER=+1234567890
|
|
```
|
|
|
|
### Environment Variables
|
|
|
|
| Variable | Required | Description |
|
|
|----------|----------|-------------|
|
|
| `TWENTY_API_KEY` | ✅ Yes | Your Twenty CRM API key |
|
|
| `DAYS_AGO` | ✅ Yes | Number of days to look back for the report |
|
|
| `SLACK_HOOK_URL` | ❌ No | Slack incoming webhook URL |
|
|
| `DISCORD_WEBHOOK_URL` | ❌ No | Discord webhook URL |
|
|
| `FB_GRAPH_TOKEN` | ❌ No | Facebook Graph API token for WhatsApp |
|
|
| `WHATSAPP_RECIPIENT_PHONE_NUMBER` | ❌ No | WhatsApp recipient phone number (with country code) |
|
|
|
|
## Usage
|
|
```bash
|
|
# Run the application
|
|
npm start
|
|
# or
|
|
node dist/index.js # if compiled
|
|
|
|
# For development
|
|
npm run dev # if you have ts-node configured
|
|
```
|
|
|
|
## Project Structure
|
|
```
|
|
.
|
|
├── index.ts # Main entry point
|
|
├── people-creation-summariser.ts # Summarizes people/company creation
|
|
├── opportunity-creation-summariser.ts # Summarizes opportunity creation
|
|
├── task-creation-summariser.ts # Summarizes task creation & completion
|
|
├── senders.ts # Handles sending to Slack/Discord/WhatsApp
|
|
├── utils.ts # API request utility
|
|
└── README.md
|
|
```
|
|
|
|
## How It Works
|
|
|
|
1. **Data Collection**: The bot queries the Twenty CRM API for activities within the specified time range
|
|
2. **Analysis**:
|
|
- Counts new people and companies
|
|
- Categorizes opportunities by stage
|
|
- Calculates task completion rates and identifies overdue tasks
|
|
3. **Reporting**: Formats the data into friendly messages
|
|
4. **Distribution**: Sends reports to configured platforms (Slack, Discord, WhatsApp)
|
|
|
|
## Report Format
|
|
|
|
Each report includes:
|
|
```
|
|
Bonjour! 🥖 Je m'appelle Kylian Mbaguette. Over the last X days:
|
|
|
|
🧑💻 People & Companies
|
|
- X People and Y Companies were added
|
|
|
|
🎯 Opportunities
|
|
- X Opportunities were added: Y in NEW, Z in PROPOSAL
|
|
|
|
📋 Tasks
|
|
- X Tasks were created
|
|
- Y% Tasks were completed on time
|
|
- [Name] slacked the most with Z Tasks overdue
|
|
```
|
|
|
|
## API Integration
|
|
|
|
This bot uses the [Twenty CRM REST API](https://api.twenty.com/rest/). The following endpoints are used:
|
|
|
|
- `GET /people` - Fetch people data
|
|
- `GET /companies` - Fetch company data
|
|
- `GET /opportunities` - Fetch opportunity data
|
|
- `GET /tasks` - Fetch task data
|
|
- `GET /workspaceMembers/{id}` - Fetch workspace member details
|
|
|
|
## Development
|
|
```bash
|
|
# Install dependencies
|
|
npm install
|
|
|
|
# Compile TypeScript
|
|
npx tsc
|
|
|
|
# Run in development mode
|
|
npx ts-node index.ts
|
|
```
|
|
|
|
## Notes
|
|
|
|
- The "slacker" detection is lighthearted and identifies team members with the most overdue tasks
|
|
- At least one messaging platform must be configured for the bot to send reports
|
|
- The bot uses ISO date format (YYYY-MM-DD) for date filtering
|
|
- Task completion percentage only considers incomplete tasks (excludes already completed tasks from the calculation)
|
|
|
|
## Troubleshooting
|
|
|
|
**Issue**: No messages being sent
|
|
- **Solution**: Ensure at least one messaging platform is configured with valid credentials
|
|
|
|
**Issue**: API authentication errors
|
|
- **Solution**: Verify your `TWENTY_API_KEY` is correct and has necessary permissions
|
|
|
|
**Issue**: WhatsApp messages not sending
|
|
- **Solution**: Ensure both `FB_GRAPH_TOKEN` and `WHATSAPP_RECIPIENT_PHONE_NUMBER` are set correctly
|
|
|
|
## Contributing
|
|
Built with ❤️ and 🥖 by Azmat, Ali and Mike from 9dots
|