<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rostislav Sofronov</title>
    <description>The latest articles on DEV Community by Rostislav Sofronov (@realmag777).</description>
    <link>https://dev.to/realmag777</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3956702%2F4e91cf8c-5af7-4bd8-9101-323dd70c154f.png</url>
      <title>DEV Community: Rostislav Sofronov</title>
      <link>https://dev.to/realmag777</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/realmag777"/>
    <language>en</language>
    <item>
      <title>How I Built a Full WooCommerce Store Inside Telegram Without Mini Apps</title>
      <dc:creator>Rostislav Sofronov</dc:creator>
      <pubDate>Mon, 01 Jun 2026 14:34:11 +0000</pubDate>
      <link>https://dev.to/realmag777/how-i-built-a-full-woocommerce-store-inside-telegram-without-mini-apps-2lbc</link>
      <guid>https://dev.to/realmag777/how-i-built-a-full-woocommerce-store-inside-telegram-without-mini-apps-2lbc</guid>
      <description>&lt;p&gt;I've been in IT since 2006, when I started out writing premium templates &lt;br&gt;
at TemplateMonster and hand-coding layouts for Internet Explorer 5.5. &lt;br&gt;
For the past 12 years I've been building WordPress/WooCommerce plugins: &lt;br&gt;
BEAR, HUSKY, FOX, MDTF, WOOT, WPCS, WOLF, TABLEON — around 200,000 &lt;br&gt;
active installs combined. I always treated Telegram bots as a side curiosity — I could build something simple, but I was never really drawn to it. That changed in March 2024.&lt;/p&gt;
&lt;h2&gt;
  
  
  🚀 How It Started
&lt;/h2&gt;

&lt;p&gt;A friend pointed me toward an idea: build a full-featured store directly inside Telegram. Not through Telegram Mini Apps — that's essentially a regular website running in the messenger's embedded browser. That didn't interest me technically; I already know how to build websites. What I wanted was a truly &lt;em&gt;native&lt;/em&gt; bot where the entire UX is built through messages, buttons, and Telegram's interactive elements. At first I didn't even know how to approach it. That's exactly what hooked me.&lt;/p&gt;

&lt;p&gt;Telegram has strict UX constraints — no hover states, no conventional forms, no multi-window layout. And that's precisely what forces you to think differently. I realized that if you could genuinely shop without leaving the messenger, that was a completely different level of frictionless UX.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Telegram has no "catalog page" — the entire UX had to be reinvented from scratch on top of messages.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  ⚠️ The First Six Months: Right Idea, Wrong Architecture
&lt;/h2&gt;

&lt;p&gt;My first months were spent writing the server-side in PHP — a language I know well. &lt;strong&gt;The bot engine itself was PHP&lt;/strong&gt;: handling incoming Telegram webhooks, managing dialog state, sending responses — all of it lived in PHP on the server.&lt;/p&gt;

&lt;p&gt;From day one I was adamant about one thing: only current, relevant information should remain in a user's chat. Old messages should be cleaned up, buttons should redraw on tap rather than piling up. I got that working. But the overall architecture turned out to be a dead end.&lt;/p&gt;

&lt;p&gt;PHP is a request-response language by nature. For a bot that meant: every Telegram message was a separate HTTP request, a separate process, with no shared state. Message cleanup logic, dialog stacks, simultaneous sessions for multiple users — on PHP all of this turned into hacks. The system worked, but it was unwieldy and hard to extend. Six months in it was clear: a fundamental rethink was needed.&lt;/p&gt;
&lt;h2&gt;
  
  
  🔄 December 2024: Rewrite in Node.js
&lt;/h2&gt;

&lt;p&gt;After reading forums and other sources, I understood: a Telegram bot needs a persistent running process, not an HTTP request handler. I chose Node.js — I know JavaScript well, so the learning curve was minimal.&lt;/p&gt;

&lt;p&gt;I deliberately avoided existing Telegram bot frameworks and wrote my own micro-framework for sending messages of any complexity: galleries, dynamic keyboards, messages that update themselves on interaction. For the Telegram layer I used &lt;strong&gt;tdlib&lt;/strong&gt; — which is what made the interactivity I wanted from day one actually possible: the user always sees only current information, no garbage from old messages accumulating in the chat.&lt;/p&gt;

