Komunikační brána MenuBot
SMS běží přes SMSGate Android. Automatický WhatsApp může běžet přes Meta Cloud API; před jeho zapnutím je nutné potvrdit cenový režim. Hovory jsou odložené.
Orientační přímé ceny pro české číslo (+420), stav 29. 10. 2026
- SMSGate Android app/API: zdarma; SMS se řídí tarifem operátora na SIM.
- WhatsApp Business App: zdarma pro ruční práci; nemá serverové Cloud API ani automatický webhook.
- Meta Cloud service odpovědi: prvních 1 000 doručených zpráv měsíčně na jedno firemní číslo zdarma, potom €0,0175 za zprávu.
- Meta Cloud utility a authentication šablony: €0,0175 za doručenou zprávu.
- Meta Cloud marketing šablony: €0,0712 za doručenou zprávu.
- Příchozí zprávy uživatel→firma jsou zdarma. Meta účtuje jen doručené zprávy firmy; sazby se mohou měnit a existují zvláštní bezplatná okna.
Sazby Meta jsou k 1. 10. 2026 pro Rest of Central & Eastern Europe. Bezplatná aplikace WhatsApp Business není automatická alternativa k Cloud API. Neoficiální automatizaci WhatsApp Web nepoužívat.
Další kroky – přesné pořadí
- Na produkčním webrootu ověřit PHP syntaxi nového `api.php` a SDK; tento nový inbound polling endpoint ještě nemá potvrzený serverový lint.
- Vytvořit samostatný API klíč pro každý vlastní backend, použít jedinečné `source_system` a otestovat autorizovaný `GET ?op=status` a `GET ?op=inbound`. Klíče nikdy nedávat do telefonu ani prohlížeče.
- Další fyzický krok: vložit dedikovanou SIM, ručně ověřit skutečnou SMS a nainstalovat oficiální SMSGate Android. SMSGate zajišťuje SMS; WhatsApp přes Meta Cloud neposílá telefonní aplikace.
- Doplnit SMSGate Cloud údaje/signing key do chráněného configu a spustit pouze `worker.php --check` a `register-webhooks.php --check`. Registraci webhooků provést až po readbacku URL a podpisu.
- Rozhodnout podle tabulky výše, zda přijímáš možné poplatky Meta. Zatím žádný Meta token ani platební metodu nenastavovat.
- Jen při schválení Cloud API dokončit Meta app/WABA, registraci čísla, token, oprávnění, webhook a případné šablony. App Review/business verification závisí na typu přístupu; zelená značka není nutná. Osobní číslo nemigrovat.
- Podepsaný push webhook je volitelný. Příchozí odpovědi jsou dostupné příslušnému API klientovi přes `GET ?op=inbound`; push URL se doplní až tehdy, když konkrétní interní aplikace má vlastní HTTPS přijímač. Adresu si nevymýšlet ani ji nevracet do stejného serveru.
- Po nastavení příslušných tajemství spustit pouze `worker.php --check` a případně `whatsapp-worker.php --check`. `webhook-worker.php --check` spouštět jen při zapnutém push callbacku s existujícím HTTPS přijímačem; pro polling není potřeba.
- Až po výslovném potvrzení poslat jednu testovací SMS a jednu WhatsApp zprávu na vlastní číslo a ověřit odpověď. Nikdy netestovat na zákazníkovi.
- Před ostrým provozem nastavit retenční pravidla a návrat. Timer/cron nastavit až po potvrzení ceny, limitů a způsobu pozastavení pouze této služby.
Bezpečnostní hranice
- Přiložený plný instalátor je určen pro nový prázdný server; na tomto víceúčelovém VPS se nesmí spouštět.
- Neměnit existující weby, služby, databáze, globální API, firewall ani časovače kvůli SMS.
- Nepouštět aktualizace balíčků, restart ani změnu konfigurace jako součást auditu.
- worker.php, whatsapp-worker.php i webhook-worker.php jsou CLI-only; běžné spuštění může odeslat SMS/WhatsApp nebo zavolat nakonfigurovaný webhook. Pouze --check nic neposílá.
- WhatsApp worker má pilotní limit nejvýše pěti pokusů za klouzavou hodinu a jedno předání na spuštění; zvýšení limitu vyžaduje samostatné schválení.
- Limit pěti pokusů za hodinu není cenový limit Meta; šablony mohou být placené od prvního doručení a 1 000 bezplatných service odpovědí není neomezené.
- Po nejednoznačném timeoutu se SMS ani WhatsApp neposílá znovu naslepo; stav unknown čeká na webhook/ověření.
- SMSGate Android aplikace je pouze SMS brána; WhatsApp automatizaci přes neoficiální WhatsApp Web/WAHA/Baileys nepoužívat.
- Čísla a texty SMS jsou citlivé údaje; plán uchování a ochranu záloh vyřešit před ostrým provozem.
Aktuální stav
- Produkční migrace 001 a 002 jsou potvrzené: verze `1,2`, celkem 12 tabulek, pět nových tabulek a čtyři doplněné sloupce.
- Produkční SMS základ je potvrzen uživatelskými výstupy: migrace 001, šest aplikačních tabulek, PHP spojení pod www-data, runtime práva bez DELETE a neautorizovaný API GET s odpovědí 401. Po migraci 002 uživatel znovu potvrdil pouze INSERT, SELECT a UPDATE. Autorizovaný klient ani živá SMS ověřené nejsou.
- Cache-bust kontrola potvrdila, že aktuální MBSMD/index i API manuál jsou veřejné; nové helpery a WhatsApp webhook route odpovídají přes HTTPS.
- Dne 29. 10. ve 23:29 uživatel spustil SSH fázi A jako root: všechny uvedené soubory byly přítomné, PHP lint prošel, před migrací 002 bylo 7 tabulek a runtime práva byla INSERT/SELECT/UPDATE; config má root:www-data 640.
- Root preflight ukázal, že SMSGate a Meta klíče chybí. Push callback adresa také není nastavená, ale pro klientský polling přes `GET ?op=inbound` není potřeba. Migrace 002 nyní proběhla; normální CLI workery, registrace webhooků ani zprávy se nespustily.
- Obousměrné SMS/WhatsApp API, source_system, korelace odpovědí, centrální webhook outbox a tři CLI workery jsou v produkčním webrootu a PHP lint prošel. DB migrace 002 je aplikovaná. Nové API `GET ?op=inbound` poskytuje klientsky omezený polling příchozích odpovědí; jeho produkční PHP lint a autorizovaný test ještě nejsou potvrzené.
- Lokálně prošel PHP lint všech SMS souborů, izolované podpisové/konfigurační/SDK testy a vykreslení indexu i manuálu. Produkční DB transakce, Meta/callback připojení a živé zprávy testované nejsou.
- SMSGate Cloud tajemství, registrace SMS webhooků, telefon/SIMGate Online a živá SMS zatím nejsou ověřené. Meta WABA/číslo/token/šablony/webhook a přijetí případných poplatků nejsou rozhodnuté.
- Uživatel potvrzuje zálohu mimo VPS i ověřenou obnovu do oddělené DB. Žádný timer/cron, PHP-FPM restart, firewall ani nový port se nenastavoval.
Audit a dosavadní ověření
- Ověřen aktivní víceúčelový server; kapacita při jednom měření nevypadala kriticky, ale měření není garance dlouhodobé rezervy.
- Syntaxe Nginx a PHP-FPM prošla. Read-only MariaDB preflight 2026-10-29 v 14:26 potvrdil bind na loopbacku, port 3306 a volný název schématu i aplikačního účtu.
- Dne 2026-10-29 ve 14:30 uživatel vytvořil nové prázdné SMS schéma; readback potvrdil utf8mb4 a utf8mb4_unicode_ci. Existující schémata ani služby nebyly měněny.
- Konfigurace je uložena mimo webroot a PHP test pod www-data vrátil PHP_DB_CONNECTION_OK. Dne 2026-10-29 v 19:46 uživatel odebral DELETE; read-only kontrola oprávnění potvrdila pouze INSERT, SELECT a UPDATE.
- Hetzner Firewall se zobrazuje jako Fully applied k cílovému serveru. Pravidla nebyla měněna; přesné síťové podrobnosti nejsou součástí veřejného přehledu.
- Byly zjištěny nevyřešené provozní odchylky. V rámci SMS se nemění.
- Uživatel potvrdil, že databázová záloha je mimo VPS a obnova do oddělené DB byla ověřena.
- Read-only kontrola práv po migraci 002 potvrdila pouze `INSERT`, `SELECT` a `UPDATE`.
Hotovo – doložený stav
- Prošel jsem dodaný postup a oddělil SMS MVP od WhatsAppu, hovorů a AI.
- První SSH audit proběhl pouze pro čtení; syntaktické kontroly Nginx a PHP-FPM prošly.
- Firewall je potvrzen jako plně aplikovaný na server z SSH auditu.
- Read-only databázový preflight potvrdil volný název schématu i aplikačního účtu.
- Nové SMS schéma bylo vytvořeno a charset/collation ověřeny.
- Migrace 001 vytvořila všech šest aplikačních tabulek; bezpečný GET bez klíče potvrdil odpověď 401 a žádná SMS nebyla odeslána.
- Samostatný databázový účet a chráněný konfigurační soubor byly vytvořeny; PHP-FPM uživatel má k souboru čtecí přístup, DB spojení prošlo read-only testem a nadbytečné právo DELETE bylo odebráno.
- Cache-bust kontrola potvrdila, že aktuální veřejný index a API manuál jsou nasynchronizované; webově dostupné pomocné knihovny a WhatsApp webhook route odpověděly očekávaným HTTP stavem.
- Uživatelův root preflight potvrdil přítomnost a čistý PHP lint všech uvedených souborů. Následně uživatel spustil migraci 002; readback potvrdil verze 1,2, 12 tabulek, pět nových tabulek a čtyři sloupce.
- Obousměrný SMS/WhatsApp kód je v produkčním webrootu a PHP lint všech uvedených souborů prošel: Meta webhook, podpisy, source_system, 30denní korelace, centrální outbox s opakováním, API/SDK a tři CLI workery. Normální CLI workery ani živé zprávy nejsou spuštěné.
- Všechny lokální PHP soubory prošly php -l; izolované testy podpisů, callback konfigurace, SDK pojistek, bind parametrů a renderu indexu/manuálu prošly.
- Oficiální SMSGate dokumentace byla ověřena pro JWT scopes, odesílání a webhooky včetně podpisu i počtu částí zprávy.
- Zálohu databáze uživatel hlásí jako provedenou; žádná SMS ani změna produkčních služeb nebyla provedena.
- Migrace 002 již na produkci proběhla; Meta Cloud HTTP klient, WhatsApp API fronta/stavy, source_system a trvalé podepsané webhook doručení jsou publikované. Konfigurace a provozní workery čekají.
- Každý klient má mít WhatsApp vypnutý jako výchozí stav; API vyžaduje souhlas s neosobní referencí, 24hodinové okno pro volný text a schválenou šablonu mimo toto okno.
Aktualizováno
Aktualizace: 29. 10. 2026 – migrace 002 a její readback jsou hotové; post-migrační granty a obnova zálohy jsou uživatelem potvrzené. Přidán klientsky omezený `GET ?op=inbound` a aktualizován ceník. Lokální lint/render testy proběhly; produkční lint/autorizovaný test nové operace, API klíče, SMSGate konfigurace a rozhodnutí o Meta stále čekají.