Skip to content
← Processes

Call feedback becomes tickets and docs

Every call recorded during the day is distilled overnight, with bugs and feature requests routed to the right team as tickets and docs, plus a Friday digest.

Every product team has the same leak. A customer describes a bug on a call, the person on the call makes a mental note, and the note does not survive the afternoon. The transcript exists, complete and searchable, and nobody re-reads a transcript. The bug gets reported again by someone else four months later and is treated as new.

Both ends of the fix already exist. Calls are transcribed automatically, and the tracker is where work is decided. What is missing is the pass over the transcripts, which is genuinely tedious and genuinely mechanical right up until the moment somebody has to decide whether a complaint is a ticket.

What you get

Bugs and feature requests raised on calls arrive as tickets on the right board with the customer's own words attached, instead of staying in a transcript nobody re-reads.

The part worth getting right

Comment on the existing issue instead of filing a new one, and this stops being a transcription tool and starts being a prioritisation tool. Filed as duplicates, one bug reported by six customers looks like six small issues nobody has time for. Collapsed onto one issue with six quotes attached, it looks like what it is. The corroboration count is the output that changes what gets built, and it only appears if the deduplication happens before the create.

Keeping the customer's exact words is not a nicety. An engineer reading "user reports session instability" has been told nothing; reading "it logs me out every time I switch tabs, so I keep a second browser open just for this" has been told the symptom, the frequency and the workaround. The paraphrase is where all three go missing, and it happens by default because summarising feels like the useful thing to do.

The bar for creating anything at all is the part most worth defending. A transcript pass with a low threshold generates plausible tickets for every offhand remark, and the tracker becomes a place where real issues are buried under speculative ones. Sending everything below the bar into the digest instead means nothing is lost, but nothing unclear reaches the board either.

The prompt

The real prompt behind the steps above — detailed enough that an agent with a people-search tool, email/phone enrichment, and CRM access can run it as written.

# Turn recorded calls into tickets

