|
<< İçindekileri Görüntülemek İçin Tıklayın >> Yer: Teknik Kılavuzlar > Netsim System Agent İstemci Protokolü Referansı > 5. Mesaj kuyruğu ve kanallar > 5.1 /message ucu (MessageQueue işlemcisi) |
Yol adı conf'taki path değeridir (NetsimSystemAgent.conf.json → "processor":
"MessageQueue", "path": "/message"), işlemci adı değil; bu belgede daha önce yazılan
/MessageQueue/... yanlıştı (A10, 2026-09-15). Uç IVEDIBL_Code'daki genel ILHttpProRestMQ
işlemcisidir ve K3 sözleşmesini kullanmaz: yanıt gövdesi yalnızca GET'lerde vardır, başarı ve
hata HTTP durum koduyla ayırt edilir. Oturum MQSessionId çerezinden bulunur (sessionManager
MessageQueue, cookieName); anonymousSender: true olduğundan yalnız POST MESSAGE oturumsuz
kabul edilir. Öteki her /message isteği açık oturum ister (2026-09-16, kullanıcı isteği): oturum
çerezi yoksa 401 + WWW-Authenticate ve bağlantı kapanır. Eskiden çerezsiz POST SUBSCRIBE
paylaşılan GUEST oturumunu abone ediyor, mesajlar onun kuyruğunda birikiyordu (kapı yazılmıştı ama
hiç çağrılmıyordu ve GUEST kimliğini boş sanıyordu).
Oturum açma (2026-09-17): POST /message/OpenSession'a HTTP Basic kimliği (MASTER login'i) eklenir; başarıda 200 + Set-Cookie (oturum yöneticisinin cookieName'i, conf'ta
MQSessionId) döner, yanlış kimlikte 401. Eskiden işlemci Basic yöntemini etkinleştirmediği için bu
istek her zaman 401 alıyordu. İsteğe Connection: close konursa oturum bağlantıya bağlı sayılır
ve çerez verilmez. Gövdesiz yanıtlar (OpenSession, 202'ler) Content-Length taşımaz; istemci
bağlantıyı açık tutuyorsa gövde okumaya çalışmamalıdır.
Çok süreçli abonelik (2026-09-17): POST /message/SUBSCRIBE ile abone olunan konuya başka bir
işçi süreçten yapılan yayın eskiden ajanı ACCESS_VIOLATION'a düşürüyordu (abonelik dizgesi süreç-yerel
bellekte kalıyordu); düzeltildi. WhatsApp webhook'u olayları öndeğer olarak /whatsapp/event
konusuna yayınlar. Mesaj gövdesi JSON'dur; anahtarları ivd$whatsapp_event kolonlarının camelCase
adlarıdır: eventId, eventKind (MESSAGE | STATUS), accountId, phoneNumberId, wamid, sender,
senderName, recipient, messageType, status, text, mediaId, replyToWamid, errorCode,
errorMessage, eventTime (ISO 8601 UTC, 2023-11-14T22:13:20Z). Boş alan yazılmaz; ham JSON tabloda kalır.
| Uç | Başarı | Hata / boş |
|---|---|---|
POST /message/MESSAGE {"topic", "message", "messageId", "options"} |
202 + boş gövde (abone sayısı yalnız loga yazılır; messageId verilmezse ajan üretir) |
400 gövde yok; 413 message maxMQMessageSize'ı aşıyor |
GET /message/MESSAGE |
200 {"ILQueueMessage": {"sequence", "options", "messageId", "topic", "message"}} — kuyruktaki ilk mesaj, silinmez (silme DELETE ile) |
204 kuyruk boş / oturumun kuyruğu yok. sequence sorgu parametresi okunuyor ama henüz uygulanmıyor |
DELETE /message/MESSAGE {"messageId": "<guid>"} |
202 mesaj silindi |
400 + messageId not specified/invalid (kuyruk doluyken); 204 bulunamadı ya da kuyruk boş |
GET /message/SUBSCRIPTIONS |
200 {"subscriptions": ["/broadcast", "/user/bob", ...]} |
— |
POST /message/SUBSCRIBE {"topic"} |
202 |
400 + topic not specified; 406 + already subscribed ya da invalid subscription topic: … (kanal bu oturuma kapalı, bkz. yukarıdaki kural) |
DELETE /message/UNSUBSCRIBE {"topic"} |
202 |
400 + topic not specified; 204 abonelik yoktu |
Bilinmeyen alt yol 404 (gövdesiz). Hepsi 2026-09-15'te canlı ölçüldü; ölçüm iki kusur buldu ve
ikisi de aynı gün düzeltildi: (1) DELETE istekleri işleyiciye hiç ulaşmıyor, 405 alıyordu
(işlemci yöntem listesine DELETE eklenmemişti); (2) her /message isteği yanıttan sonra
bağlantıyı kapatıp oturumu closeSessionOnDisconnect yapıyordu, yani oturum çerezini taşıyan bir
istemci (köprü dahil) GET SUBSCRIPTIONS çağırınca kendi oturumunu kapatıyor, sonraki
istekleri GUEST'e düşüyor ve yayınladığı mesaj kimseye ulaşmıyordu. Artık oturumun ömrü yalnız
oturum yöneticisinin (idleTimeout/lifeTime) elindedir. Web köprüsü bu ucu yayın
(POST MESSAGE) ve abonelik listesi (GET SUBSCRIPTIONS) için kullanır; tüketim WebSocket
getNextMQMessage iledir.