{"id":342779,"date":"2026-07-29T19:34:47","date_gmt":"2026-07-29T19:34:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sendly-sms-for-woocommerce\/"},"modified":"2026-07-29T19:34:40","modified_gmt":"2026-07-29T19:34:40","slug":"sendly","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/sendly\/","author":23535357,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.0.2","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Sendly SMS for WooCommerce","header_author":"Tom Lebioda","header_description":"Sends transactional SMS to customers through the Sendly gateway when a WooCommerce order status changes. Per-status templates, alphanumeric sender ID, delivery receipts and RODO\/GDPR opt-out.","assets_banners_color":"7a43ec","last_updated":"2026-07-29 19:34:40","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/buycoffee.to\/tomaleb","header_plugin_uri":"https:\/\/sendly.link\/","header_author_uri":"https:\/\/tomlebioda.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":33,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"tomlwbioda","date":"2026-07-29 19:34:40"}},"upgrade_notice":{"1.0.1":"<p>Compatibility update; no functional changes.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3627632,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3627632,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3627632,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3627632,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3627632,"resolution":"1","location":"assets","locale":"","width":1360,"height":2800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3627632,"resolution":"2","location":"assets","locale":"","width":1360,"height":1560}},"screenshots":{"1":"The Sendly SMS settings \u2014 visible API token, sender number and ID, options, and per-status message templates with the live UCS-2\/GSM-7 segment counter.","2":"An order note recording the delivered SMS and its Sendly message ID."}},"plugin_section":[],"plugin_tags":[4906,21484,273730,711,286],"plugin_category":[41,45],"plugin_contributors":[273731],"plugin_business_model":[],"class_list":["post-342779","plugin","type-plugin","status-publish","hentry","plugin_tags-notifications","plugin_tags-order-status","plugin_tags-sendly","plugin_tags-sms","plugin_tags-woocommerce","plugin_category-communication","plugin_category-ecommerce","plugin_contributors-tomlwbioda","plugin_committers-tomlwbioda"],"banners":{"banner":"https:\/\/ps.w.org\/sendly\/assets\/banner-772x250.png?rev=3627632","banner_2x":"https:\/\/ps.w.org\/sendly\/assets\/banner-1544x500.png?rev=3627632","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/sendly\/assets\/icon-128x128.png?rev=3627632","icon_2x":"https:\/\/ps.w.org\/sendly\/assets\/icon-256x256.png?rev=3627632","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/sendly\/assets\/screenshot-1.png?rev=3627632","caption":"The Sendly SMS settings \u2014 visible API token, sender number and ID, options, and per-status message templates with the live UCS-2\/GSM-7 segment counter."},{"src":"https:\/\/ps.w.org\/sendly\/assets\/screenshot-2.png?rev=3627632","caption":"An order note recording the delivered SMS and its Sendly message ID."}],"raw_content":"<!--section=description-->\n<p>Sendly sends a text message to the customer whenever a WooCommerce order changes status \u2014 for example when payment is received (Processing), the order is shipped (Completed), or it is cancelled. Messages are delivered through the <strong>Sendly<\/strong> SMS gateway and can be shown with an alphanumeric sender ID (\"nadpis\", e.g. your shop name) instead of a phone number.<\/p>\n\n<p><strong>Key features<\/strong><\/p>\n\n<ul>\n<li>Per-status on\/off switch and editable message template (works with custom order statuses too).<\/li>\n<li>Placeholders: <code>{shop_name}<\/code>, <code>{order_number}<\/code>, <code>{order_total}<\/code>, <code>{currency}<\/code>, <code>{customer_first_name}<\/code>, <code>{customer_last_name}<\/code>, <code>{order_status}<\/code>, optional <code>{tracking_number?}<\/code>.<\/li>\n<li>Asynchronous sending via Action Scheduler \u2014 checkout is never blocked by the SMS call.<\/li>\n<li>Automatic retries with exponential backoff and per-order idempotency (no duplicate texts).<\/li>\n<li>International-ready phone normalisation based on the order's billing country.<\/li>\n<li>Live SMS segment\/encoding counter (GSM-7 vs UCS-2) so you can see cost while editing templates.<\/li>\n<li>\"Send test SMS\" button in the settings.<\/li>\n<li>Optional delivery receipts (DLR webhook) that record DELIVERED\/ERROR on the order.<\/li>\n<li>Optional RODO\/GDPR consent (opt-out) checkbox at checkout.<\/li>\n<li>Create a Sendly account straight from the plugin (100 free SMS to start) \u2014 no separate signup needed.<\/li>\n<li>Quick links to the Sendly customer panel.<\/li>\n<li>Per-order audit as order notes, plus a \"sendly\" channel in WooCommerce \u2192 Status \u2192 Logs. Configurable retention; phone numbers are masked and message bodies are not stored by default.<\/li>\n<li>HPOS (High-Performance Order Storage) compatible.<\/li>\n<\/ul>\n\n<p><strong>Sender ID (nadpis)<\/strong><\/p>\n\n<p>The Sendly API field <code>from<\/code> accepts a numeric virtual number only. The alphanumeric sender ID is configured on the Sendly side and bound to that number. The plugin provides a sender-ID field and a forward-compatible hook (<code>sendly_request_body<\/code>) so it can be sent in the API payload once Sendly exposes that option.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin relies on two external services. You need a Sendly account and API token to use it.<\/p>\n\n<p><strong>1. Sendly SMS gateway<\/strong> \u2014 used to deliver every SMS.<\/p>\n\n<ul>\n<li>Endpoint: <code>https:\/\/api.sendly.link\/api\/sms<\/code><\/li>\n<li>Data sent: the destination mobile phone number, the rendered message text (which may include the order number, order total, the customer's first\/last name and \u2014 when you enable \"order notes as SMS\" \u2014 the note text you write), and your Sendly sender number and API token (for authentication).<\/li>\n<li>When: on enabled order status transitions, when you add a manual order note (if that option is enabled), and on manual \"Send test SMS\". Delivery receipts are received (Sendly posts to your site); your site makes no outbound status-query call.<\/li>\n<li>Provider: Sendly (Syntell S.A.). Website: https:\/\/sendly.link\/<\/li>\n<li>Terms of Service: https:\/\/sendly.link\/pl\/regulamin\/ \u2014 Privacy Policy: https:\/\/sendly.link\/pl\/polityka-prywatnosci\/<\/li>\n<\/ul>\n\n<p><strong>2. Sendly registration page (sendly.link)<\/strong> \u2014 used only if you choose to create an account from inside the plugin.<\/p>\n\n<ul>\n<li>Page: <code>https:\/\/sendly.link\/pl\/rejestracja\/<\/code><\/li>\n<li>Data sent: when you click \"Create account\", the details you typed (name, e-mail, company name, tax ID, address, phone, and the shop name shown as the SMS sender) are posted to your own site (admin-ajax) so it can store your e-mail and shop name and build the link; your browser is then redirected to the page above with those details pre-filled via the URL fragment. The plugin does not forward this data to any third-party server \u2014 your browser carries it to sendly.link, and the fragment does not reach server logs. You set the password and complete a bot-check on sendly.link, then return to your site. The password never touches your WordPress site.<\/li>\n<li>When: only when you submit the in-plugin signup form.<\/li>\n<li>Provider: Sendly (Syntell S.A.). Terms: https:\/\/sendly.link\/pl\/regulamin\/ \u2014 Privacy Policy: https:\/\/sendly.link\/pl\/polityka-prywatnosci\/<\/li>\n<\/ul>\n\n<p>Make sure you have a lawful basis and, where required, a data-processing agreement with the provider.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>sendly<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the ZIP via Plugins \u2192 Add New \u2192 Upload.<\/li>\n<li>Activate the plugin. WooCommerce must be active.<\/li>\n<li>Go to WooCommerce \u2192 Settings \u2192 SMS.<\/li>\n<li>Enter your Sendly API token; the sender number (from) is optional.<\/li>\n<li>Enable the order statuses you want and adjust the message templates.<\/li>\n<li>Use \"Send test SMS\" to verify your configuration.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20sendly%20account%3F\"><h3>Do I need a Sendly account?<\/h3><\/dt>\n<dd><p>Yes. You need a Sendly SMS account, a virtual number and an API token. The plugin makes this easy: go to WooCommerce \u2192 Settings \u2192 SMS \u2192 Sign up for Sendly, fill in your details and click \"Create account\" \u2014 you finish on sendly.link (password + bot check) and get 100 free SMS to start. Alternatively register directly at https:\/\/sendly.link\/pl\/rejestracja\/ .<\/p><\/dd>\n<dt id=\"why%20is%20my%20sender%20shown%20as%20a%20number%20instead%20of%20my%20shop%20name%3F\"><h3>Why is my sender shown as a number instead of my shop name?<\/h3><\/dt>\n<dd><p>The alphanumeric sender ID (\"nadpis\") is registered and bound to your number on Sendly's side. The plugin's API call sends only the numeric <code>from<\/code>; the provider substitutes the approved sender ID.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20the%20block-based%20checkout%3F\"><h3>Does it work with the block-based checkout?<\/h3><\/dt>\n<dd><p>The opt-out consent checkbox uses the classic checkout hooks. Order-status SMS sending works regardless of the checkout type.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20checkout%3F\"><h3>Will it slow down checkout?<\/h3><\/dt>\n<dd><p>No. Sending happens in the background through Action Scheduler.<\/p><\/dd>\n<dt id=\"how%20are%20delivery%20receipts%20%28dlr%29%20secured%3F\"><h3>How are delivery receipts (DLR) secured?<\/h3><\/dt>\n<dd><p>The DLR endpoint is guarded by a random shared secret. The settings page shows a ready-to-use URL with the secret in the query string for convenience; you can instead send the secret in an <code>X-Sendly-Secret<\/code> HTTP header to keep it out of access logs. The secret can be regenerated from the settings page at any time (the old URL then stops working).<\/p><\/dd>\n<dt id=\"can%20i%20send%20to%20international%20numbers%3F\"><h3>Can I send to international numbers?<\/h3><\/dt>\n<dd><p>Phone numbers are normalised using the order's billing country. Actual delivery depends on what the Sendly gateway supports; numbers outside the gateway's accepted length are skipped and logged.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Use boolean autoload values in add_option()\/update_option() for WordPress 6.7+ compatibility.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: per-status SMS via Sendly, async sending with retries, phone normalisation, encoding\/segment counter, test-SMS button, delivery receipts, RODO opt-out, activity log and HPOS support.<\/li>\n<\/ul>","raw_excerpt":"SMS notifications for WooCommerce via the Sendly gateway on order status change. Per-status templates and an alphanumeric sender ID.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/342779","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=342779"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tomlwbioda"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=342779"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=342779"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=342779"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=342779"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=342779"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=342779"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}