Skip to content

Review Process

The Review Process feature manages how and when customers are invited to leave reviews after completing an order.
It determines which product(s) are eligible, prioritizes certain categories, and selects the review method (e.g. Trustpilot, internal system).


Configuration

The review invite distribution is managed in the configuration of the brekz_productreviews module.

  • Make sure the correct shop is selected before adjusting the ratios.
  • In the form provided by the module, fill in what percentage of invites should go to which review site.
  • A higher number means a larger share of invites goes to that provider.

Example

If configured as follows:

  • Trustpilot = 80
  • Facebook = 4
  • Google = 4
  • Prijsvergelijk = 4
  • Nederland Review = 4
  • Kieskeurig = 4

Then 80% of all review invites will go via Trustpilot, while each of the other sites receives ~4%.


Key business Rules

  • Review invites are only triggered when an order status updates to PS_OS_PAYMENT and the order is valid.
  • Running the review:invite command multiple times for the same order never sends duplicate invites.
  • Every invite must be linked to a valid product from the order.
  • A Customer ID + Product ID combination can only receive one invite ever (tracked in ps_trustpilot_customer_product).
  • If a product cannot be resolved from the order, the invite process stops.
  • Review methods are chosen randomly with configurable weighted percentages per shop.
  • Trustpilot invites allow both product and shop reviews; other methods usually allow only shop reviews.
  • All invites are delayed by 14 days (handled by the Beanstalk queue system).
  • Before sending, the system checks if the customer has a Copernica opt-out; if opted out, no invite is sent.
  • Console commands handle logic:
    • review:invite (entry point & selection)
    • review:invite-generic-mail (Google, Facebook, Prijsvergelijk, Nederland Review, Kieskeurig)
    • trustpilot:send-invite-mail (Trustpilot shop invite)
    • trustpilot:send-product-review-invite (Trustpilot product invite)
  • Every invite attempt is logged in ps_trustpilot_customer_product for auditing and deduplication.

Process flows

  1. Order is paid (status = PS_OS_PAYMENT).
  2. Review process is triggered (review:invite).
  3. System checks if customer/product combination is eligible.
  4. Invite is scheduled with a 14-day delay in the queue.
  5. After delay, review method is chosen (weighted random).
  6. Invitation email is sent via selected provider.
  7. Customer submits a review (product and/or shop).
  8. Review is imported into internal tables during daily run.

Involved Services

Service Responsibility
brekz-prestashop Holds product/category priority rules and method weighting configuration and provides and gatheres data from the order
Trustpilot Sends product and shop review invitations; handles external collection and API import.
Google Reviews Receives generic shop review invitations via email templates.
Facebook Reviews Receives generic shop review invitations via email templates.
Prijsvergelijk Receives generic shop review invitations via email templates.
Nederland Review Receives generic shop review invitations via email templates.
Kieskeurig Receives generic shop review invitations via email templates.
Copernica Manages opt-outs (unsubscribe page, customer profile updates) and can distribute invite emails.

Process flows

  1. Customer places

Review process Subfeatures

Which products sends a invite and which reiew method is the user prompted for This diagram describes in what way is decided for which product a review invitation is sent, and which review method is the user for will be invited for
flowchart TD
    A[Order placed] --> B[Status updated]
    B --> C[Order paid]
    C --> D[Review process is started]
    D --> E{Does the order exist?}
    E -- yes --> H[Loop through orderlines:]
    E -- no --> F[End review process]
    H --> I{Has this product already been reviewed by this user?}
    I -- yes --> J[skip] --> U
    I -- no --> K[Add to normal product list]
    K --> L{Does the product, or it's category, have review-priority?}
    L -- yes --> M[Add it to the priority list]
    M --> N
    L -- no --> N{Is this the last product?}
    N -- no --> U[Get the next product]
    U --> I
    N -- yes --> O{Does the priority listhave products}
    O -- yes --> P[Grab a random product from the priority list]
    P --> S[Send invitation via Trustpilot]
    S --> W[User may submit product and shop review]
    W --> X[Reviews are added to corresponding tables via daily run commands]
    O -- no --> Q[Grab a random product]
    Q --> T[Randomly select a possible method via weights set in perstashop admin ]
    T --> Y{Is the selected method trustpilot?}
    Y -- yes --> S
    Y -- No --> V[Send invitation for selected method]
    V --> Z[User may submit shop review]