Тіркеу

Вебхуктар

Вебхук дегеніміз не және ол не үшін қажет

Қолдау көрсетілетін оқиға түрлері

Вебхукты қалай жасауға болады

Вебхуктар жұмысының ерекшеліктері

Вебхук сұрауының құрылымы

Сұраудың түпнұсқалығын тексеру

Вебхуктарды өңдеу бойынша ұсыныстар

Жиі кездесетін қателер

Қорытынды

Вебхук дегеніміз не және ол не үшін қажет

Вебхук (Webhook) — белгілі бір оқиғалар орын алған кезде біздің сервистен сіздің жүйеңізге (CRM, ERP, 1С, меншікті қолданба және т.б.) HTTP(S) сұраулары арқылы хабарландыруларды автоматты түрде жіберу механизмі.

API-ге үнемі сұрау салудың орнына (мысалы, SMS жеткізу күйін тексеру), сіздің серверіңіз оқиға шынымен орын алған сәтте HTTP(S)-сұрауын алады.

Вебхуктарды пайдалану мүмкіндік береді:

  • деректерді іс жүзінде нақты уақыт режимінде алуға;
  • сіздің жүйеңізге де, сервистің API-іне де түсетін жүктемені азайтуға;
  • интеграция архитектурасын жеңілдетуге;
  • SMS жеткізудің түпкілікті күйлерін немесе нысан оқиғаларын (жіберу, контактіні растау немесе жазылымнан бас тарту сияқты) дәл бақылауға.

Қолдау көрсетілетін оқиға түрлері

Қазіргі уақытта оқиғалардың келесі түрлері қолжетімді:

  • Нысан оқиғалары — пайдаланушы нысанға енгізген деректер, сондай-ақ телефон нөмірін немесе email мекенжайын растаған кезде немесе нысаннан жазылымды тоқтатқан кездегі хабарландырулар беріледі.
  • SMS күйлері — абонентке SMS жеткізудің соңғы күйі беріледі.

Вебхукты қалай жасауға болады

1-қадам. Параметрлерге өту

Басқару панелі → API → Вебхуктар бөліміне өтіп, «Вебхук жасау» түймесін басыңыз. Жаңа вебхук жасау нысаны ашылады.


2-қадам. Параметрлерді баптау

Вебхук жасау нысанында келесі параметрлерді көрсетіңіз:

Оқиға түрі

Mobizon жүйесіндегі вебхук жіберілетін оқиғаны анықтайды.

Қолжетімді нұсқалар:

  • Нысан оқиғалары
  • SMS күйлері

Деректерді беру форматы

Вебхук деректері сіздің серверіңізге жіберілетін формат:

  • raw
  • xml
  • json

Форматты өңдеушіңіздің мүмкіндіктеріне қарай таңдаңыз.


Өңдеуші мекенжайы (URL)

Вебхуктар жіберілетін URL мекенжайы.

Шектеулер:

  • URL-дің максималды ұзындығы — 1000 таңбаға дейін;
  • сұраулар тек POST әдісімен жіберіледі;
  • бірден көп емес серверлік редиректке (HTTP 301 немесе 302) жол беріледі.

Маңызды:

  • тек серверлік редиректтерге қолдау көрсетіледі;
  • редиректтер тізбегіне қолдау көрсетілмейді;
  • бір редиректтен асқан жағдайда хабарландыру жеткізілмеген деп есептеледі.

Құпия кілт

Құпия кілт сұраудың түпнұсқалығын тексеру үшін пайдаланылады.

Ерекшеліктері:

  • кез келген таңбалар жиынтығынан тұруы мүмкін;
  • максималды ұзындығы — 255 таңба;
  • HTTP сұрауында берілмейді;
  • тек қолтаңбаны қалыптастыру және тексеру үшін пайдаланылады.

Егер құпия кілт көрсетілмесе:

  • сұрау қолтаңбасы қалыптаспайды;
  • өңдеушінің қауіпсіздігін басқа әдістермен (мысалы, URL-ге кіруді шектеу арқылы) қамтамасыз ету қажет.

Вебхуктың белсенділігі

Егер вебхук жасалғаннан кейін бірден жұмыс істей бастауы керек болса, «Белсенді» жалаушасын қойыңыз.


3-қадам. Сақтау

«Сақтау» түймесін басыңыз. Жасалған вебхук тізімде пайда болады.

