Місток
Документація

Сповіщення, Telegram, CRM

Швидкий старт новеАрхітектураШлюзиHTTP APIПередоплата і правилаФіскалізаціяСповіщення і CRMПосилання на оплатуАналітика новеПольщаНативний шлюз ShopifyБезпека нове

Нагадування про неоплачене

Через REMINDER_AFTER_HOURS після створення рахунку, якщо замовлення досі pending: email (SMTP) і, за SMS_REMINDER=true, SMS з тим самим посиланням на оплату. Кількість і інтервал — REMINDER_MAX, REMINDER_GAP_HOURS. Оплатили іншим способом або скасували — нагадування зупиняються.

SMS

SMS_PROVIDER=turbosms|alphasms. SMS_ON_PAID=true — «оплату отримано» покупцю. Телефони нормалізуються до 380XXXXXXXXX.

Telegram-бот

TELEGRAM_BOT_TOKEN + TELEGRAM_ADMIN_IDS. Алерти йдуть у TELEGRAM_CHAT_ID; команди приймаються лише від адмінів.

КомандаДія
/today, /weekзведення: замовлення, оплати, виручка, втрачено, по шлюзах, аномалії
/status #1001, /sync #1001стан платежу; примусова синхронізація зі шлюзом
/link 1250 Худі чорне M | email | телефончернетка в Shopify + посилання на оплату за 5 секунд
/refund #1001 300 → /confirmповернення через Shopify (далі Місток відправить його в шлюз)
/cod_off 380… причина, /cod_on, /trusted, /rulesправила по телефонах

CRM / Zapier / Make

Підписаний вебхук подій — формат на сторінці API. KeyCRM і SalesDrive приймають його через вхідний webhook/ApiX-Drive; власний бекенд — напряму.

Meta CAPI, GA4, Sendpulse

Після успішної оплати Місток надсилає серверні події — вони не залежать від блокувальників реклами і браузера покупця:

КудиЩоЗмінні
Meta Conversions APIPurchase (передоплата — InitiateCheckout): сума, валюта, товари, event_id = mistok-<orderId> для дедуплікації з піксельною подією; email/телефон/країна/місто хешуються SHA-256, сирі дані не передаютьсяMETA_PIXEL_ID, META_CAPI_TOKEN, META_TEST_EVENT_CODE
GA4 Measurement Protocolpurchase (передоплата — begin_checkout) з transaction_id, items, value; client_id — стабільний псевдо-id із номера замовлення (cookie _ga сервер не бачить)GA4_MEASUREMENT_ID, GA4_API_SECRET
Sendpulseподія Automation360 при оплаті та при кожному нагадуванні про неоплачене (з pay_url) — ланцюжки email/Viber/SMS будуєте в Sendpulse; опційно контакт додається в адресну книгу зі зміннимиSENDPULSE_ID, SENDPULSE_SECRET, SENDPULSE_EVENT_PAID, SENDPULSE_EVENT_UNPAID, SENDPULSE_BOOK_ID

Помилки пікселів не впливають на платіж: вони пишуться в таймлайн замовлення (стадія pixels). Якщо у магазині вже є канал Facebook & Instagram від Shopify, він теж шле Purchase зі своїм event_id — щоб не подвоювати, залиште один із двох або перейменуйте нашу подію через META_EVENT_NAME.

KeyCRM — нативний коннектор

Крім універсального вебхука, Місток уміє писати напряму в KeyCRM (OpenAPI, Bearer-ключ з кабінету). Дві схеми:

KEYCRM_MODEКоли підходитьЩо робить Місток
payments (типово)замовлення вже прилітають у KeyCRM з Shopify штатною інтеграцією KeyCRMзнаходить замовлення за source_uuid (номер замовлення Shopify, напр. #1001) і додає оплату POST /order/{id}/payment: сума в грн, status: paid, метод = назва шлюзу, дата оплати, коментар з id інвойсу
ordersштатної синхронізації немаєякщо замовлення не знайдено — створює його (POST /order: джерело KEYCRM_SOURCE_ID, покупець, товари з SKU і цінами, доставка з адресою), потім додає оплату; з KEYCRM_PAID_STATUS_ID переводить у потрібний статус

Формат звірено з docs.keycrm.app через згенерований клієнт plakidan/key-crm. SalesDrive — наступний у черзі.

SalesDrive — нативний коннектор

SALESDRIVE_MODEКоли підходитьЩо робить Місток
payments (типово)замовлення вже синхронізуються штатною інтеграцією SalesDrive ↔ Shopifyдодає оплату POST /api/payment/ з прив’язкою за orderExternalId = номер замовлення Shopify, uniqueId = mistok-<invoice> (повтори не дублюються); ставить paymentDate, payment_method і статус SALESDRIVE_PAID_STATUS_ID
ordersштатної синхронізації немаєстворює замовлення через POST /handler/ (контакт, товари з SKU, спосіб доставки, відділення НП з атрибутів замовлення), потім додає оплату за orderId

Формат звірено з відкритим клієнтом dannychirkov/salesdrive-api і базою знань SalesDrive; Swagger — api.salesdrive.me/api/docs. Не перевірено на живому акаунті.

Системні події в Telegram

Окрім алертів, бот власника отримує системні події (TELEGRAM_BOT_TOKEN + TELEGRAM_CHAT_ID; вимкнути — SYS_EVENTS=off, мова — SYS_EVENTS_LANG=uk|ru):

Те саме доступне і в адмінці: 🧾 Журнал дій. Мова адмінки перемикається кнопкою UA | RU у шапці (cookie, окремо для кожного браузера).

Листи покупцю

Коли налаштовано SMTP_* (і EMAIL_ON_PAID не вимкнено), покупець отримує: «Оплату отримано» зі складом замовлення, сумою і посиланням на фіскальний чек (якщо чек ПРРО з’являється пізніше — окремий лист із чеком, коли він готовий), і «Повернення» після refund. Мова — EMAIL_LANG=uk|ru|en. Нагадування про неоплачене замовлення для розстрочки містять графік «N × сума».

Щоденна звірка

О 07:00 (Київ) Місток звіряє три джерела за останні RECONCILE_DAYS (3) дні: Shopify (статус оплати, спосіб), свою базу і виписку PSP. Втрачені вебхуки лікує сам (перечитує статус у PSP і проводить оплату), решту — у Telegram: оплачено тут, але в Shopify не PAID; позначено оплаченим у Shopify вручну без платежу; старі неоплачені; hold понад 5 днів. Вручну: кнопка в адмінці або POST /admin/reconcile/run. Вимкнути: RECONCILE=off, час — RECONCILE_HOUR.

Shopify Markets (валюти)

Якщо покупець бачить ціну в злотих або євро, а магазин веде облік у гривні, Місток обирає валюту списання сам: PLN/EUR-здатний шлюз (P24, PayU, Stripe, Fondy) отримує суму у валюті покупця, гривневий (mono, LiqPay…) — суму в гривні, яку Shopify уже перерахував; у Shopify оплата записується у валюті замовлення. Чеки повернення формуються по реальних позиціях, пропорційно масштабованих до повернутої суми (знижки, часткові повернення) — без анонімного рядка «Повернення».

Алерти

Slack/Discord/Mattermost (ALERT_WEBHOOK_URL) і Telegram: розбіжність суми, reversed, невдале повернення, збій шлюзу з failover, шторм поганих підписів, ризиковий накладений платіж, помилка ПРРО.