Customer & Sales package

Complaints tracker

Log complaints against a simple customer CRM; tier and category set the priority and SLA, the customer is acknowledged and handlers resolve or escalate.

OfficialNo integrations neededStarts from a formIntermediate~15 min setupv1.0.0

About this package

What it does

Complaints tracker is a complete complaints process with its own lightweight CRM. The Customers table holds each account with its main contact, tier (Platinum, Gold, Silver, Standard), account manager and a count of open complaints; seven sample customers are included.

Customer care logs a complaint on the Log a complaint form page. Picking the customer fills in the contact, email, tier and account manager; the agent adds the category, channel, a summary, the details, the order number and what the customer wants, and chooses the handler and an escalation contact as Persons.

The workflow sets the priority and SLA hours with the Complaint priority decision table (staff conduct and Platinum customers are P1 within 24 hours, and so on), starts the SLA, logs the complaint in the Complaints table, acknowledges the customer by email and alerts the account manager for high-priority cases. The handler gets a resolution task with Resolve and Escalate buttons, a reminder four hours before the deadline and escalation to their manager after a day. Escalate hands the complaint to the team lead, who can resolve it or return it. Resolving records the root cause and any goodwill credit and emails the customer. No integrations needed.

Starts from a form

Starts from a form page: customer care opens the Log a complaint form (/f/<id>); each complaint starts the workflow.

Someone fills in a form to start it: the workflow start form (Run dialog in the app, or your own portal posting to the API) or a standalone form page (/f/<id>) whose Form submitted trigger starts the workflow. People complete User Task forms along the way.

The flow

Step by step

  1. 1

    Log it

    Customer care picks the customer (contact, tier and account manager fill in) and records what happened and who handles it.

  2. 2

    Priority and SLA

    The Complaint priority decision table sets the priority, resolution hours and call-back time from tier and category; the run gets an SLA.

  3. 3

    Acknowledge

    The complaint is logged in the Complaints table and the customer gets an acknowledgement with the target date.

  4. 4

    Account manager

    High-priority complaints and escalations email the account manager.

  5. 5

    Resolve or escalate

    The handler resolves it or escalates to the team lead; unanswered tasks escalate to the handler's manager.

  6. 6

    Close the loop

    Resolving records the root cause and goodwill credit and emails the customer the outcome.

Complaint handling — A complaint is logged against a customer: priority and SLA from tier and category, the customer is acknowledged, and the handler resolves or escalates it to the team lead. The same canvas you get in the designer after installing.

Forms

The start form and the task forms

People start it from a form page (/f/<id>) with its own header, theme and buttons; submitting it starts the workflow. User Tasks show their fields and outcome buttons to the assignee.

Form page · /f/<id>

Log a complaint

2-column grid · own header and theme · Its own page: share the link or open it on a tablet

Customer * customer · lookup
Company company · text
Tier tier · text
Contact contact_name · text
Contact email contact_email · emailname@company.com
Account manager account_manager · text
Account manager email account_manager_email · emailname@company.com
Category * category · choice
DeliveryProduct qualityBillingServiceStaff conductWebsite or app
Received via * channel · choice
PhoneEmailChatSocial mediaIn person
Summary * summary · text
What happened * details · textarea
Order or invoice number order_ref · text
What the customer wants desired_outcome · choice
RefundReplacementCreditApologyExplanationOther
Complaint handler * handler · user
Escalation contact * team_lead · user
Log complaint

User Task

Resolve the complaint

{{priority}} complaint: {{company}} · {{form.summary}} · 2-column grid · own header and theme

Root cause * root_cause · choice
Carrier delayWarehouse errorProduct defectBilling errorProcess gapStaff conduct+2
I spoke to the customer * customer_contacted · boolean
Resolution (sent to the customer) * resolution · textarea
Goodwill credit goodwill · currencyPrefilled: 0
Internal note internal_note · textarea
ResolveEscalate

User Task

Escalated: team lead resolves

Escalated {{priority}} complaint: {{company}} · {{form.summary}} · 2-column grid · own header and theme

Root cause * root_cause · choice
Carrier delayWarehouse errorProduct defectBilling errorProcess gapStaff conduct+2
I spoke to the customer * customer_contacted · boolean
Resolution (sent to the customer) * resolution · textarea
Goodwill credit goodwill · currencyPrefilled: 0
Internal note internal_note · textarea
ResolveReturn to handler

From your code

Start a run over the API

Every workflow can be started over REST, MCP or the CLI, whatever its trigger, with the sample input below. Runs start straight away on the published version; replace <workflow id> with the id the install created.

REST

