Deutsch Demo shop Store

Marc's complaint form takes photos and already knows the order

Eight months after the purchase, an espresso machine starts dripping. At Marc's shop the complaint still does not arrive as a one-line email, but with photos, the serial number and the order it belongs to.

The job

The situation

Marc sells espresso machines and grinders. Complaints used to arrive by email: "machine is dripping", without an order number, a photo or a serial number. Three emails went back and forth before it was clear whether it was transport damage or a warranty claim.

Where the built-in tools stop

Shopware's contact form has no upload, and which order is meant is only in it if the customer writes it in. A form with fixed fields asks the same for a fault as for transport damage.

This is what the form looks like

Complaint about the order
Type of problem *
  • Transport damage
  • Fault
  • Wrong product
  • Part missing
Product concerned *
Duo espresso machine, stainless steel
Requested solution
Repair
Serial numberonly for "fault"
SD-4471-0932
Faulty sinceonly for "fault"
1 October 2026
Photo of the damage *

Choose an imagejpg, png, webp up to 10 MB

Photo of the rating plateonly for "fault"

Choose an imagejpg, png, webp up to 10 MB

Please keep the packaging until we get back to you.only for "transport damage"

Photo of the packagingonly for "transport damage"

Choose an imagejpg, png, webp up to 10 MB

Description of the fault *
For a week it has been dripping below the brew head.

Serial number and "Faulty since" share a row that carries the condition; the packaging is only asked for with transport damage.

What matters here

your-shop.example/admin
FormsCancelSave
FormStructureElement
Elements
#NameTypeWidth
1.1Type of problemSingle choice (radio)1/1 - full row
1.2Row 2Row--
1.2.1Product concernedSingle-line text (text)1/2
1.2.2Requested solutionDropdown menu (select)1/2
1.3Row 3Row--
1.3.1Serial numberSingle-line text (text)1/2
1.3.2Faulty sinceDate (date)1/2
1.4Row 4Row--
1.4.1Photo of the damageImage upload (file)1/2
1.4.2Photo of the rating plateImage upload (file)1/2
1.5NoticeInfo message (blue)1/1 - full row
1.6Photo of the packagingImage upload (file)1/1 - full row
1.7Description of the faultMulti-line text (textarea)1/1 - full row

Create top-level element

  • Fault details per problem type

    The single choice "Type of problem" is the source of three conditions. With "Fault", the serial number, the date and the photo of the rating plate appear; with "Transport damage", the photo of the packaging and a notice. Whoever picks "Part missing" sees none of them.

  • Three photos, three fields

    An image upload takes exactly one file. So there are three fields for damage, rating plate and packaging, each with its own label, and the entry says which photo shows what. Only real images are accepted: jpg, jpeg, png, gif, webp and avif.

  • One condition for the whole row

    The condition does not hang on the serial number and the date one by one, but on the row that holds both. When the row is hidden, the server does not check the fields in it either, and they are missing from the submission.

  • Where it sits

    Order assignment, display mode "Collapsed button": below the line items of every order sits "Order request" with the "Send request" button. An order shows exactly one form; at Marc's shop it is this one.

    The three routes to the page

  • What comes back

    Context "order" with its number, plus order date, amount and currency. Type of problem, serial number and requested solution sit in columns of their own, each photo as a link into the media. The same links appear in the email to complaints@your-shop.example.

    History, context and CSV

How to set it up

The "Form" tab holds the name, the "Confirmation" and the "Email notification". Marc's confirmation is a "Success message (green)" saying when he will get back. The form sends the customer no email; they see the confirmation as soon as they have submitted.

your-shop.example/admin
FormsCancelSave
FormStructureElement
Base data
Complaint
Active
Confirmation
Success message (green)
Thank you, your complaint has arrived. We will get back to you within two working days.
Email notification
complaints@your-shop.example
Active
  1. 01

    Switch on the "Email notification"

    Under "Email notification" sit "Active" and the "Email address", one per form. The email names the form, the customer, the order as its context and every entry; the photos appear in it as links.

    TechnicalemailStatus, emailRecipient

    Herecomplaints@your-shop.example

  2. 02

    Set "Allowed file extensions" and "Max. file size (MB)"

    In the element editor under "Options", every image upload carries the extensions and the size. The file dialog then only offers those extensions, and the form does not accept a file that is too large.

    TechnicalallowedExtensions, maxFileSize

    Herejpg,png,webp · 10

  3. 03

    The "Priority" of the order assignment

    Under Integration > Orders, Marc attaches the "Complaint" form without a rule. An order shows the form of the active assignment with the highest priority whose rule matches; an older assignment with 10 steps back behind 20.

    Technicalpriority

    Here20

  4. 04

    "Display mode" in the "Order detail page" card

    In the plugin configuration, "Display mode" decides how the form appears on the order. "Collapsed button" shows the heading and the button first, and the form opens below.

    TechnicalorderDetailDisplayMode

    HereCollapsed button

Three image fields at 10 MB each: at most 30 MB of photos per complaint. The export has 14 fixed columns and 9 columns for the fields, 23 in all. Ordered on 12 February 2026, complaint on 14 October 2026: both dates sit in the same row, under "Kontext-Daten" and "Erstellt am", 244 days apart.

All settings in the manual

Questions about the complaint form

Do I need a plugin for complaints?

For photos and the link to the order, yes. Shopware's contact form has no upload and knows no order. With the plugin you build the form in the administration and attach it to the orders in the customer account, without a template.

How many photos can the customer upload?

One per image upload field. Whoever needs more photos adds more fields, like the three here for damage, rating plate and packaging. The limit under "Max. file size (MB)" applies per file.

Which image formats does the field take?

jpg, jpeg, png, gif, webp and avif, and it checks that the file really is an image. Under "Allowed file extensions" you narrow it down further, to jpg,png,webp for instance. For a receipt as a PDF you use the file upload.

How does the form know the order?

From the order assignment. In the customer account it sits on the order, and the submission carries order number, order date, amount and currency as its context. The server checks that the order belongs to the signed-in customer and the sales channel.

Can a second form sit on the order?

No, an order shows one form: the one of the active assignment with the highest priority whose rule matches. Whoever wants general queries alongside complaints adds them as another type of problem to the same form, or separates them with a rule, by customer group for instance.

What about guest orders?

The link to the order only exists for signed-in customers. For guest orders you put a second form with a field for the order number as a block on a service page; there it arrives without a context.