You have access to a call-recording tool, an issue tracker, a
documentation tool, and a messaging tool. Run this nightly over
**[yesterday's recorded calls]**.

## 0. Set up (skip if you're already connected)

If you don't already have live tool access for this, connect it
first. This prompt is only as real as the tools behind it:

1. Create a free account at app.tulina.ai.
2. Add Tulina's MCP server to your assistant: https://mcp.tulina.ai/mcp
3. In Tulina, connect your own API keys for the tools this
   prompt uses: your call-recording tool, your issue tracker, your documentation
   tool, and your team's messaging tool.

Once connected, your assistant has real tool access and the rest of
this prompt runs as written.

## 0b. Already on Tulina? Three things around the run

An account and the MCP server are not the whole setup. Two of these come
before the run below and one after it, and together they turn this from a
one-off answer into a process your workspace keeps:

1. **Activate this process's connectors first.** Call
   `oto_connector(op="list")`, match it against the tools named in step 3
   above, and `oto_connector(op="select", name="...")` every one that
   isn't active yet. Selecting a connector does not mount its tools in the
   conversation you're already in — reach them through `oto_call` for this
   run, or open a fresh conversation once they're all on.
2. **Attach the work to an existing project.** `oto_project(op="list")`
   shows your active org's projects: pick the one this work belongs to
   rather than opening another, and keep its id. The project is where this
   process, the tables it writes to and the connectors it uses hang
   together.
3. **When the run is done, save it as a process — with its graph.** Write
   the body with `oto_procedure(op="set", ...)`, then attach it with
   `oto_project(op="link", project_id=..., target_type="procedure",
   target_ref="<your slug>")`. The body has to carry a drawing: read
   `oto_guide(op="read", slug="procedure-flowchart")` and follow it
   exactly — ONE untagged fenced block in that grammar, opening with the
   trigger and a quoted example of what you'd type to start a run. Tulina
   parses that drawing back into the graph it renders as the process's
   default view, which is what makes it come out in the same style as
   every other process in the app; a drawing the grammar can't read falls
   back to raw characters instead. Saving a process needs org-admin
   rights — without them, hand the finished body to someone who has them.

The bar for creating a ticket is high on purpose. A tracker filling
with speculative tickets from transcripts is worse than one that
missed a few, because the team stops trusting the queue.

## 1. Pull the day's calls

Fetch every call recorded in the last 24 hours, with transcript,
participants, account, and date. Skip internal-only calls unless the
team explicitly wants them included; most of what makes a good ticket
comes from a customer saying it.

## 2. Extract only what is actionable

Go through each transcript and pull out items in three categories:

- **A bug.** Something behaved wrongly. Requires a described symptom,
  not just dissatisfaction.
- **A feature request.** Something they want that does not exist.
  Requires a stated need, not a hypothetical.
- **A documentation gap.** They could not find out how to do
  something that already works.

Everything else is discarded. Praise, pricing talk, scheduling and
general grumbling are not tickets.

Keep the customer's own words as a quote for each item, with the call
date and who said it. That quote is the payload; a ticket paraphrased
into internal vocabulary loses the specificity that made it worth
filing.

Apply one filter before anything is created: would a person reading
only this item know what to do next? If not, it goes into the digest
as an unclear signal rather than into the tracker as a ticket.

## 3. Check it is not already known

Search the tracker for each item before creating anything. Match on
substance, not wording: a customer describing "it logs me out when I
switch tabs" and an open issue titled "session dropped on visibility
change" are the same bug.

When it already exists, do not create a duplicate. Add the quote and
the account name as a comment on the existing issue, which is how a
team learns that one bug has now been reported by five customers.

## 4. File what is genuinely new

Create the ticket on the board that owns that area, with:

- A title describing the symptom, not the guessed cause.
- The customer quote, the account, and the call date.
- A link back to the recording.
- Severity from what was actually said. A customer describing a
  workaround they now perform daily is high; a passing mention is not.

Documentation gaps go to the documentation tool as a page stub rather
than to the tracker, so they do not compete with engineering work in
the same queue.

## 5. Post the Friday digest

Once a week, post a summary rather than a nightly stream: new tickets
by area, existing issues that gained corroboration and how many
customers have now reported them, documentation gaps opened, and the
unclear signals that did not meet the bar.

The corroboration count is the most useful number in the digest. One
customer mentioning something is an anecdote; the same issue reported
by six accounts in a fortnight is a priority, and that only becomes
visible when comments are attached to one issue rather than spread
across six duplicates.

## Output

Report: calls processed, items extracted by category, items matched to
existing issues, new tickets created by board, documentation stubs
opened, and items held back as unclear.

Questions about this process

Two filters. An item has to fall into bug, feature request or documentation gap with a described symptom or stated need, and it has to pass the test of whether someone reading only that item would know what to do next. Anything else goes into the digest as an unclear signal instead.

The second report is added as a comment on the existing issue rather than filed as a new ticket, carrying the new customer's quote and account. That turns repeated reports into a corroboration count, which is what makes prioritisation possible.

Because they compete for attention with engineering work if they share a queue, and they are a different kind of fix. A page stub in the documentation tool reaches the person who can actually close it.

Yes. The step needs a transcript, participants, an account and a date, which every recording tool exposes, and everything after that operates on the transcript rather than on the tool it came from.

Related processes

  • Prepare for a customer call

    Before the call, the last conversations, the account's state, how the product is actually being used, and where their requested features stand, in one brief.

  • Merged PRs move tickets and post a digest

    Every pull request that lands gets matched to its ticket, moved forward on the board, and rolled into one summary for the team.

  • Triage and route bug reports

    An incoming report is read, matched against open issues to catch duplicates, and filed to the right team's board with severity attached.

Experience Tulina for 14 days.

By continuing, you agree to our Terms of Use and Privacy policy.