Egenverk Customer Hub · Documentation

Complaints and AI

WP 6.2+PHP 7.4+Updated

The customer's flow

The customer files a complaint under Complaints in My Account, or as a guest on the page with [wcch_claim_form]. The form has four steps: Item, The fault, Attachments and Send. The chosen reason reveals the fields that belong to it, and the form also works without JavaScript.

  • Attachments can be JPG, PNG, WEBP or PDF, by default at most 5 files and 8 MB per file.
  • Attachments are stored outside the public paths and can only be downloaded by someone with permission.
  • An order line can only have one open complaint at a time.

The case gets a reference of the form REK-YYYY-NNNNNN, and the customer gets an acknowledgment with the reply time you have set.

Statuses

StatusMeaning
SubmittedNobody has started the review.
In reviewThe case is being reviewed.
Return bookedA return is booked. When the carrier reports the return delivered, the case goes back to In review.
ResolvedResolved. Can be reopened.
RejectedRejected, with the reasoning emailed to the customer.

Handling complaints

Under Customer Hub → Complaints each complaint opens in a panel with the order and customer details, the attachments, the conversation and the log. The queues are Needs a decision, Awaiting reply, On the way back, All open and Snoozed.

  • The case can be assigned to a handler. The assigned person sees their open complaints as a count by the menu. Who can be chosen is set in the Handlers list under Settings → Complaints.
  • Remind me… parks the case for 1, 3 or 7 days, until a date or until the customer replies.
  • Refund item… and Compensation… wait five seconds with Undo before anything is sent to the payment method. Book a return…, Reject and Mark resolved are done from the same panel.
  • Bulk actions in the list: Begin review, Remind me…, Lift the reminder, Mark resolved, Assign handler and Reject.
  • Export CSV downloads the list.

Under Settings → Complaints:

SettingDefaultWhat it does
Enable complaintsOnShows the complaint form to customers and accepts submissions.
Forward complaints by emailOffEmails each complaint, with attachments, to the staff address.
Staff email addressEmptyWhere forwarded complaints go. Empty = the site admin email.
Reply time promised in the acknowledgment — shortest / longest (working days)2 / 5The reply time in the customer's acknowledgment. 0 as the shortest leaves the sentence out.
Max attachments per complaint5 (1–20)
Max file size (MB)8 (1–64)Per file.
Pre-contract reklamation noticeOffA notice at checkout and in the order emails about the right to complain, linking to the form.
Complaint address (gatuadress)EmptyAdded to the notice.

Photo check

Every image the customer sends gets an origin verdict: Camera photo, Unknown origin or AI-generated. The verdict is made on the server from the file's metadata, and nothing is sent to any service.

  • Ask for a new photo fills the reply box with a ready request for a new image. You edit the text under Customer texts. Nothing is sent until you send the reply.
  • Compare with product image shows the product's catalogue image beside the customer's photo in the image viewer.

Conversation

Replies are written and sent from the case, for complaints and withdrawal cases alike, with Reply templates and Signature in complaint replies from Settings → Mail & templates. A sent reply can be undone for 30 seconds. The customer replies in My Account, through the link in the email or, with Postmark, by replying to the email.

For replies by email, set up Inbound mail (Postmark) under Settings → Integrations:

SettingDefaultWhat it does
Receive replies by e-mailOffThe emails get a reply address per case on the inbound domain. Switch it on only once Postmark's test delivery answers 200.
Inbound domainEmptyThe subdomain whose MX points at Postmark.
Webhook secretEmptyA long random string. Once saved, the webhook addresses to paste into Postmark are shown.
Only accept the webhook from Postmark's IP addressesOnThe second lock beside the secret. Behind a proxy the visitor's IP address must be restored, or everything is refused.
Spam score threshold5Mail scored at or above this is kept as spam instead of entering the case. 0 = never.
Postmark server token, Postmark message streamEmptyUsed to lift the suppression on an address that bounced, so Send again reaches it once corrected.

Email that cannot be matched to a case ends up under Customer Hub → Inbound e-mail, in the tabs Unmatched, Spam, Auto-replies and bounces and In a case. From there you can link an email to the right complaint.

AI advice

The AI features call OpenAI or Anthropic with the store's own API key. They are off from the start and only appear when Enable AI advice is on and at least one provider has a key.

On a complaint the AI card shows an assessment (recommended action, assessment, company position, next step and risks) and a draft reply.

  • Use as reply (or Alt+A) fills in the reply box. The AI never sends anything to the customer; you read, edit and send.
  • Generate again produces a new draft. The old one stays as an earlier draft.
  • In the chat you can ask follow-up questions and attach up to four images per question.
  • The reject, book-return and compensation dialogs can propose a reasoning or a message, which you choose to use or not.
  • New memory + saves a store guideline based on the case.
  • A handler can pick the provider in the card; otherwise the default provider is used.

On a withdrawal case the same chat is available, but no assessment: a withdrawal needs no reason and is not assessed.

An assessment is stored per complaint. A new call is only made when the material or the AI settings have changed, or when you choose Generate again. Each handler can make at most ten new AI calls a minute. Every call is logged on the case with provider, model, token count and whether pseudonymisation was on.

AI settings

Under Settings → AI advice:

SettingDefaultWhat it does
Enable AI adviceOffGenerates an assessment when a complaint is opened.
Shejtan modeOffMakes the AI sceptical of the customer's account and readier to ask for evidence, always within the law. Applies to complaints, can be changed per case in the AI card and is never shown to the customer.
Default providerOpenAIUsed until a handler picks their own in the card.
OpenAI API key, Anthropic API keyStored encrypted and never shown again in the form.
OpenAI model, Anthropic modelgpt-6-sol, claude-sonnet-5Pick from the list or enter your own model id.
Max tokens2000Reasoning models always get at least 16,000.
Temperature0.2Lower is more literal.
Timeout (seconds)60For one whole assessment or question.
Attach the complaint's picturesOnSends up to the four most recent images, downscaled.
Pseudonymise customer dataOnReplaces names, email, phone, street address, company name, postcode and personal identity number before anything is sent. The order number stays. Images are not altered.
Nightly distillationOffAt 03:00 the AI reviews the complaints closed since the last run, when at least five have closed, and proposes guideline changes. A proposal applies only once someone approves it.
System promptThe default textYour own text replaces the default. {RULES} is replaced with the legal references, guidelines and terms.
Terms pageWooCommerce terms pageThe terms are sent with every assessment and question.
Documents the model may readPDF, TXT, MD or DOCX, at most 10 MB per file, that the AI can read when needed.

The same page holds the store's guidelines and the closed list of legal references. The AI may only cite references on the list.

Under Settings → Integrations, DB Schenker — give the AI access and the matching box for the payment extension decide whether the AI may see the order's shipping and payment data. Both are on by default.

The API keys can also be set in wp-config.php, and then they take precedence over the settings page:

define( 'WCCH_OPENAI_API_KEY', '...' );
define( 'WCCH_ANTHROPIC_API_KEY', '...' );

What is sent to the provider is described in Data and privacy.

Resources