{"id":375897,"date":"2026-10-05T08:13:18","date_gmt":"2026-10-05T08:13:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/omnirely-for-woocommerce\/"},"modified":"2026-10-05T08:12:56","modified_gmt":"2026-10-05T08:12:56","slug":"omnirely-order-connect-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/omnirely-order-connect-for-woocommerce\/","author":23574085,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.6.2","stable_tag":"0.6.2","tested":"7.1.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Omnirely Order Connect for WooCommerce","header_author":"Omnirely","header_description":"WhatsApp automation bridge between WooCommerce and Omnirely. Sends template-based WhatsApp notifications on order, shipping, customer and cart events.","assets_banners_color":"c5cccd","last_updated":"2026-10-05 08:12:56","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/omnirely.com","header_author_uri":"","rating":5,"author_block_rating":0,"active_installs":0,"downloads":178,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description"],"tags":{"0.6.2":{"tag":"0.6.2","author":"omnirely","date":"2026-10-05 08:12:56","revision":3728370}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3728408,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3728408,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.6.2"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[],"plugin_category":[],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-375897","plugin","type-plugin","status-publish","hentry","plugin_committers-omnirely"],"banners":{"banner":"https:\/\/ps.w.org\/omnirely-order-connect-for-woocommerce\/assets\/banner-772x250.png?rev=3728408","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/omnirely-order-connect-for-woocommerce\/assets\/icon-128x128.png?rev=3728408","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Sends template-based customer notifications automatically on WooCommerce order, customer, shipping and cart events\n(order created, paid, processing, completed, cancelled, refunded, shipped, customer created,\nabandoned cart and abandoned-cart discount follow-up) via the Omnirely API. Built as an automation bridge, not a\nraw API pass-through: every send goes through a rule engine (event +\nconditions + template + parameter mapping) and a background queue, so\ncheckout and order processing are never blocked by an outbound WhatsApp API\ncall.<\/p>\n\n<h3>What's implemented (V1 \/ Phases 1\u20133)<\/h3>\n\n<ul>\n<li>Connection screen: API URL + API key, \"Connect &amp; Verify\" against\nOmnirely's \/connection endpoint, key stored encrypted.<\/li>\n<li>Template sync: pulls approved templates from Omnirely, caches locally,\nre-syncs twice daily via WP-Cron, extracts {{n}} placeholders per\ntemplate automatically.<\/li>\n<li>Automation builder: event -&gt; conditions -&gt; template -&gt; parameter mapping.\nParameter mapping now follows the WhatsApp template standard fully:\nplaceholders are detected and mapped separately for the Header (0 or 1\ntext parameter), Body (N parameters), and dynamic URL Buttons (1\nparameter each), each with the same dynamic variable library\n(customer\/order\/billing\/shipping\/store\/item fields) so merchants pick\nfields from dropdowns rather than typing variable names.<\/li>\n<li>Send payloads are built as the standard WhatsApp <code>components<\/code> array\n(one entry per header\/body\/button component, each with its own\nresolved <code>parameters<\/code>) \u2014 see <code>Omnirely_Variable_Resolver::resolve_components()<\/code>.<\/li>\n<li>WooCommerce hooks for: new order, paid\/processing, on-hold, completed,\ncancelled, failed, refunded, shipped (via tracking-number meta or a\ncustom \"shipped\" status), new customer.<\/li>\n<li>Action Scheduler-backed queue: every send is logged first (status:\nqueued), then processed as a background job with retry\/backoff on\ntransient failures (network errors, 5xx) and no retry on permanent ones\n(bad template, invalid number).<\/li>\n<li>Message Logs screen with status filter and stored API errors.<\/li>\n<\/ul>\n\n<h3>What's scaffolded (Phase 4\u20135, ready to extend)<\/h3>\n\n<ul>\n<li>Abandoned cart tracking (<code>class-omnirely-cart-tracker.php<\/code>): identifies\na phone number from a logged-in customer's profile or a phone entered\nat checkout, tracks cart contents\/total, and schedules a two-stage\nreminder (configurable hours) via Action Scheduler. Carts with no\nidentifiable phone are stored but never scheduled for a reminder.\nCreate the matching \"cart_abandoned\" \/ \"cart_abandoned_followup\"\nautomations on the Automations screen to activate it.<\/li>\n<li>Condition engine supports payment status, order total, payment method,\nshipping country, product category, and (for carts) cart total \/\nproduct category \u2014 extend via the <code>omnirely_wc_condition_field_value<\/code>\nfilter.<\/li>\n<li>Coupon\/discount-on-second-reminder: the DB schema and cart settings\nscreen are in place; wiring a specific coupon code into the stage-2\ntemplate parameters is a short addition to\n  Omnirely_Cart_Tracker::check_cart().<\/li>\n<li>A full drag-and-drop flow builder (multi-step delays\/branches beyond\nthe two cart stages) is intentionally out of scope for V1, per the\nphased rollout plan \u2014 the current event+condition+template model is\nbuilt to not require a rewrite when that's added later.<\/li>\n<\/ul>\n\n<h3>Before going live<\/h3>\n\n<ul>\n<li>The send-message endpoint is confirmed as <code>POST \/whatsapp\/messages<\/code> (relative\nto your configured API URL) per\nhttps:\/\/dev.omnirely.com\/api\/docs#\/Messages%20API\/post_api_v1_whatsapp_messages,\nand the request payload follows the WhatsApp Business Platform standard\n  components structure (header\/body\/button, each with <code>type<\/code>\/<code>text<\/code> or\n  type\/<code>sub_type<\/code>\/<code>index<\/code> and a <code>parameters<\/code> array).<\/li>\n<li>The templates-list endpoint is assumed to be <code>GET \/whatsapp\/templates<\/code> by\nthe same naming convention \u2014 this page's content is rendered client-side\nby a Swagger UI, so it couldn't be fetched directly to confirm. If the\nTemplates tab's \"Sync Templates\" fails or its raw-response debug panel\nshows a 404, check that page's \"Templates API\" section and update the\npath in <code>includes\/class-omnirely-api-client.php<\/code> -&gt; <code>get_templates()<\/code>\naccordingly.<\/li>\n<li>Media headers (IMAGE\/VIDEO\/DOCUMENT) are detected but not yet mappable\nto a dynamic per-order value \u2014 the automation form notes when a\ntemplate has one; wiring a static media URL per automation is a short\naddition to the parameter map and <code>resolve_components()<\/code> if needed.<\/li>\n<li>Decide the phone-number source of truth (<code>omnirely_wc_order_phone<\/code>\nfilter is provided) if billing phone isn't reliably in WhatsApp E.164\nformat for your customer base \u2014 you'll likely want a normalization step.<\/li>\n<li>Load-test the Action Scheduler queue if you expect high order volume;\nAction Scheduler batches by default and is already what WooCommerce\nitself relies on for background jobs.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Fixed Action Scheduler callback argument handling so queued jobs reach the message processor.<\/li>\n<li>Added a one-minute queue watchdog WP-Cron event to recover queued jobs whose scheduled action did not start.<\/li>\n<li>Added worker\/watchdog heartbeat options and per-message locking to reduce duplicate sends.<\/li>\n<li>Existing queued entries are recovered when their stored payload is valid.<\/li>\n<\/ul>\n\n<h4>0.4.4<\/h4>\n\n<ul>\n<li>Simplified the WooCommerce sidebar by removing the separate Connection, Templates, Automations, Abandoned Cart, and Message Logs menu items. The Omnirely dashboard entry remains.<\/li>\n<\/ul>\n\n<h4>0.5.3<\/h4>\n\n<ul>\n<li>Added custom fixed-text input for each mapped template header, body, and dynamic URL button parameter.<\/li>\n<li>Custom parameter text takes priority over the selected WooCommerce variable and is resolved as a literal string when sending.<\/li>\n<\/ul>\n\n<h4>0.5.5<\/h4>\n\n<ul>\n<li>Connection screen now defaults to the Omnirely WhatsApp API URL.<\/li>\n<li>Added a direct Omnirely login link and Developer API key instructions.<\/li>\n<\/ul>","raw_excerpt":"WhatsApp automation bridge between WooCommerce and Omnirely.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/375897","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=375897"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/omnirely"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=375897"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=375897"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=375897"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=375897"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=375897"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=375897"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}