&lt;p&gt;From December 2024 I spent 5 hours a day on the project, alongside my plugin work. Sometimes on weekends too — simply because it was interesting. I was essentially building a custom state machine on top of a Telegram chat.&lt;/p&gt;
&lt;h2&gt;
  
  
  ✅ What Came Out of It
&lt;/h2&gt;
&lt;h3&gt;
  
  
  🛍️ A Full Store Inside Telegram
&lt;/h3&gt;

&lt;p&gt;The core of Botoscope is the store. I paid special attention to &lt;strong&gt;variable products&lt;/strong&gt; with unlimited complexity: any number of variations, each with its own price and stock. Catalog navigation has several modes: if there are few products you can show everything at once, or use a category tree for larger catalogs. There's built-in search by name and by SKU.&lt;/p&gt;

&lt;p&gt;This approach covers a very wide range of niches: classic retail with physical products including clothing with size and color variations, pet supplies, household and electronics goods — through to digital products including video courses, educational materials, and files sold with time-limited access and no download option. The system also works well for service businesses with booking, real estate, cars, and pharmaceutical or information catalogs where structured display of complex data and fast search matter.&lt;/p&gt;
&lt;h3&gt;
  
  
  📅 Booking — Built From Scratch
&lt;/h3&gt;

&lt;p&gt;I'd wanted to write my own booking system for a long time — not as a WordPress plugin, but as a pure architectural challenge: how do you correctly model slots, schedules, reservations? Each time other priorities got in the way and it never got past rough sketches.&lt;/p&gt;

&lt;p&gt;In autumn 2025 the context finally arrived. Botoscope could already sell physical and digital products — but services with schedules, appointments, and time slots were missing. I grabbed paper and a pencil — that's my way of thinking, no Notion or Miro — and started sketching the architecture. Once I had the mental model, I wrote the code.&lt;/p&gt;

&lt;p&gt;Here's how it works. A product of type "Simple Virtual" opens a &lt;strong&gt;Booking slots&lt;/strong&gt; button — you land in the schedule view. Seven days of the week, each with its own slots: start time, end time, price, capacity. Capacity is its own interesting detail: the default is one, but if you're running a group class or workshop, set it to 10 and ten people can book the same slot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqoz9hrjacfvqsoeau2m8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqoz9hrjacfvqsoeau2m8.png" alt="Booking slots for telegram" width="799" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By default all slots inherit the product price. But if your business logic is more complex — morning appointments at one rate, evenings at another, holidays at a completely different tariff — just enter a price on the specific slot and it overrides the default. No magic, just a number field where you need it.&lt;/p&gt;

&lt;p&gt;To avoid re-entering the same schedule every day, there's cloning. Go to Tuesday (which is empty), choose "clone from Monday" — all slots are copied over. One minute instead of twenty.&lt;/p&gt;

&lt;p&gt;The most interesting part is &lt;strong&gt;runtime mode&lt;/strong&gt;. This isn't the template — it's the live schedule for a specific day. Here you can change a specific slot's time or price on the fly (it's a holiday today, double pricing). You can disable a slot if the practitioner is absent. And if a spontaneous opening appears that wasn't in the template — there's "Create disposable slot": a one-off slot, including for a walk-in client who paid cash.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcy183nm5ofx86s0ml0r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcy183nm5ofx86s0ml0r.png" alt="Dynamic booking slots for telegram" width="800" height="637"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the buyer's side in Telegram it looks clean: pick a service, a calendar opens, choose a day, pick a time with its price, add to cart, and check out like a normal order. After payment — a PDF confirmation right in the bot, thanks to the WooCommerce PDF Invoices &amp;amp; Packing Slips integration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5h2kjuuegzv81siwdmd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5h2kjuuegzv81siwdmd.png" alt="Booking calendar in Telegram — month view" width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F69xa4wdcvnh64s66rtqn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F69xa4wdcvnh64s66rtqn.png" alt="Booking calendar in Telegram — hours view" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nail technician, tutor, lawyer, personal trainer — all of this is now in Telegram with no third-party booking plugin.&lt;/p&gt;
&lt;h3&gt;
  
  
  🎓 Digital Goods and Courses
&lt;/h3&gt;

