ServiceStatusChange Notification

Bir sigorta şirketinin kullanıma açık servis operasyonlarında değişiklik olduğunda gönderilen bildirim tipidir. İki tür değişikliği taşır: bir operasyonun sağlık statüsünün değişmesi (kapatılması / yeniden açılması) ve kataloğa bir operasyonun eklenmesi / katalogdan kaldırılması.

Payload’ın kökü bir değişim grubu dizisidir: her eleman bir ChangeType ve o değişikliğin etkilediği operasyonları sigorta şirketi bazında gruplanmış olarak taşır. Böylece tek bildirim birden fazla değişiklik türünü, birden fazla şirketi ve her şirket altında birden fazla operasyonu içerebilir. Aynı kalıp ProductChange ve ParameterChange bildirimlerinde de kullanılır.

Güncel statülerin tamamı her zaman Kullanıma Açık Servisler API’sinden okunabilir; bildirim yalnızca değişiklikten anlık haberdar olmayı sağlar.

Header ve zarf (envelope) yapısı için: Platform Entegrasyon Gereksinimleri. Bu bildirim tipinde cevap ve retry davranışı aşağıda ayrıca tanımlanmıştır: başarı yalnızca HTTP durum koduna göre belirlenir ve transport hatası dışında retry yapılmaz.


Endpoint

AlanDeğer
HTTP MethodPOST
Path/PushNotification
NotificationType10

Bildirim Ne Zaman Gönderilir?

TetikleyiciChangeTypeKapsam
Bir operasyonun statüsü InsurGateway yönetim ekranından elle değiştirildiYeni statü: Active, AutoDisabled veya ManualDisabledDeğişen tek operasyon
Katalog senkronunda yeni operasyon(lar) tanımlandıaddedSenkronda eklenen tüm operasyonlar, şirket bazında gruplanmış
Katalog senkronunda operasyon(lar) tanımdan kaldırıldıremovedSenkronda kaldırılan tüm operasyonlar, şirket bazında gruplanmış

Bir katalog senkronu hem ekleme hem kaldırma ürettiğinde ikisi de aynı bildirimde, iki ayrı değişim grubu olarak gelir.

Kataloğun ilk kez oluşturulduğu senkron bildirim üretmez; tüm kataloğun “eklendi” olarak duyurulması gürültüden ibaret olurdu.


Kime Gönderilir?

Bildirim abonelik esaslıdır: acente yalnızca abone olduğu servis operasyonları için bildirim alır. Abonelik kaydı olmayan acenteye hiçbir bildirim gönderilmez.

KoşulAçıklama
AbonelikAbonelik servis operasyonu bazındadır (ServiceOperationId; outsource operasyonunda ek olarak OutsourceProcessId, süreç başına ayrı abonelik). Şirket ve ürün aboneliğe girmez.
KapsamDeğişen kayıt acentenin yetkili olduğu bir şirket/ürüne ait olmalıdır. Kapsam, GET /api/ServiceAvailabilities/agents/{agentId} (Acente Bazlı Durumlar) ucundakiyle aynı kuralla çözülür.

Bu iki koşulun sonucu:

  • Acenteye yeni bir ürün tanımlandığında aboneliğe dokunulmaz; o ürünün abone olunan operasyonları kendiliğinden bildirime girer.
  • Payload acenteye özeldir: aynı katalog senkronu bir şirkette beş operasyon eklese, ikisine abone olan acente Operations altında yalnızca o ikisini görür. Hiçbir operasyonu eşleşmeyen acenteye bildirim gitmez.
  • Servis katalogda zaten varken acenteye ürün sonradan tanımlanırsa added bildirimi gelmez (katalog değişmemiştir); bu durumda ProductChange bildirimi gelir ve güncel statüler GET /api/ServiceAvailabilities/agents/{agentId} (Acente Bazlı Durumlar) ucundan okunmalıdır.

Abone olunan kayıtlar GET /api/ServiceAvailabilities/agents/{agentId}/subscriptions ucundan izlenebilir. Abonelik tanımları şu an InsurGateway tarafından yapılır; self-servis abonelik uçları ayrıca yayınlanacaktır.


Örnek İstek

