M cenaly.ru
🧩 Widgets for Your Website

➕ Multibutton

One floating button instead of a stack: messengers, socials, phone, email and actions of your other widgets

Documentation

Multibutton

Multibutton is a single floating button in the corner of the site that, on click, opens into a fan menu of contact channels: WhatsApp, Telegram, Viber, VK, social networks, phone, email, any link of yours — plus actions of our own widgets (“message in chat”, “order”, “book”).

It also solves a problem of your own making: every widget draws its own button in the same bottom corner, so turning on chat, ordering, and callback leaves you with a stack of buttons crowding each other. Multibutton removes the stack — the channels of the absorbed widgets live in its fan menu, and their own buttons are hidden.

The widget is free: no separate add-on to buy.

Where to turn it on: Admin panel → Marketing → “My Website” → the “Multibutton” card. The toggle turns the widget on, the gear icon opens the settings; the “Move to sidebar” button gives the widget its own menu item.


Installing it on your site#

No code of your own is needed — the shared tag from the “My Website” section does the job:

<script src="https://cdn.cenaly.ru/site/v1.js" data-domain="YOUR-DOMAIN" async></script>

One line in <head> or right before </body>; the set of active widgets is then controlled by toggles in the admin panel. Platform instructions (HTML, Google Tag Manager, WordPress, Tilda/Wix, Shopify, Webflow) are in the My Website article, in the “Installing on popular platforms” section.

⚠️ The shared tag matters especially for the multibutton. It gathers neighbouring widgets under itself — but it can only absorb ones that have actually loaded on that same page. If chat is inserted on some pages and ordering on others, the fan menu will differ between them. The shared loader brings up the widgets in the right order, with the multibutton last, once its neighbours are already ready.

A standalone multibutton/v1.js tag also exists (in the “Advanced” block), with its own attributes: data-color, data-icon (an emoji on the button), data-label, data-position="left|right", data-lang, and data-keep-fabs="1" — don't hide neighbours' own buttons. A tag attribute always overrides the admin panel setting.

What the installation check sees, and what it doesn't. The “Check installation” button reads the page's source HTML: shared loader found / only separate tags found / another location's code / no code at all. It won't see a tag that's inserted in the browser by Google Tag Manager — that's not an error, check the site with your own eyes.


Configuring the widget#

Settings save themselves, there is no separate “Save” button. A live preview of the fan menu sits to the right of the fields.

Appearance#

Button colour, an emoji icon on it, screen corner, and a label (also used as the label for screen readers).

Fan menu channels#

A list builder: add, remove, reorder with ↑↓. Maximum — 12 channels. Three families:

Family Channels What to enter in the value field
Messengers and social networks WhatsApp, Telegram, Viber, VK, Instagram, Facebook, TikTok, YouTube a number, @handle, or a ready-made address — the widget builds the link itself
Direct contacts phone, email phone number / email address
Custom link any page address; a bare domain is completed to https://
Actions of our widgets open chat, call from browser, callback, order, table booking, online booking nothing: the item simply opens the matching widget on the same page

Every channel has a label (separately for each site language) and a where to show flag: everywhere · desktop only · mobile only.

A first-message draft is available for WhatsApp and Telegram: text the guest finds already typed in. It supports the {url} and {title} placeholders — the address and title of the page the click happened on (substituted at the moment of the click, not at render time). Maximum — 300 characters.

Invitation bubble#

A short phrase next to the button (“Have a question?”) — what invites the guest to click: a silent button in the corner simply goes unnoticed. The text is set separately for each language; an empty text means there is no bubble at all.

The delay before the bubble appears and the pause between shows are configurable. The pause is counted per guest, not per site: the mark that it was shown lives in the guest's browser, so the invitation never turns into a banner popping up on every page on every visit.

The “Open now” line#

In the header of the expanded fan menu — one line about opening hours: “Open until 22:00”, “Closed · opening at 10:00”, “Closed · opening Monday at 10:00”. The hours are taken from the location card (the schedule together with exceptions) — there is deliberately no copy of it in the widget settings.