shell
curl -X POST "$USERTASKS_URL/api/v1/workflows/start" \
  -H "Authorization: Bearer $USERTASKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"workflow_id":"<workflow id>","variables":{"customer":"C-10034","contact_name":"Tom Becker","contact_email":"tom.becker@example.com","category":"Delivery","channel":"Phone","summary":"Gloves delivery missed for the third time","details":"The weekly delivery of nitrile gloves did not arrive on Tuesday; the clinic had to buy locally at retail prices.","order_ref":"SO-48812","desired_outcome":"Credit","handler":"$owner","team_lead":"$owner"}}'

CLI

shell
usertasks workflows inputs <workflow id>          # the start form: keys, types, required
usertasks workflows run <workflow id> --input customer=C-10034 --input contact_name="Tom Becker" --input contact_email=tom.becker@example.com --input category=Delivery … --wait

What's included

8 assets, ready to adapt

TypeNameDetails
Email templateComplaint acknowledgementSent to the customer as soon as the complaint is logged.
Email templateComplaint alert for the account managerSent to the account manager for high-priority complaints and escalations.
Email templateComplaint resolvedSent to the customer when the complaint is resolved.
Data tableComplaintsEvery complaint: customer, category, priority, SLA, who handled it and how it was resolved.
Data tableCustomersA simple CRM: each customer account with its main contact, tier and account manager. The complaint form looks customers up here.
Decision tableComplaint priority7 rules — Priority and SLA hours by customer tier and category. First matching rule wins; the last rule is the default.
formsLog a complaintCustomer care logs a complaint against a customer account; the customer's details, tier and account manager fill in from the Customers table.
WorkflowComplaint handling33 steps — A complaint is logged against a customer: priority and SLA from tier and category, the customer is acknowledged, and the handler resolves or escalates it to the team lead.

Complaints · 2 sample rows

ReferenceAccountCompanyContact emailTierCategorySummaryPriorityReceivedResolve byAccount managerStatusRoot causeResolutionGoodwill creditResolved

Customers · 7 sample rows

Account numberCompanyMain contactContact emailPhoneTierAccount managerAccount manager emailRegionCustomer sinceOpen complaintsActive

Requirements

What you connect it to

Credentials never travel in a package. The install wizard asks for what your environment must provide, or installs it incomplete until you finish setup.

Needs

  • Email (optional) — Email delivery configured for the instance (EMAIL_PROVIDER), used for notifications.

After installing

  1. Replace the sample rows in Customers with your accounts (or import a CSV): account number, company, contact, tier and account manager.
  2. Review the Complaint priority decision table: priorities, SLA hours, call-back hours and which cases alert the account manager.
  3. Edit the Complaint acknowledgement and Complaint resolved email templates with your tone and signature.
  4. Optional: set EMAIL_PROVIDER so customer emails are delivered (the console provider logs them).

Asked for on install

Nothing: it installs complete.

Install

Install it in your workspace

Works on UserTasks cloud and on any self-hosted instance. Installing creates the assets above; nothing runs until you complete setup and start it.

In the app

  1. Download complaints-tracker-1.0.0.utpkg.
  2. Open Automations → Packages and drag the file onto the page (or choose Import package). Browse gallery there lists every gallery package without downloading by hand.
  3. Pick the file. The wizard verifies the checksum, every file hash and the signature, and shows the readme.
  4. Review the changes (what is created) and the data rows.
  5. Fill in the requirements, or tick Keep incomplete and finish later with Complete setup.
  6. Done: the workflow is published and active once setup is complete.

With the CLI

shell
curl -fLO https://usertasks.com/gallery/complaints-tracker-1.0.0.utpkg
usertasks packages inspect complaints-tracker-1.0.0.utpkg       # offline: checksum, hashes, signature
usertasks packages install complaints-tracker-1.0.0.utpkg --dry-run
usertasks packages install complaints-tracker-1.0.0.utpkg       # prompts for each requirement
usertasks packages install complaints-tracker-1.0.0.utpkg --keep-incomplete --yes   # in CI; finish with:
usertasks packages complete complaints-tracker -f values.yaml

Verify the download

File SHA-256
4496c56f959fd9aa46281f0d36f84e2a8a89f6f16276973ad0d8bfd396ec628a
Package checksum (what is signed)
sha256:840d925a7a5c376da331c84a4ec92c1fe9c8dbceabad0e3685eed9b26f98e2e9
Signer
Unsigned preview build — compare the SHA-256 above

shasum -a 256 complaints-tracker-1.0.0.utpkg should print the file SHA-256. How gallery packages are signed.

Versions

Version 1.0.0

  1. v1.0.02026-10-28First release.

Installing a newer version upgrades in place: local credentials and requirement values are kept, and changes you made are flagged first. How packages work

More packages

Related

Browse the whole gallery