&lt;p&gt;I've watched the online education market for years. Udemy, Teachable, Kajabi, Thinkific — every platform takes its cut, requires registration, sends users to an external site. I kept thinking: what if you could sell and watch a course directly inside Telegram without leaving the messenger?&lt;/p&gt;

&lt;p&gt;The technical challenge isn't huge, but the feature turns out to be very satisfying. The key idea: a digital product you can't download. Video opens exclusively through a built-in Mini App inside Telegram — effectively a browser inside the messenger, but the file can't be extracted to the device through standard means. It won't stop determined pirates, but the average buyer just watches and that's it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fawggei7lq4e7qmtwpjte.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fawggei7lq4e7qmtwpjte.png" alt="Selling courses via Telegram" width="800" height="569"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The second element is access duration. Leave it alone with &lt;code&gt;-1&lt;/code&gt; and the person has permanent access. Set it to &lt;code&gt;180&lt;/code&gt; and exactly 180 days after purchase the content automatically becomes inaccessible. No reminders, no manual actions — the period expires and all materials lock. Useful for subscription courses, seasonal programs, any content where the controlled viewing window matters more than the fact of purchase.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56q3ro23bjcfze17ly08.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56q3ro23bjcfze17ly08.png" alt="Selling digital courses in Telegram" width="800" height="649"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  💳 Payments
&lt;/h3&gt;

&lt;p&gt;Botoscope supports Stripe, PayPal, LiqPay, bank card, IBAN transfers, and cryptocurrency via CoinGate. Everything you can add to cart can be paid for.&lt;/p&gt;

&lt;p&gt;An important architectural note: Botoscope is not an intermediary or payment aggregator here. It's an integration layer — you connect your own accounts, your own API keys, your own agreements with providers. Money goes directly to you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9phabp710zb7znkbzi8w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9phabp710zb7znkbzi8w.png" alt="Payment gateways in Telegram" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also want to tell you about &lt;strong&gt;PayForMe&lt;/strong&gt; — a feature I came up with back in 2024 while writing the first PHP version.&lt;/p&gt;

&lt;p&gt;Originally Botoscope was conceived as a store for buyers coming from Instagram, TikTok, and other social networks — browsing products and placing orders directly in Telegram. The initial idea was quite specific: a store aimed at a female audience — clothing, beauty, accessories. The project has grown into something much broader since then, but PayForMe was born from that original picture. At some point I thought: what if she wants a gift? How does she receive it from someone else? That thread pulled the idea into existence.&lt;/p&gt;

&lt;p&gt;The flow is simple: the buyer assembles a cart, selects PayForMe instead of regular checkout, and gets a unique link. They send it to anyone — Telegram, WhatsApp, email. The recipient opens the link — it's a standard Telegram deep link that automatically loads the order — sees the details and pays. The only requirement: the payer needs Telegram installed. Logically the payer doesn't get the PayForMe option themselves — that would be a loop — only real payment methods.&lt;/p&gt;

&lt;p&gt;There are more scenarios than it might seem: a child orders and a parent pays, a client places the order and accounting closes the invoice, a friend gives a gift without asking for the size. Buyer and payer as separate people — finally solved natively.&lt;/p&gt;
&lt;h3&gt;
  
  
  🛒 Checkout Fully Inside Telegram
&lt;/h3&gt;

&lt;p&gt;The entire checkout process happens natively in the bot — no redirects to the WooCommerce site. Discount coupon, delivery method, address — all through Telegram buttons and messages, no forms and no external pages. Made a mistake with the address or want to change shipping? Edit it right there, no starting over. The only exceptions are certain payment gateways: Stripe opens in a browser due to its own security requirements, LiqPay and CoinGate in a Mini App window. But that's the payment provider's page, not your store.&lt;/p&gt;

&lt;p&gt;After payment the buyer isn't left alone with a receipt. The orders section has a support button — they can immediately ask a question and get a reply from the store owner or a staff member. Support isn't limited to the post-purchase stage either: each product can optionally have a contact button so the customer can clarify details before placing an order. Don't need support at all? Simply don't enable it in the settings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvz9zms34ej3ryy3k1ob3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvz9zms34ej3ryy3k1ob3.png" alt="Checkout in Telegram" width="800" height="646"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  🎯 Marketing Strategies and Campaigns
&lt;/h3&gt;

&lt;p&gt;Marketing in Botoscope is a built-in formula-based discount system that runs entirely inside your Telegram bot.&lt;/p&gt;

