Webhooks

    7 мүн окуу
    ·
    382 көрүү
    ·
    Жаңыртылды: 10/22/2026

    Webhooks: окуялар тууралуу билдирмелер

    Webhooks окуялар болгондо сиздин серверге HTTP-билдирмелерди алууга мүмкүндүк берет: кирүүчү билдирүүлөр, чыгуучу билдирүүлөр, статустардын өзгөрүшү жана башкалар.

    Кантип иштейт

    1. Сиз серверициздин URL дарегин PATCH /v1/webhooks аркылуу каттайсыз
    2. WazzaBee сиздин URL дарегиңизге сыноо суроосун жөнөтөт: эгер ал 200 кайтарбаса, каттоо четке кагылат
    3. Окуялар болгондо WazzaBee сиздин URL дарегиңизге окуянын маалыматтары менен POST-суроо жөнөтөт
    4. Ар бир суроо HMAC-SHA256 менен кол коюлган, анын чындыгын текшере аласыз

    Webhook туташтыруунун эки жолу

    1. Жеке кабинет аркылуу (жөнөкөй, программистсиз). «Коннекторлор» → «API» → «Кирүүчүлөр үчүн Webhook» блогун ачыңыз. Серверициздин дарегин коюп, «Туташтыруу» баскычын басыңыз: кабинет даректи өзү текшерип, колтамга үчүн жашыруун ачкычты көрсөтөт.

    2. REST API аркылуу (автоматташтыруу үчүн). Төмөндө сүрөттөлгөндөй PATCH /v1/webhooks суроосун жөнөтүңүз.

    Вебхук бир жолу гана жөндөлөт, ошондуктан суроону өз серверициздан жөнөтүү ыңгайлуу. Эгер аны браузерден жөнөтүп, Failed to fetch көрсөңүз, метод баш тамгалар менен жазылганын (PATCH) жана дарегиңиз сыноо суроосуна 10 секунддан ашпай 200 менен жооп берерин текшериңиз.


    PATCH /v1/webhooks: каттоо/жаңылоо

    URL

    PATCH https://api.wazzabee.com/api-gateway/v1/webhooks

    Аталыштар (headers)

    Authorization: Bearer СИЗДИН_API_АЧКЫЧЫҢЫЗ
    
    Content-Type: application/json

    Суроонун денесинин параметрлери

    ПараметрТүрүМилдеттүүСүрөттөмө
    webhooksUristring (URL)✅ ОобаБилдирмелерди алуу үчүн серверициздин URL дареги. https гана, интернеттен жеткиликтүү болуп, POST-суроолорго 200 кайтарышы керек. Жергиликтүү же ички даректерди көрсөтө албайт (localhost, 127.0.0.1, 10.x, 172.16–31.x, 192.168.x, 169.254.x)
    subscriptionsarray of stringsЖокЖазылуу үчүн окуялардын тизмеси. Демейки боюнча: ["messages_incoming"]
    headersobjectЖокАр бир билдирмеге өз аталыштарыңыз, 10го чейин. Мисалы, серверициздеги авторизация үчүн {"Authorization": "Bearer ..."} же системаңыздын идентификатору. Кызматтык аталыштарды (Content-Type, X-Webhook-*) коюуга болбойт. Берилбесе: мурункулары калат; null же {}: алынып салынат. Туруктуу параметрлерди түз эле webhooksUri ичинде ? белгисинен кийин көрсөтсөңүз болот

    Жеткиликтүү жазылуулар (subscriptions)

    ОкуяСүрөттөмө
    messages_incomingКардарлардан келген кирүүчү билдирүүлөр
    messages_outgoingЧыгуучу билдирүүлөр (API аркылуу же кол менен жөнөтүлгөн)
    messages_statusЧыгуучу билдирүүлөрдүн статустары: жөнөтүлдү, жеткирилди, окулду, ката. Формат төмөндө, «Жеткирүү статустары» бөлүмүндө
    messages_buttonҮлгүлөрдөгү баскычтарды басуу өзүнчө окуя катары: кампания жана кардар жооп берген жалпы жөнөтүү менен. Формат төмөндө, «Баскычтарды басуу» бөлүмүндө
    contactsAndDealsCreationЖаңы контакттарды жана бүтүмдөрдү түзүү
    channelsUpdatesКаналдардын статусунун өзгөрүшү (туташуу, ажыратуу, ката)

    Суроонун мисалы

    curl -X PATCH "https://api.wazzabee.com/api-gateway/v1/webhooks" \
      -H "Authorization: Bearer СИЗДИН_API_АЧКЫЧЫҢЫЗ" \
      -H "Content-Type: application/json" \
      -d '{
        "webhooksUri": "https://сиздин-сервер.com/webhook/wazzabee",
        "subscriptions": [
          "messages_incoming",
          "messages_outgoing",
          "messages_status"
        ]
      }'

    Ийгиликтүү жооп (200 OK)

    {
      "success": true,
      "webhooksUri": "https://сиздин-сервер.com/webhook/wazzabee",
      "subscriptions": [
        "messages_incoming",
        "messages_outgoing",
        "messages_status"
      ],
      "secret": "a1b2c3d4e5f6...64-символдуу-hex-ачкыч",
      "message": "Вебхук установлен. Сохраните secret, он используется для подписи уведомлений (HMAC-SHA256)."
    }
    🔴 Маанилүү! secret талаасы ар бир PATCH чакырылганда кайрадан түзүлөт. Аны сөзсүз сактап коюңуз: ал кирүүчү билдирмелердин колтамгасын текшерүү үчүн керек.

    Сыноо суроосу

    Вебхукту каттаганда WazzaBee дароо сиздин URL дарегиңизге сыноо POST-суроосун жөнөтөт:

    {
      "test": true,
      "event": "webhook_test",
      "challenge": "ырастоо_үчүн_кокустук_сап",
      "timestamp": "2026-03-12T10:00:00.000Z",
      "message": "WazzaBee webhook test: если вы видите это, ваш webhook работает корректно."
    }

    Сервериңиз 200 статусу менен жооп бериши керек. Эгер жооп 200 болбосо же URL жеткиликсиз болсо, вебхукту каттоо ката менен четке кагылат.

    challenge талаасы (сунушталат). Сыноо суроосунда кокустук сап менен challenge талаасы келет. Эгер сервериңиз ошол эле маанини кайтарса (жооптун денесинде же challenge JSON-талаасында, мисалы {"challenge": "ошол эле маани"}), webhook «ырасталган» белгисин алат (ишенимдин жогорку деңгээли). Бул милдеттүү эмес: эгер кабыл алгычыңыз (мисалы, даяр no-code кызматы) маанини кайтара албаса, webhook баары бир туташып, HMAC колтамгасынын коргоосу астында иштей берет.

    Каттоодо болушу мүмкүн болгон каталар

    КодКатаСебеби
    400Поле webhooksUri обязательноURL берилген эмес
    400webhooksUri должен быть валидным URLURL форматы туура эмес
    400webhooksUri должен использовать https://Дарек https:// менен башталбайт
    400webhooksUri не может указывать на локальный или внутренний адресURL localhost, жеке тармак же metadata-дарегине алып барат
    400Тестовый запрос вернул ошибку NСервериңиз 200 эмес жооп кайтарды
    400Не удалось отправить тестовый запросURL жеткиликсиз же күтүү убактысы бүттү (10 секунд)

    GET /v1/webhooks: учурдагы жөндөөлөр

    URL

    GET https://api.wazzabee.com/api-gateway/v1/webhooks

    Суроонун мисалы

    curl -X GET "https://api.wazzabee.com/api-gateway/v1/webhooks" \
      -H "Authorization: Bearer СИЗДИН_API_АЧКЫЧЫҢЫЗ"

    Жооп: вебхук жөндөлгөн (200 OK)

    {
      "success": true,
      "webhook": {
        "webhooksUri": "https://сиздин-сервер.com/webhook/wazzabee",
        "subscriptions": ["messages_incoming", "messages_outgoing"],
        "status": "active",
        "failureCount": 0,
        "createdAt": "2026-03-12T08:00:00.000Z",
        "updatedAt": "2026-03-12T08:00:00.000Z"
      }
    }

    Жооп: вебхук жөндөлгөн эмес (200 OK)

    {
      "success": true,
      "webhook": null,
      "message": "Вебхук не настроен"
    }

    Талаалардын сүрөттөмөсү

    ТалааТүрүСүрөттөмө
    webhooksUristringКатталган URL
    subscriptionsarrayАктивдүү жазылуулар
    statusstringactive же disabled
    failureCountintegerБардык кайталоолордон кийин катары менен канча билдирме жеткирилген жок
    createdAtstring (ISO 8601)Түзүлгөн күнү
    updatedAtstring (ISO 8601)Акыркы жаңыртылган күнү

    Кайра жөнөтүү

    Эгер сервериңиз 10 секунддун ичинде 2xx коду менен жооп бербесе (ката кайтарса, жеткиликсиз болсо же жооп берүүгө үлгүрбөсө), WazzaBee ошол эле билдирмени кайра жөнөтөт. Аракеттердин ортосундагы тыныгуулар өсөт: 1 мүнөт, 5 мүнөт, 15 мүнөт, 1 саат, 3 саат, 6 саат, 12 саат. Болжол менен бир суткада бардыгы 8 аракет.

    Ар бир жөнөтүүнүн аталыштары

    АталышСүрөттөмө
    X-Webhook-SignatureСуроо денесинин HMAC-SHA256 колтамгасы, текшерүү төмөндө сүрөттөлгөн
    X-Webhook-Delivery-IdБилдирменин идентификатору. Биринчи жөнөтүүдө жана бардык кайталоолордо бирдей
    X-Webhook-AttemptАракеттин номери: биринчи жөнөтүүдө 1, кайталоолордо 2 жана андан ары
    Билдирмени эки жолу иштетпөө үчүн. Иштетилген билдирмелердин X-Webhook-Delivery-Id маанисин сактап, тааныш идентификатору бар суроону өткөрүп жибериңиз. Биринчи жөнөтүү жеткен болсо да, сервериңиз 10 секунддан кеч жооп берсе, кайталоо келиши мүмкүн. Ошондуктан 200 менен дароо жооп бериңиз, ал эми узак иштетүүнү жооптон кийин жасаңыз.

    Кайталоо кийинки билдирмелерден кеч келиши мүмкүн. Билдирүүлөрдүн тартибин timestamp талаасы боюнча калыбына келтириңиз.

    Вебхук качан өчүрүлөт

    8 аракеттин бири да өтпөсө, билдирме жеткирилбеген деп эсептелет. Катары менен 10 билдирме жеткирилбесе, вебхук disabled статусуна өтөт. Ар кандай ийгиликтүү жеткирүү эсептегичти нөлгө түшүрөт. Бардык аракеттер кабинеттеги жеткирүү журналында көрүнөт: «Коннекторлор» → «API».


    Жеткирүү статустары (messages_status)

    Расмий WhatsApp (WABA) линиясынан жөнөтүлгөн ар бир чыгуучу билдирүү боюнча статустун өзгөрүшү тууралуу билдирме келет. queueId POST /v1/messages/send жообундагы queueId менен дал келет, статусту өз жөнөтүүңүз менен ошол аркылуу салыштырыңыз. Эгер жөнөтүүдө campaignId берилген болсо, ал дагы келет.

    {
      "statuses": [{
        "messageId": "uuid",
        "queueId": "uuid",
        "campaignId": "promo_oct",
        "channelId": "uuid",
        "chatId": "77071234567",
        "conversationId": "uuid",
        "contactId": "uuid",
        "status": "delivered",
        "error": null,
        "timestamp": "2026-09-30T12:00:00.000Z"
      }]
    }
    statusЭмнени билдирет
    sentБилдирүүнү WhatsApp кабыл алды
    deliveredАбоненттин телефонуна жеткирилди
    readОкулду
    failedЖеткирилген жок. error ичинде код жана себептин түшүнүктүү сүрөттөмөсү, мисалы {"code": 131026, "description": "..."}

    Ошол эле маалыматтарды GET /v1/messages аркылуу сураса болот: status, sentAt, deliveredAt, readAt, error талаалары.


    Баскычтарды басуу (messages_button)

    Абонент үлгүнүн баскычын басканда, кадимки кирүүчү билдирүүдөн тышкары өзүнчө окуя келет. replyTo ичинде кайсы чыгуучу билдирүүгө жооп берилгени көрсөтүлгөн: queueId, campaignId (API аркылуу жөнөтүүдөгү өз белгиңиз) жана broadcastId (эгер үлгү кабинеттен жалпы жөнөтүү менен кеткен болсо). Баштапкы билдирүүнү context боюнча өзүңүз издөөнүн кереги жок.

    {
      "buttons": [{
        "messageId": "uuid",
        "channelId": "uuid",
        "chatId": "77071234567",
        "contactId": "uuid",
        "conversationId": "uuid",
        "button": { "type": "button", "id": null, "title": "Ооба, кызыктуу", "payload": "YES_INTERESTED" },
        "replyTo": {
          "messageId": "uuid",
          "queueId": "uuid",
          "campaignId": "promo_oct",
          "broadcastId": null
        },
        "timestamp": "2026-09-30T12:00:00.000Z"
      }]
    }

    Эгер баштапкы билдирүү табылбаса (мисалы, WazzaBee аркылуу жөнөтүлбөгөн болсо), replyTo null болот.


    Өз аталыштарыңыз жана даректеги параметрлер

    Эгер сервериңиз билдирмелерди авторизация менен гана кабыл алса, вебхукту каттоодо аталыштарды headers талаасында бериңиз. Алар ар бир билдирме, кайталоолор жана сыноо суроосу менен кошо жөнөтүлөт. Туруктуу маалыматтарды (мисалы, системаңыздын идентификаторун) түз эле дарекке кошсоңуз болот: https://сиздин-сервер.com/hook?source=wazzabee&system=crm. Аталыштарды кабинетте да коюуга болот: «Коннекторлор» → «API» → вебхук блогу.

    {
      "webhooksUri": "https://сиздин-сервер.com/hook?source=wazzabee",
      "subscriptions": ["messages_incoming", "messages_status", "messages_button"],
      "headers": { "Authorization": "Bearer сиздин-токен" }
    }

    Колтамганы текшерүү (HMAC-SHA256)

    Ар бир билдирме вебхукту каттоодо алынган secret менен кол коюлат. Жасалма суроолордон коргонуу үчүн колтамганы дайыма текшерип турууну сунуштайбыз.

    Node.js тилинде текшерүүнүн мисалы

    const crypto = require("crypto");
    
    function verifyWebhookSignature(body, signature, secret) {
      const expected = crypto
        .createHmac("sha256", secret)
        .update(JSON.stringify(body))
        .digest("hex");
      return signature === expected;
    }
    
    // Webhook иштеткичинде:
    app.post("/webhook/wazzabee", (req, res) => {
      const signature = req.headers["x-webhook-signature"];
      if (!verifyWebhookSignature(req.body, signature, YOUR_WEBHOOK_SECRET)) {
        return res.status(401).send("Invalid signature");
      }
      // Окуяны иштетүү...
      res.status(200).send("OK");
    });

    Python тилинде текшерүүнүн мисалы

    import hmac
    import hashlib
    import json
    
    def verify_signature(body: dict, signature: str, secret: str) -> bool:
        expected = hmac.new(
            secret.encode(),
            json.dumps(body).encode(),
            hashlib.sha256
        ).hexdigest()
        return hmac.compare_digest(signature, expected)
    
    # Flask иштеткичинде:
    @app.route("/webhook/wazzabee", methods=["POST"])
    def handle_webhook():
        signature = request.headers.get("X-Webhook-Signature", "")
        if not verify_signature(request.json, signature, YOUR_WEBHOOK_SECRET):
            return "Invalid signature", 401
        # Окуяны иштетүү...
        return "OK", 200

    Кирүүчү webhook-билдирменин форматы

    Кирүүчү билдирүү келгенде WazzaBee сиздин URL дарегиңизге төмөнкү түзүлүштөгү POST-суроо жөнөтөт:

    {
      "channel_id": "uuid",
      "channel_type": "whatsapp_waba",
      "channel_name": "WhatsApp Business",
      "conversation_id": "uuid",
      "message": {
        "id": "msg_id",
        "from": "77771234567",
        "sender_name": "Кардар",
        "type": "text",
        "text": "Саламатсызбы!",
        "timestamp": "1712345678"
      },
      "operator": {
        "crm_user_id": "manager-42",
        "crm_user_name": "Алексей Менеджер"
      },
      "ad": {
        "ad_id": "120255518599590051",
        "source_type": "ad",
        "headline": "Visa4U",
        "text": "Отказали в визе? Не все потеряно!",
        "media_type": "video",
        "image_url": "https://scontent.xx.fbcdn.net/...jpg",
        "video_url": "https://video.xx.fbcdn.net/...mp4",
        "url": "https://fb.me/2abcXYZ",
        "click_id": "AfgHqhgPqgcChoXjlCqLkHfWKeS8"
      },
      "raw": { ... }
    }

    Талаалардын сүрөттөмөсү

    ТалааТүрүСүрөттөмө
    channel_idstring (UUID)WazzaBee байланыш линиясынын идентификатору
    channel_typestringЛиниянын түрү: whatsapp_waba, whatsapp_qr, telegram_bot, telegram_personal
    channel_namestringБайланыш линиясынын аталышы
    conversation_idstring (UUID) | nullМаектин идентификатору. Бир кардардын билдирүүлөрүн топтоо үчүн колдонуңуз
    messageobjectБилдирүүнүн маалыматтары
    operatorobject | nullБул чатта акыркы жооп берген оператор. Эч ким жооп бере элек болсо null
    operator.crm_user_idstringСиздин CRM'деги колдонуучунун ID'си (iframe-сессияны түзүүдө берилген)
    operator.crm_user_namestringОператордун аты. Аны iframe-сессияңыздын user.name талаасынан, ал эми API аркылуу жөнөтүүдө senderName талаасынан алабыз
    adobject | жокКайрылуунун булагы: кардар кайсы жарнамадан келди. Блок расмий WhatsApp (WABA) линияларында Click-to-WhatsApp жарнамасынан келген кайрылууларда гана келет. Талаалардын сүрөттөмөсү төмөндө
    rawobjectПровайдерден келген толук баштапкы payload (мүчүлүштүктөрдү оңдоо үчүн)
    Ошол эле суроодогу messages массиви. Жогорудагы талаалар менен бирге messages массиви төмөндө messages_outgoing бөлүмүндө сүрөттөлгөн форматта келет, болгону "direction": "incoming" менен. Бул бир билдирүү тууралуу бир билдирме: сизге ыңгайлуу форматты окуңуз, экинчисин талдабасаңыз да болот. Билдирменин уникалдуу идентификатору X-Webhook-Delivery-Id аталышында келет.

    ad блогу: кайрылуунун булагы

    Эгер кардар Instagram же Facebook жарнамасындагы «WhatsApp'ка жазуу» баскычын басса, билдирме менен бирге ad блогу келет. Кадимки кайрылууларда ал жок: ичиндеги маанини эмес, талаанын өзүнүн бар-жогун текшериңиз. Блок расмий WhatsApp линияларында гана келет: мындай маалыматтарды Meta WABA боюнча гана берет.

    ТалааТүрүСүрөттөмө
    ad_idstring | nullЖарнаманын идентификатору. Ал аркылуу жарнама Meta жарнамалык кабинетинен табылат
    source_typestring | nullad: жарнама, post: кадимки жарыялоо
    headlinestring | nullЖарнаманын аталышы. Ар кайсы жарнамаларда кайталанышы мүмкүн: так байланыштыруу үчүн ad_id колдонуңуз
    textstring | nullЖарнаманын тексти
    media_typestring | nullКреативдин түрү: image же video
    image_urlstring | nullЖарнаманын сүрөтү же видеодон кадр
    video_urlstring | nullЖарнаманын видеосу
    urlstring | nullЖарнамага шилтеме
    click_idstring | nullЖарнаманы басуунун идентификатору (ctwa_clid). Аны өзүңүздө сактап коюңуз: ал аркылуу Meta'га сатуу тууралуу окуялар кайтарылат, ошондо жарнама сатып алуучуларга оптималдаштырылат
    Муну менен эмне кылуу керек. ad_id жана click_id маанилерин өзүңүздөгү кардардын карточкасына жазыңыз, ошондо отчеттордо кайсы жарнама жөн гана кайрылууларды эмес, бүтүмдөрдү алып келгени көрүнөт.
    operator талаасы CRM'иңизге билдирмелерди тагыраак багыттоого мүмкүндүк берет. Эгер оператор кардарга буга чейин жооп берген болсо, жаңы кирүүчү билдирүүнү кимге багыттоону билесиз.

    Кардарлардын WABA-үлгүлөрдүн баскычтарына жооптору

    Кардарга Quick Reply баскычтары (же Interactive buttons / list) бар бекитилген WABA-үлгүнү жөнөтүп, кардар баскычты басканда, WazzaBee webhook'ко кошумча message.interactive жана message.context талааларын жөнөтөт. message.text талаасында басылган баскычтын чыныгы тексти болот, аны CRM чатында кардардын кадимки билдирүүсү катары көрсөтсөңүз болот.

    message.type маанилери

    МааниКачан келет
    textКадимки тексттик билдирүү
    image, video, audio, document, stickerМедиа
    location, contacts, reactionWhatsApp'тын кызматтык түрлөрү
    buttonWABA-үлгүнүн Quick Reply баскычын басуу (Meta'нын эски форматы)
    interactiveInteractive button / list басуу (Meta Cloud API v3)

    message.interactive талаасынын түзүлүшү

    {
      "type": "button" | "button_reply" | "list_reply",
      "id":    "баскычтын идентификатору" | null,
      "title": "кардар көргөн баскычтын тексти" | null,
      "description": "сүрөттөмө (list_reply үчүн гана)" | null,
      "payload": "payload мааниси (type=button үчүн гана)" | null
    }

    message.context талаасынын түзүлүшү

    Кардар баскычын баскан баштапкы HSM-билдирүүгө шилтеме:

    {
      "id":          "WazzaBee'деги чыгуучу билдирүүнүн uuid'и",
      "from":        "жөнөтүүчүнүн номери (сиздин WABA-номериңиз)",
      "gs_id":       "провайдердеги билдирүүнүн ички ID'си",
      "meta_msg_id": "wamid.HBgL... (Meta'дагы ID)"
    }

    Webhook мисалы: кардар «Ооба, убагында келем» баскычын басты

    {
      "channel_id": "f0e8...",
      "channel_type": "whatsapp_waba",
      "channel_name": "WhatsApp Business",
      "conversation_id": "b1c2...",
      "message": {
        "id": "wamid.HBgLNzcwMTEwMDEwNTkVAgASGBQzQTY5NkJCNjE3M0JGQjE1MjVEMQA=",
        "from": "77011001059",
        "sender_name": "Фархат",
        "type": "button",
        "text": "Ооба, убагында келем",
        "interactive": {
          "type": "button",
          "title": "Ооба, убагында келем",
          "payload": "Ооба, убагында келем"
        },
        "context": {
          "id": "584abab5-911a-49ca-a750-95e8116be1e1",
          "from": "77079119977",
          "gs_id": "378ba4ed-5a5d-4c58-a4e8-b6ca08b2ad7a",
          "meta_msg_id": "wamid.HBgL..."
        },
        "timestamp": "1776870877"
      },
      "operator": null,
      "raw": { ... }
    }
    ✅ Эски интеграциялар менен шайкештик. message.text талаасында эми басылган баскычтын чыныгы тексти бар, ошондуктан text талаасын гана окуган эски кардарлар чатта техникалык толтургучтун ордуна маанилүү «Ооба, убагында келем» билдирүүсүн көрүшөт.

    Мисал: Interactive list басуу (Meta Cloud API v3)

    {
      "message": {
        "type": "interactive",
        "text": "Үйгө жеткирүү",
        "interactive": {
          "type": "list_reply",
          "id": "delivery_home",
          "title": "Үйгө жеткирүү",
          "description": "Кардардын дареги боюнча"
        },
        "context": { "meta_msg_id": "wamid.HBgL..." }
      }
    }

    Чыгуучу WABA-үлгүлөр (messages_outgoing)

    HSM-үлгүнү API аркылуу же WazzaBee интерфейсинен жөнөткөндө, messages_outgoing жазылуусу болсо, webhook'ко template талаасы бар түзүлүш келет (эгер үлгүдө баскычтар болсо):

    {
      "messages": [{
        "messageId": "uuid",
        "direction": "outgoing",
        "type": "template",
        "text": "Саламатсызбы! Эртең саат 15:00дөгү жолугушууну ырастаңыз.",
        "template": {
          "name": "appointment_reminder_v2",
          "language": "ru",
          "buttons": [
            { "type": "quick_reply", "text": "Ооба, убагында келем" },
            { "type": "quick_reply", "text": "Жылдыруу" }
          ]
        },
        "timestamp": "2026-04-22T15:14:42Z"
      }]
    }

    Бул CRM'иңизге чат лентасында баскычтарды кардардын WhatsApp'ында кандай көрүнсө, так ошондой тартууга мүмкүндүк берет.


    Чыгуучу билдирүүнү ким жөнөттү (author)

    messages_outgoing окуясы кардарга берилген ар кандай жоопко келет: WazzaBee кабинетинде оператор жазганга, CRM'иңизге орнотулган чаттан жөнөтүлгөнгө, үлгү менен же POST /v1/messages/send аркылуу жөнөтүлгөнгө. Билдирүү менен бирге author блогу келет: так ким жооп бергени.

    {
      "messages": [{
        "messageId": "uuid",
        "channelId": "uuid",
        "chatId": "77001234567",
        "contactId": "uuid",
        "conversationId": "uuid",
        "direction": "outgoing",
        "type": "text",
        "text": "Саламатсызбы! Документтериңиз даяр.",
        "author": {
          "kind": "operator",
          "name": "Назерке А.",
          "userId": "manager-42"
        },
        "timestamp": "2026-07-30T09:20:12.000Z"
      }]
    }

    author блогунун талаалары

    ТалааТүрүСүрөттөмө
    author.kindstringЖөнөтүүнүн түрү: operator (адам жооп берди), api (билдирүүнү сиздин система жөнөттү), automation (робот же автожооп), broadcast (жалпы жөнөтүү)
    author.namestring | nullКызматкердин аты. Орнотулган чаттан берилген жоопторда бул iframe-сессияны түзүүдө user.name талаасында берген атыңыз; API аркылуу жөнөтүүдө бул senderName. Эгер аты берилбесе null
    author.userIdstring | nullКызматкердин сиздин CRM'деги идентификатору (iframe-сессиядагы user.id же API аркылуу жөнөтүүдөгү userId). Кандай болсо ошондой кайтарабыз, аны WazzaBee колдонуучулары менен салыштыруунун кереги жок
    ✅ Автордун атын кантип алуу керек. Кошумча эч нерсе жөндөөнүн кереги жок: iframe-сессияны түзүүдө user.id жана user.name бериңиз, ошондо кызматкердин аты чаттагы билдирүүнүн астындагы колтамгада да, бул вебхукта да болот. Сиздин система өзү жөнөткөн билдирүүлөр үчүн жөнөтүү суроосунда senderName жана userId бериңиз.