{"id":334391,"date":"2026-07-28T11:41:49","date_gmt":"2026-07-28T11:41:49","guid":{"rendered":"https:\/\/en-za.wordpress.org\/plugins\/bob-go-smart-shipping-for-woocommerce\/"},"modified":"2026-08-18T06:31:35","modified_gmt":"2026-08-18T06:31:35","slug":"bobgo-shipping","status":"publish","type":"plugin","link":"https:\/\/bre.wordpress.org\/plugins\/bobgo-shipping\/","author":20883736,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"4.0.50","stable_tag":"4.0.50","tested":"7.0.4","requires":"6.4","requires_php":"8.0","requires_plugins":null,"header_name":"Bob Go Smart Shipping for WooCommerce","header_author":"Bob Group","header_description":"Display Bob Go shipping rates at checkout and provide order tracking for your customers.","assets_banners_color":"7aaaa1","last_updated":"2026-08-18 06:31:35","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/bobgo-shipping\/","header_author_uri":"https:\/\/www.bob.co.za","rating":0,"author_block_rating":0,"active_installs":200,"downloads":790,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"4.0.31":{"tag":"4.0.31","author":"bobgroup","date":"2026-07-28 11:41:24"},"4.0.36":{"tag":"4.0.36","author":"bobgroup","date":"2026-08-07 08:03:06"},"4.0.50":{"tag":"4.0.50","author":"bobgroup","date":"2026-08-18 06:31:35"}},"upgrade_notice":{"4.0.0":"<p>A complete rewrite of the plugin for Bob Go, adding two-way order sync, webhook-based tracking and fulfilment updates, and a consolidated settings page. Existing uAfrica Shipping settings are migrated automatically. After upgrading, open WooCommerce \u2192 Bob Go and save your connection.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3637563,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3637563,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon-512x512.png":{"filename":"icon-512x512.png","revision":3637563,"resolution":"512x512","location":"assets","locale":"","width":512,"height":512}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3652122,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3637563,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"bobgo\/shipping":{"name":"bobgo\/shipping","title":"Bob Go Tracking"}},"tagged_versions":["4.0.31","4.0.36","4.0.50"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3637563,"resolution":"1","location":"assets","locale":"","width":1280,"height":880},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3637563,"resolution":"2","location":"assets","locale":"","width":1280,"height":880},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3637563,"resolution":"3","location":"assets","locale":"","width":1280,"height":880},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3637563,"resolution":"4","location":"assets","locale":"","width":1280,"height":883},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3637563,"resolution":"5","location":"assets","locale":"","width":1280,"height":883},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3637563,"resolution":"6","location":"assets","locale":"","width":1280,"height":880}},"screenshots":{"1":"Bob Go workspace dashboard","2":"Bob Go order management","3":"Bob Go shipment details","4":"Bob Go address book","5":"Bob Go sales channel setup","6":"Bob Go shipping settings"}},"plugin_section":[],"plugin_tags":[5567,13827,3546,550,286],"plugin_category":[36,45],"plugin_contributors":[218102],"plugin_business_model":[],"class_list":["post-334391","plugin","type-plugin","status-publish","hentry","plugin_tags-courier","plugin_tags-delivery","plugin_tags-shipping","plugin_tags-tracking","plugin_tags-woocommerce","plugin_category-analytics","plugin_category-ecommerce","plugin_contributors-bobgroup","plugin_committers-bobgroup"],"banners":{"banner":"https:\/\/ps.w.org\/bobgo-shipping\/assets\/banner-772x250.png?rev=3637563","banner_2x":"https:\/\/ps.w.org\/bobgo-shipping\/assets\/banner-1544x500.png?rev=3652122","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/bobgo-shipping\/assets\/icon-128x128.png?rev=3637563","icon_2x":"https:\/\/ps.w.org\/bobgo-shipping\/assets\/icon-256x256.png?rev=3637563","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/bobgo-shipping\/assets\/screenshot-1.png?rev=3637563","caption":"Bob Go workspace dashboard"},{"src":"https:\/\/ps.w.org\/bobgo-shipping\/assets\/screenshot-2.png?rev=3637563","caption":"Bob Go order management"},{"src":"https:\/\/ps.w.org\/bobgo-shipping\/assets\/screenshot-3.png?rev=3637563","caption":"Bob Go shipment details"},{"src":"https:\/\/ps.w.org\/bobgo-shipping\/assets\/screenshot-4.png?rev=3637563","caption":"Bob Go address book"},{"src":"https:\/\/ps.w.org\/bobgo-shipping\/assets\/screenshot-5.png?rev=3637563","caption":"Bob Go sales channel setup"},{"src":"https:\/\/ps.w.org\/bobgo-shipping\/assets\/screenshot-6.png?rev=3637563","caption":"Bob Go shipping settings"}],"raw_content":"<!--section=description-->\n<strong>Smart shipping solution<\/strong>\n\n<p>Orders are automatically synchronised from your WooCommerce store, making it easy to generate electronic shipping labels with one click. Receive quotes and ship with multiple delivery partners, whilst managing everything - including billing - within a single interface.<\/p>\n\n<p>Once products are shipped, customers will automatically be kept up to date with Bob Go customer tracking notification emails.<\/p>\n\n<p>Delivery partners include The Courier Guy, Internet Express, SkyNet, RAM, Fastway, Pargo and Bob Box, Bob Group's very own locker and counter pickup solution.<\/p>\n\n<strong>Streamline your order processes<\/strong>\n\n<p>Easily integrate Bob Go with your ecommerce stores, sync with your sales channels and automatically pull orders from your store. Use features like the address book and rule engine to customise your shipping processes to best suit your requirements. Bulk fulfillments, manifests and downloadable packing slips are also available for your convenience.<\/p>\n\n<strong>Other features include:<\/strong>\n\n<ul>\n<li>Multiple user roles, including a shipping agent user role linked to shipping classes or vendors (Dokan plugin)<\/li>\n<li>Creating manual orders and\/or shipments<\/li>\n<li>Rates at checkout<\/li>\n<li>Rule engine automations<\/li>\n<li>VAT-inclusive shipping rates<\/li>\n<li>Custom-branded tracking notification emails (from Starter plan)<\/li>\n<li>Promotions in tracking notifications  (Advanced and Premium plans only)<\/li>\n<li>Zebra sticker waybill integrations (Advanced and Premium plans only)<\/li>\n<li>Open API<\/li>\n<\/ul>\n\n<strong>Manage the shipping rates you charge your customers at checkout<\/strong>\n\n<p><strong>Rates at checkout<\/strong> is a Bob Go service that allows accounts to set up shipping rates that will be charged to their buyers at checkout. These rates are configured based on certain criteria and can be set up for different shipping methods with other specific requirements. As an additional option, you can allow customers to select a locker or counter which will be presented when a pickup location is available within their address radius.<\/p>\n\n<h3>Support<\/h3>\n\n<p><a href=\"https:\/\/www.bobgo.co.za\/webinar\">Book your seat at our next webinar<\/a>\n<a href=\"https:\/\/help.bobgo.co.za\/portal\/en\/home\">Helpdesk<\/a>\n<a href=\"https:\/\/www.bobgo.co.za\/contact\">Contact us<\/a><\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to external third-party services to provide shipping rate calculations and order tracking functionality.<\/p>\n\n<h4>Bob Go Rates API<\/h4>\n\n<ul>\n<li>Service: <a href=\"https:\/\/www.bobgo.co.za\/\">Bob Go<\/a> shipping rate calculation<\/li>\n<li>Endpoint: <code>api.bobgo.co.za\/v2\/rates-at-checkout<\/code><\/li>\n<li>Data sent: Store identifier (domain), cart items (names, quantities, prices, weights, dimensions), the cart total after discounts, and origin\/destination addresses<\/li>\n<li>When: Every time the checkout page calculates shipping rates (when Rates at Checkout is enabled)<\/li>\n<li><a href=\"https:\/\/www.bobgo.co.za\/terms-conditions\">Terms &amp; Conditions<\/a><\/li>\n<li><a href=\"https:\/\/www.bob.co.za\/privacy-policy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Bob Go Tracking API<\/h4>\n\n<ul>\n<li>Service: <a href=\"https:\/\/www.bobgo.co.za\/\">Bob Go<\/a> shipment tracking<\/li>\n<li>Endpoint: <code>api.bobgo.co.za\/v2\/tracking<\/code><\/li>\n<li>Data sent: Store domain and order or tracking reference number<\/li>\n<li>When: When a customer searches for tracking information on the tracking page<\/li>\n<li><a href=\"https:\/\/www.bobgo.co.za\/terms-conditions\">Terms &amp; Conditions<\/a><\/li>\n<li><a href=\"https:\/\/www.bob.co.za\/privacy-policy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Bob Go Order Sync API<\/h4>\n\n<ul>\n<li>Service: <a href=\"https:\/\/www.bobgo.co.za\/\">Bob Go<\/a> order management<\/li>\n<li>Endpoints: <code>api.bobgo.co.za\/v2\/orders<\/code> (POST\/PATCH\/GET)<\/li>\n<li>Data sent: Store identifier, WooCommerce order ID and number, customer name, email, phone, billing and shipping addresses, line items (name, quantity, price, SKU, dimensions), totals, taxes, discounts, payment status, currency, and any merchant-configured custom order field mappings. When a tracking webhook arrives for an order without a stored Bob Go reference, the shipment tracking reference or order number is sent to look up the matching Bob Go order.<\/li>\n<li>When: When a WooCommerce order reaches a syncable status (processing, on-hold, completed, shipped, partially-shipped) \u2014 and again on subsequent edits, status changes, and the hourly reconciliation job. Authenticated with the merchant's Bob Go API key.<\/li>\n<li><a href=\"https:\/\/www.bobgo.co.za\/terms-conditions\">Terms &amp; Conditions<\/a><\/li>\n<li><a href=\"https:\/\/www.bob.co.za\/privacy-policy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Bob Go Webhook Subscriptions API<\/h4>\n\n<ul>\n<li>Service: <a href=\"https:\/\/www.bobgo.co.za\/\">Bob Go<\/a> webhook subscription management<\/li>\n<li>Endpoints: <code>api.bobgo.co.za\/v2\/webhooks<\/code> (GET\/POST\/DELETE)<\/li>\n<li>Data sent: Store identifier and the WordPress REST URL where Bob Go should deliver tracking, fulfilment, and order-update webhooks for this site.<\/li>\n<li>When: When the merchant saves the connection (registers subscriptions), disconnects (deregisters them), or the settings page refreshes the subscription status. Additionally, a daily health check (run from the hourly reconciliation job) verifies the subscriptions are still active and re-registers them if Bob Go disabled them.<\/li>\n<li><a href=\"https:\/\/www.bobgo.co.za\/terms-conditions\">Terms &amp; Conditions<\/a><\/li>\n<li><a href=\"https:\/\/www.bob.co.za\/privacy-policy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Bob Go Accounts API<\/h4>\n\n<ul>\n<li>Service: <a href=\"https:\/\/www.bobgo.co.za\/\">Bob Go<\/a> account verification<\/li>\n<li>Endpoint: <code>api.bobgo.co.za\/v2\/accounts<\/code> (GET)<\/li>\n<li>Data sent: Store identifier only. The response confirms the API key works; when the connection is saved, and on the daily check, it also records which Bob Go account the key belongs to.<\/li>\n<li>When: When the merchant saves or tests the connection, and once a day from the hourly reconciliation job.<\/li>\n<li><a href=\"https:\/\/www.bobgo.co.za\/terms-conditions\">Terms &amp; Conditions<\/a><\/li>\n<li><a href=\"https:\/\/www.bob.co.za\/privacy-policy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Bob Go Fulfilments API<\/h4>\n\n<ul>\n<li>Service: <a href=\"https:\/\/www.bobgo.co.za\/\">Bob Go<\/a> fulfilment data<\/li>\n<li>Endpoint: <code>api.bobgo.co.za\/v2\/order-fulfillments<\/code><\/li>\n<li>Data sent: Store identifier and the Bob Go order ID being looked up.<\/li>\n<li>When: When the admin uses the per-order metabox \"Re-sync\" button, when reconciliation detects a stale shipment, or as part of the per-order admin view to display tracking and shipment state.<\/li>\n<li><a href=\"https:\/\/www.bobgo.co.za\/terms-conditions\">Terms &amp; Conditions<\/a><\/li>\n<li><a href=\"https:\/\/www.bob.co.za\/privacy-policy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Google Maps<\/h4>\n\n<ul>\n<li>Service: <a href=\"https:\/\/maps.google.com\/\">Google Maps<\/a> for pickup point directions<\/li>\n<li>Data sent: Latitude and longitude coordinates of the pickup point location<\/li>\n<li>When: When a customer clicks the \"Get directions\" link on a pickup point in the tracking results<\/li>\n<li><a href=\"https:\/\/policies.google.com\/terms\">Google Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/policies.google.com\/privacy\">Google Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h3>Development<\/h3>\n\n<p>The JavaScript and CSS assets shipped in <code>assets\/build\/<\/code> and <code>block\/build\/<\/code> are compiled from the human-readable source files included in every release of this plugin:<\/p>\n\n<ul>\n<li><code>block\/src\/index.js<\/code> (and its imports) compiles to <code>block\/build\/index.js<\/code> \u2014 the Gutenberg tracking block.<\/li>\n<li><code>assets\/src\/bobgo-shipping.js<\/code>, <code>assets\/src\/checkout-suburb.js<\/code>, and <code>assets\/src\/custom-shipping-description.js<\/code> compile to the matching files in <code>assets\/build\/<\/code>.<\/li>\n<li><code>assets\/src\/bobgo-shipping.scss<\/code> compiles to <code>assets\/build\/bobgo-shipping.css<\/code>.<\/li>\n<\/ul>\n\n<p>The compiled JavaScript is built with <a href=\"https:\/\/www.npmjs.com\/package\/@wordpress\/scripts\">@wordpress\/scripts<\/a> (webpack + Babel) and the CSS with <a href=\"https:\/\/www.npmjs.com\/package\/sass\">Dart Sass<\/a>. The exact tool versions are pinned in the bundled <code>package.json<\/code> and <code>package-lock.json<\/code>.<\/p>\n\n<p>To regenerate the compiled assets from source:<\/p>\n\n<ol>\n<li><code>npm install<\/code><\/li>\n<li><code>npm run build<\/code><\/li>\n<\/ol>\n\n<p>Individual builds are available via <code>npm run block:build<\/code> (block), <code>npm run assets:build<\/code> (frontend JS), and <code>npm run build:css<\/code> (SCSS).<\/p>\n\n<!--section=installation-->\n<p>You need an active Bob Go account before installing the plugin. Click <a href=\"https:\/\/www.bobgo.co.za\">here<\/a> to sign up.<\/p>\n\n<ol>\n<li>Install the plugin from the WordPress.org plugin directory, or upload the <code>bobgo-shipping<\/code> folder to <code>\/wp-content\/plugins\/<\/code> and activate it.<\/li>\n<li>In your WordPress admin, navigate to <strong>WooCommerce \u2192 Bob Go<\/strong>.<\/li>\n<li>Open the <strong>Connection<\/strong> tab.<\/li>\n<li>In a separate browser tab, log into your Bob Go account and create (or open) a <strong>WooCommerce sales channel<\/strong> at <strong>Settings \u2192 Sales Channels<\/strong>. Bob Go will display an <strong>API key<\/strong> and a <strong>webhook secret<\/strong> for that channel.<\/li>\n<li>Copy the API key into the <strong>API Key<\/strong> field on the plugin's Connection tab.<\/li>\n<li>Copy the webhook secret into the <strong>Webhook Secret<\/strong> field. This secret is used to authenticate inbound webhooks from Bob Go; without it, all webhook deliveries are rejected.<\/li>\n<li>Click <strong>Save Connection<\/strong>. The plugin verifies the credentials, registers the webhook subscriptions, and schedules a reconciliation job.<\/li>\n<li>(Optional) Use the <strong>Test Connection<\/strong> button to confirm your store can reach the Bob Go rates API.<\/li>\n<li>(Optional) Under the <strong>Tracking<\/strong> tab, choose or create a page that will host the customer-facing tracking widget \u2014 either via the <code>[bobgo]<\/code> shortcode or the Bob Go Gutenberg block.<\/li>\n<\/ol>\n\n<p>After saving the connection, new WooCommerce orders that match a syncable status (processing, on-hold, completed, shipped, partially-shipped) are sent to Bob Go automatically. Updates from Bob Go (fulfilments, tracking, status changes) flow back over webhooks.<\/p>\n\n<!--section=changelog-->\n<h4>4.0.50<\/h4>\n\n<ul>\n<li>The Overview tab now reports what the plugin has observed rather than what it has been configured with. \"Connected\" previously meant only that an API key was stored, and the \"Last Sync\" tile showed when the hourly background check last ran under a label that reads like order sync \u2014 so a store whose orders were never reaching Bob Go could show nothing but green ticks. The tab now shows whether Bob Go has ever confirmed the API key and which account it belongs to, when the last order was actually sent and which one it was, the exact error Bob Go returned if the most recent attempt failed, and whether updates from Bob Go are arriving.<\/li>\n<li>Added a Background Jobs card. Every order sent to Bob Go, every status update and the hourly reconciliation are queued through WooCommerce's Action Scheduler, so a queue that is not being processed stops orders reaching Bob Go while every setting on the page stays valid. The card shows how many orders are queued and waiting to be sent, whether WordPress is running its own scheduled events at all, whether the recurring check is scheduled, and when it last completed.<\/li>\n<li>When something is stopping orders from reaching Bob Go, the Overview now says so at the top of the page in one sentence, names the most likely cause, and lists the steps to clear it \u2014 including what to ask your host for, when the cause is a site or hosting setting rather than a Bob Go one. Each individual warning carries the same steps under a \"How to fix this\" link, so most of these situations can now be resolved without contacting support.<\/li>\n<li>The Overview no longer reports \"none yet\" for order activity it cannot actually see. Where the plugin's own sync log could not be created \u2014 some hosts do not allow it \u2014 the affected tiles now read \"Unknown\" and explain why, instead of looking like a store that has never sent an order.<\/li>\n<li>The channel identifier sent with every request is now shown on the Overview, next to a link to your Bob Go sales channels. When it does not match a sales channel \u2014 for example www against non-www after a domain change \u2014 Bob Go answers with a 404 that previously left the connection looking healthy.<\/li>\n<li>A store left on the Sandbox or Development environment is now flagged on the Overview, since orders sync to that account and production API keys will not work against it.<\/li>\n<li>Test Connection is now available on the Overview tab, and the Overview separates configuration from health so a settings choice no longer reads as a fault.<\/li>\n<li>Test Connection now records what it proved: a test that Bob Go answers definitively marks the API key verified (or rejected) on the Overview, instead of leaving it \"Not verified\" after a successful test. When Rates at Checkout is disabled or no API key is stored yet, the button now says so \u2014 and where to go next \u2014 rather than doing nothing.<\/li>\n<li>Fulfillment webhooks now count as updates from Bob Go on the Overview. They were logged under the same name as the order panel's own fulfillment fetch, so a store whose only inbound traffic was fulfillment events read \"No webhook has reached this store\" while webhooks were arriving and processing fine.<\/li>\n<li>An order held back because Bob Go could not confirm whether it already exists is now reported as held, rather than as a transport failure that \"never got a response\". A failed status update is described as a failed update, not as orders failing to arrive.<\/li>\n<li>Times on the Order Sync card are now shown as relative times (\"2 hours ago\") like the rest of the page, instead of raw UTC timestamps.<\/li>\n<li>Pressing Test Connection on the Overview now updates the status cards above it straight away. The test records what it proved, but the cards were rendered before it ran, so the page could report \"Not verified\" directly above a successful test result until it was reloaded.<\/li>\n<li>A rejected request is no longer reported as a bad API key. Bob Go answers with the same 401 when the channel identifier does not match a sales channel, and when rates at checkout is switched off for that channel \u2014 both on a perfectly valid key \u2014 so the Overview now names all the causes and puts the checks that cost nothing before generating a new key.<\/li>\n<li>Webhook registration failures are now explained in the plugin's own words. A rejected key produced \"Failed to register webhooks: You're not logged in. Please log in and try again.\", which sent merchants looking for a login screen; it now names the API key and channel identifier, which is what the plugin can actually tell you about.<\/li>\n<li>Test Connection results now link to the tab you need, rather than naming it and leaving you to find it.<\/li>\n<li>Tested against WooCommerce 11.<\/li>\n<\/ul>\n\n<h4>4.0.43<\/h4>\n\n<ul>\n<li>The connection check now verifies your API key against your Bob Go account. The Advanced tab shows your Bob Go account code.<\/li>\n<li>Re-syncing an order now sends the order to Bob Go rather than only fetching its shipment details back. Orders edited after their first sync are brought up to date, orders whose stored Bob Go reference no longer exists are re-resolved instead of failing against it forever, and the per-order \"Re-sync\" button reports a failure instead of reporting success without having sent anything.<\/li>\n<li>Fixed the \"orders failed to sync\" warning on the orders page reporting failures that \"Re-sync all failed orders\" then could not find. Both now work from the same list, and orders in a status that can never sync are no longer counted.<\/li>\n<li>Disconnecting now also removes the link between your WooCommerce orders and their Bob Go orders, so reconnecting to a different Bob Go account no longer leaves orders pointing at the old one. The links are removed in the background, the orders are not re-sent, and nothing is deleted on Bob Go itself.<\/li>\n<li>Every request to Bob Go now identifies the plugin version it came from, so support can diagnose a store without having to ask which version is installed.<\/li>\n<\/ul>\n\n<h4>4.0.36<\/h4>\n\n<ul>\n<li>Fixed rates at checkout ignoring shipping-class, SKU and vendor based rate rules. The product SKU, shipping class and (on multi-vendor stores) vendor are sent with each cart item again, so rules configured on those in your Bob Go account are applied to the rates your buyers see.<\/li>\n<li>Fixed the milestone icons on the tracking page rendering unstyled \u2014 the wrong size, colour or spacing \u2014 because the widget's HTML sanitiser discarded the styling Bob Go sends with each tracking step. Styling supplied by Bob Go is now applied as intended, while anything that would load an external resource is still removed.<\/li>\n<li>Fixed the tracking page showing nothing when a second order number was looked up without reloading the page. The same fault also left a second error message blank.<\/li>\n<li>Links out to the Bob Go workspace \u2014 from the Resources sidebar, the order panel and the rates at checkout connection notices \u2014 now follow the environment the plugin is connected to, instead of always opening the production workspace.<\/li>\n<li>Update the plugin directory listing<\/li>\n<\/ul>\n\n<h4>4.0.31<\/h4>\n\n<ul>\n<li>Removed bundled translation files from the plugin package. Translations are delivered automatically through translate.wordpress.org.<\/li>\n<li>The legacy [uafrica] shortcode and uafrica\/shipping block from the pre-rebrand plugin are no longer registered. Existing pages that still use them are rewritten automatically to the [bobgo] shortcode and bobgo\/shipping block on upgrade, so tracking pages keep working unchanged.<\/li>\n<\/ul>\n\n<h4>4.0.22<\/h4>\n\n<ul>\n<li>Fixed a critical order-matching bug on stores using WooCommerce's classic (legacy) order storage: Bob Go notifications for orders with no WooCommerce counterpart \u2014 such as CSV imports or orders created manually on Bob Go \u2014 could attach themselves to an unrelated recent shop order. An affected order displayed a stranger's tracking information, was treated as already synced (so it was never sent to Bob Go), could be marked completed by the stranger's delivery, and could have its delivery address overwritten. Every lookup now either matches the exact order or matches nothing.<\/li>\n<li>Added a one-time, automatic link audit that verifies every stored Bob Go order link against the Bob Go API and silently repairs existing damage: wrongly-linked orders have the foreign link and tracking data removed, active orders are re-sent to Bob Go, and orders whose true Bob Go counterpart is found are relinked without creating duplicates. Completed orders are only unlinked and flagged internally, since merchants may have already shipped them manually.<\/li>\n<li>An order's stored Bob Go link can no longer be overwritten by a notification claiming a different Bob Go order.<\/li>\n<li>Notifications whose order reference matches no shop order are now acknowledged instead of rejected, so stores receiving many of them (for example during a CSV import) can no longer have their Bob Go notifications disabled by the failed-delivery window.<\/li>\n<li>Fixed hourly reconciliation on stores using classic order storage: the batch could fill with orders that were never sent to Bob Go, starving the linked orders it was meant to refresh.<\/li>\n<\/ul>\n\n<h4>4.0.20<\/h4>\n\n<ul>\n<li>The plugin now checks once a day that its Bob Go webhook subscriptions are still active, and re-registers them automatically if they were disabled. Bob Go disables a subscription after a sustained period of failed deliveries \u2014 for example when a store was unreachable for a few days \u2014 and only notifies the merchant by email, after which tracking updates would silently stop arriving. With this check, webhooks recover on their own within an hour of the store coming back online. Stores that were deliberately disconnected are never re-registered, and each automatic recovery is recorded in the sync log.<\/li>\n<\/ul>\n\n<h4>4.0.19<\/h4>\n\n<ul>\n<li>Bob Go notifications for shipments that have no WooCommerce counterpart (for example manual shipments created directly on Bob Go) are now acknowledged and ignored instead of rejected as errors. Notifications are delivered account-wide, so stores that also ship outside their WooCommerce channel produced a constant stream of rejections \u2014 and a long enough stretch where those were the only deliveries could get the store's Bob Go notifications disabled entirely, silently stopping all tracking updates. Ignoring these events keeps the notification channel healthy.<\/li>\n<\/ul>\n\n<h4>4.0.17<\/h4>\n\n<ul>\n<li>Tracking updates now also reach orders whose Bob Go notifications carry no order reference. Tracking webhooks from Bob Go don't include the Bob Go order ID, so orders that this plugin didn't originally send (for example historical orders from the previous integration, most of which are already fulfilled and only ever emit tracking updates) could still not link themselves. The plugin now resolves the link with a single Bob Go order lookup \u2014 by the shipment's tracking reference, falling back to the order number \u2014 stores it, and proceeds as normal. Ambiguous or mismatched lookups are refused and logged rather than guessed.<\/li>\n<\/ul>\n\n<h4>4.0.15<\/h4>\n\n<ul>\n<li>Orders that exist on Bob Go but were not sent by this plugin (for example historical orders ingested by the previous integration) now link themselves automatically: shipment and tracking webhooks from Bob Go backfill the stored Bob Go order ID from the notification itself, so tracking information starts landing on those orders without any manual migration.<\/li>\n<\/ul>\n\n<h4>4.0.14<\/h4>\n\n<ul>\n<li>Subscription renewal orders now sync to Bob Go. Previously, orders created by WooCommerce Subscriptions renewals were silently skipped, so recurring orders never appeared on Bob Go for merchants using the plugin as their only sales channel. Renewals now sync as soon as payment moves them into a syncable status. Bob Go sync metadata is also excluded when Subscriptions copies data onto a new renewal order, so a renewal can never be mistaken for an already-synced order.<\/li>\n<\/ul>\n\n<h4>4.0.13<\/h4>\n\n<ul>\n<li>Fixed an order-lookup mix-up in the fulfilment refresh: when an order had no stored Bob Go order ID yet, the plugin queried the Bob Go fulfilments API with the WooCommerce order reference instead. This caused \"order does not exist\" errors and, in rare cases, could have matched a different order on the Bob Go account. The refresh now only runs once the order is properly linked; reconciliation picks up anything missed.<\/li>\n<\/ul>\n\n<h4>4.0.12<\/h4>\n\n<ul>\n<li>The \"Shipped\" \/ \"Partially shipped\" customer notification email is now opt-in and off by default. Enable it under WooCommerce \u2192 Bob Go \u2192 Notifications; only then does it register with WooCommerce and appear under WooCommerce \u2192 Settings \u2192 Emails. Existing stores are unaffected until they opt in.<\/li>\n<li>Product options sent with order items are now additionally sanitised against invalid text encoding, so malformed option data from third-party plugins can never disrupt the order sync request.<\/li>\n<\/ul>\n\n<h4>4.0.10<\/h4>\n\n<ul>\n<li>Hardened protection against order-update sync loops. WooCommerce webhooks belonging to the previous plugin generation (Bob Go v3 \/ uAfrica) are now blocked from delivering at all \u2014 even if a legacy sales channel re-creates them \u2014 and are removed on an ongoing basis: at activation, at deactivation, and during the hourly reconciliation sweep, instead of only once at install. In addition, inbound delivery-address updates that show loop corruption (the same address segment repeated over and over, or oversized fields) are rejected and logged instead of being written to the order, so a runaway update cycle can no longer mangle customer addresses.<\/li>\n<\/ul>\n\n<h4>4.0.9<\/h4>\n\n<ul>\n<li>New customer notification email for the \"Shipped\" and \"Partially shipped\" order statuses. When those statuses are enabled, WooCommerce sends the customer an email \u2014 with the courier, tracking link and the items that shipped \u2014 as each fulfilment is created. It appears under WooCommerce \u2192 Settings \u2192 Emails, where you can customise the subject and heading or switch it off. Only forward moves notify, so a shipment cancelled on Bob Go never emails the customer that their order un-shipped.<\/li>\n<li>Order items now sync to Bob Go with the customer's selected options \u2014 product add-on choices (flavours, gift messages, personalisation), variation attributes and similar fields captured at checkout \u2014 so they are visible on the Bob Go order for fulfilment. Only customer-facing options are sent; internal plugin data is excluded. A new Product Options section on the Advanced settings tab lets you switch this off entirely or untick individual option keys (for example a terms-and-conditions acceptance) so they are never sent.<\/li>\n<\/ul>\n\n<h4>4.0.8<\/h4>\n\n<ul>\n<li>Maintenance release for the WordPress.org plugin directory. The admin order-status badge styling now loads through the standard WordPress style queue, and the plugin's asset build source and build steps are bundled and documented. No changes to store-facing behaviour.<\/li>\n<\/ul>\n\n<h4>4.0.7<\/h4>\n\n<ul>\n<li>Free shipping coupons are now honoured at checkout. When a customer applies a coupon that grants free shipping, checkout shows a single free Bob Go shipping option instead of the usual rates. No courier is pre-selected, so you choose the service to ship with once the order reaches Bob Go.<\/li>\n<\/ul>\n\n<h4>4.0.6<\/h4>\n\n<ul>\n<li>Shipping rates at checkout now account for applied coupons. The order total sent to Bob Go reflects any discount (including tax), so value-based rate rules \u2014 such as free shipping over a set amount \u2014 are calculated against what the customer actually pays.<\/li>\n<\/ul>\n\n<h4>4.0.3<\/h4>\n\n<ul>\n<li>Cart page shipping rates are now cached for up to 2 hours, which greatly reduces repeated rate requests to Bob Go while customers browse the cart. Checkout is unaffected \u2014 rates there are always recalculated against the customer's full delivery address, so the price charged is never stale.<\/li>\n<\/ul>\n\n<h4>4.0.2<\/h4>\n\n<ul>\n<li>Fixed orders staying on \"Shipped\" after their shipment is cancelled on Bob Go. The order now mirrors Bob Go by moving back to \"Processing\" (or \"Partially shipped\" when other shipments remain), and the Bob Go order panel lists the affected items as unfulfilled again.<\/li>\n<\/ul>\n\n<h4>4.0.0<\/h4>\n\n<p>A complete rewrite of the plugin, rebuilt from the ground up for Bob Go.<\/p>\n\n<ul>\n<li>Two-way order sync \u2014 orders flow from WooCommerce to Bob Go automatically, and fulfilments, tracking, status changes and cancellations flow back over secure webhooks.<\/li>\n<li>Rates at Checkout \u2014 show the shipping rates you have configured in Bob Go directly at your customers' checkout, including locker and counter pickup options.<\/li>\n<li>Customer order tracking \u2014 a branded tracking page via the <code>[bobgo]<\/code> shortcode, the Bob Go Gutenberg block, or the Elementor widget.<\/li>\n<li>Hourly reconciliation safety net so missed webhooks self-heal, with an honest connection status on the settings page.<\/li>\n<li>Dedicated \"Shipped\" and \"Partially shipped\" order statuses, plus a Bob Go tracking column on the Orders list.<\/li>\n<li>Consolidated settings under WooCommerce \u2192 Bob Go, with tabs for Connection, Rates, Tracking, Checkout Fields and more.<\/li>\n<li>Full support for High-Performance Order Storage (HPOS) and for both classic and block-based checkout.<\/li>\n<li>Multi-vendor support, including Dokan sub-order syncing.<\/li>\n<li>Hardened security \u2014 encrypted API credentials, verified webhook signatures, and input validation and output escaping throughout.<\/li>\n<li>Existing settings are migrated automatically when upgrading from the previous uAfrica Shipping plugin.<\/li>\n<\/ul>","raw_excerpt":"Smart shipping and order management solution in South Africa","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bre.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/334391","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bre.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bre.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bre.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=334391"}],"author":[{"embeddable":true,"href":"https:\/\/bre.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/bobgroup"}],"wp:attachment":[{"href":"https:\/\/bre.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=334391"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bre.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=334391"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bre.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=334391"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bre.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=334391"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bre.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=334391"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bre.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=334391"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}