Two values: auto (default — the line appears if the hours are filled in) and don't show. The status is recalculated every time the fan menu is expanded, not once at page load: the button can sit on the page for hours, and “Open until 22:00” at 22:30 is exactly the kind of lie that makes people stop trusting the rest. If the location's hours are not filled in, there is no line at all (a business cannot declare itself closed on its own site).

When to show it#

This block is shared with callback and Live Showcase:

  • pages — address masks “only on…” and “except…”, * = any fragment, up to 20 masks in each list; exceptions override allowances;
  • delay — 0…600 seconds after the page loads;
  • device — all · desktop only · mobile only (the threshold is 480 px);
  • schedule — up to 14 custom windows (“days + from… to…”) or the location's opening hours.

⚠️ Hours are counted in the location's time zone; if the location has no time zone set, the windows are counted by the visitor's local time, and the panel says so directly. If “location's opening hours” is selected but the schedule is empty, the schedule doesn't restrict anything and the button stays visible. An empty list of custom windows, conversely, means “never show”.

The fan menu's contents are recalculated on every opening: between views the guest has time to rotate the phone or navigate to a page where the button shouldn't appear.

Mobile layout#

The “📱 Mobile layout” section: a round button (default) or a bottom bar — a strip with the first four channels and their labels plus a “More” button with a sheet for the rest. On a wide screen it's always the fan menu; rotating the phone switches the layout on the fly. The preview shows the real cut-off between “in the bar / under ‘More’” and a line reading “N of M will fit in the bar”.

The bar behaves politely on someone else's page: it sits above a fixed bottom panel if the page has one, hides on scroll down and reappears on scroll up, respects the iPhone safe area, and disappears entirely if no channels are left.

Also show on our storefront#

A separate toggle (off by default). The multibutton is the only widget with this setting, and the reason is honesty: on our storefront it absorbs the native buttons — the chat bubble and the callback handset — meaning it changes a screen corner you've already configured. That is not something to turn on for you silently.


What happens after a click#

The guest expands the fan menu and picks a channel:

  • a messenger, social network, or your link — opens in a new tab; the conversation happens wherever the channel leads. If the channel has a message draft set, the guest's field is already filled in;
  • phone and email — open in the current tab through the device's own app (otherwise the browser would open, and immediately close, an empty window);
  • an action of one of our widgets — chat, the callback form, the cart, a booking, or an appointment opens right on the same page. The data lands where it normally would: conversations in “Chat”, an order in “Orders”, a booking in “Tables”, an appointment in “Appointments”, a callback number in “Requests”.

The multibutton doesn't collect its own data: it only gets the guest to the channel. What it does count is clicks, visible in its own panel under “Clicks over 30 days”: how many times the button was shown, how many times the fan menu was expanded, and how many clicks each channel got. There's no channel address, no message text, and no guest's page in this statistic — only the channel type and a number.


Limits#

  • An empty fan menu means no widget. Until at least one channel is set, the button isn't drawn at all: an empty button in the corner of someone's site is worse than no button.
  • No more than 12 channels, and the draft text is no longer than 300 characters.
  • An action channel exists only as long as the widget it belongs to exists. Turn off chat, and the “Open chat” item disappears from the settings on the very next save and doesn't come back on its own — it has to be added again. At runtime the multibutton also checks the neighbour before every expansion: if it hasn't loaded, the item won't be there, so there's never a button behind which nothing exists.
  • Absorbing neighbours' buttons is visual. The multibutton hides their floating buttons, but the widgets themselves keep working; absorption can be turned off with the data-keep-fabs="1" attribute on a standalone tag.
  • A message draft only exists for WhatsApp and Telegram. The field is ignored for the other channels: WhatsApp's pre-fill is documented, Telegram clients support it inconsistently, and the rest don't support it at all. A very long page address is sent without the substitution — a working link matters more than the text.
  • Only safe address schemes are allowed: https, http, tel, mailto, and viber. Everything else is dropped — both in the admin panel preview and on the site, because there's a single check.
  • On our storefront, the multibutton only shows via a separate toggle, and the “call from browser” item never lives in its fan menu there: there's no slot for it on the storefront.
  • The “Open now” line doesn't replace the schedule. It reads the hours from the location card; if they're not filled in, there won't be a line, but the button will still be there.

