WhatsApp Support Ticket Sync
WhatsApp support tickets from Periskope flow into the project tool automatically, skipping any already imported.
- Role
- Built
- Status
- SHIPPED
- Stack
- Periskope API, MongoDB
The gap I spotted
I already knew the Periskope API from building payment reminders, so when I saw the support team re-typing every WhatsApp ticket into the PMT, I connected the two.
The problem
Can support tickets raised on WhatsApp, by staff or by Periskope’s AI, reach the project tool on their own, without anyone retyping them and without losing edits made in the tool?
Every support request raised on WhatsApp through Periskope, including AI-generated tickets, had to be re-typed into the PMT.
The system
- A backend sync that maps Periskope tickets to PMT tickets and skips any ticket ID already imported.
- Status follows Periskope (open/solved) while fields the team edits in PMT are never overwritten.
- A stored source field and a backend filter for All / WhatsApp / Manual tickets.
- A redesigned Support Manager with counts, field search, filtered download and an editable ticket table.
- 01
Customer on WhatsApp
- 02
Periskope ticket (staff or AI)
- 03
De-duplicate by ticket ID
- 04
Map fields
- 05
Project tool ticket (team edits kept)
- 06
Support Manager and dashboard
Periskope owns
- Ticket status (open or solved)
Project tool owns
- Project
- Project manager
- Device
- Assignee
- Edits made by the team
Sync layer owns
- Field mapping
- De-duplication by ticket ID
- Status sync
Engineering decisions
- Periskope owns the status; the project tool owns everything else
- The first version simply filled the project tool from Periskope. I changed it so a re-sync never overwrites the project, project manager, device or assignee the team has set; only open/solved follows Periskope.
- Check Periskope’s ticket ID before creating anything
- The same ticket can never be imported twice, however often the sync runs.
- Filter by source on the server
- Downloads and counts are actually filtered, not just hidden on screen.
- Keep source details in their own record
- Where each ticket came from is stored for future reporting without cluttering the screen.
- One path for human and AI tickets
- Support doesn’t need a separate workflow depending on who created the ticket.
What changed
- Changed the sync so it never overwrites fields the team edits; only status follows Periskope.
Impact
Tickets reach the PMT without re-typing, and the team can see where each one came from.
What I learned
- Synchronising two systems wasn’t mainly an API problem. It was an ownership problem.
AHA Smart Homes screens on this site are recreated with dummy data.
Want to talk through how I built this?
I'm happy to walk through the decisions, what failed and what I'd change.