<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[OneText]]></title><description><![CDATA[OneText]]></description><link>https://blog.onetext.com</link><image><url>https://cdn.hashnode.com/uploads/logos/6a48a981c405023e280c9c99/4080ca8a-5e57-42e9-ba8d-074f401a8768.png</url><title>OneText</title><link>https://blog.onetext.com</link></image><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 01:01:16 GMT</lastBuildDate><atom:link href="https://blog.onetext.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Give every integration its own API key]]></title><description><![CDATA[If you connect OneText to more than one system, you've probably wished each one could have its own key. Now it can.
Until now, your account had a single API key, and every integration you built shared]]></description><link>https://blog.onetext.com/2026-07-27-multiple-api-keys</link><guid isPermaLink="true">https://blog.onetext.com/2026-07-27-multiple-api-keys</guid><category><![CDATA[api]]></category><category><![CDATA[developers]]></category><category><![CDATA[integrations]]></category><category><![CDATA[ecommerce]]></category><dc:creator><![CDATA[Daniel Brain]]></dc:creator><pubDate>Tue, 28 Jul 2026 02:55:25 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1785207325226/1310834e-91ea-4169-bdec-e3446121fd82.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you connect OneText to more than one system, you've probably wished each one could have its own key. Now it can.</p>
<p>Until now, your account had a single API key, and every integration you built shared it. That worked, but it made a few everyday things harder than they should be. There was no way to tell which system was using the key. Rotating it for one integration broke every other integration at the same moment. And revoking access for a single tool meant cutting off all of them at once.</p>
<h2>One account, many keys</h2>
<p>Your account can now hold up to 10 API keys, and you give each one a name. Call them whatever helps you keep track: the name of the service, the team that owns it, or the job it does. Each key sits in its own card with its account token and client token, ready to copy into the tool that needs it.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1785207324016/fe67acf6-cf0f-46d2-b8be-43c1d34e0a2f.png" alt="The API Credentials page listing several named keys, each with its own account and client token" /></p>
<p>This is the whole point. Instead of one shared secret behind everything, you get a key per integration, and the list reads like a map of what's connected to your account.</p>
<h2>Rotate or delete each one on its own</h2>
<p>Every key has its own actions menu. Rotating a key issues a new secret for that key and leaves the rest untouched, so updating one integration no longer disturbs the others. Deleting a key revokes it for good. If a tool is retired or a secret leaks, you remove that one key and nothing else changes.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1785207324543/992e7929-2757-4e5a-8836-30b4d6db0ab7.png" alt="The per-key actions menu, with options to rotate or delete that key" /></p>
<p>Both actions ask you to confirm first, so there are no surprises.</p>
<h2>Naming a new key</h2>
<p>Adding a key takes one step. Give it a name and generate it.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1785207324786/15874a08-99b7-4ecc-b2ee-b53b5b6d4dde.png" alt="Naming a new API key before generating it" /></p>
<p>The moment a key is created, we show you its secret once. This is the only time it's ever visible, so copy it and store it somewhere safe before you close the panel. If you lose it, you rotate the key to get a new one. We show the account token, client token, secret, and a ready-to-use authorization header, so you can drop the credentials straight into your integration.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1785207325009/7a56300b-9523-4cb6-8a64-d56f44bc145f.png" alt="The one-time secret reveal, shown once when a key is created" /></p>
<h2>Klaviyo gets its own key automatically</h2>
<p>When you connect Klaviyo for consent syncing, OneText now creates a dedicated key just for that connection, named so you can spot it in the list at a glance. You don't have to set anything up, and because it's a separate key, you can rotate or remove the Klaviyo connection without touching the keys your other integrations rely on.</p>
<h2>Why it helps</h2>
<p>Separate keys make your setup easier to reason about and safer to run. You can see what's connected, hand each tool exactly the access it needs, and change one thing without a ripple through everything else. It's the same idea behind our <a href="https://onetext.hashnode.dev/2026-07-04-webhook-flow-step">Webhook step for flows</a>: give developers clean, predictable building blocks to wire OneText into their own systems.</p>
<p>You'll find all of this under <strong>Settings → API Credentials</strong>. If you already have a key, it's waiting there, and you can start adding more whenever you're ready.</p>
]]></content:encoded></item><item><title><![CDATA[Now any discount can be a unique code]]></title><description><![CDATA[Earlier today we launched unique codes per customer, a way to give every shopper their own single-use discount code so the code you text can't be reposted or shared. At launch it worked with discount ]]></description><link>https://blog.onetext.com/2026-07-10-unique-codes-from-any-discount</link><guid isPermaLink="true">https://blog.onetext.com/2026-07-10-unique-codes-from-any-discount</guid><category><![CDATA[ecommerce]]></category><category><![CDATA[discounts]]></category><category><![CDATA[shopify]]></category><category><![CDATA[SMS Marketing]]></category><dc:creator><![CDATA[Daniel Brain]]></dc:creator><pubDate>Fri, 10 Jul 2026 22:08:23 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1783721319717/0ee41222-639c-4ba9-b19c-4d7473920234.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Earlier today we launched <a href="https://onetext.hashnode.dev/2026-07-10-unique-discount-codes">unique codes per customer</a>, a way to give every shopper their own single-use discount code so the code you text can't be reposted or shared. At launch it worked with discount codes you'd already built in Shopify. Now it works with any discount.</p>
<p>Here's the shortcut: you don't need to create a discount in Shopify first at all. Pick <strong>Percentage</strong> or <strong>Amount</strong> in the OneText discount settings, type the value, and turn on <strong>Unique code per customer</strong>. When a shopper reaches the offer, OneText mints a brand-new single-use code worth that amount and hands it to them.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783721319078/2c0333c3-e057-459e-81fd-2a896ed69ea0.png" alt="A percentage discount in the flow editor with Unique code per customer turned on" /></p>
<p>Want to take a flat amount off instead? Same steps, switch the type to <strong>Amount</strong> and enter the dollar value.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783721319502/6789e884-ccfe-4d50-a73d-f0df5843de02.png" alt="An amount discount with the same Unique code per customer toggle" /></p>
<h2>The code just works</h2>
<p>Each code OneText creates is a real discount code on your store, so it works everywhere your codes normally do. If the shopper buys straight from a text, OneText applies their code to the order for them, with nothing to type. If they'd rather visit your site and check out there, the same code works at the cart. Either way it's good for one use and tied to that one shopper.</p>
<h2>Why it matters</h2>
<p>This takes a whole step out of running a promotion. No jumping into Shopify to build a code, copy it back into OneText, and hope it doesn't leak. You set the value once, and every shopper gets a private code that applies itself when they buy. Less setup for you, a smoother checkout for them.</p>
<p>You'll find it in the flow editor, in the discount settings for your purchase, offer, and message steps, for Shopify stores with discounts connected. Open a flow, add a discount, pick a percentage or an amount, and switch on <strong>Unique code per customer</strong>.</p>
]]></content:encoded></item><item><title><![CDATA[Discount codes that can't be shared]]></title><description><![CDATA[You text a discount to the shoppers who actually opted in, and a few hours later that same code is sitting on a coupon-aggregator site or copied into a group chat. One shared code is easy to send, but]]></description><link>https://blog.onetext.com/2026-07-10-unique-discount-codes</link><guid isPermaLink="true">https://blog.onetext.com/2026-07-10-unique-discount-codes</guid><category><![CDATA[ecommerce]]></category><category><![CDATA[discounts]]></category><category><![CDATA[shopify]]></category><category><![CDATA[SMS Marketing]]></category><dc:creator><![CDATA[Daniel Brain]]></dc:creator><pubDate>Fri, 10 Jul 2026 08:08:20 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1783670916477/91e01778-15fc-4a10-a9d3-c59f8fe8219d.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You text a discount to the shoppers who actually opted in, and a few hours later that same code is sitting on a coupon-aggregator site or copied into a group chat. One shared code is easy to send, but once it's out in the world, anyone can use it. The people you meant to reward end up sharing the reward with strangers.</p>
<p>The new <strong>Unique code per customer</strong> toggle changes that. Turn it on for a discount in your flows, and instead of handing everyone the same code, OneText clones your discount into a fresh, single-use code for each shopper. Every person gets their own code, it works exactly once, and the original code you set up never leaves your store.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783670915966/02e6081a-4012-45b7-85e4-d13eab8dbe32.png" alt="The Unique code per customer toggle in a purchase step's discount settings, inside the flow editor" /></p>
<h2>How it works</h2>
<p>Set up a code discount the way you always would, then open <strong>Advanced discount options</strong> and switch on <strong>Unique code per customer</strong>. From then on, whenever a shopper reaches that step, OneText creates a brand-new code just for them, cloned from your template, and shows them that code instead of the shared one. Because each code is single-use, there's nothing to gain from passing it along. It's already spent the moment that customer redeems it.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783670916298/548d92de-a444-4748-964b-0369c08c13e8.png" alt="Turn on Unique code per customer under any code discount, and set how long each cloned code stays valid" /></p>
<p>You can still set an expiry, so each unique code winds down on the same schedule as the offer. The shopper sees a real, working code in their text, and the master code behind it stays private.</p>
<h2>Why it matters</h2>
<p>A discount is only as valuable as your control over who uses it. With one shared code, a single screenshot can turn a targeted offer into a public giveaway. With a unique code per customer, the offer stays with the people you actually sent it to. You get the reach of a texted discount without the leakage.</p>
<p>You'll find it in the flow editor, under the discount settings for your purchase, offer, and message steps, for Shopify stores with discounts connected. Open a flow, add a code discount, and turn on <strong>Unique code per customer</strong>. Already sending <a href="https://onetext.hashnode.dev/2026-07-04-rcs-flow-editor">rich product cards from the same flow editor</a>? This slots right in beside them.</p>
]]></content:encoded></item><item><title><![CDATA[The popup builder]]></title><description><![CDATA[Every visitor who lands on your store and leaves without joining your list is a conversation you'll never get to have. The popup builder is how you catch them. It's the OneText tool for designing on-s]]></description><link>https://blog.onetext.com/2026-07-04-spotlight-popup-builder</link><guid isPermaLink="true">https://blog.onetext.com/2026-07-04-spotlight-popup-builder</guid><category><![CDATA[ecommerce]]></category><category><![CDATA[popups]]></category><category><![CDATA[Opt-in]]></category><category><![CDATA[onetext]]></category><dc:creator><![CDATA[Daniel Brain]]></dc:creator><pubDate>Sat, 04 Jul 2026 22:02:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203966441/990db946-ecc8-4750-9e49-491c25bce9e4.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Every visitor who lands on your store and leaves without joining your list is a conversation you'll never get to have. The popup builder is how you catch them. It's the OneText tool for designing on-site opt-in popups that turn browsers into SMS and email subscribers you can text later.</p>
<p>This is a full run-through of what it does, from a blank canvas to a live popup you can measure. If you've only ever poked at it, here's everything that's inside.</p>
<h2>A canvas that shows exactly what ships</h2>
<p>You build a popup by dropping elements onto a canvas and arranging them, with a live render of the real popup the whole time. No code, and no guessing what it will look like once it's live. The left panel holds your pages and the layer tree, the canvas in the middle is the popup itself, and the right panel holds styling and your live color palette. Undo and redo work the way you'd expect, and every change saves as you go.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203964272/e4566587-83ff-4b9d-a83b-0cb6558da9be.png" alt="The popup builder: a drag-and-drop canvas with your popup in the middle, your pages on the left, and your live color palette on the right" /></p>
<h2>Design for the phone and the laptop in the same place</h2>
<p>Most of your shoppers are on a phone, some are on a desktop, and a popup that looks great on one can fall apart on the other. The builder keeps a mobile and a desktop version of every popup side by side, so you style each one for the screen it's on. Flip into preview and switch between the two to see exactly what a shopper sees before you publish.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203964405/273781b4-65a4-4788-9bb7-13edc5a19f47.png" alt="The popup previewed on mobile, rendered in a phone frame with the device switch at the top" /></p>
<p>Every element carries its own mobile and desktop styles, and you can hide an element on one device while keeping it on the other. The same popup, tuned for each screen.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203964546/2bbe71f9-2f53-4b0b-84c3-4427756fc72a.png" alt="The same popup previewed on desktop with a single tap of the device switch" /></p>
<h2>Every element you need to capture and convert</h2>
<p>Open the <strong>Insert</strong> menu and you get a full toolbox. Alongside the basics (text, images, your logo, and buttons) there's everything you need to actually collect a contact and hand back a reward.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203964714/063984d8-38d1-4d3a-a861-fa57de612d11.png" alt="The element menu: text, image, logo, quiz, email and phone fields, button, terms, spinner, coupon code, countdown, payment form, and scratch-off, all shown on a live popup" /></p>
<ul>
<li><strong>Email and phone fields</strong> to collect the contact info, with a country selector built into the phone field.</li>
<li><strong>A terms element</strong> that adds the SMS consent language for you, so your opt-in is compliant from the start.</li>
<li><strong>A quiz</strong> to collect zero-party data, so you learn something about a shopper while they sign up.</li>
<li><strong>A countdown timer</strong> for urgency, a <strong>coupon code</strong> element to reveal the reward, and a <strong>payment form</strong> for taking a card right in the popup.</li>
</ul>
<p>Every <strong>button</strong> can do more than submit. Point it at a URL, close the popup, or start a tap-to-text conversation, so one button can be a submit, a link, or a text starter depending on what you need.</p>
<h2>Games that make signing up worth it</h2>
<p>Two of the elements turn a plain form into something a shopper actually wants to finish. A <strong>spin-to-win</strong> wheel lets them spin for a prize, and a <strong>scratch-off</strong> hands them a ticket to scratch and reveal. The scratch-off comes with real ticket textures (crinkle, metallic, velvet, and lotto) and one-click presets, so it looks like a genuine scratcher rather than a gray box.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203964865/0cb5c379-984f-411e-b70b-182ad76f01d0.png" alt="A gamified popup: a gold scratch-off ticket that reveals a discount, above the email and phone fields" /></p>
<p>Both drop a real reward behind the fun, and both feed the same opt-in, so the shopper plays, wins, and joins your list in one motion.</p>
<h2>Style every detail to match your brand</h2>
<p>Styling is where it becomes <em>yours</em>. As you pick colors, the builder keeps a live palette of every color already in use, so it's easy to stay on-brand, and changing one swatch updates it everywhere it appears. You can set fonts and typography, background colors and images, borders, shadows, spacing, corner rounding, and reusable button styles, right down to a single element.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203965012/92c4ffb5-f2ae-44b5-bae8-728843da5889.png" alt="Selecting an element opens its styling controls: content, variant, color, font, and per-device visibility, next to the layer tree" /></p>
<p>Because those controls live on every element, and every element has separate mobile and desktop styles, you can get a heading exactly right on a phone without touching the desktop version.</p>
<h2>A card, or the whole screen</h2>
<p>A popup doesn't have to be a small box in the corner. Under <strong>Layout</strong> you choose between a <strong>Card</strong> that floats over the page and a <strong>Full Screen</strong> takeover that owns the moment, and you can switch a popup between one and two columns to fit an image alongside your form.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203965182/0be21fce-e0e9-4d81-b95e-b391e8a171d9.png" alt="The Layout panel: switch between a card and a full-screen takeover, and between one and two columns" /></p>
<h2>Build a multi-step flow</h2>
<p>A popup can be more than a single window. You can build it as a flow of pages, so a shopper moves from a teaser, to the signup form, to a confirmation. Add a page and you start from a ready-made layout (Email Signup, Phone Signup, a Quiz, a Confirmation screen, and more) or a blank one.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203965311/af341c1a-e5a8-40e0-bbc9-a172b5537df1.png" alt="The Add Page dialog: start a new page from a Micro Yes, Email Signup, Phone Signup, Quiz, Confirmation, Payment Form, or Blank layout" /></p>
<p>The confirmation page is where you pay the shopper back for signing up. Drop in a coupon code element and their reward is right there the moment they join.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203965448/3eefd6e0-1397-4a0d-b734-39b63afbc298.png" alt="A confirmation page thanking the shopper and revealing their coupon code" /></p>
<h2>Decide when it shows up</h2>
<p>A popup is only as good as its timing. In the settings you choose whether it opens on its own when someone arrives, how many seconds to wait first, and a cooldown so a shopper who already closed it isn't shown it again for a set number of days. Turn auto-open off and the popup waits behind a small teaser button until the shopper taps it.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203965592/2f188e56-4c17-4631-8386-3a1a8b24b371.png" alt="The settings panel: auto-open, a trigger delay in seconds, and a cooldown in days" /></p>
<h2>Show it to the right shopper</h2>
<p>You also decide <em>who</em> sees a popup. Targeting rules let you show or hide it based on the page URL or path (a collection-specific offer only on that collection), a keyword or query parameter in the link a shopper arrived from, their location, or their device. Layer the rules to get as specific as you want.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203965728/22cc301b-8982-492a-8498-a101276b0512.png" alt="The targeting panel: show or hide a popup by device, location, URL, path, or keyword, alongside the popup's opt-in charts" /></p>
<h2>Publish now, or on a schedule</h2>
<p>When it's ready, take it live in one click. Or set a <strong>schedule</strong>: give the popup a start and end date and it runs itself for a sale or a seasonal push, then steps aside on its own. The same screen shows how the live popup is performing, so you publish and measure in one place.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203965889/153e9be3-39eb-4945-86b3-0d774ff661d4.png" alt="The publish panel showing a popup that's currently live, next to its text and email opt-in charts" /></p>
<h2>Start from a proven template</h2>
<p>You don't have to start from a blank canvas. The <strong>templates gallery</strong> gives you pre-built popups designed to convert, each shown as a live preview, so you can pick a proven layout and swap in your brand. There's also a quick-start option that generates a popup from a short description when you'd rather begin from an idea.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203966057/4525a302-98ea-441c-bc7b-96f83407417a.png" alt="The templates gallery: pre-built popups you can start from, each shown as a live preview" /></p>
<h2>See what's actually working</h2>
<p>Once a popup is live, the builder measures it. You get site visitors, popups shown, and text and email opt-ins, each with its conversion rate and a trend over the range you pick.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203966181/c440fd0a-dc4d-4a59-b8bb-dbf4bdccaebc.png" alt="The popups dashboard: site visitors, popups shown, and text and email opt-ins with conversion rates and a daily breakdown" /></p>
<p>Break the numbers down by device, switch to net-new opt-ins to see only fresh subscribers, change the date range and interval, and export the whole thing to CSV. Every popup also has its own breakdown, so you can tell which offer is really pulling its weight.</p>
<h2>Run as many as you want</h2>
<p>You're not limited to one popup. Run a welcome offer, a scheduled sale popup, and a cart saver at the same time, each with its own targeting and schedule. Your popups list shows at a glance which are live, which are scheduled, and which are still drafts, and you can clone any of them to start the next one.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203966319/5ae3f3b3-8ecc-4ca7-becc-7d0d9548b8c4.png" alt="The My Popups list: several popups at once, tagged live, scheduled, or draft" /></p>
<h2>Why it matters</h2>
<p>Your list is the audience you actually own, and the popup builder is how you grow it, from your own store, on your terms. A popup that looks like your brand, shows to the right shopper at the right moment, and hands them a reason to join is the difference between a visitor who leaves and a subscriber you can bring back again and again.</p>
<p><strong>Head to Popups in your OneText dashboard.</strong> Start from a template or a blank canvas, drop in an email and phone field, publish it, and watch your list grow.</p>
]]></content:encoded></item><item><title><![CDATA[This month in AI & messages]]></title><description><![CDATA[This month we spent our time on the part of OneText your shoppers feel most directly: the AI that texts them back, and the messages that land on their phone. Here's a quick tour of what got better.

A]]></description><link>https://blog.onetext.com/2026-07-04-roundup-ai-and-messages</link><guid isPermaLink="true">https://blog.onetext.com/2026-07-04-roundup-ai-and-messages</guid><category><![CDATA[ecommerce]]></category><category><![CDATA[sms]]></category><category><![CDATA[AI]]></category><category><![CDATA[roundup]]></category><dc:creator><![CDATA[Daniel Brain]]></dc:creator><pubDate>Sat, 04 Jul 2026 20:07:04 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203962777/0af120da-c4d8-4e32-b7b8-e33ce50851b8.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This month we spent our time on the part of OneText your shoppers feel most directly: the AI that texts them back, and the messages that land on their phone. Here's a quick tour of what got better.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203962658/b9c136d4-abb4-4b65-85ad-3a4787913de7.png" alt="A shopper asking for gift ideas under $50, and the OneText assistant answering with tailored picks" /></p>
<h2>A more capable assistant, now for every store</h2>
<p>Your shoppers now chat with a single, more capable AI assistant that carries the whole conversation. It answers open-ended questions ("got any gift ideas under $50?"), recommends products, helps adjust a cart, and follows up, all in one natural back-and-forth. We'd been testing this unified assistant with a slice of stores, and this month we finished rolling it out to <strong>every</strong> OneText store. So every shopper gets the same capable, consistent experience.</p>
<h2>Also better this month</h2>
<ul>
<li><strong>Sharper product picks.</strong> When the assistant reaches for your popular products, it now runs its recommendation logic on top of them, so the suggestions stay tailored to what the shopper actually asked for instead of a generic bestseller list.</li>
<li><strong>A cleaner link in rich messages.</strong> In a rich (RCS) message that includes a single link, that link now sits inline in the card, right next to a tappable <strong>Browse Now</strong> button, giving shoppers a clear way to act straight from the message.</li>
<li><strong>Clearer discounts in recovery texts.</strong> Cart-recovery messages now state the discount in plain terms, like "15% off," rather than a bare code. And for subscription items, a "0% off" line no longer shows up at all.</li>
<li><strong>Fewer carts slip past recovery.</strong> Bundles whose item names include words like "free" or "gift" (think a "+ Free Starter Kit" set) now get their recovery texts once the order clears a few dollars, so genuine orders aren't passed over.</li>
</ul>
<h2>Why it matters</h2>
<p>The conversations your shoppers have with your store, and the texts they get from it, are the whole product as far as they're concerned. A more capable assistant, recommendations that fit, and messages that read cleanly all add up to more replies, more taps, and fewer people tuning out.</p>
<p>That's the month in AI and messages. More soon.</p>
]]></content:encoded></item><item><title><![CDATA[Write it, see it, send it]]></title><description><![CDATA[Writing a text for an automation used to take a little faith. You'd type your message, sprinkle in a first-name tag and a discount code, and hope it read the way you pictured once it landed on a real ]]></description><link>https://blog.onetext.com/2026-07-04-live-message-preview-flow-editor</link><guid isPermaLink="true">https://blog.onetext.com/2026-07-04-live-message-preview-flow-editor</guid><category><![CDATA[ecommerce]]></category><category><![CDATA[sms]]></category><category><![CDATA[automation]]></category><category><![CDATA[flow-editor]]></category><dc:creator><![CDATA[Daniel Brain]]></dc:creator><pubDate>Sat, 04 Jul 2026 18:24:29 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203960516/fc74d4f6-2128-41ae-99d1-5af5810faaaa.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Writing a text for an automation used to take a little faith. You'd type your message, sprinkle in a first-name tag and a discount code, and <em>hope</em> it read the way you pictured once it landed on a real phone. Was that line too long? Did the personalization sit right? Really, you only found out after it went out.</p>
<p>Now that changes. As you write <strong>any</strong> message step in the flow editor, a live phone preview sits right beside the editor and shows exactly what your customer will get: your brand name up top, your copy in the bubble, your discount code filled in. Edit the text and the preview updates as you type.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203960026/513b7b97-0228-4766-8e29-6f540bbfba24.png" alt="The message editor, with a live phone preview of the text sitting right beside it" /></p>
<h2>A preview on every message step</h2>
<p>This used to live on just the main message step. It rides along on the others now too. Your <strong>product picks</strong>, your <strong>cart recovery</strong> offers, anywhere you write a message, every message in your flow gets the same "see it before you send it" treatment. No more guessing. No more sending yourself test after test.</p>
<p>The editor itself got friendlier too. Template tags like <strong>First Name</strong> and <strong>Brand Name</strong> show as tidy chips, and there's a live character count right in the box, so you always know how long your message is running.</p>
<h2>Know what you're paying for, as you type</h2>
<p>Here's the part that quietly saves you money. Texts are billed in <strong>segments</strong>, and a message that spills one character over a boundary suddenly costs <em>two</em> segments instead of one. The preview now shows exactly where you stand: how many characters you've written, and how much room is left before the message ticks over into another segment.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203960184/ef6e16db-a33c-4cf4-901a-dddebf5a4a55.png" alt="The character count: 132 characters, one segment, with room to spare" /></p>
<p>Get close to the edge and it warns you. A friendly "<strong>6 left</strong>" lands before your message becomes a two-segment send, so you can trim a word and keep it lean, or knowingly let it grow.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203960319/ffb25d50-feae-469c-9155-c53eea00e35e.png" alt="A near-boundary warning: six characters left before this adds another segment" /></p>
<p>It even accounts for the fiddly bits. Emoji take up extra space, and links are counted after they shorten. All of it is handled for you, so the number you see is the number you're billed on.</p>
<h2>Why it matters</h2>
<p>Great automations live or die on the little details. A message reads warmly, personalizes cleanly, and doesn't quietly cost double because it ran one character long. Seeing your text exactly as your customer will, with the price right there as you write, means you ship messages you're confident in and never overpay by accident.</p>
<p><strong>Open any flow, pick a message step, and start typing.</strong> The preview is right there waiting. And if you want those messages to look even richer, <a href="https://onetext.hashnode.dev/2026-07-04-rcs-flow-editor">RCS lives in the same editor now</a>: cards, carousels, and buttons, previewed the same way.</p>
]]></content:encoded></item><item><title><![CDATA[Webhooks, right in your flows]]></title><description><![CDATA[Your OneText flows already handle plenty without any help from you. They welcome new subscribers, recover abandoned carts, and check in after a purchase. Every so often, though, a flow needs to tell y]]></description><link>https://blog.onetext.com/2026-07-04-webhook-flow-step</link><guid isPermaLink="true">https://blog.onetext.com/2026-07-04-webhook-flow-step</guid><category><![CDATA[ecommerce]]></category><category><![CDATA[automation]]></category><category><![CDATA[webhooks]]></category><category><![CDATA[developers]]></category><dc:creator><![CDATA[Daniel Brain]]></dc:creator><pubDate>Sat, 04 Jul 2026 18:24:01 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203967322/9e2060c9-aab9-4f26-85f1-6d1e7b8cba7f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Your OneText flows already handle plenty without any help from you. They welcome new subscribers, recover abandoned carts, and check in after a purchase. Every so often, though, a flow needs to tell <em>your</em> systems something. Maybe it should update an order, ping your warehouse, kick off fulfillment, or log an event in your own database.</p>
<p>The new <strong>Webhook step</strong> makes that a built-in part of any flow. Drop it in wherever it belongs, then point it at a URL you control. When a customer reaches that step, OneText sends a POST request to your endpoint, with the flow's data in the body. There's no middleware to run and no polling to set up, and you don't have to host any glue code.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203966913/4764c4c7-7277-42bd-ba48-77418b438702.png" alt="A Webhook step that fires after a customer replies YES to an order-confirmation text, then posts to the merchant's endpoint" /></p>
<h2>Add it where it fits</h2>
<p>It sits in the flow editor right next to your message, product, and purchase steps. Usually it belongs later in a flow, once something has actually happened. In the example above, the flow sends an order confirmation, waits for the customer to reply YES, and only then fires the webhook to notify the store's systems. Add a <strong>Webhook</strong> step, paste in your <strong>Webhook URL</strong>, and that's it. OneText will POST a JSON body to that URL every time the flow reaches the step. The step even comes with its own <strong>Success</strong> and <strong>Error</strong> branches, so you can decide what happens next based on whether your endpoint accepted the call.</p>
<h2>Know exactly what we'll send</h2>
<p>There's no guessing about the shape of the request. Expand <strong>Example payload</strong> and you'll see the exact JSON body OneText posts to your URL, ready to copy. It includes the event type, a timestamp, and the parameters your flow passed along, so you can correlate the call on your side.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203967061/fec13119-c058-44ca-8541-6320d73ed000.png" alt="The example payload, showing the exact JSON body OneText POSTs, with a copy button and delivery notes" /></p>
<p>The delivery rules are spelled out in plain language too. We wait up to 30 seconds per attempt and retry on failures. Each request carries an idempotency key, so you can safely dedupe if the same webhook arrives more than once.</p>
<h2>Trust every request</h2>
<p>Because your endpoint now acts on these calls, you'll want to be sure each one really came from OneText and not someone spoofing your URL. Expand <strong>Verify signatures</strong> and everything you need is there: the <code>x-onetext-signature</code> format, a copy-pasteable verification snippet in <strong>Node.js or Python</strong>, and your account's signing secret (kept masked until you reveal it).</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203967168/4b907dad-90cd-4364-b7a4-ebcd7ff3fb1c.png" alt="Signature verification, with a copy-ready Node.js/Python snippet and your masked signing secret" /></p>
<p>Check the signature against your secret and you can trust that every webhook is genuine and untampered before you act on it.</p>
<h2>Why it matters</h2>
<p>A flow that can call your own systems can do almost anything. The automations your customers see on their phone can now drive the systems that run your business behind the scenes, in real time. Delivery is reliable, and every request can be verified before you act on it. Think of it as the bridge between OneText and everything else you run.</p>
<p><strong>Open any flow, add a Webhook step, and point it at your endpoint.</strong> Already building rich automations, like the <a href="https://onetext.hashnode.dev/2026-07-04-rcs-flow-editor">RCS messages that now live in the same flow editor</a>? This slots right in beside them.</p>
]]></content:encoded></item><item><title><![CDATA[Your billing, finally clear]]></title><description><![CDATA[Nobody enjoys squinting at a billing page trying to work out what they were charged and why. You just want to know: how much do I have, what did I spend it on, and is everything paid up?
We rebuilt th]]></description><link>https://blog.onetext.com/2026-07-04-billing-page-revamp</link><guid isPermaLink="true">https://blog.onetext.com/2026-07-04-billing-page-revamp</guid><category><![CDATA[ecommerce]]></category><category><![CDATA[billing]]></category><category><![CDATA[onetext]]></category><dc:creator><![CDATA[Daniel Brain]]></dc:creator><pubDate>Sat, 04 Jul 2026 18:23:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203959483/0784a846-4dc2-403e-8df2-1b69401e8dab.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Nobody enjoys squinting at a billing page trying to work out what they were charged and why. You just want to know: how much do I have, what did I spend it on, and is everything paid up?</p>
<p>We rebuilt the OneText billing page around exactly those questions. Everything you need now lives on one clear screen. Your balance sits up top, your credits are laid out plainly, and a tidy month-by-month history opens up whenever you want the details.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203959135/9a2a87b7-1abc-403f-86ba-4c24d3917c45.png" alt="Your USD balance and credit balance, right at the top of the billing page" /></p>
<h2>Your balance and credits, up front</h2>
<p>The moment you land, you see what you've got. Your <strong>USD balance</strong> and your <strong>credit balance</strong> sit side by side. Just below, your <strong>active credits</strong> show as a simple bar: how many you started with, how many you've used, and how many are left, so you always know where you stand.</p>
<p>Got promotional credits arriving next month? Those show up too, under <strong>upcoming credits</strong>, with the date they kick in and whether they ever expire. Nothing sneaks up on you, and there's no hunting around.</p>
<h2>Every month, broken down the way you'd expect</h2>
<p>Your billing history lists each month with its status right there. You'll see a green <strong>"paid"</strong> badge once you're settled up, or the amount owed when you're not. Open a month and it expands into clean, collapsible sections: <strong>credit usage</strong> (with SMS and MMS spelled out), your <strong>platform fees</strong>, your <strong>payments</strong>, and the <strong>totals</strong>. Each section carries its own header total, so you can skim the top line or dig into the rows.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203959358/7af9ab90-8774-4811-bde0-b000597e3ac8.png" alt="An expanded month showing credit usage, fees, and payments, each with a running total" /></p>
<p>Every number is the real, server-accurate figure. Where a value was rounded for display, you can hover to see the exact amount down to the fraction of a cent. There's no hand-waving here, and no mystery math.</p>
<h2>Download it, or pay it, in seconds</h2>
<p>Finished months come with a <strong>downloadable invoice PDF</strong>. One click from the month's menu gets you a copy for your records or your accountant. And if you ever owe a balance, you can <strong>pay it right from this page</strong> in a tap, as long as you've got a card on file. You won't need a separate portal or a chased-down link.</p>
<h2>Why it matters</h2>
<p>Billing you can actually understand builds trust. When you can see your balance, know what each month cost, grab an invoice, and settle up without leaving the page, billing stops being a chore you dread. It becomes just another thing that quietly works, which is the whole point.</p>
<p><strong>Open Settings → Billing to take a look.</strong> Your balance, your credits, and every invoice are right there, in plain sight.</p>
]]></content:encoded></item><item><title><![CDATA[Send the right text to the right shoppers with Segments]]></title><description><![CDATA[Not every shopper should get the same text. The people who bought last week are in a very different place from the ones who clicked but never checked out, or your quiet VIPs who haven't heard from you]]></description><link>https://blog.onetext.com/2026-07-04-segments</link><guid isPermaLink="true">https://blog.onetext.com/2026-07-04-segments</guid><category><![CDATA[ecommerce]]></category><category><![CDATA[marketing]]></category><category><![CDATA[sms]]></category><dc:creator><![CDATA[Daniel Brain]]></dc:creator><pubDate>Sat, 04 Jul 2026 10:29:40 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203963863/a6abcc08-6e7c-4047-b3b3-58c39c8929c0.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Not every shopper should get the same text. The people who bought last week are in a very different place from the ones who clicked but never checked out, or your quiet VIPs who haven't heard from you in a while. Blast them all the same message and you get low replies and high opt-outs.</p>
<p>If you've set up a campaign or built a flow in OneText, you've already used segments. You pick or build the audience right there as you go. What's new is a home for them. There's now a dedicated Segments page where you create, edit, clone, and reuse your audiences in one place, and you can see how big each one is at a glance. No spreadsheets, no exports, and no data team required.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203963321/9a821590-fe24-44dc-8e89-7c668aced5c7.png" alt="The Segments page shows all your saved audiences, each with its live size" /></p>
<h2>Build an audience in a few clicks</h2>
<p>Open <strong>Segments</strong>, hit <strong>Create Segment</strong>, and start from a ready-made template or a blank slate. The templates cover the audiences most stores reach for: recent purchasers, shoppers who <em>haven't</em> bought lately, text-to-buy customers, and people who engaged in the last 90, 180, or 365 days.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203963497/a9efc3f6-d7a9-4354-9591-f43ea347cc5f.png" alt="Start from a template or build from scratch" /></p>
<p>From there you shape the audience in plain language. A <strong>shopper has</strong> (or <strong>has not</strong>) done something: placed an order, clicked a link, viewed a product, opted in, or updated their cart, within a time window you choose. Stack conditions with <strong>AND</strong> / <strong>OR</strong> to get as broad or as precise as you like.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203963653/d7cf89b1-858b-4f3a-9968-9e5ed3315db1.png" alt="The audience builder, where you pick an action, a filter, and a time period and see the estimated audience size" /></p>
<h2>Know how big it is before you send</h2>
<p>As you build, OneText estimates the <strong>audience size</strong> for you. That way you can see roughly how many shoppers a segment covers before a single text goes out. Every saved segment also shows its size in the list, along with when it was last refreshed, so your audiences never go stale on you.</p>
<h2>Then put it to work</h2>
<p>A segment isn't a dead-end list. Save it once and it's yours to reuse:</p>
<ul>
<li><strong>Send a campaign</strong> to it in a couple of clicks.</li>
<li><strong>Clone and tweak</strong> it to spin up a close variation.</li>
<li><strong>Export a CSV</strong> of the shoppers when you need it elsewhere.</li>
</ul>
<p>Because segments are saved and reusable, your best audiences (VIPs, cart-abandoners, and lapsed buyers) are always one click away the next time you have something to say.</p>
<h2>Why it matters</h2>
<p>Better targeting is the difference between a text people welcome and a text they mute. Reach the <em>right</em> shoppers and you'll see higher engagement, fewer opt-outs, and more revenue from every send, without messaging people who were never going to bite.</p>
<p><strong>Head to Segments in your OneText dashboard and build your first audience.</strong> Start from a template, watch the size update, and send your next campaign to exactly the people who should get it.</p>
]]></content:encoded></item><item><title><![CDATA[Make your texts look like your store, with RCS]]></title><description><![CDATA[A plain text with a link does the job. But picture a bright product card instead: your logo up top, a photo, a price, and a Shop now button your customer can tap. It does the job, and it looks like yo]]></description><link>https://blog.onetext.com/2026-07-04-rcs-flow-editor</link><guid isPermaLink="true">https://blog.onetext.com/2026-07-04-rcs-flow-editor</guid><category><![CDATA[ecommerce]]></category><category><![CDATA[marketing]]></category><category><![CDATA[sms]]></category><category><![CDATA[RCS]]></category><dc:creator><![CDATA[Daniel Brain]]></dc:creator><pubDate>Sat, 04 Jul 2026 09:20:14 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203962133/5ca5f5ad-29da-4f3b-be85-fa8b8a592054.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A plain text with a link does the job. But picture a bright product card instead: your logo up top, a photo, a price, and a <strong>Shop now</strong> button your customer can tap. It does the job, and it looks like your store.</p>
<p>Your OneText flows have always texted your customers. Now those same messages can be <strong>RCS</strong>, so instead of a grey SMS bubble your customer gets something rich, branded, and tappable. It's built right into the message step you already use, so there's no new tool to learn, and every phone still gets a message.</p>
<h2>Build it where you already build your flows</h2>
<p>Open a flow and pick a <strong>message step</strong>. You'll find a new <strong>Message Type</strong> choice waiting there. A live phone preview updates as you build, so you always see exactly what your customer will get.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203961040/25a98606-6f08-4ac1-8ea1-98f67c931540.png" alt="Composing an RCS message in the flow editor, with a live phone preview" /></p>
<h2>Start with one choice: the message type</h2>
<p>Every RCS message begins by picking one of three types. That's the whole high-level decision. Everything else is optional detail you layer on top.</p>
<p><strong>Text Only</strong> is a normal-looking text message. Reach for it when you're starting a conversation or sending a quick heads-up.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203961278/688a5192-3bfc-4f08-b437-c6bbb38c2f98.png" alt="Text Only, a plain text message with optional tappable buttons: quick replies plus a link" /></p>
<p><strong>Media + Text</strong> sends a product card and a short follow-up message together. It fits a note like "here's the thing you loved, reply if you'd like a hand."</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203961397/11fdb1db-b256-4915-b523-a0742da256c7.png" alt="Media + Text, a rich card followed by a short text message" /></p>
<p><strong>Media Only</strong> is one or more product cards and nothing else. Best when you want to show off products cleanly.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203961605/865b74d8-f278-4662-b43b-4fedc6436d01.png" alt="Media Only, a swipeable carousel of product cards, as the shopper sees it" /></p>
<h2>Then layer on the extras (all optional)</h2>
<p>Once you've picked a type, you decide how much to add. None of this is required. Reach for it when it helps.</p>
<h3>Tappable buttons</h3>
<p>Any message can carry up to four buttons, in any mix:</p>
<ul>
<li><strong>Link buttons</strong> send someone straight to a product or collection.</li>
<li><strong>Quick replies</strong> let a customer answer with one tap, like "New arrivals" or "Track my order", instead of typing.</li>
</ul>
<p>Buttons are optional, but they turn a message people read into one people act on.</p>
<h3>Cards and carousels</h3>
<p>A media message can be a single card. It can also be a <strong>carousel</strong> of up to <strong>ten</strong> cards: new arrivals, a few bestsellers, or the items left in a cart. Give each card its own photo, title, price, and button, then <strong>drag to reorder</strong> them until the story flows the way you want.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203961766/9ec8f868-32d2-477c-8765-01d9d688b08d.png" alt="Building a carousel of up to ten cards, each with its own photo and button, drag to reorder" /></p>
<h2>Nobody gets left behind</h2>
<p>Not every phone can receive RCS yet, and that's handled for you. Set an <strong>SMS/MMS fallback</strong> and OneText automatically sends a clean text version to anyone who can't get the rich one. It's one message step that covers every customer, with no forked flows and no guesswork.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1783203961968/46a6e296-cf0a-4757-80e6-28f4602f4800.png" alt="The automatic SMS/MMS fallback for phones that can't receive RCS" /></p>
<h2>Why it matters</h2>
<p>Rich, branded messages get noticed. When a message shows up from a verified sender with your name and logo, carries a real product card, and offers a button to tap, it feels like your store rather than a spam text. You'll see more taps, more replies, and fewer opt-outs. And because it all lives in the flow editor, any automation you already run can look this good without extra work, whether that's a welcome, a cart reminder, or a win-back.</p>
<p><strong>Open any flow, pick a message step, and choose a Message Type.</strong> Build a card, watch the preview, and send your next automation as something your customers actually want to open. Then pair it with <a href="https://onetext.hashnode.dev/2026-07-04-segments">Segments</a> so the shoppers who see it are the right ones.</p>
]]></content:encoded></item></channel></rss>