review-automation / magento2-reviews
Configurable Magento 2 review requests, customer feedback, product review emails and historical-order campaigns.
Package info
github.com/will-wright1/magento-reviews-app
Type:magento2-module
pkg:composer/review-automation/magento2-reviews
Requires
- php: ^8.1
- magento/framework: ^103.0
- magento/module-backend: ^102.0
- magento/module-catalog: ^104.0
- magento/module-config: ^101.0
- magento/module-customer: ^103.0
- magento/module-email: ^101.0
- magento/module-review: ^100.0
- magento/module-sales: ^103.0
- magento/module-store: ^101.0
- magento/module-ui: ^101.0
- symfony/console: ^5.4 || ^6.4 || ^7.0
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-22 13:10:14 UTC
README
A standalone Magento 2 extension for post-purchase feedback, Google and Trustpilot review invitations, product review requests and historical-order campaigns.
- Composer package:
review-automation/magento2-reviews - Magento module:
ReviewAutomation_Reviews - PHP: 8.1 or later in the PHP 8 series; use the PHP version supported by your Magento installation.
- Platform: Magento 2.4 / Adobe Commerce dependency ranges are declared in
composer.json. Full runtime compatibility must be checked on your exact Magento release before deployment. - Licence: MIT.
Extracted from the custom Vanimal and 4x4AT implementations into one configurable package. No client credentials, order records or production configuration are included.
Features
| Feature | Behaviour |
|---|---|
| Satisfaction email | Sent after fulfilment; optional single reminder for non-responders |
| Company reviews | Google or Trustpilot, with optional stable split or Gmail targeting |
| Fair invitations | Happy, unhappy and non-responding customers receive the same scheduled company invitation |
| Product reviews | Links to Magento product review forms for purchased, reviewable products |
| Feedback inbox | Private feedback, optional rating, internal notes and resolved status |
| Suppression | Customer unsubscribe, order-view button, order-grid bulk action and suppression grid |
| Historical campaigns | Preview a date window, create a daily queue allowance, pause or cancel batches |
| Branding | Store-specific business name, optional HTTPS logo, accent colour and editable email templates |
| Operations | Store allowlist, daytime sending window, monthly campaign limit and admin test email |
Sending is disabled by default. An empty allowed-store list also blocks sending. The test-email button sends only to the logged-in administrator and does not change the customer queue.
Installation
After publishing a tagged release on Packagist, run from the Magento root:
composer require review-automation/magento2-reviews:^0.1 bin/magento module:enable ReviewAutomation_Reviews bin/magento setup:upgrade bin/magento setup:di:compile bin/magento cache:flush
Deploy static content using your normal production deployment process. Magento cron must be installed and running. Use your existing Magento email transport; no particular SMTP extension is required.
For a local staging installation before publication:
composer config repositories.review-automation path '/absolute/path/to/magento reviews app' composer require 'review-automation/magento2-reviews:@dev'
Then enable the module and run the Magento commands above. Do not install a second copy under app/code when Composer already provides the module.
Configuration
Open Stores → Configuration → Review Automation → Review Automation.
- At Default Config scope, choose the allowed storefronts under Order Filters. Keep marketplace-only stores excluded.
- Set sender and notification addresses, company review URLs and branding. Empty sender values inherit Magento's general contact identity; business name falls back to the store or sender name.
- Send a test email to the logged-in administrator. Its random token is intentionally not a live customer token.
- Check the queue and campaign settings, then enable sending at Default Config scope and each relevant store scope. Default scope is the global cron switch; stores can opt out individually.
The store allowlist is controlled at Default Config scope. Timing, branding, addresses, platform selection, enablement and suppression settings can vary by store. Unsubscribes and the calendar-month campaign allowance apply to a customer email across store views. The monthly limit counts order campaigns, not every email in a campaign. A historical batch's daily allowance controls queue entries, not total outbound messages.
| Default | Value |
|---|---|
| Satisfaction delay | 7 days after the latest shipment, or completion update for shipment-less complete orders |
| Satisfaction reminder | 3 days after the initial email if no satisfaction response |
| Company invitation | 96 hours after the initial email, independent of satisfaction |
| Company reminder | 5 days after the company invitation if no recorded platform visit |
| Product request | 14 days after the company invitation, if Magento product reviews are enabled |
| Token expiry | 60 days from queue creation; opt-out links remain usable after expiry |
| Organic order window | 60 days from fulfilment |
| Sending window | 08:00–19:00 in each store's configured timezone |
| Campaign limit | One order campaign per customer email per UTC calendar month |
The module processes complete orders. Historical campaigns bypass the organic age and initial delay checks, but still honour store enablement, unsubscribe, sender validity, refunds, order completeness, sending windows, token expiry and monthly limits. Cron sends at most 50 messages per run. The first message waits at least five minutes after queue insertion.
Administration and templates
Open Marketing → Review Automation for Review Queue, Customer Feedback, Suppression List and Review Booster. Admin ACL resources allow access to be restricted by role. Manual sends require a confirmation form and honour the same guard checks as cron; they bypass scheduled delays only.
Emails can be copied through Marketing → Email Templates and selected in configuration. They use __PLACEHOLDER__ substitutions; preserve required placeholders when editing. Common placeholders are __BRAND_NAME__, __BRAND_HEADER_HTML__, __ACCENT_COLOR__ and __FIRSTNAME__. Each default file shows its message-specific placeholders. Custom {{var ...}} directives inside these templates are not supported; only the internal passthrough template uses Magento directives. Missing or unresolved templates fail rather than sending broken content.
Email GET links do not record satisfaction or unsubscribe customers. Those actions require a form POST and form key. Public-platform redirects record a visit, which may include automated scanner visits; this is not proof of a published review. There is no Google or Trustpilot review-import API integration.
Existing installations
Do not replace the client-specific modules by renaming their folders. Preserve opt-outs and already-sent links using the explicit migration procedure in Migration. Migration is never run automatically by setup:upgrade.
Development and validation
composer validate --strict python3 tools/check.py php tests/run.php
These checks run without Magento dependencies and cover package wiring and isolated logic. GitHub Actions runs them on PHP 8.1–8.5. They do not substitute for Magento schema installation, dependency compilation, browser checks or a real email transport test.
Use Testing for the staging acceptance procedure and tools/magento-smoke.php for read-only runtime construction checks. This workspace has no installed Magento runtime or database; end-to-end Magento acceptance has not been executed here.
See Publishing for GitHub Desktop and Packagist release steps, and Changelog for the initial extraction.
Operational limits
Email delivery and database updates cannot be one atomic transaction. The shared send lock and persisted timestamps prevent normal concurrent or repeated sends, but a process crash after SMTP accepts a message and before its timestamp is saved can still cause a retry. Review mail transport logs before retrying an uncertain delivery. A send already accepted by the transport cannot be recalled by a simultaneous unsubscribe.
Customer names, emails, order references and feedback are stored in the module tables. Apply your store's retention, access and deletion procedures to them. No automatic retention or customer-erasure integration is provided in this release.