TicketPulse is a Zendesk and Slack integration platform that provides SLA alerting, tag-based notifications, and configurable daily ticket summaries. It features a web dashboard with Google OAuth authentication for managing users, alert configurations, and Zendesk/Slack settings.
- SLA Monitoring -- Polls Zendesk for tickets approaching or breaching SLA targets and sends alerts to Slack.
- Tag-Based Alerts -- Configure per-user tag alerts that notify specific Slack channels when matching tickets are created or updated.
- Daily Summaries -- Scheduled daily ticket summaries delivered via Slack DM, with configurable work hours, timezone, and tag/ticket filters.
- Web Dashboard -- View alert history and statistics with a browser-based UI.
- Admin Panel -- Manage users, tag alert rules, and Zendesk/Slack configuration from the web UI.
main.go Application entry point and HTTP routing
├── handlers/ HTTP handlers, auth middleware (Google OAuth)
├── services/
│ ├── zendesk.go Zendesk API client, ticket polling, SLA processing
│ ├── slack.go Slack client, Socket Mode, alert delivery
│ ├── scheduler.go Daily summary scheduler
│ ├── summary.go Zendesk search and daily summary generation
│ ├── polling.go Testable polling service
│ ├── dashboard.go Dashboard statistics queries
│ ├── config_cache.go TTL-backed configuration cache
│ ├── comment_fetcher.go Rate-limited comment fetching
│ └── ticket_context.go Ticket enrichment (requester, org)
├── models/ Data models and database access (users, alerts, config)
├── db/ Database interface, SQLite initialization, migrations
├── middlewares/ SSE server, notification middleware
├── logging/ Area-based debug logging
├── templates/ HTML templates (dashboard, profile, admin)
└── static/ CSS, JavaScript, images, vendor libraries
- Go 1.23+
- Google OAuth credentials (Client ID and Client Secret) for user authentication
- Zendesk account with API access (subdomain, email, API key)
- Slack app with Bot Token and App Token (Socket Mode enabled)
-
Clone the repository:
git clone https://github.com/TylerConlee/TicketPulse.git cd TicketPulse -
Create a
.envfile in the project root:GOOGLE_CLIENT_ID=your-google-client-id GOOGLE_CLIENT_SECRET=your-google-client-secret SESSION_KEY=a-random-base64-session-key DB_FILEPATH=ticketpulse.db DEBUG_AREAS=all
DEBUG_AREAScontrols verbose logging. Options:zendesk,sla,cache,slack,polling,tags,scheduler,db, orall. Leave empty to disable debug logging. -
Run the application:
go run .The server starts on
http://localhost:8080. Log in with Google OAuth, then configure Zendesk and Slack credentials via the Admin > Configuration page. -
Build a binary:
go build -o ticketpulse .
docker build -t ticketpulse .
docker run -p 8080:8080 \
-e GOOGLE_CLIENT_ID=... \
-e GOOGLE_CLIENT_SECRET=... \
-e SESSION_KEY=... \
-e DB_FILEPATH=/data/ticketpulse.db \
-v ticketpulse-data:/data \
ticketpulsego test -race ./...Tests use an in-memory SQLite database and mock HTTP servers for Zendesk API calls. See testutil/ for shared test helpers.
Zendesk and Slack settings are stored in the database and managed through the web UI at /admin/configuration. Required configuration keys:
| Key | Description |
|---|---|
zendesk_subdomain |
Your Zendesk subdomain (e.g. mycompany) |
zendesk_email |
Zendesk agent email for API authentication |
zendesk_api_key |
Zendesk API token |
slack_bot_token |
Slack Bot User OAuth Token (xoxb-...) |
slack_app_token |
Slack App-Level Token for Socket Mode (xapp-...) |
| Variable | Required | Description |
|---|---|---|
GOOGLE_CLIENT_ID |
Yes | Google OAuth 2.0 Client ID |
GOOGLE_CLIENT_SECRET |
Yes | Google OAuth 2.0 Client Secret |
SESSION_KEY |
Yes | Secret key for session cookie encryption |
DB_FILEPATH |
Yes | Path to the SQLite database file |
DEBUG_AREAS |
No | Comma-separated debug logging areas |