B2B software/Support context

A ticket that arrives with the error attached.

Signals tells your support desk or assistant the page this user was stuck on, the error they hit and the docs they read before they wrote in, so the first reply can name the fix instead of asking for a screenshot.

Shorter time to resolution

Close tickets sooner by starting the reply from what the user did before they wrote in.

Time to resolution moves when the first reply is an answer rather than a question. Signals gives your support desk or assistant the errors this user hit in the last hour, the docs page they opened, the import that failed and the setup steps their account has taken this week. Your desk or assistant decides the reply and where the ticket goes.

Name the error and the fix in the first reply

A user has hit the same error three times in the last hour, each time on the field mapping screen, and now they write in. The ticket reaches the desk as a fresh conversation, so the first reply asks what they clicked and for a screenshot, and the error that was recorded three times waits for the second exchange. The error code and how often it fired can be on the ticket before anyone opens it, and the first reply can name the fix.

What Signals knows
errors_by_type_1h
Errors shown in the last hour, counted by error code
last_error_1h
The error code shown most recently
What your support desk does

Attaches the error code and its count to the ticket as it is created and suggests the help article your team keeps for that code, so the agent's first reply names the fix. The agent decides whether to send it.

support.ts · 18 lines
// In the handler that creates the ticket when a user writes in
const user = await signals.getServiceAttributes({
  name: "saas_support_errors",
  attribute_key: "user_id",
  identifier: userId,
});
// { errors_by_type_1h: { mapping_type_mismatch: 3 }, last_error_1h: "mapping_type_mismatch" }

const code = user.last_error_1h;
const count = user.errors_by_type_1h?.[code] ?? 0;

if (count >= 2) {
  desk.annotate({
    ticket,
    note: `Hit ${code} ${count} times in the last hour`,
    suggestedReply: help.articleFor(code),
  });
}

Try it on your own site.

Add the SDK, define one thing you want to know about a visitor, and watch it update while you click around. The free tier runs on the real engine: no card, no sales call.