{"id":390617,"date":"2026-10-25T17:27:22","date_gmt":"2026-10-25T17:27:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/relaybell\/"},"modified":"2026-10-26T07:25:45","modified_gmt":"2026-10-26T07:25:45","slug":"relaybell","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/relaybell\/","author":23534890,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.0","stable_tag":"1.3.0","tested":"7.1.4","requires":"5.6","requires_php":"7.2","requires_plugins":null,"header_name":"relaybell","header_author":"relaybell","header_description":"Web push notifications for WordPress & WooCommerce. Connect in one click, collect subscribers with an opt-in prompt, auto-send a push when you publish, and fire commerce events (purchase, cart, back-in-stock, price-drop) to relaybell.","assets_banners_color":"b9cbcd","last_updated":"2026-10-26 07:25:45","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/relaybell.com\/integrations\/wordpress","header_author_uri":"https:\/\/relaybell.com\/about","rating":0,"author_block_rating":0,"active_installs":0,"downloads":98,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.6":{"tag":"1.2.6","author":"relaybell","date":"2026-10-25 17:27:05","revision":3764998},"1.3.0":{"tag":"1.3.0","author":"relaybell","date":"2026-10-26 07:25:45","revision":3765724}},"upgrade_notice":{"1.3.0":"<p>Personalized recommendations: your public products and posts are sent to relaybell in the background (two switches under Settings \u2192 relaybell \u2192 Personalization), and order events now include the products bought.<\/p>","1.2.6":"<p>The relaybell notices now show only on the Plugins screen and can be dismissed. No settings change.<\/p>","1.2.5":"<p>Maintenance release: the settings page loads its script and styles as files, and the readme lists every request the plugin makes. No settings change.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3764998,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3764998,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3764998,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3764998,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.6","1.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3764998,"resolution":"1","location":"assets","locale":"","width":1534,"height":988},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3764998,"resolution":"2","location":"assets","locale":"","width":1534,"height":988},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3764998,"resolution":"3","location":"assets","locale":"","width":1255,"height":562},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3764998,"resolution":"4","location":"assets","locale":"","width":1255,"height":668},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3764998,"resolution":"5","location":"assets","locale":"","width":1534,"height":988},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3764998,"resolution":"6","location":"assets","locale":"","width":1534,"height":988},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3765724,"resolution":"7","location":"assets","locale":"","width":1534,"height":988},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3765724,"resolution":"8","location":"assets","locale":"","width":1534,"height":988},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3765724,"resolution":"9","location":"assets","locale":"","width":1534,"height":988}},"screenshots":{"1":"Settings \u2192 relaybell before connecting: one click on Connect to relaybell links your site \u2014 nothing to copy or paste.","2":"The status panel checks the connection, HTTPS, your public pages, the relaybell script, the service worker, this browser and visitor sign-in IDs, and says how to fix anything that isn't right.","3":"Publishing: push new posts automatically for the post types you choose, send each post to the topic of its category, and link logged-in subscribers to their account.","4":"WooCommerce events \u2014 purchase, cart, back in stock, price drop, sign-up, checkout and refund \u2014 each with its own switch, plus the waitlist button.","5":"The opt-in prompt your visitors see. Its style, text and timing are set in your relaybell dashboard.","6":"The \"Notify me when back in stock\" button on a sold-out product.","7":"Your relaybell dashboard, Settings \u2192 Catalog: the products and articles synced from WordPress, kept up to date automatically.","8":"The Send composer with \"Recommend a product\", and a preview of what one subscriber will get.","9":"A subscriber's interests, learned from what they viewed, read and bought on your site."}},"plugin_section":[],"plugin_tags":[15962,155593,1155,37677,286],"plugin_category":[45,55],"plugin_contributors":[288502],"plugin_business_model":[],"class_list":["post-390617","plugin","type-plugin","status-publish","hentry","plugin_tags-abandoned-cart","plugin_tags-back-in-stock","plugin_tags-push-notifications","plugin_tags-web-push","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-seo-and-marketing","plugin_contributors-relaybell","plugin_committers-relaybell"],"banners":{"banner":"https:\/\/ps.w.org\/relaybell\/assets\/banner-772x250.png?rev=3764998","banner_2x":"https:\/\/ps.w.org\/relaybell\/assets\/banner-1544x500.png?rev=3764998","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/relaybell\/assets\/icon-128x128.png?rev=3764998","icon_2x":"https:\/\/ps.w.org\/relaybell\/assets\/icon-256x256.png?rev=3764998","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/relaybell\/assets\/screenshot-1.png?rev=3764998","caption":"Settings \u2192 relaybell before connecting: one click on Connect to relaybell links your site \u2014 nothing to copy or paste."},{"src":"https:\/\/ps.w.org\/relaybell\/assets\/screenshot-2.png?rev=3764998","caption":"The status panel checks the connection, HTTPS, your public pages, the relaybell script, the service worker, this browser and visitor sign-in IDs, and says how to fix anything that isn't right."},{"src":"https:\/\/ps.w.org\/relaybell\/assets\/screenshot-3.png?rev=3764998","caption":"Publishing: push new posts automatically for the post types you choose, send each post to the topic of its category, and link logged-in subscribers to their account."},{"src":"https:\/\/ps.w.org\/relaybell\/assets\/screenshot-4.png?rev=3764998","caption":"WooCommerce events \u2014 purchase, cart, back in stock, price drop, sign-up, checkout and refund \u2014 each with its own switch, plus the waitlist button."},{"src":"https:\/\/ps.w.org\/relaybell\/assets\/screenshot-5.png?rev=3764998","caption":"The opt-in prompt your visitors see. Its style, text and timing are set in your relaybell dashboard."},{"src":"https:\/\/ps.w.org\/relaybell\/assets\/screenshot-6.png?rev=3764998","caption":"The \"Notify me when back in stock\" button on a sold-out product."},{"src":"https:\/\/ps.w.org\/relaybell\/assets\/screenshot-7.png?rev=3765724","caption":"Your relaybell dashboard, Settings \u2192 Catalog: the products and articles synced from WordPress, kept up to date automatically."},{"src":"https:\/\/ps.w.org\/relaybell\/assets\/screenshot-8.png?rev=3765724","caption":"The Send composer with \"Recommend a product\", and a preview of what one subscriber will get."},{"src":"https:\/\/ps.w.org\/relaybell\/assets\/screenshot-9.png?rev=3765724","caption":"A subscriber's interests, learned from what they viewed, read and bought on your site."}],"raw_content":"<!--section=description-->\n<p>relaybell turns visitors into subscribers you can bring back with one click \u2014 no\napp, and no email address needed. A notification reaches them even when your site\nisn't open, and each one can carry the product or post that this subscriber is\nlikely to want, picked from what they viewed, read and bought on your site.<\/p>\n\n<p>Connect in about a minute. Then new posts go out as a push when you publish,\nabandoned carts get a reminder, sold-out products tell their waitlist when they're\nback, and you see which notifications brought visitors and sales back.<\/p>\n\n<h4>What you get<\/h4>\n\n<ul>\n<li><strong>More returning visitors<\/strong>, without paying for every click.<\/li>\n<li><strong>Sales you'd otherwise lose<\/strong>: cart reminders, back-in-stock and price-drop\nalerts go out on their own.<\/li>\n<li><strong>Notifications people open<\/strong>: recommendations matched to each subscriber,\ndelivered at the hour they usually read.<\/li>\n<li><strong>Clear numbers<\/strong>: delivered, clicked and revenue for every notification.<\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<p><strong>Grow subscribers<\/strong><\/p>\n\n<ul>\n<li>One-click <strong>Connect to relaybell<\/strong> \u2014 sign in or create a free account, approve\nyour site, done. Nothing to copy or paste.<\/li>\n<li>Opt-in prompt as a slide-in, bar, modal or the browser's own prompt; shown after\na delay, on scroll, on exit intent or on a click; A\/B-test its wording.<\/li>\n<li>Topics subscribers choose, and a \"Notify me when back in stock\" button.<\/li>\n<li>Chrome, Firefox, Edge, Opera, Samsung Internet and Brave on desktop and Android;\nSafari on macOS 13+ and on iPhone\/iPad (iOS 16.4+, from the Home Screen).<\/li>\n<\/ul>\n\n<p><strong>Personalized notifications<\/strong><\/p>\n\n<ul>\n<li><strong>Catalog sync<\/strong>: published WooCommerce products and blog posts are sent to\nrelaybell in the background and updated within about a minute of each change.<\/li>\n<li><strong>Per-subscriber interests<\/strong>, learned from what each subscriber views, reads,\nadds to the cart and buys on your site \u2014 your own first-party data only.<\/li>\n<li><strong>Product and article recommendations<\/strong>: put <code>{rec.title}<\/code>, <code>{rec.price}<\/code> or\n  {rec.summary} in a notification and each subscriber gets their own pick.\nOut-of-stock products are skipped at send time.<\/li>\n<li><strong>GA4 events with no code<\/strong>: relaybell can use the Google Analytics 4\ne-commerce events your site already sends through Google Tag Manager or gtag.js.<\/li>\n<li><strong>Smart timing<\/strong>: delivery at each subscriber's usual hour, in their time zone,\nwithin your quiet hours and frequency cap.<\/li>\n<li><strong>Past orders<\/strong> (optional): import 90 days of orders for a head start.<\/li>\n<\/ul>\n\n<p><strong>Automations &amp; journeys<\/strong><\/p>\n\n<ul>\n<li>Push new posts on publish, with the featured image, for the post types you pick.<\/li>\n<li>Welcome series and custom journeys with delays and branches; subscribers leave\nwhen they buy.<\/li>\n<li>Automations triggered by anything a subscriber does on your site.<\/li>\n<li>Recurring campaigns, RSS-to-push, scheduling and A\/B-tested notifications.<\/li>\n<\/ul>\n\n<p><strong>WooCommerce<\/strong><\/p>\n\n<ul>\n<li><strong>Cart reminders<\/strong> for shoppers who added to cart or started checkout.<\/li>\n<li><strong>Back in stock<\/strong> alerts to the product's waitlist.<\/li>\n<li><strong>Price drop<\/strong> alerts to shoppers who viewed, carted or wait-listed it.<\/li>\n<li><strong>Order updates<\/strong>: thank-you and follow-up messages after purchases and refunds.<\/li>\n<li>Revenue attribution, with each order counted once.<\/li>\n<li>Classic checkout, the Checkout block and HPOS.<\/li>\n<\/ul>\n\n<p><strong>Analytics &amp; delivery health<\/strong><\/p>\n\n<ul>\n<li>Delivered, clicks, conversions and revenue per notification; CSV export.<\/li>\n<li>Delivery health: why a notification didn't arrive, in plain words.<\/li>\n<li>Conversion goals with a funnel.<\/li>\n<\/ul>\n\n<p><strong>Privacy &amp; control<\/strong><\/p>\n\n<ul>\n<li>Consent: Google Consent Mode, or wait for your cookie banner's consent.<\/li>\n<li>GDPR: export or erase everything held about a subscriber.<\/li>\n<li>Identity verification: logged-in visitors' IDs are signed by your server, so\nnobody can pose as a customer to get their notifications. On from the start.<\/li>\n<li>A switch for each WooCommerce event and for catalog sync.<\/li>\n<li>Suggested privacy policy text for your site, under Settings \u2192 Privacy.<\/li>\n<\/ul>\n\n<p><strong>Works with<\/strong><\/p>\n\n<p>WooCommerce, Google Tag Manager and GA4, Zapier, the relaybell REST API and\nwebhooks, server SDKs for Node.js and PHP, and common page-cache plugins.<\/p>\n\n<h4>Why relaybell<\/h4>\n\n<ul>\n<li><strong>Set up in about a minute<\/strong>: one click, no keys, no code, no theme changes.<\/li>\n<li><strong>It checks itself<\/strong>: the status panel tests eight things \u2014 connection, HTTPS,\nthe script, the service worker, your browser, your public pages, page caches\nand sign-in IDs \u2014 and says how to fix anything that isn't right.<\/li>\n<li><strong>Never slows your site<\/strong>: events are sent after the page is built; the catalog\nand past orders go out in small background batches; saving a post never waits\nfor relaybell.<\/li>\n<li><strong>Built for real hosting<\/strong>: the service worker is a static file in the plugin\nfolder (no clash with PWA plugins, any permalink setting), its address avoids\npatterns hosting firewalls block, and 13 common page caches are cleared when\nyour set-up changes.<\/li>\n<li><strong>Secure by default<\/strong>: signed visitor IDs, HTTPS-only connection settings, and\nthe API key is cancelled when you disconnect.<\/li>\n<li><strong>Open<\/strong>: GPL plugin, documented REST API and webhooks, CSV export.<\/li>\n<\/ul>\n\n<h4>Your data<\/h4>\n\n<p>Nothing is sent until you connect. The catalog holds only what is public on your\nsite \u2014 never password-protected, private or hidden items, and no customer data.\nActivity is recorded only for visitors who subscribed. Order events carry the\ncustomer's email (or your hashed ID) only to find their subscription \u2014 no names,\naddresses or phone numbers. Past orders are sent only when you ask. Every request\nis listed under \"External services\".<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to <strong>relaybell<\/strong> (https:\/\/relaybell.com), a web push\nnotification service operated by Nexistech. relaybell is required: browser push\nnotifications can't be stored or delivered without a push service, and this\nplugin is the WordPress client for it. You need a relaybell account and API key.<\/p>\n\n<p><strong>1. Browser SDK (https:\/\/relaybell.com\/relaybell-sdk.js)<\/strong><\/p>\n\n<p>Loaded on every front-end page once a Project ID is saved, so visitors can opt in.\nOn each page view it also fetches your project's public settings (GET\nhttps:\/\/relaybell.com\/api\/v1\/projects\/{project id}\/config: push key, prompt and\non-site message settings). Browsers send their normal request data (IP address,\nuser agent, your site's address). If you use them, it also reports, without\npersonal data, which A\/B prompt version was shown (POST ...\/prompt-event) and\non-site message views and clicks (POST ...\/onsite-event).<\/p>\n\n<p><strong>2. Subscribing (POST https:\/\/relaybell.com\/api\/v1\/projects\/{project id}\/subscriptions)<\/strong><\/p>\n\n<p>When a visitor accepts the notification prompt: the browser's push endpoint URL\nand encryption keys, the page URL, language, time zone, prompt version, and your\ntopics or tags (for logged-in users, their WordPress role). The service worker\nre-sends a subscription the browser replaced. Topic choices made in the box\nopened by <code>RelayBell.showPreferences()<\/code> are saved (GET\/POST ...\/preferences).\nFor a logged-in visitor (never an administrator) who opted in, their account email\nis sent as <code>externalId<\/code>, with a <code>userHash<\/code> signature (see 9). Hash it with the\n    relaybell_external_id filter, or turn off \"Link subscribers to their account\nemail\".<\/p>\n\n<p><strong>3. Publish pushes (POST https:\/\/relaybell.com\/api\/v1\/notifications)<\/strong><\/p>\n\n<p>With \"Send on publish\" on: the post's title, first 20 words, permalink, featured\nimage URL and (with \"Category \u2192 topic\") topic. Never for password-protected posts.<\/p>\n\n<p><strong>4. WooCommerce events from your server (POST https:\/\/relaybell.com\/api\/v1\/events)<\/strong><\/p>\n\n<p>With your API key, at the end of the request that caused them: <code>purchase<\/code> and\n    checkout.started (order id and number, total, currency, and up to 50 products:\nid, name, category, unit price, quantity); <code>order.refunded<\/code> (order id and number,\namount, currency); <code>cart.updated<\/code> (product name, id and URL, cart value);\n    signup (user id); <code>back_in_stock<\/code> and <code>price_drop<\/code> (product name, id, URL, and\nold and new price). All on by default; each can be turned off under <strong>Settings \u2192\nrelaybell<\/strong>. While \"Link subscribers to their account email\" is on, the\ncustomer's email (account email, else the billing email, or your\n    relaybell_external_id value) is sent with <code>purchase<\/code>, <code>checkout.started<\/code>,\n    cart.updated, <code>signup<\/code> and <code>order.refunded<\/code>; with it off, they're sent without\nit and <code>cart.updated<\/code> not at all. <code>cart.updated<\/code> is only sent for logged-in\nshoppers. <code>back_in_stock<\/code> and <code>price_drop<\/code> never include customer data.<\/p>\n\n<p><strong>5. Visitor activity (POST https:\/\/relaybell.com\/api\/v1\/projects\/{project id}\/events)<\/strong><\/p>\n\n<p>From the browser, only for visitors subscribed to your notifications:\n    waitlist.join (the \"Notify me\" button), <code>product.viewed<\/code> (a product page, while\nPrice drop or \"Send my products\" is on: product id, category, price, currency,\nbrand, page URL, image) and <code>content.viewed<\/code> (a post, while \"Send my posts\" is\non: post id, title, type, category, up to 10 tags, permalink), followed once by\n    content.read when they scrolled 75% of the page or stayed 30 seconds. Each\ncarries your project id, the push endpoint URL and, for a logged-in visitor with\n\"Link subscribers\u2026\" on, their <code>externalId<\/code> and <code>userHash<\/code>.<\/p>\n\n<p><strong>6. Delivery and click reports (POST https:\/\/relaybell.com\/api\/v1\/notifications\/{id}\/receipt and \/click)<\/strong><\/p>\n\n<p>From the service worker: the notification id, a signed token and the\nsubscription's id \u2014 no page content or personal data.<\/p>\n\n<p><strong>7. Connecting (https:\/\/relaybell.com\/connect\/wordpress, POST https:\/\/relaybell.com\/api\/v1\/connect\/exchange)<\/strong><\/p>\n\n<p><strong>Connect to relaybell<\/strong> sends the administrator's browser to relaybell with your\nsite's address and name, the wp-admin return address and a one-time security\nvalue. Your server then trades the one-time code (with your site address) for\nyour Project ID and an API key, saved in your database.<\/p>\n\n<p><strong>8. Admin status and test push (https:\/\/relaybell.com\/api\/v1\/...)<\/strong><\/p>\n\n<p>From your server, with your API key: subscriber count (GET \/stats), that the\nProject ID matches the key (GET \/me), and when relaybell last ran on your pages\n(GET \/setup-status); the Plugins screen re-checks an unverified account at most\nhourly. The administrator's browser fetches the script and public settings to\ncheck they aren't blocked, and your server occasionally fetches your own home page\nto detect a stale page cache (that request stays on your site). <strong>Subscribe this\nbrowser<\/strong> subscribes the admin's browser (see 2) and marks it as a test device\n(POST \/test-devices: its endpoint URL); <strong>Send test push<\/strong> sends a test to test\ndevices only (POST \/test-devices\/send: test title, text, home page address); a\n\"send test to my device\" link registers that browser (POST \/test-devices\/claim:\nthe code and endpoint URL). <strong>Advanced \u2192 relaybell host<\/strong> changes where these\nrequests go (https only).<\/p>\n\n<p><strong>9. Identity verification (GET and PUT https:\/\/relaybell.com\/api\/v1\/identity)<\/strong><\/p>\n\n<p>Your server fetches your project's identity secret \u2014 when you connect, when you\nopen <strong>Settings \u2192 relaybell<\/strong>, and daily \u2014 and the first time asks relaybell to\naccept only verified sign-in IDs (changeable in your relaybell dashboard). The\nsecret signs logged-in visitors' IDs on your server and never appears in your\npages. No visitor data is sent.<\/p>\n\n<p><strong>10. Disconnecting (DELETE https:\/\/relaybell.com\/api\/v1\/keys\/current)<\/strong><\/p>\n\n<p><strong>Disconnect<\/strong> cancels the API key one-click Connect created (only the key is\nsent). A key entered by hand is left alone.<\/p>\n\n<p><strong>11. Catalog (POST https:\/\/relaybell.com\/api\/v1\/catalog\/items and \/catalog\/items\/delete)<\/strong><\/p>\n\n<p>So notifications can recommend them, your server sends the public details of\npublished WooCommerce products (\"Send my products\") and posts (\"Send my posts\"),\nboth on by default: id, title, permalink, image URL, price and sale price with\nthe currency, category path, brand, tags, a short plain-text summary, stock\nstatus and publication date. Never password-protected, private, draft or hidden\nitems, and no customer data. WP-Cron sends them in the background, 100 per run:\neverything when you connect, update the plugin, change these settings or click\n<strong>Sync now<\/strong>, and weekly; and each product or post you publish, edit,\nunpublish, trash or delete within about a minute (for the last three, only its\nid). Turning a switch off removes those items from relaybell.<\/p>\n\n<p><strong>12. Past orders (POST https:\/\/relaybell.com\/api\/v1\/events\/import)<\/strong><\/p>\n\n<p>Only after an administrator clicks <strong>Import the last 90 days of orders<\/strong>: that\nperiod's paid orders as <code>purchase<\/code> events, 50 per background run \u2014 the details of\na live <code>purchase<\/code> (see 4), the payment date, and the customer's email (or your\n    relaybell_external_id value) to find their subscription. relaybell keeps only\norders of customers who already get your notifications, never counts an order\ntwice, and gets no names, addresses or phone numbers.<\/p>\n\n<p>Nothing is sent until you connect (or save a Project ID and API key manually).<\/p>\n\n<p>Service provider: Nexistech (https:\/\/nexistech.in)\nTerms of service: https:\/\/relaybell.com\/terms\nPrivacy policy: https:\/\/relaybell.com\/privacy\nData processing agreement: https:\/\/relaybell.com\/dpa<\/p>\n\n<!--section=installation-->\n<ol>\n<li>In your WordPress admin go to <strong>Plugins \u2192 Add New<\/strong>, search for <strong>relaybell<\/strong>,\nthen click <strong>Install Now<\/strong> and <strong>Activate<\/strong>. (Or upload the ZIP from\n<strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.)<\/li>\n<li>Go to <strong>Settings \u2192 relaybell<\/strong> and click <strong>Connect to relaybell<\/strong>. Sign in (or\ncreate a free account), approve your site, and you'll land back in WordPress\nconnected.<\/li>\n<li>Optionally turn on <strong>Send on publish<\/strong> and pick which post types push.<\/li>\n<li>Your products and posts start syncing to relaybell in the background. With\nWooCommerce, you can also click <strong>Import the last 90 days of orders<\/strong>.<\/li>\n<\/ol>\n\n<p>Your site must use HTTPS \u2014 browsers only allow push notifications on secure\nsites (and on localhost for testing). The status panel tells you if anything\nneeds attention.<\/p>\n\n<p>The WooCommerce integration loads by itself when WooCommerce is active \u2014 there is\nnothing extra to set up.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20woocommerce%3F\"><h3>Do I need WooCommerce?<\/h3><\/dt>\n<dd><p>No. Without WooCommerce you get the opt-in prompt, publish-time pushes and post\nrecommendations. The commerce features switch on by themselves when WooCommerce\nis active.<\/p><\/dd>\n<dt id=\"do%20subscribers%20need%20to%20give%20an%20email%20address%3F\"><h3>Do subscribers need to give an email address?<\/h3><\/dt>\n<dd><p>No. Web push works from the browser subscription alone. If a user is logged in,\nrelaybell also binds their account email as an <code>externalId<\/code> for richer targeting;\nyou can substitute a hashed value with the <code>relaybell_external_id<\/code> filter.<\/p><\/dd>\n<dt id=\"how%20do%20recommendations%20work%3F\"><h3>How do recommendations work?<\/h3><\/dt>\n<dd><p>The plugin keeps relaybell's copy of your catalog up to date (products and posts),\nand records what each subscribed visitor opens. relaybell turns that, plus their\ncart adds, purchases and notification clicks, into an interest profile per\nsubscriber. Put <code>{rec.title}<\/code>, <code>{rec.url}<\/code>, <code>{rec.price}<\/code> or <code>{rec.summary}<\/code> in a\nnotification \u2014 or choose \"Recommend a product\" in the relaybell composer \u2014 and\neach subscriber gets their own pick. Someone relaybell doesn't know yet gets your\npopular items.<\/p><\/dd>\n<dt id=\"what%20exactly%20is%20sent%20for%20the%20catalog%3F%20can%20i%20leave%20something%20out%3F\"><h3>What exactly is sent for the catalog? Can I leave something out?<\/h3><\/dt>\n<dd><p>The public details of published products and posts: title, link, image, price,\ncategory, brand, tags, a short summary and stock status \u2014 see \"External\nservices\" (11). Untick <strong>Send my products<\/strong> or <strong>Send my posts<\/strong> under\n<strong>Settings \u2192 relaybell \u2192 Personalization<\/strong> to stop sending them (they are then\nremoved from relaybell). Developers can leave out single items or change what is\nsent with the <code>relaybell_catalog_item<\/code> filter.<\/p><\/dd>\n<dt id=\"will%20syncing%20slow%20down%20my%20site%20or%20my%20edits%3F\"><h3>Will syncing slow down my site or my edits?<\/h3><\/dt>\n<dd><p>No. Saving a post or a product only notes its id; WP-Cron sends the changes in\nthe background within about a minute, and the full catalog goes out 100 items per\nrun, picking up where it stopped if a run is interrupted. On a site with little\ntraffic, WP-Cron runs less often, so a large first sync can take a while \u2014 the\nstatus on <strong>Settings \u2192 relaybell<\/strong> shows how far it got.<\/p><\/dd>\n<dt id=\"can%20i%20recommend%20courses%2C%20listings%20or%20other%20custom%20post%20types%3F\"><h3>Can I recommend courses, listings or other custom post types?<\/h3><\/dt>\n<dd><p>Yes. Add your post type with the <code>relaybell_catalog_post_types<\/code> filter, and use\n    relaybell_catalog_item_type to send it as a <code>course<\/code> or <code>listing<\/code> (it is an\n    article otherwise).<\/p><\/dd>\n<dt id=\"what%20does%20%22import%20the%20last%2090%20days%20of%20orders%22%20send%3F%20is%20it%20safe%20to%20run%20twice%3F\"><h3>What does \"Import the last 90 days of orders\" send? Is it safe to run twice?<\/h3><\/dt>\n<dd><p>The paid orders of the last 90 days, with the same details as a new order's\n    purchase event. relaybell keeps only orders from customers who already get your\nnotifications, and never counts an order twice \u2014 not even one it already got\nwhen it was placed \u2014 so you can run it again at any time.<\/p><\/dd>\n<dt id=\"how%20do%20i%20send%20a%20test%20notification%3F\"><h3>How do I send a test notification?<\/h3><\/dt>\n<dd><p>On <strong>Settings \u2192 relaybell<\/strong>, click <strong>Subscribe this browser<\/strong> (allow notifications\nwhen your browser asks), then <strong>Send test push<\/strong>. The test goes only to your own\nbrowser \u2014 never to your subscribers \u2014 and appears within a few seconds. The\nsettings page then tells you whether it reached this browser, and what to check\nif you don't see it.<\/p>\n\n<p>If no permission pop-up appears, look for a bell icon in the address bar and\nchoose Allow. If notifications are blocked, the status panel explains how to\nunblock them.<\/p><\/dd>\n<dt id=\"the%20test%20push%20works%2C%20but%20my%20visitors%20never%20get%20my%20posts\"><h3>The test push works, but my visitors never get my posts<\/h3><\/dt>\n<dd><p>Most often your relaybell account email isn't verified yet. Until it is,\nrelaybell doesn't send anything to your visitors \u2014 new-post pushes, campaigns\nand automations are all held back \u2014 while test pushes to your own browser still\nwork. Click the link in the email relaybell sent when you signed up (check your\nspam folder), or send it again from your relaybell dashboard. The status panel\nand the Plugins screen show a red warning while this is the case.<\/p>\n\n<p>Also check that <strong>Send on publish<\/strong> is turned on (it is off by default) and,\nif you use <strong>Category \u2192 topic<\/strong>, that relaybell has a topic for the post's\ncategory. Password-protected posts are never pushed.<\/p><\/dd>\n<dt id=\"i%20use%20a%20page%20cache%20or%20a%20cdn%20%E2%80%94%20do%20i%20need%20to%20do%20anything%3F\"><h3>I use a page cache or a CDN \u2014 do I need to do anything?<\/h3><\/dt>\n<dd><p>relaybell's set-up is part of every page, so a cached page keeps the set-up it\nwas saved with. When you connect, disconnect, change the connection or update\nthe plugin, relaybell clears the cache of WP Rocket, LiteSpeed Cache, W3 Total\nCache, WP Super Cache, SiteGround Speed Optimizer, Breeze, Nginx Helper, Cache\nEnabler, WP Fastest Cache, WP-Optimize, Hummingbird, WP Engine and Kinsta. If\nyour host or a CDN such as Cloudflare caches your pages too, clear that cache\nyourself. The status panel warns when visitors still get an older copy, and\nshows when relaybell last ran on your public pages. (Developers: other caches\ncan hook into <code>relaybell_purge_page_caches<\/code>.)<\/p><\/dd>\n<dt id=\"how%20does%20%22category%20%E2%86%92%20topic%22%20work%3F\"><h3>How does \"Category \u2192 topic\" work?<\/h3><\/dt>\n<dd><p>With it on, each new post is sent only to subscribers who follow the relaybell\ntopic named like the post's primary category \u2014 for example a topic \"Tech News\"\nfor the category <code>tech-news<\/code>. Create those topics in your relaybell dashboard\n(Audience \u2192 Topics) first: a post whose category has no matching topic isn't\npushed. Visitors choose their topics in the box your site opens with\n    RelayBell.showPreferences() (for example from a \"Notification settings\" link).<\/p><\/dd>\n<dt id=\"the%20status%20panel%20says%20my%20site%20isn%27t%20on%20https\"><h3>The status panel says my site isn't on HTTPS<\/h3><\/dt>\n<dd><p>Browsers only allow push notifications on HTTPS sites, plus <code>localhost<\/code> for\ndevelopment. Enable HTTPS (most hosts offer a free certificate), and make sure\nboth addresses under <strong>Settings \u2192 General<\/strong> start with <code>https:\/\/<\/code>.<\/p><\/dd>\n<dt id=\"connect%20doesn%27t%20work%20on%20my%20server\"><h3>Connect doesn't work on my server<\/h3><\/dt>\n<dd><p>Your server must be able to make outgoing HTTPS requests to relaybell.com. If\nyour host blocks that, open <strong>Advanced<\/strong> on the settings page and enter your\nProject ID and an API key from the relaybell dashboard manually.<\/p><\/dd>\n<dt id=\"does%20it%20support%20hpos%20%28custom%20order%20tables%29%3F\"><h3>Does it support HPOS (custom order tables)?<\/h3><\/dt>\n<dd><p>Yes. The plugin declares <code>custom_order_tables<\/code> compatibility and uses the\nWooCommerce CRUD APIs throughout.<\/p><\/dd>\n<dt id=\"which%20hooks%2Ffilters%20can%20i%20use%3F\"><h3>Which hooks\/filters can I use?<\/h3><\/dt>\n<dd><ul>\n<li><code>relaybell_external_id<\/code> \u2014 swap the account email for a hashed id. Also applied\nto the customer email sent with WooCommerce events and the past-orders import\n(<code>$user<\/code> is null for a guest order).<\/li>\n<li><code>relaybell_sdk_init<\/code> \u2014 modify the full SDK init options. For a logged-in\nvisitor the plugin identified, the <code>userHash<\/code> for the <code>externalId<\/code> you return is\nadded afterwards.<\/li>\n<li><code>relaybell_user_hash( $external_id )<\/code> (function) \u2014 the <code>userHash<\/code> for an id your\nown code passes to relaybell (e.g. to <code>RelayBell.identify( id, hash )<\/code>), so\nrelaybell accepts it while User ID verification is on.<\/li>\n<li><code>relaybell_publish_payload<\/code> \u2014 modify the publish push body.<\/li>\n<li><code>relaybell_category_topic<\/code> \u2014 map a post's primary category to a relaybell\ntopic (its slug, or its id).<\/li>\n<li><code>relaybell_woo_event_payload<\/code> \u2014 modify any commerce event body before sending.<\/li>\n<li><code>relaybell_catalog_post_types<\/code> \u2014 the post types sent to the catalog as content\n(default: <code>post<\/code>).<\/li>\n<li><code>relaybell_catalog_item_type<\/code> \u2014 a post's catalog type: <code>article<\/code> (default),\n  course, <code>listing<\/code>, <code>product<\/code> or <code>other<\/code>.<\/li>\n<li><code>relaybell_catalog_item<\/code> \u2014 change a catalog item before it is sent, or return\nnull to leave it out.<\/li>\n<li><code>relaybell_catalog_brand_taxonomies<\/code> \u2014 where a product's brand is read from.<\/li>\n<li><code>relaybell_purge_page_caches<\/code> (action) \u2014 clear a page cache or CDN relaybell\ndoesn't know, whenever relaybell clears page caches.<\/li>\n<\/ul><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>New: personalized recommendations. Your published WooCommerce products and blog\nposts are sent to relaybell's catalog \u2014 the public details only (title, link,\nimage, price, category, brand, tags, a short summary, stock) \u2014 so notifications\ncan recommend the right product or post to each subscriber. Two switches under\n<strong>Settings \u2192 relaybell \u2192 Personalization<\/strong>, both on by default.<\/li>\n<li>New: the catalog is sent in the background by WP-Cron, 100 items per run,\nresuming where it stopped; publishing, editing, unpublishing, trashing or\ndeleting a product or post, and stock changes, reach relaybell within about a\nminute. Saving never waits for relaybell. A <strong>Sync now<\/strong> button and a status in\nplain words (last full sync, items sent, last error).<\/li>\n<li>New: reading activity. For subscribed visitors, single posts record\n  content.viewed, and <code>content.read<\/code> once the reader scrolled 75% of the page or\nstayed 30 seconds.<\/li>\n<li>New: <code>product.viewed<\/code> now carries the product's category, price, currency,\nbrand, page address and image, and is recorded while Price drop or \"Send my\nproducts\" is on.<\/li>\n<li>New: <code>purchase<\/code> and <code>checkout.started<\/code> now carry the order number and the\nproducts bought (id, name, category, price, quantity \u2014 up to 50);\n  order.refunded carries the order number.<\/li>\n<li>New: <strong>Import the last 90 days of orders<\/strong> (optional, WooCommerce): past paid\norders give recommendations a head start. Only orders from customers who already\nget your notifications are kept, running it again never counts an order twice,\nand an imported order isn't sent again when its status changes later.<\/li>\n<li>New: suggested privacy policy text (Settings \u2192 Privacy \u2192 Policy guide) saying\nwhat relaybell receives about subscribers and customers.<\/li>\n<li>New: filters <code>relaybell_catalog_post_types<\/code>, <code>relaybell_catalog_item_type<\/code>,\n  relaybell_catalog_item and <code>relaybell_catalog_brand_taxonomies<\/code>.<\/li>\n<li>Change: after updating, the first visit to wp-admin starts one full catalog\nsync in the background.<\/li>\n<li>Docs: the plugin page describes every feature, and \"External services\" lists\nthe new catalog, reading-activity and import requests.<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Change: the \"Connect relaybell\" and \"account email isn't verified\" notices now\nappear only on the Plugins screen, only for administrators, and can be dismissed\nfor good. They no longer appear on the Dashboard. Settings \u2192 relaybell keeps\nshowing the same status.<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Change: the settings page's styles and scripts are now regular files\n(<code>assets\/relaybell-admin.css<\/code>, <code>assets\/relaybell-admin.js<\/code>,\n  assets\/relaybell-notice.js) loaded through WordPress's script and style\nqueues, instead of being printed into the page. The page works exactly as\nbefore.<\/li>\n<li>Change: the \"Notify me when back in stock\" button's markup is escaped when it\nis printed.<\/li>\n<li>Fix: the status panel now says \"1 subscriber\" instead of \"1 subscribers\".<\/li>\n<li>Change: the status panel checks that the relaybell script is reachable without\nrunning it in wp-admin, and the Disconnect confirmation is part of the\nsettings script.<\/li>\n<li>Change: the relaybell host (Advanced) must be an https:\/\/ address, and the\nhome-page cache check keeps TLS certificate checks on.<\/li>\n<li>Change: the clean-up that runs when you delete the plugin uses prepared\ndatabase queries. It removes the same data as before.<\/li>\n<li>Docs: \"External services\" now lists every request, including the opt-in\nprompt and on-site message stats, topic preferences, test devices and\ncancelling the API key on disconnect.<\/li>\n<li>Docs: older changelog entries moved to <code>changelog.txt<\/code>.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Security: someone could send relaybell a logged-in customer's email from their\nown browser and then get that customer's notifications (cart reminders and other\npersonal pushes). Your site now signs each logged-in visitor's ID with a secret\nonly your server and relaybell know, and the plugin turns on relaybell's User ID\nverification for your project, so an ID without a valid signature is ignored.\nIt picks up the secret when you connect, when you open Settings \u2192 relaybell, and\nonce a day. Nothing to set up.<\/li>\n<li>New: a status row on Settings \u2192 relaybell says whether visitor sign-in IDs are\nverified.<\/li>\n<li>New: <code>relaybell_user_hash()<\/code> for themes and plugins that pass their own IDs to\nrelaybell.<\/li>\n<\/ul>\n\n<p>Older versions are listed in <code>changelog.txt<\/code> in the plugin folder.<\/p>","raw_excerpt":"Web push for WordPress &amp; WooCommerce: personalized product and post recommendations, cart reminders, back-in-stock alerts and automations.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/390617","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=390617"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/relaybell"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=390617"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=390617"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=390617"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=390617"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=390617"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=390617"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}