&lt;p&gt;The logic is built on two concepts: &lt;strong&gt;strategy&lt;/strong&gt; and &lt;strong&gt;campaign&lt;/strong&gt;. A strategy is a discount formula. A campaign is when and for which products that formula fires. You describe the rule first, then activate it on a schedule.&lt;/p&gt;
&lt;h4&gt;
  
  
  Formula: Three Parts, Unlimited Flexibility
&lt;/h4&gt;

&lt;p&gt;Each discount strategy consists of one or more formulas. A formula looks like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;condition ; discount ; modifiers&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For example: &lt;code&gt;c &amp;gt;= 6 &amp;amp; c &amp;lt; 12; 25%; 3n, me, cap=3&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Read: if there are 6 to 11 items in the cart — discount every third item (by position in the sorted cart), specifically the most expensive ones, but no more than three positions. 25% off each.&lt;/p&gt;

&lt;p&gt;A single line describes a fairly complex scenario: the entry condition, the discount amount, and exactly which items it applies to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conditions&lt;/strong&gt; use cart item count: &lt;code&gt;c &amp;gt;= 3&lt;/code&gt; (three or more), &lt;code&gt;c = 5&lt;/code&gt; (exactly five), &lt;code&gt;c &amp;gt;= 3 &amp;amp; c &amp;lt; 6&lt;/code&gt; (three to five). Simple and reads like plain English.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discount&lt;/strong&gt; is a percentage (&lt;code&gt;50%&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Modifiers&lt;/strong&gt; are the interesting part — they specify exactly which items from the cart get discounted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;mc&lt;/code&gt; — cheapest item&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;me&lt;/code&gt; — most expensive&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;2n&lt;/code&gt; / &lt;code&gt;3n&lt;/code&gt; — every second / third by position&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cap=3&lt;/code&gt; — no more than three items, even if the condition allows more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few practical examples covering most real-world promotions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;c&amp;gt;=2; 50%; mc          → buy two, get the cheapest at half price
c&amp;gt;=3; 100%; mc         → buy three, cheapest is free
c&amp;gt;=2; 50%; 2n, mc      → buy two, second one at half price
c&amp;gt;=3; 100%; mc, cap=2  → buy three or more, two cheapest items free
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Multiple Formulas — Tiered Discounts
&lt;/h4&gt;

&lt;p&gt;One strategy can contain multiple formulas, creating tiers: the more items in the cart, the better the deal.&lt;/p&gt;

&lt;p&gt;One rule: if multiple formulas match a single item, &lt;em&gt;the last one in order wins&lt;/em&gt;. So arrange formulas from least to most generous — that way a larger cart automatically gets the better deal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Formula 1: c&amp;gt;=2; 50%; mc
Formula 2: c&amp;gt;=3; 100%; mc, cap=2

Cart with 2 items  → Formula 1 fires: -50% on cheapest
Cart with 3+ items → Formula 2 fires: two cheapest items free
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqtdzi5bhttqg9fxjaaaq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqtdzi5bhttqg9fxjaaaq.png" alt="Marketing campaign in Telegram" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fapkrbkvyynqxe4nppzqy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fapkrbkvyynqxe4nppzqy.png" alt="Marketing strategy in Telegram" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0gf8f7vbwtp97euxlwcc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0gf8f7vbwtp97euxlwcc.png" alt="Marketing strategy formulas in Telegram" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Campaign: Strategy + Time + Products
&lt;/h4&gt;

&lt;p&gt;Once the strategy is ready, create a campaign. Choose which strategy it uses, set start and end dates, and optionally specify which products it applies to.&lt;/p&gt;

&lt;p&gt;By default a campaign covers the entire catalog. To run a promo on slow-moving stock or a specific collection, search for products by name, ID, or use the &lt;code&gt;v27&lt;/code&gt; format which expands all variations of the parent product with ID 27.&lt;/p&gt;

&lt;p&gt;Only &lt;strong&gt;one&lt;/strong&gt; campaign can be active at a time. Enabling a new one automatically disables the previous one.&lt;/p&gt;

&lt;h4&gt;
  
  
  Test Mode: Check Before You Launch
&lt;/h4&gt;

&lt;p&gt;Before announcing Black Friday to all your subscribers — you can verify the campaign in silent mode. Enable test mode and only you see the campaign. Check that discounts calculate correctly, display properly in checkout, and only then go live for everyone.&lt;/p&gt;

&lt;h4&gt;
  
  
  Important: Coupon or Campaign — Not Both
&lt;/h4&gt;

&lt;p&gt;If a buyer applies a coupon, the marketing campaign is automatically disabled for that order. They don't stack. This is a firm constraint, and better to know it upfront when planning your promotions.&lt;/p&gt;

&lt;p&gt;The marketing system was designed with one idea: the seller should be able to describe any realistic promo scenario in a few lines of formula — without touching code or a third-party service. Black Friday, clearance sales, buy-three-get-one-free — all handled inside the plugin, right in the same interface where you manage products.&lt;/p&gt;

&lt;h3&gt;
  
  
  📱 Business in Your Pocket
&lt;/h3&gt;

&lt;p&gt;There's a situation I know well: you're not at a computer but something is happening in the store. A new order, a customer question, a product running low. Previously that meant — open the admin panel, sort it out, reply. Now it's just a Telegram message.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsm86mkcdqkynn0vk2xc7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsm86mkcdqkynn0vk2xc7.png" alt="Business in pocket — customer support in Telegram" width="800" height="651"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The "Business in Your Pocket" module is a separate personal notification bot for the store owner. Not the same bot customers see — your own private one, receiving three types of alerts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New order&lt;/strong&gt; — and not just "someone bought something." The full picture: order number, customer name, product list with quantities and SKUs, payment method, applied coupon, customer note, shipping address, final amount. And at the bottom — a daily summary: how many orders and for how much. Open your phone and you immediately know how the day is going.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Customer support message&lt;/strong&gt; — a customer writes a question about a product or their order in the bot, the owner receives a notification in their personal bot showing how many people are waiting for a reply. You reply directly in Telegram — the message instantly appears in the customer's store bot. No email, no ticket system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Low stock warning&lt;/strong&gt; — product name, current quantity, ID. So you never miss the moment something runs out.&lt;/p&gt;

&lt;p&gt;If you have a team — everything is flexibly configurable: multiple bots, multiple chat IDs as comma-separated values.&lt;/p&gt;

&lt;p&gt;Technically it's a separate bot created via BotFather — five minutes to set up.&lt;/p&gt;

&lt;h3&gt;
  
  
  💬 Support
&lt;/h3&gt;

&lt;p&gt;After 12 years of WordPress plugin work, I've learned one thing well: every user has their own mental model of how things work. What seems obvious to a developer can be completely puzzling to a customer. Questions range from complex to simple to the kind that make you take a deep breath. But support isn't a burden or a waste of time. It's part of the business.&lt;/p&gt;

&lt;p&gt;The more important psychological point: a customer who paid money wants to know they're not abandoned. That there's somewhere to write, that they'll get a reply, that their problem will be solved. That confidence is valuable — and it's exactly what most Telegram stores lack, where there simply isn't a support button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq60i77k55a6z6vo1u09g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq60i77k55a6z6vo1u09g.png" alt="Customer support system in Telegram" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftngvfr4jpnmj2q9mp1x7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftngvfr4jpnmj2q9mp1x7.png" alt="Support button in Telegram bot" width="800" height="840"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpr903238j6r4o5a66ai5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpr903238j6r4o5a66ai5.png" alt="Support for orders in Telegram bot" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Support was designed in from version one. The first idea was simple — a link to the responsible person's Telegram account. That's implemented too, but I wanted a proper ticket system.&lt;/p&gt;

&lt;p&gt;How it works: customers can reach support at two stages — before purchase, with a button directly on the product card to clarify details before ordering; and after purchase, with a support button next to each order in the orders section.&lt;/p&gt;

&lt;p&gt;An operator is anyone with admin access to Botoscope: the owner or a team member. Replies can come from there or from the "Business in Your Pocket" module directly from your phone. At the top of the support interface is a dropdown of all customers waiting for a reply. You pick one, reply, and the message instantly arrives in the customer's bot.&lt;/p&gt;

&lt;p&gt;You don't have to reply to every message immediately — for small businesses it's fine to set aside specific time once a day. What matters is that the customer sees: the store is alive, and they're not alone.&lt;/p&gt;

&lt;h3&gt;
  
  
  🌍 Multilingual and Multicurrency
&lt;/h3&gt;

&lt;p&gt;Most Telegram bots only translate the interface — buttons and system messages. Botoscope goes further: the entire store content is translated — product names and descriptions, attributes, taxonomies, delivery methods, payment method names, promotional texts. Seven interface languages are supported. When a user chooses their language in the bot, they see a fully localized store. Translation can be done manually or through the built-in OpenAI integration — one product at a time, at your own pace.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqwyr80lx3aejbjogazvl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqwyr80lx3aejbjogazvl.png" alt="Multilingual and multicurrency in Telegram bot" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frv4hw4gh4a5m1mln1hyh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frv4hw4gh4a5m1mln1hyh.png" alt="Multicurrency in Telegram bot" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Multicurrency is built on my own plugin &lt;a href="https://currency-switcher.com/downloads" rel="noopener noreferrer"&gt;FOX — WooCommerce Currency Switcher&lt;/a&gt;. Unlimited currencies: set a base currency, add others with exchange rates — and every buyer sees prices in their currency. Rates can be updated manually or automatically on a schedule. If the payment gateway supports multicurrency, the buyer can also pay in their currency; if not, they see the locally converted price but pay in the base currency.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 Filters of Any Complexity
&lt;/h3&gt;

&lt;p&gt;Since Botoscope is built on top of WooCommerce, filtering in the bot uses the power of my own plugin &lt;a href="https://wordpress.org/plugins/woocommerce-products-filter/" rel="noopener noreferrer"&gt;HUSKY&lt;/a&gt;. Filters by category, attribute, taxonomy, price — everything available on the website is available in the bot.&lt;/p&gt;

&lt;p&gt;But it doesn't stop there. Botoscope supports custom taxonomies (Taxonomies tab) and attributes: you can build any product classification structure — "Location", "Material", "Season", "Brand" — and immediately enable them as filters in the bot. Attributes can also affect price and be used for variations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1qkwythx1b4ee9a99djr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1qkwythx1b4ee9a99djr.png" alt="Product filter in Telegram bot" width="800" height="648"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another level of flexibility: &lt;strong&gt;meta fields (Botoscope Meta)&lt;/strong&gt;. For each product you can add custom fields: numeric (e.g. "Distance to sea" or "Year of manufacture"), boolean ("Has parking?", "Has elevator?"), date ("Available from"). These fields can be used for filtering in the bot: numeric values appear as a range slider, booleans as a yes/no toggle, dates as a date picker. Useful for real estate, cars, services — any catalog with a complex structure. Demo (built specifically for a client in Spain): &lt;a href="https://t.me/botoscope_demo3_bot" rel="noopener noreferrer"&gt;t.me/botoscope_demo3_bot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ge4gtdcdk16s8ct9usw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ge4gtdcdk16s8ct9usw.png" alt="Meta fields in Telegram store" width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2v8jzmwkdr3no0rln69c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2v8jzmwkdr3no0rln69c.png" alt="Meta fields in Telegram store" width="799" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Additionally, for each product you can attach an audio clip. If you have multiple interface languages, audio is uploaded separately for each — the buyer hears the narration in their own language.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozgs8w9zv6frzatzoczl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozgs8w9zv6frzatzoczl.png" alt="Audio for products in Telegram bot store" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyb9njckm9xvmpd3u50j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyb9njckm9xvmpd3u50j.png" alt="Audio clip in Telegram post" width="800" height="634"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📢 Marketing Inside the Bot
&lt;/h3&gt;

&lt;p&gt;Two tools for promotion. First — &lt;strong&gt;Broadcasting&lt;/strong&gt;: send any message to all bot subscribers in one click. A discount announcement, a new arrival, important updates — delivered as a personal message directly into each user's chat, no email, no ads.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdtvdswml2le645hqvdgn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdtvdswml2le645hqvdgn.png" alt="Botoscope broadcasting" width="800" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Second — &lt;strong&gt;promo blocks inside the catalog&lt;/strong&gt;: add one or more promotional messages with links that display in rotation at the bottom of the catalog screen. Useful for promoting specific products or partner offers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6zpmftfand7rn5xyt955.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6zpmftfand7rn5xyt955.png" alt="Advertising in Telegram bot" width="799" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📦 Grouped Products
&lt;/h3&gt;

&lt;p&gt;Grouped products deserve a special mention — a very interesting mechanic for sellers that works fully in Botoscope.&lt;/p&gt;

&lt;p&gt;The idea is simple: create one combined product and add several individual items to it. The whole set is sold at a single price — generally more attractive than buying each item separately. A classic bundle.&lt;/p&gt;

&lt;p&gt;But there's a detail that makes it interesting. You can add &lt;strong&gt;variable products&lt;/strong&gt; to a grouped product. So if one of the items in the set comes in several variations — say a t-shirt in different sizes — the buyer selects the right variation directly in the bot when choosing the bundle. The set remains a single item in the catalog, but the buyer doesn't lose the ability to specify exactly what they want.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1z7bta11m71i71nu5who.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1z7bta11m71i71nu5who.png" alt="Grouped product in Telegram" width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One more important point: you can set a single price for the entire bundle. In standard WooCommerce this is non-trivial — grouped products traditionally have no price of their own. In Botoscope it's solved at the plugin level.&lt;/p&gt;

&lt;h3&gt;
  
  
  💛 Elogios — Compliment System
&lt;/h3&gt;

&lt;p&gt;A small but psychologically clever detail. After adding a product to the cart or interacting with it, the bot sends a short warm message — "Wishing you inspiration and great shopping!" or whatever fits your tone. The store owner configures the list of phrases and their style. A small thing that makes the bot feel alive.&lt;/p&gt;

&lt;p&gt;From a behavioral psychology perspective it works as micro-positive reinforcement: even minimal "warm" messages after a user action strengthen the sense of completion and reduce cognitive friction during decision-making.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzjubtsdlmxhy49lne31r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzjubtsdlmxhy49lne31r.png" alt="Compliments in Telegram bot Botoscope" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8aeiklxmnxi9s6j8wkry.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8aeiklxmnxi9s6j8wkry.png" alt="Compliments in Telegram bot Botoscope" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32kdep112t6li3d4c1rf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32kdep112t6li3d4c1rf.png" alt="Compliments in Telegram bot Botoscope" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🔐 Private Access by Key
&lt;/h3&gt;

&lt;p&gt;You can lock the store bot behind a password — any passphrase you share only with invited users. Useful for VIP pre-launch sales, closed B2B catalogs, or exclusive campaigns for subscribers. Change the key in one click and the old one stops working immediately.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2nrvwb3qc8m6ty7884ql.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2nrvwb3qc8m6ty7884ql.png" alt="Private access to Telegram store bot" width="799" height="131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🏭 B2B Mode
&lt;/h3&gt;

&lt;p&gt;For wholesale buyers there are two settings: minimum cart amount before checkout (the checkout button is locked until the threshold is reached) and exact quantity input mode instead of +/− buttons. Useful for stores with minimum order quantities or bulk orders.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔗 Shopify Sync
&lt;/h3&gt;

&lt;p&gt;Just before the release a friend messaged me: "Hey, there's a woman who needs a Telegram store. But the problem — she's entirely on Shopify." I thought about it. Botoscope was built as a WooCommerce solution — but this was my first real pre-launch request, and immediately an edge case.&lt;/p&gt;

&lt;p&gt;I started digging. It turned out Shopify and WordPress live in completely different ecosystems but communicate beautifully through the official Admin API. So I built an extension.&lt;/p&gt;

&lt;p&gt;The setup: alongside the main Shopify store, a separate WordPress instance is spun up — even in a Docker container on any server, it acts purely as an internal engine for Botoscope. No storefront, no public site — just the admin backend with the plugin. Then sync runs: all active Shopify products are automatically imported into WooCommerce along with images, variants, and categories. Variable products — for example, a t-shirt in three colors and five sizes — are correctly converted to WooCommerce variable products with all attributes.&lt;/p&gt;

&lt;p&gt;After setup everything runs in real time via webhooks: if a product is updated or added in Shopify, the change immediately appears in the bot. And in reverse: when a buyer places an order through the Telegram bot, it's sent back to Shopify through the same API. The owner sees it in their familiar admin panel, inventory is deducted, all processes run their course — no manual work.&lt;/p&gt;

&lt;p&gt;There's also a catalog-only mode without checkout. In this case sync stores direct links to products in the Shopify store, and the "View details" button in the bot sends the customer there to complete their purchase. Suitable for merchants who want to use the bot as an additional traffic channel without changing their main checkout flow.&lt;/p&gt;

&lt;p&gt;The connection is technically straightforward: create a Legacy Custom App in Shopify with four scopes (&lt;code&gt;read_products&lt;/code&gt;, &lt;code&gt;write_products&lt;/code&gt;, &lt;code&gt;read_orders&lt;/code&gt;, &lt;code&gt;write_orders&lt;/code&gt;), paste the token into the extension settings — and sync. Important: the Admin API access token is shown only once, immediately after creating the app. If you don't copy it — you'll have to recreate the app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl1vciws2ntopg6613jp3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl1vciws2ntopg6613jp3.png" alt="Shopify sync with Telegram" width="800" height="215"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So &lt;a href="https://botoscope.com/docs/shopify-sync" rel="noopener noreferrer"&gt;if you're on Shopify&lt;/a&gt; — that's no reason to skip a native Telegram store. Your main storefront stays untouched; Botoscope just gives it a new sales channel.&lt;/p&gt;

&lt;h2&gt;
  
  
  ➕ More Than Just a Store
&lt;/h2&gt;

&lt;p&gt;There's one thing I rarely lead with, but I like it myself. The moment you install Botoscope on WordPress — before you've connected a bot, before you've configured anything — the plugin is already useful.&lt;/p&gt;

&lt;p&gt;Right after activation an alternative WooCommerce admin panel appears. Nothing excessive, but it has things the native interface lacks.&lt;/p&gt;

&lt;p&gt;For example, taxonomies. In standard WordPress it's a table with dropdowns where you jump between tabs every time you need to switch to a different category or attribute. In Botoscope it's a dedicated tab with proper navigation: all taxonomies in front of you, navigate into child elements with a button, go back, create a new term right there — no extra page loads. Small thing, but if you work with a large catalog daily, you feel it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fibv6yzqq4l33bysxahin.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fibv6yzqq4l33bysxahin.png" alt="Taxonomies for Telegram bot store" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Separately, "Business in Your Pocket" can be connected even if you don't need a Telegram store at all. Just to have your personal Telegram bot receive nicely formatted notifications: new order with all details, low stock warnings. No dashboards, no email, no logging into the admin panel — just a message on your phone at the right moment.&lt;/p&gt;

&lt;p&gt;In short: the plugin can be used purely as a more convenient WooCommerce management tool — and that alone justifies installing it. The Telegram store is the next step, when you're ready.&lt;/p&gt;




&lt;p&gt;I spent almost two years on this, and rewrote the entire project from scratch in the middle. Any regrets? None. The first PHP rewrite surfaced architectural mistakes I'd never have seen otherwise. And the Node.js version came out exactly as I imagined it from day one — where UX is built not through a browser, but through real, native Telegram.&lt;/p&gt;

&lt;p&gt;If you want to see how it looks from the inside — the demo bot is live right now: &lt;a href="https://t.me/botoscope_demo4_bot" rel="noopener noreferrer"&gt;t.me/botoscope_demo4_bot&lt;/a&gt; — store, variable products, checkout, booking. Everything described in this article — try it hands-on, no registration. The plugin downloads for free at &lt;a href="https://wordpress.org/plugins/botoscope/" rel="noopener noreferrer"&gt;WordPress.org&lt;/a&gt;, free plan available. More about features at &lt;a href="https://botoscope.com" rel="noopener noreferrer"&gt;botoscope.com&lt;/a&gt;, full documentation at &lt;a href="https://botoscope.com/documentation" rel="noopener noreferrer"&gt;botoscope.com/documentation&lt;/a&gt;. GitHub: &lt;a href="https://github.com/botoscope/botoscope" rel="noopener noreferrer"&gt;github.com/botoscope/botoscope&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Finally — I'm genuinely curious what you think. Is Telegram as a marketplace already a reality or still an experiment? Do you see a future for e-commerce inside messengers, or will this remain a niche? If you have your own experience with Telegram bots for sales — what worked, what didn't — write in the comments. I don't get enough of these conversations.&lt;/p&gt;

</description>
      <category>telegram</category>
      <category>woocommerce</category>
      <category>node</category>
      <category>wordpress</category>
    </item>
  </channel>
</rss>
