
Verified Delivery Reviews for OpenCart — reviews only after the parcel is received
The review request goes to the buyer not right after checkout but once the parcel has actually been picked up: by the waybill status of Nova Poshta, Ukrposhta, Meest or ROZETKA Delivery from our shipping modules for OpenCart, and for pickup or courier orders — by the “Complete” order status. One e-mail per order in the buyer’s language, five stars under every item, a form without an account, the mark “The buyer received the item · Nova Poshta” next to the review, unsubscribe and a report. OpenCart 4.x, 3.x and 2.3. The base version is free, Pro adds Viber/SMS via TurboSMS, a Telegram bot, photos in reviews, your own texts and CSV. Perpetual licence.
- Compatibility
- OpenCart 4.0.2 – 4.1.x, 3.0.x and 2.3.0.2 (tested on 4.1.0.3, 4.0.2.3, 3.0.5.0 and 2.3.0.2) · PHP 7.0+ (live runs on PHP 8.3 and 7.0) · mysqli and pdo database drivers · waybill statuses from our Nova Poshta, Ukrposhta, Meest and ROZETKA Delivery modules for OpenCart
- Version
-
v1.0.1 (OpenCart 4)
v1.0.1 (OpenCart 3.x)
v1.0.1 (OpenCart 2.3) - Licence
- one site, lifetime
- Trial
- 7 days, no card, one per site
- Updated
- September 2026
What Free has,
and what Pro adds
The free version works with no time limit. Pro adds the rest of the features in the table.
What it looks like

The trial starts when you ask
A fresh install is the free version, nothing switches on by itself. The “Try Pro for 7 days” button → e-mail → the key right in the window and by e-mail.

One key — one site
Moving the store? Unbind the licence on the old domain and activate it on the new one yourself. If our server is unreachable, Pro keeps working for 14 more days. For studios — keys for 5 or 25 sites, or unlimited.
Technical requirements
OpenCart 4.0.2 – 4.1.x (tested on 4.1.0.3 and 4.0.2.3), 3.0.x (tested on 3.0.5.0) or 2.3.0.2. OpenCart 4.0.0/4.0.1 and 3.0.3.x were not tested separately.
PHP 7.0+: the 2.3 build ran on PHP 7.0, the others on PHP 8.3. MySQL / MariaDB, mysqli and pdo drivers.
Waybill statuses come from our shipping modules for OpenCart: Nova Poshta, Ukrposhta, Meest, ROZETKA Delivery. Other developers’ modules are not read — use the order status trigger for them.
Status updates. If the carrier module does not update the waybill status (for example, its cron is off), the request goes out after the next update or after the “The buyer received it” button. Ukrposhta is polled by the module itself with the key of your Ukrposhta module.
Runs. OpenCart 4 — a job in Extensions → Cron Jobs (hourly, when the hosting crontab calls the store’s cron); all versions — a cron URL with a key for the hosting crontab; without a crontab — when the admin is opened, up to 10 requests at a time.
Mail uses the store’s mail settings (System → Settings → Mail). There is no List-Unsubscribe header: OpenCart’s mail class does not allow custom headers, so unsubscribing is a link in the e-mail text.
OpenCart 2.3: the stock installer needs FTP, so the contents of the upload/ folder are uploaded by hand.
Version history
Review form: the product name and photo now sit inside the card instead of on its top border.
For OpenCart 4.x, 3.x and 2.3: review request after confirmed delivery (Nova Poshta, Ukrposhta, Meest, ROZETKA Delivery, “Complete” status), one request per order, pause per buyer, quiet…
Frequently bought with Verified Delivery Reviews for OpenCart
4 modules in one order — 40% cheaper than separately


Nova Poshta Premium — a Nova Poshta module for OpenCart 2.3, 3.x and 4.x

LiqPay — Card Payments for OpenCart 2.3, 3.x and 4.x

