Skip to content
Back to all work

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.
  1. 01

    Customer on WhatsApp

  2. 02

    Periskope ticket (staff or AI)

  3. 03

    De-duplicate by ticket ID

  4. 04

    Map fields

  5. 05

    Project tool ticket (team edits kept)

  6. 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.

Email me about this projectLinkedInRésumé

NextAdditional Items Approval Workflow