Вебхуктар жұмысының ерекшеліктері

  • Вебхук оның әрбір сегментіне емес, бір SMS-хабарламаға толығымен жіберіледі.
  • Хабарландырулар тек SMS жеткізудің соңғы күйі алынған кезде ғана жіберіледі.
  • Бір оқиға түрі үшін бірнеше вебхук жасауға болады.
  • Әрбір вебхук сіздің аккаунтыңыздағы барлық SMS және нысандар бойынша оқиғаларды алады.
  • Егер өңдеуші сервері HTTP кодын 200–299 аралығында 5 секундтан кешіктірмей қайтарса, сұрау сәтті жеткізілді деп есептеледі.
  • Егер жауап 5 секунд ішінде алынбаса немесе 200–299 ауқымынан тыс код қайтарылса, жүйе қайта жіберуді орындайды.

Жеткізуді қайталау әрекеттері:

  • 10 әрекетке дейін орындалады;
  • әрекеттер арасындағы интервал әрбір жаңа әрекет сайын 1 минутқа артады;
  • әрекеттер таусылғаннан кейін оқиға жеткізілмеген деп есептеледі.

Вебхук сұрауының құрылымы

Барлық вебхуктар POST әдісімен HTTP(S)-сұрау арқылы жіберіледі.

Жоғарғы деңгейдегі өрістер

ӨрісСипаттамасы
eventIdОқиғаның бірегей идентификаторы (қайталау әрекеттері үшін бірдей)
eventTypeОқиға түрі (мысалы, sms-delivery-report)
eventCreateTsОқиға жасалған күн мен уақыт (yyyy-mm-dd hh:mm:ss)
webhookIdВебхук идентификаторы
attemptЖеткізу әрекетінің нөмірі
dataОқиға деректері
signСұраудың цифрлық қолтаңбасы

Payload мысалы: SMS жеткізу күйі (sms-delivery-report)

{
  "eventId": 26,
  "eventType": "sms-delivery-report",
  "eventCreateTs": "2026-01-15 11:42:28",
  "webhookId": 1,
  "attempt": 1,
  "data": {
    "campaignId": 245455096,
    "messageId": 169275418,
    "segNum": 3,
    "statusUpdateTs": "2026-01-15 11:42:08",
    "status": "DELIVRD",
    "to": "380737893456"
  },
  "sign": "3f0a37cf5e27fe0615504b6d700b4b657ecfd39d"
}

data өрісі

ӨрісСипаттамасы
campaignIdSMS-науқанның ID-і
messageIdSMS-хабарламаның ID-і
segNumSMS сегменттерінің саны
statusUpdateTsКүйдің жаңартылған уақыты
statusЖеткізудің соңғы күйі
toАлушының нөмірі

Payload мысалдары: нысан оқиғалары

Нысандарға арналған вебхуктар пайдаланушының әртүрлі әрекеттері кезінде жіберілуі мүмкін: нысанды жіберу, контактіні растау немесе жазылымнан бас тарту.

Нысанды жіберу (form-submission)

Оқиға пайдаланушы нысанды сәтті толтырып, жібергеннен кейін бірден жіберіледі.

{
  "eventId": 40,
  "eventType": "form-submission",
  "eventCreateTs": "2026-01-15 16:53:30",
  "webhookId": 1,
  "attempt": 1,
  "data": {
    "formId": 846,
    "submissionId": 3680,
    "items": [
      {
        "submissionDataId": 12303,
        "fieldId": 3744,
        "fieldType": "TEXT_STRING",
        "fieldName": "Аты",
        "value": "Ivan"
      },
      {
        "submissionDataId": 12304,
        "fieldId": 3745,
        "fieldType": "EMAIL",
        "fieldName": "E-mail",
        "value": "test@mobizon.com",
        "confirmationRequired": 1
      },
      {
        "submissionDataId": 12305,
        "fieldId": 3746,
        "fieldType": "MOBILE",
        "fieldName": "Ұялы телефон",
        "value": "380737893456",
        "confirmationRequired": 1
      }
    ]
  },
  "sign": "0a38941c47689e3cb3634db817cd4851d2511c47"
}

items өрісінің сипаттамасы

Жиымның әрбір элементі нысанның бір өрісіне сәйкес келеді.

