For a long time, keeping Fin up to date on bugs our customers hit was slow and manual. Bug tracking has to be quick and accurate, and it has to scale, and our old process wasn’t any of those. Then I learned about Fin Attributes. Here’s what we built (which costs us $0 extra to run) needs very little maintenance and keeps humans fully in control, plus the walls I hit along the way.
The problem
When a customer reported a bug we already knew about but Fin didn’t, Fin went in circles. It repeated the same troubleshooting steps and effectively told the customer the problem was on their end. Keeping Fin informed meant hand-updating Snippets for every bug, which took ages and didn’t scale.
The idea
Could we sync the bugs we’re tracking straight into Fin, so Fin knows about them, escalates them, and even gets those conversations linked to the right tracker ticket so we can update customers when they’re fixed?
Our first version used the API to pull every Bug tracker ticket into a single Confluence page and fed that to Fin as a knowledge source. It was a decent start, but we hit two walls:
- The Confluence sync only runs once a day. A bug reported right after a sync stayed invisible to Fin for up to 24 hours. Far too slow.
- Guidance can’t escalate based on knowledge content. I spent most of a day on guidance like “if a customer reports a bug that matches this document, escalate to a human.” It never fired. Fin checks guidance before it searches knowledge, so at that point there’s nothing to match. Fin would then find the bug in the knowledge, tell the customer “this is a known issue”… and not escalate. UGH (I banged my head on the wall for an hour here).
What we built
- A new “Public” toggle on for our Bug tracker tickets. Nothing reaches Fin unless a person turns it on. That’s the first human control.
- A new Fin Attribute that stores all known issues.
- A lightweight script that runs frequently. For every Public bug it:
- writes an internal article that Fin can use (via the API, so no waiting on the daily connector sync), plus a Confluence page for our team;
- adds the bug to the “Known Issues” Fin Attribute. Each value is one bug, and its description covers the symptom, how it affects customers, and how customers tend to describe it. We update the values with the Intercom CLI (the standard data-attribute API can’t update conversation attributes).
- When a bug is resolved, or Public is turned off, it removes the value and updates or removes the article.
- An escalation rule on the attribute. If Known Issues has any value other than None, Fin hands the conversation to a human right away.
- A workflow branch after the handoff. It tells the customer “this is a known issue our team is aware of: {the bug}” and leaves our agent an internal note to link it to the tracker ticket.
- A linking job. Any conversation tagged with a known bug gets linked to that bug’s tracker ticket through the API (
POST /tickets/{id}/linked_conversations), including conversations Fin resolved on its own. - When the bug is fixed, we send one Reply All from the tracker ticket, and every affected customer hears about it.
Lessons and gotchas
- The attribute isn’t always set on the first message. Even with a description telling Fin to check every message, it sometimes only gets filled in at handoff or when the conversation closes. That’s why the linking job exists: if Fin answers and the customer leaves happy, the conversation still gets linked once it’s closed, and that customer still gets the fix update.
- What helped detection: an attribute description that tells Fin to check every customer message, including “how do I fix…” questions, and value descriptions written the way customers actually phrase the problem.
- Fin only seemed to check the attribute live once an enabled escalation rule used it. Before that, values only appeared at close.
The result
Now when a customer writes in about a known bug, one of two things happens:
- Fin recognizes it, tells them it’s a known issue, and escalates right away, so we can link them and keep them updated.
- Or Fin answers from the bug article, the customer thanks Fin and leaves, and our automation links the conversation afterward. They still get the update when it’s fixed.
No more circular troubleshooting on bugs we already know about, and our tracker tickets now show everyone who was affected. Happy to answer questions or share more detail on any piece of this.