Troubleshooting#

There's no button on the site.

  1. Tag not found — run “Check installation”. “No code” — the tag isn't inserted, or it's missing on some template pages; “code for another location” — the tag has someone else's data-domain. If the tag is inserted by GTM, the check won't see it.
  2. Changes haven't landed yet — widget files are served through a CDN with a 5-minute cache: wait a bit and reload the page with the cache cleared.
  3. The widget is off, or the channel list is empty — an empty fan menu isn't drawn.
  4. Display rules filtered out the page — check the masks (exceptions override allowances), the device, and the delay.
  5. The schedule is closed — you're currently outside the window. Check your custom windows or the location card's schedule.
  6. The location has no time zone set — then the windows are counted by the visitor's clock, and the button appears at a different time than you expected.

A menu item is missing from the fan menu.

  • An action item has disappeared — the matching widget is off: turn it on and add the channel again, it won't come back on its own;
  • an item is marked “mobile only” (or the reverse) — the channel's device filter kicked in;
  • a neighbouring widget didn't finish loading in time (slow network, your page's security restrictions) — reload the page; a single shared tag helps with this on a lasting basis, instead of separate tags.

There are still two buttons in the corner. That means the neighbouring widget's action isn't in the fan menu: only widgets whose actions are in the menu get absorbed. Add the matching item. The opposite case — you don't want the neighbour's button hidden, and absorption is disabled by the data-keep-fabs="1" attribute: remove the attribute.

The mobile bar covers someone else's panel. The bar looks for another fixed bottom strip on its own and sits above it, re-measuring several times after load. If the other panel appears very late, switch to the round button — it doesn't take part in the page's bottom-of-screen layout at all.

The bubble doesn't show. Check that the text is set for the page's language, and that the configured pause between shows hasn't expired — it's counted per guest, in their browser.

Statistics are empty. Clicks are sent in batches and with a delay, not one by one; the counter shows 30 days and fills in as guests click.


FAQ#

How much does this cost?#

Nothing. The multibutton is free and doesn't require a separate add-on — unlike competitors that sell it as a stand-alone product.

How many channels can I add?#

Up to twelve. You set the order with the ↑↓ arrows, and that same order determines which four channels make it into the mobile bottom bar.

Where do messages from messengers go?#

Wherever the channel leads: WhatsApp goes to WhatsApp, Telegram goes to Telegram. If you want to see the conversation in your admin panel, connect these channels in the “Chat” section — then messages will arrive in the shared inbox, and you can put an “Open chat” item in the fan menu instead.

Will the multibutton hide other widgets' buttons?#

Yes, and that's the point: buttons of widgets whose actions are in its fan menu are hidden, so a stack of buttons doesn't crowd the corner. The widgets themselves keep working, and on a standalone tag this behaviour can be disabled with the data-keep-fabs="1" attribute.

Can I show different channels on mobile and desktop?#

Yes, every channel has a “where to show” flag: everywhere, desktop only, or mobile only. The fan menu's contents are recalculated on every opening, so rotating the phone is picked up immediately.

What happens if a guest clicks “Message on WhatsApp” from a laptop?#

The messenger's web version opens in a new tab — with the text already filled in, if you set a draft.

Where does the “Open until 22:00” line get its hours from?#

From the location card — the same schedule with exceptions that the guest sees on the storefront. Hours aren't set up separately in the widget, so the two never drift apart. If the schedule isn't filled in, there simply won't be a line.

What language will the fan menu speak?#

You set the channel labels and the bubble text yourself, per language; the widget detects the page's language from its markup (or the data-lang attribute). The day-of-week name in the “Open now” line comes from the browser, in the page's language.