ӨрісСипаттамасы
submissionDataIdНысан өрісі мәнінің ID-і
fieldIdНысан өрісінің ID-і
fieldTypeӨріс түрі (TEXT_STRING, EMAIL, MOBILE және т.б.)
fieldNameӨріс атауы
valueПайдаланушы енгізген мән
confirmationRequiredРастау қажеттілігінің белгісі (1 — талап етіледі)

Контактіні растау (form-contact-confirmation)

Оқиға пайдаланушы SMS немесе Email арқылы келген кодтың көмегімен email мекенжайын немесе телефон нөмірін растағаннан кейін жіберіледі.

{
  "eventId": 42,
  "eventType": "form-contact-confirmation",
  "eventCreateTs": "2026-01-15 16:54:15",
  "webhookId": 1,
  "attempt": 1,
  "data": {
    "formId": 846,
    "submissionId": 3680,
    "item": {
      "submissionDataId": 12305,
      "fieldId": 3746,
      "fieldType": "MOBILE",
      "fieldName": "Ұялы телефон",
      "value": "380737893456",
      "confirmationTs": "2026-01-15 16:54:14"
    }
  },
  "sign": "fe0da5443a9f5cadd0e972301415816cec481137"
}

Контактінің нысаннан жазылымын тоқтату (form-contact-unsubscribe)

Оқиға пайдаланушы жазылымнан бас тарту нысаны арқылы жазылымын тоқтатса жіберіледі.

{
  "eventId": 45,
  "eventType": "form-contact-unsubscribe",
  "eventCreateTs": "2026-01-15 17:33:47",
  "webhookId": 1,
  "attempt": 1,
  "data": {
    "formId": 846,
    "unsubscribeTs": "2026-01-15 17:33:46",
    "items": [
      {
        "submissionId": 3675,
        "submissionDataId": 12289,
        "fieldId": 3745,
        "fieldType": "EMAIL",
        "fieldName": "E-mail",
        "value": "test@mobizon.com",
        "confirmationTs": ""
      }
    ]
  },
  "sign": "06b78cf55ad19f9810babc415e86535384b74663"
}

Сұраудың түпнұсқалығын тексеру

Тексеру үшін SHA1 алгоритмі бойынша есептелетін sign өрісі пайдаланылады.

Қолтаңбаны қалыптастыру

Қолтаңбаға арналған жол келесі ретпен қалыптасады:

eventId|attempt|eventCreateTs|secretKey

Мұндағы secretKey — вебхукты жасау кезінде көрсетілген құпия кілт.


PHP-де қолтаңбаны тексеру мысалы

$secretKey = 'secret123';

$payload = json_decode(file_get_contents('php://input'), true);

$hash = sha1(
    $payload['eventId'] . '|' .
    $payload['attempt'] . '|' .
    $payload['eventCreateTs'] . '|' .
    $secretKey
);

if (hash_equals($hash, $payload['sign'])) {
    http_response_code(200);
} else {
    http_response_code(403);
}

Вебхуктарды өңдеу бойынша ұсыныстар

  • Бір вебхук бірнеше рет жіберілуі мүмкін (жеткізу әрекеттері қайталанған кезде).
  • eventId-ді сақтау және бір оқиғаны қайталап өңдемеу ұсынылады.
  • Сұрауды өңдеу кезінде ұзақ операцияларды орындамаңыз.
  • Оңтайлы сценарий:
    • қолтаңбаны тексеру;
    • оқиғаны сақтау;
    • HTTP 200 кодын тез қайтару;
    • әрі қарай өңдеуді асинхронды түрде орындау.

Жиі кездесетін қателер

МәселеЫқтимал себебі
Вебхук келмейдіURL қолжетімсіз немесе редирект санынан асты
Қайталанған хабарламаларСервер HTTP 200 кодын уақытында қайтармады
Қолтаңба сәйкес келмейдіҚұпия кілт немесе өрістер реті қате
Өңдеу қатесіPayload құрылымын тексеру жоқ

Қорытынды

Вебхуктар SMS күйлері мен нысандар туралы деректерді алуға мүмкіндік береді:

  • API-ге үнемі сұрау салмай-ақ;
  • минималды кідіріспен;
  • уақытша іркілістер кезінде қайта жеткізу кепілдігімен.

Қолтаңбаны дұрыс тексеру және қайталанған сұрауларды мұқият өңдеу сенімді интеграцияны қамтамасыз етеді.