curl -X POST "https://platform.ornek.com.tr/insurgw/PushNotification" \
-H "Content-Type: application/json" \
-H "x-api-key: 9f3c1e8a-2b4d-1234-5678-deadbeefcafe" \
-d '{
"ReferanceNo": "10025_20260810110500123a1b2c_0_0",
"SubReferanceNo": "a1b2c3d4-e5f6-7890abcdef1234567890",
"RequestKeyValueSet": null,
"RequestObject": {
"NotificationType": 10,
"Payload": "[{\"ChangeType\":\"ManualDisabled\",\"Reason\":\"Sigorta şirketi bakım bildirimi.\",\"StatusDate\":\"2026-08-10T11:05:00+03:00\",\"Values\":[{\"InsuranceCompanyId\":12,\"InsuranceCompanyName\":\"Örnek Sigorta\",\"Operations\":[{\"ProductId\":27,\"ProductName\":\"Kasko\",\"ServiceOperationId\":118,\"ServiceOperationName\":\"Teklif\",\"ServiceName\":\"ProposalService\",\"OutsourceProcessId\":null,\"OutsourceProcessName\":null}]}]}]"
}
}'

ReferanceNo opak bir idempotency anahtarıdır; format {AgentId}_{zamanDamgası+benzersiz}_0_0 şeklindedir ve aynı bildirimin retry’larında değişmez.


Parse Edilmiş Payload

RequestObject.Payload alanı serialize edilmiş bir JSON string’tir; ikinci bir parse sonrasında aşağıdaki yapıya ulaşılır:

[
{
"ChangeType": "ManualDisabled",
"Reason": "Sigorta şirketi bakım bildirimi.",
"StatusDate": "2026-08-10T11:05:00+03:00",
"Values": [
{
"InsuranceCompanyId": 12,
"InsuranceCompanyName": "Örnek Sigorta",
"Operations": [
{
"ProductId": 27,
"ProductName": "Kasko",
"ServiceOperationId": 118,
"ServiceOperationName": "Teklif",
"ServiceName": "ProposalService",
"OutsourceProcessId": null,
"OutsourceProcessName": null
}
]
}
]
}
]

Değişim Grubu

Dizinin her elemanı bir değişim grubudur:

AlanTipAçıklama
ChangeTypestringGrubun türü. Statü değişikliklerinde operasyonların yeni statüsü, katalog değişikliklerinde added / removed. Aynı tip bir dizide iki kez gelmez. Değerler için aşağıdaki tabloya bakınız.
ReasonstringDeğişikliğin gerekçesi. Statü değişikliğinde işlemi yapanın girdiği gerekçe, katalog değişikliğinde sabit açıklama.
StatusDatestring (ISO 8601)Değişiklik zamanı.
ValuesarrayGrubun etkilediği operasyonların sigorta şirketi bazında gruplanmış hali. Statü değişikliğinde tek eleman, katalog değişikliğinde etkilenen her şirket için bir eleman.

ChangeType Değerleri

DeğerAnlamı
ActiveOperasyon yeniden kullanıma açıldı.
AutoDisabledOtomatik değerlendirme sigorta şirketi servisinde genel bir sorun tespit etti.
ManualDisabledOperasyon bir yönetici tarafından elle kapatıldı.
addedOperasyon(lar) katalog tanımına eklendi; artık kullanıma açık servisler listesinde yer alıyor.
removedOperasyon(lar) katalog tanımından kaldırıldı; artık kullanıma açık servisler listesinde yer almıyor.

AutoDisabled ve ManualDisabled bilgilendirme amaçlıdır: InsurGateway bu operasyonlara gelen istekleri engellemez. İsteği göndermeme ya da alternatife yönlendirme kararı platforma aittir.

Values Elemanı

AlanTipAçıklama
InsuranceCompanyIdintEtkilenen operasyonların sigorta şirketi.
InsuranceCompanyNamestringSigorta şirketinin adı.
OperationsarrayŞirketin etkilenen servis operasyonları.

Operations Elemanı

AlanTipAçıklama
ProductIdint | nullOperasyonun ürünü; ürün bağımsız operasyonlarda null.
ProductNamestringÜrün adı; ürün bağımsız operasyonlarda "Tüm Ürünler".
ServiceOperationIdintServis operasyonu kimliği.
ServiceOperationNamestringServis operasyonu adı.
ServiceNamestringOperasyonun ait olduğu servis adı.
OutsourceProcessIdint | nullOutsource süreç kimliği; yalnızca outsource operasyonlarda dolu.
OutsourceProcessNamestringOutsource süreç adı; yalnızca outsource operasyonlarda dolu.

Bir kaydın kimliği (InsuranceCompanyId, ProductId, ServiceOperationId, OutsourceProcessId) dörtlüsüdür; InsuranceCompanyId operasyonu içeren Values elemanından, kalan üçü operasyonun kendisinden okunur. Uygulanacak işlem ise o elemanı içeren değişim grubunun ChangeType’ından gelir. Platform tarafındaki eşleştirme bu dörtlü üzerinden yapılmalıdır.