Telegram notifications and Viber/SMS for customers for OpenCart
Full module description
Verified Delivery Reviews for OpenCart is a module that asks for a review when the buyer already has the item in hand. On marketplaces a seller review can be left right after checkout, before anything arrives — and sellers spend months disputing ratings for cancelled orders. On your own store you can do better: ask only those who picked up the parcel, and show it next to the review.
The module watches the waybill status that our shipping modules for OpenCart already keep — Nova Poshta, Ukrposhta, Meest and ROZETKA Delivery — and a few days after the parcel is received it sends one e-mail per order with five stars under every item. A click on a star opens a short form without an account, the review lands in the standard Catalog → Reviews, and on the product page it carries the mark “The buyer received the item · Nova Poshta”. Orders without a waybill — pickup, courier — go by the “Complete” status.
Running WordPress? The same logic exists for WooCommerce — Verified Delivery Reviews for WooCommerce.
What the buyer sees
- One e-mail, when the parcel is already home. By default 3 days after receipt, so the buyer has time to try the item; nothing is sent at night (21:00 to 9:00 Kyiv time).
- Stars right in the e-mail. Five stars under every item: a click opens the form with the rating already chosen. The e-mail goes through your store’s mail settings and in the language of the order.
- A form without an account. A personal link valid for 60 days: stars, a few words about the item and a display name. Text is optional — a rating is enough (or make text required).
- “Don’t ask me for reviews”. A link in every e-mail; unsubscribing is a button on the page, so mail scanners that open links do not unsubscribe anyone.
The review is a regular OpenCart review: it appears in Catalog → Reviews, where you approve it as usual. The module adds the green mark “The buyer received the item” and, if you like, the delivery service. OpenCart 4 recalculates the product rating right after approval. If review notifications are on in your store, you get an e-mail.
What the admin gets
Extensions → Extensions → Modules → Verified Delivery Reviews. Seven tabs: “Report”, “When to ask”, “Messages”, “Form and mark”, “Requests”, “Schedule”, “Licence”.
- Trigger. “Waybill status, orders without a waybill — by order status” (default), “waybill status only” or “order status only”. Delivery services are ticked on and off, and you see whether their module was found.
- “Received” statuses. Until you choose any, the module takes only “Complete” from the store’s “complete” statuses — without “Shipped”, because a shipped parcel has not been received yet. Add “Shipped” only if waybills are tracked by our carrier modules.
- Timing and anti-spam. Delay after receipt, quiet hours and time zone, pause per buyer, skipping items already reviewed, minimum order total, link lifetime in days, requests per run.
- Form and mark. Moderate all, auto-publish 4–5 stars or all; required text; your own mark text and the delivery service in it.
- Test e-mail to yourself. Enter your address and language — a sample e-mail comes only to you, nothing goes to buyers.
Panel on the order page. Where the request is now (scheduled, sent, reviewed, skipped and why), the “The buyer received it — schedule” and “Send now” buttons, and a tracking number field for Ukrposhta. The “Requests” tab lists all requests with a search by order number.
Report. Parcels received, requests sent, form opened, review left, average rating — by source (Nova Poshta, Meest, ROZETKA Delivery, Ukrposhta, order status, confirmed by a manager) and with the reasons a request did not go out: the buyer unsubscribed, the parcel was not received, the buyer was asked recently, the order was cancelled.
Pro: Viber, SMS, Telegram, photos and your own texts
- Viber / SMS via TurboSMS. Your turbosms.ua account and your approved sender names: Viber first, SMS if the number has no Viber (or Viber only, or SMS only). A “Check the connection and balance” button. Messages are paid to TurboSMS at its rates.
- Telegram. A bot from @BotFather is connected with the “Connect the bot” button (HTTPS required). On the order success page the buyer taps “Get it in Telegram” — the request arrives in the chat with a “Leave a review” button. The /stop command or blocking the bot unsubscribes. The bot does not write to people who have not started it: that is how Telegram works.
- Photos in reviews. Count and size limits are configurable; JPEG, PNG and WebP are checked by file content, not just by extension. The gallery appears under the review after approval.
- Your own texts. E-mail subject, heading and text, Viber/SMS and Telegram texts with the variables
{customer_name},{store_name},{order_number},{carrier},{ttn},{review_link}. An empty field means the built-in text in the language of the order. - Report. Periods of 7/30/90/365 days, breakdown by channel (e-mail, Viber/SMS, Telegram) and CSV without buyers’ e-mails and phones.
How it works — step by step
- On every run the module looks at recent orders: has the parcel been received by the waybill of our shipping module, has the order got a “received” status, has a manager pressed “The buyer received it”.
- Receipt confirmed — the order gets a request with a send date: the delay after receipt, quiet hours. Refused, returned or cancelled — the request is skipped with a reason.
- Before sending, the module checks again: the order is not cancelled, the buyer has not unsubscribed and was not asked in the last 30 days, the order still has items without a review.
- The e-mail (in Pro also Viber/SMS and Telegram) goes out in the language of the order. One request per order is guaranteed by a unique record in the database, and a run lock stops two cron runs from sending a duplicate.
- The buyer opens the form by the personal link, sets the stars and writes the review — it is saved to OpenCart’s standard review table, linked to the order and the delivery service.
- You moderate as usual: Catalog → Reviews. After approval — the “The buyer received the item” mark on the product page.
Under the hood
- Read-only. The module reads the tables of our shipping modules and changes nothing there. For future modules there is the
cc_shipment_deliveredevent (order_id, carrier, ttn, delivered_at). - One library for three builds. The logic is shared by OpenCart 4, 3 and 2.3 and written for PHP 7.0+; the settings screen, the order panel, the form and the e-mail have their own styles and look the same on Bootstrap 5 and 3.
- One request per order — a unique key in the module’s own table and an atomic “claim” of the request before sending; runs never overlap thanks to a MySQL lock.
- Privacy. The link is a random token, only its hash is stored. E-mail and phone for the pause and unsubscribe are stored only as hashes.
- Regular reviews. Reviews are written to OpenCart’s standard review table, the mark is added by an event to the product’s review list. Remove the module — the reviews stay in Catalog → Reviews.
- Uninstall. Uninstalling removes the events, cron jobs and module tables (the “Keep data” box keeps unsubscribes and the log). A connected Telegram bot is disconnected on uninstall.
How to install
- OpenCart 4: Extensions → Installer → upload
cc_vdreviews.ocmod.zip(do not rename the archive) and press “Install”. OpenCart 3: Extensions → Installer →cc_vdreviews-oc3.ocmod.zip. OpenCart 2.3: upload the contents of theupload/folder fromcc_vdreviews-oc2.ocmod.zipto the store root (FTP or the hosting file manager). - Extensions → Extensions → Modules → Verified Delivery Reviews → “Install”, then “Edit”.
- The “When to ask” tab: turn the status on, check the trigger, delivery services and the “received” status, save.
- The “Messages” tab: “Send a test e-mail” to your address — you will see what the buyer gets.
- The “Schedule” tab: add the cron URL to the hosting crontab (or rely on runs from the admin).
- For Pro: the “Licence” tab — the key from the e-mail after payment, or the 7-day trial.
Questions
about the module
Didn't find the answer? Message us on Telegram and we'll reply within a business day.
Do I need your shipping modules?
For the “waybill status” trigger — yes: the module reads the statuses that our Nova Poshta, Ukrposhta, Meest and ROZETKA Delivery modules for OpenCart already store, and changes nothing there. Without them the “order status” mode works: the request goes out when the order gets the “Complete” status.
Why only “Complete” by default, and not “Shipped”?
In a stock OpenCart the store’s “complete” statuses include both “Complete” and “Shipped”. A shipped parcel has not been received yet, so the module takes only “Complete”. Add “Shipped” only if waybills are tracked by our carrier modules — then the module waits for the “received” status anyway.
What about Ukrposhta?
The status is read with the key saved in our Ukrposhta module — at most once every 6 hours per parcel. The module takes the tracking number from the Ukrposhta module, and if it is not there, a manager enters it in the order panel. Handed over — request; returned to the sender — none.
Will customers who bought a year ago get a pile of e-mails?
No. Orders placed before installation are skipped; if you want, you can deliberately cover the last N days.
A buyer orders every week — will they get an e-mail every time?
No. One request per order and a pause per buyer (30 days by default, e-mail and phone are compared). Items they have already reviewed are left out of the request.
Can a review be written without registration?
Yes. The link in the e-mail is personal and valid for 60 days: the buyer sees their items, sets the stars, writes a few words and a display name. No account needed.
I have no crontab on my hosting.
The module runs by itself when any manager opens the admin (at most every 15 minutes, up to 10 requests at a time). For exact timing, add the cron URL from the “Schedule” tab; OpenCart 4 also has the job in Extensions → Cron Jobs.
What happens when the Pro trial ends?
Viber/SMS, Telegram, photos and your own texts turn off, the report goes back to 30 days. E-mails, the form, the mark and unsubscribe keep working.
How much does it cost?
The base version is free. Pro is 1,290 UAH, one payment, perpetual licence, for all three builds (OpenCart 4.x, 3.x and 2.3). Viber/SMS messages are paid to TurboSMS at its rates.
No reviews yet. Be the first.
No questions yet. Ask one — we answer within 24 hours.
Not quite what you are looking for?
We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about the task and we'll prepare an estimate.
Order a custom module
Buying the module
—