5.11 WhatsApp webhook

<< İçindekileri Görüntülemek İçin Tıklayın >>

Yer:  Teknik Kılavuzlar > Netsim System Agent Kurulum ve Yönetim Kılavuzu > 5. Servis yüzeyleri >

5.11 WhatsApp webhook

WhatsAppWebhook işlemcisi, WhatsApp Business Cloud API'nin (Meta) gönderdiği gelen mesajları ve giden mesaj durumlarını (sent, delivered, read, failed) kabul eder. Mesaj gönderme motorun WHATSAPP paketindedir (SQL kılavuzu); bu işlemci yalnızca Meta'dan gelen çağrıları karşılar.

AnahtarÖndeğerAnlam
database—Olayların yazıldığı motor veritabanı: hizmette kayıtlı bir veritabanının adı; zorunludur, verilmezse istek 500 alır. Olaylar bu veritabanının ivd$whatsapp_event sistem tablosuna WhatsApp.RecordEvent ile yazılır; tablo adı sabittir. Firebird, PostgreSQL, ODBC ya da sqlite dosyası depolu olmalıdır: istek bir işçi süreçte koşar ve depoya o sürecin kendi bağlantısıyla (bağlantı havuzu) erişilir; :memory: sqlite deposuna yalnızca açan süreç erişebilir.
verifyTokenboşMeta panelinde webhook doğrulama belirteci olarak girilen değer. Boşsa doğrulama 403 alır.
appSecretboşMeta uygulamasının gizli anahtarı (App Secret). Her POST'un X-Hub-Signature-256 başlığı ham gövdenin bu anahtarla HMAC-SHA256'sıdır. Boşsa bütün POST'lar reddedilir.
mqTopic/whatsapp/eventYazılan her olayın bildirildiği MessageQueue konusu (sessionManager'da); boş dizge kapatır. Gövde JSON: eventId, eventKind (MESSAGE | STATUS) ve ivd$whatsapp_event kolonlarının camelCase adları (accountId, phoneNumberId, wamid, sender, senderName, recipient, messageType, status, text, mediaId, replyToWamid, errorCode, errorMessage, eventTime ISO 8601 UTC); boş alanlar yazılmaz, ham JSON gönderilmez.
sessionManager—Bildirimin yayınlandığı oturum yöneticisi. Tüketiciler /message uygulamasına bağlandığı için onunla aynı olmalıdır (örnek conf: default). Tüketici POST /message/OpenSession (Basic) ve POST /message/SUBSCRIBE {"topic": "/whatsapp/event"} ile abone olur.
  • Geri çağırma adresi sonda / ile verilir: https://<sunucu>/whatsapp/. Eğik çizgisiz /whatsapp isteği 302 ile yönlendirilir. Ajan düz HTTP konuşur; Meta HTTPS ister, TLS ters vekilin işidir.
  • GET: hub.mode=subscribe ve hub.verify_token eşleşirse hub.challenge düz metin olarak döner; aksi 403, eksik parametre 400.
  • POST: imza tutmazsa 403. Geçerli istekte her mesaj ve durum ayrı satır olarak yazılır ve tek commit ile kaydedilir. Yanıt 200 {"result": true, "events": N, "duplicates": M}. Aynı olay (tür + wamid + durum) ikinci kez yazılmaz; Meta'nın yeniden gönderimi bu yüzden zararsızdır. Veritabanı hatası 500 (bağlantı havuzu sınırı 503 + Retry-After) döner ve Meta olayı yeniden gönderir. Bozuk JSON 400 alır; WhatsApp dışı bir nesne 200 ile yok sayılır. Bu uç ClientREST'in 202 sözleşmesini kullanmaz: Meta 2xx dışını yeniden deneme sebebi sayar.
  • Bildirim commit'ten sonra gider ve kalıcı değildir: abonesi olmayan bildirim düşer, olay tabloda kalır. ClientREST oturumları kendiliğinden /broadcast, /user/<ad> ve /session/<anahtar> kanallarına abonedir.
  • Tablo tanımı (Firebird, PostgreSQL, sqlite): IVEDI_Code/docs/whatsapp-paketi.md, 2B. Canlı sınama: python NetsimSystemAgent/tools/whatsapp_webhook_test.py. Bu araç ajanın yalıtılmış bir kopyasını ayrı bir portta başlatır ve kendi süreçlerini durdurur.