Örnek: Katalog Değişikliği

Katalog senkronu aynı koşuda hem ekleme hem kaldırma ürettiğinde ve birden fazla şirkete dokunduğunda da tek bildirim gönderilir; değişiklikler grup, şirketler Values listesi olarak ayrışır:

[
{
"ChangeType": "added",
"Reason": "Katalog tanımına eklendi.",
"StatusDate": "2026-08-10T03:15:00+03:00",
"Values": [
{
"InsuranceCompanyId": 12,
"InsuranceCompanyName": "Örnek Sigorta",
"Operations": [
{
"ProductId": null,
"ProductName": "Tüm Ürünler",
"ServiceOperationId": 305,
"ServiceOperationName": "PolicyDetail",
"ServiceName": "PolicyService",
"OutsourceProcessId": null,
"OutsourceProcessName": null
},
{
"ProductId": 31,
"ProductName": "Trafik",
"ServiceOperationId": 118,
"ServiceOperationName": "Teklif",
"ServiceName": "ProposalService",
"OutsourceProcessId": 4,
"OutsourceProcessName": "Teklif Yenileme"
}
]
},
{
"InsuranceCompanyId": 35,
"InsuranceCompanyName": "Diğer Sigorta",
"Operations": [
{
"ProductId": 31,
"ProductName": "Trafik",
"ServiceOperationId": 118,
"ServiceOperationName": "Teklif",
"ServiceName": "ProposalService",
"OutsourceProcessId": null,
"OutsourceProcessName": null
}
]
}
]
},
{
"ChangeType": "removed",
"Reason": "Katalog tanımından kaldırıldı.",
"StatusDate": "2026-08-10T03:15:00+03:00",
"Values": [
{
"InsuranceCompanyId": 12,
"InsuranceCompanyName": "Örnek Sigorta",
"Operations": [
{
"ProductId": 27,
"ProductName": "Kasko",
"ServiceOperationId": 118,
"ServiceOperationName": "Teklif",
"ServiceName": "ProposalService",
"OutsourceProcessId": null,
"OutsourceProcessName": null
}
]
}
]
}
]

Güncel Durumun Okunması

Bildirim, değişikliği duyurur; tam listeyi taşımaz. Platform güncel statülerin tamamını Kullanıma Açık Servisler API’sinden okuyabilir:

  1. GET /api/ServiceAvailabilities/agents/{agentId} — yalnızca acentenin kullanabileceği kayıtları döner; kapsam acentenin ürün yetkisinden çözülür.
  2. GET /api/ServiceAvailabilities/companies/{insuranceCompanyId} — bildirimdeki şirketin kayıtlarını döner.
  3. GET /api/ServiceAvailabilities — tüm kataloğu döner.

Listeleme uçlarının tamamı aynı sayfalama zarfını döner (Items, TotalCount, Page, Size, TotalPage, HasNextPage, HasPreviousPage) ve sayfa başına en fazla 200 kayıt verir.

Bildirim kaçırılsa bile statü kaybolmaz: bir sonraki bildirimde ya da periyodik okuma turunda güncel durum elde edilir. Uç noktaların ayrıntıları için API referansındaki Service Availability bölümüne bakınız.


Beklenen Cevap

Platform, bildirimi aldığında HTTP 2xx dönmelidir. InsurGateway başarıyı yalnızca HTTP durum koduna göre belirler; cevap gövdesi değerlendirilmez (gövde boş olabilir).

Başarı:

HTTP/1.1 200 OK

Hata:

2xx dışı herhangi bir HTTP kodu (örn. 500) hata kabul edilir.

HTTP/1.1 500 Internal Server Error

Bildirim ReferanceNo üzerinden idempotent işlenmelidir; aynı ReferanceNo ile yeniden gelen bir bildirim tekrar uygulanmamalıdır.


Retry

InsurGateway, bildirimi yalnızca platforma ulaşamadığında (bağlantı hatası / timeout — yani HTTP cevabı hiç alınamadığında) yeniden gönderir. Platformdan dönen 2xx dışı bir HTTP cevabı retry üretmez; hata loglanır ve bildirim düşülür.

ParametreDeğer
Retry koşuluYalnızca transport hatası (HTTP cevabı alınamaması)
2xx dışı HTTP cevabıRetry YOK — loglanır ve düşülür
Maksimum retry (orijinal hariç)10
Toplam maksimum deneme11
Bekleme süreleri3 sn → 10 sn → 1 dk → 1 saat (≥4. retry)

Son denemede HTTP başlığında IsLastAttemptToReDelivery=true gönderilir.