Firebase Cloud Messaging XMPP protokolü

Bu dokümanda, uygulama sunucunuz, istemci uygulamaları ve Firebase Cloud Messaging (FCM) arasında mesaj aktarmak için kullanılan XMPP söz dizimi referansı sağlanmaktadır. Uygulama sunucunuz şu uç noktalara bağlanmalıdır:

// Production
fcm-xmpp.googleapis.com:5235

// Testing
fcm-xmpp.googleapis.com:5236

Kullanılabilir parametreler ve seçenekler şu kategorilere ayrılır:

Aşağı akış mesajı söz dizimi

Bu bölümde, yayın mesajları gönderme söz dizimi verilmiştir.

Aşağı akış XMPP mesajları (JSON)

Aşağıdaki tabloda, XMPP JSON mesajlarının hedefleri, seçenekleri ve yükü listelenmiştir.

Tablo 1 Aşağı akış XMPP mesajları (JSON) için hedefler, seçenekler ve yük.

Parametre Kullanım Açıklama
Hedef
to İsteğe bağlı, dize

Bu parametre, iletinin alıcısını belirtir.

Değer, bir cihazın kayıt jetonu, bir cihaz grubunun bildirim anahtarı veya tek bir konu olabilir (ön ekinde /topics/ bulunur). Birden fazla konuya göndermek için condition parametresini kullanın.

condition İsteğe bağlı, dize

Bu parametre, mesaj hedefini belirleyen koşulların mantıksal ifadesini belirtir.

Desteklenen koşul: "Konularda "konunuz"" şeklinde biçimlendirilmiş konu. Bu değer büyük/küçük harfe duyarlı değildir.

Desteklenen operatörler: &&, ||. Konu mesajı başına en fazla iki operatör desteklenir.

Seçenekler
message_id Zorunlu, dize

Bu parametre, XMPP bağlantısındaki bir mesajı benzersiz şekilde tanımlar.

collapse_key İsteğe bağlı, dize

Bu parametre, yayın devam ettirildiğinde yalnızca son ileti gönderilecek şekilde daraltılabilen bir ileti grubunu (ör. collapse_key: "Updates Available" ile) tanımlar. Bu, cihaz tekrar internete bağlandığında veya uyku modundan çıktığında aynı mesajların çok fazla gönderilmesini önlemek içindir.

Mesajların gönderilme sırası garanti edilmez.

Not: Herhangi bir zamanda en fazla 4 farklı daraltma anahtarına izin verilir. Bu, FCM'ün istemci uygulaması başına aynı anda 4 farklı mesaj saklayabileceği anlamına gelir. Bu sayıyı aşarsanız FCM'ün hangi 4 daraltma anahtarını saklayacağı garanti edilmez.

priority İsteğe bağlı, dize

İletinin önceliğini ayarlar. Geçerli değerler "normal" ve "yüksek"tir. Apple platformlarında bunlar APN'ler için 5 ve 10. önceliklere karşılık gelir.

Varsayılan olarak bildirim mesajları yüksek öncelikli, veri mesajları ise normal öncelikli olarak gönderilir. Normal öncelik, istemci uygulamasının pil tüketimini optimize eder ve anında yayınlama gerekmediği sürece kullanılmalıdır. Normal öncelikli mesajlar, uygulama tarafından belirtilmeyen bir gecikmeyle alınabilir.

Yüksek öncelikli olarak gönderilen mesajlar hemen gönderilir ve uygulama bir bildirim gösterebilir.

content_available İsteğe bağlı, boole

Apple platformlarında, APNs yükünde content-available değerini temsil etmek için bu alanı kullanın. Bir bildirim veya mesaj gönderildiğinde ve bu ayar true olarak belirlendiğinde, etkin olmayan bir istemci uygulaması uyandırılır ve mesaj FCM üzerinden değil, APN'ler üzerinden sessiz bildirim olarak gönderilir. APN'lerdeki sessiz bildirimlerin gönderilmesinin garanti edilmediğini ve kullanıcının düşük güç modunu etkinleştirmesi, uygulamadan zorla çıkması gibi faktörlere bağlı olabileceğini unutmayın. Android'de veri mesajları varsayılan olarak uygulamayı uyandırır. Chrome'da şu anda desteklenmiyor.

mutable_content İsteğe bağlı, JSON boole

Apple platformlarında, APNs yükünde mutable-content değerini temsil etmek için bu alanı kullanın. Bir bildirim gönderildiğinde ve bu ayar true olarak belirlendiğinde, bildirimin içeriği bildirim hizmeti uygulama uzantısı kullanılarak gösterilmeden önce değiştirilebilir. Bu parametre Android ve web için yoksayılır.

time_to_live İsteğe bağlı, sayı

Bu parametre, cihaz çevrimdışıysa mesajın FCM depolama alanında ne kadar süre boyunca (saniye cinsinden) saklanması gerektiğini belirtir. Desteklenen maksimum geçerlilik süresi 4 haftadır ve varsayılan değer 4 haftadır. Daha fazla bilgi için Mesajın geçerlilik süresini ayarlama başlıklı makaleyi inceleyin.

dry_run İsteğe bağlı, boole

Bu parametre, true olarak ayarlandığında geliştiricilerin gerçekten mesaj göndermeden bir isteği test etmesine olanak tanır.

false, varsayılan değerdir.

Yük
data İsteğe bağlı, nesne

Bu parametre, mesajın yükü için anahtar/değer çiftlerini belirtir.

Örneğin, data:{"score":"3x1"}:

Apple platformlarında mesaj APN'ler üzerinden teslim ediliyorsa özel veri alanlarını temsil eder. FCM tarafından yayınlanırsa AppDelegate application:didReceiveRemoteNotification: içinde anahtar/değer sözlüğü olarak temsil edilir.

Android'de bu işlem, 3x1 dize değerine sahip score adlı bir intent ekstrası oluşturur.

Anahtar, ayrılmış bir kelime ("from", "message_type" veya "google" ya da "gcm" ile başlayan herhangi bir kelime) olmamalıdır. Bu tabloda tanımlanan kelimelerden hiçbirini kullanmayın (collapse_key gibi).

Dize türünde değerler önerilir. Nesnelerdeki veya dize olmayan diğer veri türlerindeki (ör. tam sayılar veya boole değerleri) değerleri dizeye dönüştürmeniz gerekir.

notification İsteğe bağlı, nesne Bu parametre, bildirim yayının önceden tanımlanmış, kullanıcı tarafından görülebilen anahtar/değer çiftlerini belirtir. Ayrıntılar için bildirim yükü desteğine bakın. Bildirim mesajı ve veri mesajı seçenekleri hakkında daha fazla bilgi için İleti türleri başlıklı makaleyi inceleyin. Bir bildirim yükü sağlanırsa veya Apple cihaza gönderilen bir mesaj için content_available seçeneği true olarak ayarlanırsa mesaj APN'ler üzerinden gönderilir. Aksi takdirde FCM üzerinden gönderilir.

Bildirim yükü desteği

Aşağıdaki tablolarda, Apple platformları ve Android için bildirim mesajları oluşturmak üzere kullanılabilen önceden tanımlanmış anahtarlar listelenmiştir.

Tablo 2a. Apple: Bildirim mesajları için anahtarlar

Parametre Kullanım Açıklama
title İsteğe bağlı, dize

Bildirimin başlığı.

Bu alan telefonlarda ve tabletlerde görünmez.

body İsteğe bağlı, dize

Bildirimin gövde metni.

sound İsteğe bağlı, dize

Cihaz bildirimi aldığında çalınacak ses.

İstemci uygulamasının ana paketindeki veya uygulamanın veri kapsayıcısının Library/Sounds klasöründeki ses dosyalarını belirten dize. Daha fazla bilgi için iOS Geliştirici Kitaplığı'na göz atın.

badge İsteğe bağlı, dize

Ana ekran uygulama simgesinde bulunan rozetin değeri.

Belirtilmemişse rozet değiştirilmez.

0 olarak ayarlanırsa rozet kaldırılır.

click_action İsteğe bağlı, dize

Kullanıcının bildirimi tıklamasıyla ilişkili işlem.

APN'ler yükünde category değerine karşılık gelir.

subtitle İsteğe bağlı, dize

Bildirimin alt başlığı.

body_loc_key İsteğe bağlı, dize

Ana metni kullanıcının mevcut yerelleştirmesine göre yerelleştirmek için uygulamanın dize kaynaklarındaki ana metin dizesinin anahtarı.

APN'ler yükünde loc-key değerine karşılık gelir.

Daha fazla bilgi için Yük Anahtarı Referansı ve Uzak Bildirimlerinizin İçeriğini Yerelleştirme başlıklı makaleleri inceleyin.

body_loc_args İsteğe bağlı, JSON dizisi olarak dize

Gövde metnini kullanıcının mevcut yerelleştirmesine göre yerelleştirmek için kullanılacak body_loc_key içindeki biçim tanımlayıcılarının yerine kullanılacak değişken dize değerleri.

APNs yükünde loc-args değerine karşılık gelir.

Daha fazla bilgi için Yük Anahtarı Referansı ve Uzak Bildirimlerinizin İçeriğini Yerelleştirme başlıklı makaleleri inceleyin.

title_loc_key İsteğe bağlı, dize

Başlık metnini kullanıcının mevcut yerelleştirmesine göre yerelleştirmek için kullanılacak, uygulamanın dize kaynaklarındaki başlık dizesinin anahtarı.

APN'ler yükünde title-loc-key değerine karşılık gelir.

Daha fazla bilgi için Yük Anahtarı Referansı ve Uzak Bildirimlerinizin İçeriğini Yerelleştirme başlıklı makaleleri inceleyin.

title_loc_args İsteğe bağlı, dize olarak JSON dizisi

Başlık metnini kullanıcının mevcut yerelleştirmesine göre yerelleştirmek için title_loc_key içindeki biçim belirteçleri yerine kullanılacak değişken dize değerleri.

APNs yükünde title-loc-args değerine karşılık gelir.

Daha fazla bilgi için Yük Anahtarı Referansı ve Uzak Bildirimlerinizin İçeriğini Yerelleştirme başlıklı makaleleri inceleyin.

Tablo 2b. Android: Bildirim mesajları için anahtarlar

Parametre Kullanım Açıklama
title İsteğe bağlı, dize

Bildirimin başlığı.

body İsteğe bağlı, dize

Bildirimin gövde metni.

android_channel_id İsteğe bağlı, dize

Bildirimin kanal kimliği (Android O'da yeni).

Uygulama, bu kanal kimliğine sahip bir bildirim alınmadan önce bu kanal kimliğiyle bir kanal oluşturmalıdır.

İstekte bu kanal kimliğini göndermezseniz veya sağlanan kanal kimliği henüz uygulama tarafından oluşturulmamışsa FCM, uygulama manifestinde belirtilen kanal kimliğini kullanır.

icon İsteğe bağlı, dize

Bildirimin simgesi.

myicon çizilebilir kaynağı için bildirim simgesini myicon olarak ayarlar. İstekte bu anahtarı göndermezseniz FCM, uygulama manifest dosyanızda belirtilen başlatıcı simgesini gösterir.

sound İsteğe bağlı, dize

Cihaz bildirimi aldığında çalınacak ses.

"default" veya uygulamada paket halinde sunulan bir ses kaynağının dosya adını destekler. Ses dosyaları /res/raw/ içinde bulunmalıdır.

tag İsteğe bağlı, dize

Bildirim çekmecesindeki mevcut bildirimleri değiştirmek için kullanılan tanımlayıcı.

Belirtilmezse her istek yeni bir bildirim oluşturur.

Belirtilirse ve aynı etikete sahip bir bildirim zaten gösteriliyorsa yeni bildirim, bildirim çekmecesinde mevcut bildirimin yerini alır.

color İsteğe bağlı, dize

Bildirimin, #rrggbb biçiminde ifade edilen simge rengi.

click_action İsteğe bağlı, dize

Kullanıcının bildirimi tıklamasıyla ilişkili işlem.

Belirtiliyse kullanıcı bildirimi tıkladığında eşleşen bir intent filtresine sahip bir etkinlik başlatılır.

body_loc_key İsteğe bağlı, dize

Ana metni kullanıcının mevcut yerelleştirmesine göre yerelleştirmek için uygulamanın dize kaynaklarındaki ana metin dizesinin anahtarı.

Daha fazla bilgi için Dize Kaynakları başlıklı makaleyi inceleyin.

body_loc_args İsteğe bağlı, dize olarak JSON dizisi

Ana metni kullanıcının mevcut yerelleştirmesine göre yerelleştirmek için body_loc_key içindeki biçim belirteçleri yerine kullanılacak değişken dize değerleri.

Daha fazla bilgi için Biçimlendirme ve Stil başlıklı makaleyi inceleyin.

title_loc_key İsteğe bağlı, dize

Başlık metnini kullanıcının mevcut yerelleştirmesine göre yerelleştirmek için uygulamanın dize kaynaklarındaki başlık dizesinin anahtarı.

Daha fazla bilgi için Dize Kaynakları başlıklı makaleyi inceleyin.

title_loc_args İsteğe bağlı, JSON dizisi olarak dize

Başlık metnini kullanıcının mevcut yerelleştirmesine göre yerelleştirmek için title_loc_key içindeki biçim belirteçleri yerine kullanılacak değişken dize değerleri.

Daha fazla bilgi için Biçimlendirme ve Stil başlıklı makaleyi inceleyin.

Tablo 2c. Web (JavaScript): Bildirim mesajları için anahtarlar

Parametre Kullanım Açıklama
title İsteğe bağlı, dize

Bildirimin başlığı.

body İsteğe bağlı, dize

Bildirimin gövde metni.

icon İsteğe bağlı, dize

Bildirim simgesinde kullanılacak URL.

click_action İsteğe bağlı, dize

Kullanıcının bildirimi tıklamasıyla ilişkilendirilen işlem.

Tüm URL değerleri için HTTPS gereklidir.

Aşağı akış XMPP mesajı yanıtını yorumlama

Aşağıdaki tabloda, aşağı akış XMPP mesaj yanıtında görünen alanlar listelenmektedir.

Tablo 3 Aşağı akış mesajı XMPP yanıt gövdesi.

Parametre Kullanım Açıklama
from Zorunlu, dize

Bu parametre, bu yanıtı kimin gönderdiğini belirtir.

Değer, istemci uygulamasının kayıt jetonudur.

message_id Zorunlu, dize Bu parametre, XMPP bağlantısındaki bir mesajı benzersiz şekilde tanımlar. Değer, ilişkilendirilmiş mesajı benzersiz şekilde tanımlayan bir dizedir.
message_type Zorunlu, dize

Bu parametre, FCM'den uygulama sunucusuna gönderilen bir ack veya nack mesajını belirtir.

Değer nack olarak ayarlanırsa uygulama sunucusu, hata bilgilerini almak için error ve error_description değerlerine bakmalıdır.

error İsteğe bağlı, dize Bu parametre, yayın mesajıyla ilgili bir hatayı belirtir. Politika, message_type nack olduğunda ayarlanır. Ayrıntılar için tablo 4'e bakın.
error_description İsteğe bağlı, dize Bu parametre, hatayla ilgili açıklayıcı bilgiler sağlar. message_type nack olduğunda ayarlanır.

Aşağı akış mesajı hata yanıt kodları

Aşağıdaki tabloda, aşağı akış mesajları için hata yanıtı kodları listelenmektedir.

Tablo 4 Aşağı akış mesajı hata yanıtı kodları.

Hata XMPP kodu Önerilen işlem
Kayıt jetonu eksik INVALID_JSON İsteğin bir kayıt jetonu (basit metin mesajında registration_id alanında veya JSON'da to ya da registration_ids alanında) içerdiğini kontrol edin.
Geçersiz APNs Kaydı INVALID_JSON iOS kayıtları için istemciden gelen kayıt isteğinin geçerli bir APNs jetonu ve uygulama kimliği içerdiğinden emin olun.
Geçersiz Kayıt Jetonu BAD_REGISTRATION Sunucuya ilettiğiniz kayıt jetonunun biçimini kontrol edin. Bu değerin, istemci uygulamasının FCM'e kaydolurken aldığı kayıt jetonuyla eşleştiğinden emin olun. Metni kısaltmayın veya ek karakter eklemeyin.
Kayıtlı Olmayan Cihaz DEVICE_UNREGISTERED Mevcut bir kayıt jetonunun geçerliliği, aşağıdakiler gibi çeşitli durumlarda sona erebilir:
  • İstemci uygulaması FCM ile kaydını iptal ederse.
  • İstemci uygulamasının otomatik olarak kaydının silinmesi (kullanıcı uygulamayı kaldırırsa bu durumla karşılaşılabilir). Örneğin, iOS'te APN'ler APN'ler jetonunu geçersiz olarak bildiriyorsa.
  • Kayıt jetonunun süresi dolarsa (örneğin, Google kayıt jetonlarını yenilemeye karar verebilir veya cihazların APNs jetonunun süresi dolmuştur).
  • İstemci uygulaması güncellenmişse ancak yeni sürüm ileti alacak şekilde yapılandırılmamışsa.
Bu durumlardan herhangi biri için bu kayıt jetonunu uygulama sunucusundan kaldırın ve mesaj göndermek için kullanmayı bırakın.
Gönderen Eşleşmiyor SENDER_ID_MISMATCH Kayıt jetonu belirli bir gönderen grubuna bağlıdır. Bir istemci uygulaması FCM için kaydolurken hangi gönderenlerin ileti göndermesine izin verildiğini belirtmelidir. İstemci uygulamasına mesaj gönderirken bu gönderen kimliklerinden birini kullanmanız gerekir. Farklı bir gönderene geçerseniz mevcut kayıt jetonları çalışmaz.
Geçersiz JSON INVALID_JSON JSON mesajının doğru şekilde biçimlendirildiğinden ve geçerli alanlar içerdiğinden emin olun (örneğin, doğru veri türünün iletildiğinden emin olun).
Mesaj çok büyük INVALID_JSON Bir mesaja eklenen yük verilerinin toplam boyutunun FCM sınırlarını aşmadığından emin olun: çoğu mesaj için 4.096 bayt, konulara gönderilen mesajlar için ise 2.048 bayt. Buna hem anahtarlar hem de değerler dahildir.
Geçersiz Veri Anahtarı INVALID_JSON Yük verisinin, FCM tarafından dahili olarak kullanılan bir anahtar (from, gcm veya google ön ekiyle başlayan herhangi bir değer gibi) içermediğinden emin olun. Bazı kelimelerin (collapse_key gibi) FCM tarafından da kullanıldığını ancak yükte kullanılmasına izin verildiğini unutmayın. Bu durumda yük değeri, FCM değeri tarafından geçersiz kılınır.
Geçersiz Geçerlilik Süresi INVALID_JSON time_to_live içinde kullanılan değerin, 0 ile 2.419.200 (4 hafta) saniye arasında bir süreyi temsil eden bir tam sayı olduğundan emin olun.
Hatalı ACK mesajı BAD_ACK Tekrar denemeden önce ack mesajının doğru biçimlendirildiğinden emin olun. Ayrıntılar için tablo 6'ya bakın.
Zaman aşımı SERVICE_UNAVAILABLE

Sunucu isteği zamanında işleyemedi. Aynı isteği yeniden deneyin, ancak şunları yapmanız gerekir:

  • Yeniden deneme mekanizmanıza eksponansiyel geri yükleme uygulayın. (ör. ilk yeniden denemeden önce bir saniye beklediyseniz sonraki denemeden önce en az iki saniye, ardından dört saniye bekleyin vb.). Birden fazla mesaj gönderiyorsanız tüm mesajlar için aynı anda yeni bir istek göndermemek amacıyla her bir mesajı bağımsız olarak rastgele bir süre daha geciktirebilirsiniz.
  • İlk yeniden deneme gecikmesi bir saniye olarak ayarlanmalıdır.

Not: Soruna neden olan gönderenler kara listeye alınma riskiyle karşı karşıyadır.

Dahili Sunucu Hatası INTERNAL_SERVER_
ERROR
Sunucu, isteği işlemeye çalışırken bir hatayla karşılaştı. "Tüme zaman aşımı" bölümünde listelenen şartları uygulayarak aynı isteği tekrar deneyebilirsiniz (yukarıdaki satıra bakın).
Cihaz İletisi Hızı Aşıldı DEVICE_MESSAGE_RATE
_EXCEEDED
Belirli bir cihaza gönderilen mesajların oranı çok yüksek. Bu cihaza gönderilen mesaj sayısını azaltın ve bu cihaza hemen tekrar göndermeyi denemeyin.
Topics Mesaj Sıklığı Aşıldı TOPICS_MESSAGE_RATE
_EXCEEDED
Belirli bir konuya abone olan kullanıcılara gönderilen mesajların oranı çok yüksek. Bu konu için gönderilen mesaj sayısını azaltın ve göndermeyi hemen tekrar denemeyin.
Bağlantı Boşaltılıyor CONNECTION_DRAINING Bağlantı zayıf olduğu için mesaj işlenemedi. Bunun nedeni, yük dengeleme işlemi için FCM ürününün düzenli olarak bir bağlantıyı kapatması gerekmesidir. Mesajı başka bir XMPP bağlantısı üzerinden tekrar deneyin.
Geçersiz APNs Kimlik Bilgileri INVALID_APNS_CREDENTIAL Gerekli APNs kimlik doğrulama anahtarı yüklenmediği veya süresi dolduğu için iOS cihazı hedefleyen bir mesaj gönderilemedi. Geliştirme ve üretim kimlik bilgilerinizin geçerliliğini kontrol edin.
Kimlik doğrulama başarısız oldu AUTHENTICATION_FAILED Harici push hizmetleriyle kimlik doğrulama yapılamadı. Doğru web push sertifikalarını kullanıp kullanmadığınızı kontrol edin.

Yukarı akış mesajı söz dizimi

Yukarı akış mesajı, istemci uygulamasının uygulama sunucusuna gönderdiği bir mesajdır. Şu anda yalnızca XMPP yayın mesajlarını desteklemektedir. İstemci uygulamalarından mesaj gönderme hakkında daha fazla bilgi için platformunuzun belgelerine bakın.

Yukarı akış XMPP mesajını yorumlama

Aşağıdaki tabloda, istemci uygulamalarından gelen yukarı akış mesaj isteklerine yanıt olarak FCM tarafından oluşturulan XMPP dizelerindeki alanlar açıklanmaktadır.

Tablo 5 Yayın XMPP mesajları.

Parametre Kullanım Açıklama
from Zorunlu, dize

Bu parametre, iletiyi kimin gönderdiğini belirtir.

Değer, istemci uygulamasının kayıt jetonudur.

category Zorunlu, dize Bu parametre, mesajı gönderen istemci uygulamasının uygulama paketi adını belirtir.
message_id Zorunlu, dize Bu parametre iletinin benzersiz kimliğini belirtir.
data İsteğe bağlı, dize Bu parametre, mesajın yükü için anahtar/değer çiftlerini belirtir.

ACK mesajı gönderme

Aşağıdaki tabloda, uygulama sunucusunun aldığı bir yayın mesajına yanıt olarak FCM adresine göndermesi beklenen ACK yanıtı açıklanmaktadır.

Tablo 6 Yayın XMPP mesajı yanıtı.

Parametre Kullanım Açıklama
to Zorunlu, dize

Bu parametre, yanıt mesajının alıcısını belirtir.

Değer, yayın mesajını gönderen istemci uygulamasının kayıt jetonu olmalıdır.

message_id Zorunlu, dize Bu parametre, yanıtın hangi mesaj için gönderildiğini belirtir. Değer, ilgili yayın öncesi mesajdaki message_id değeri olmalıdır.
message_type Zorunlu, dize Bu parametre, bir uygulama sunucusundan CCS'ye gönderilen bir ack mesajını belirtir. Yayınlanan mesajlar için her zaman ack olarak ayarlanmalıdır.

FCM sunucu mesajları (XMPP)

Bu, FCM'ten bir uygulama sunucusuna gönderilen bir iletidir. FCM tarafından uygulama sunucusuna gönderilen başlıca mesaj türleri şunlardır:

  • Denetleme: CCS tarafından oluşturulan bu mesajlar, uygulama sunucusunun işlem yapması gerektiğini gösterir.

Aşağıdaki tabloda, CCS'nin bir uygulama sunucusuna gönderdiği mesajlara dahil edilen alanlar açıklanmaktadır.

Tablo 7 FCM kontrol mesajları (XMPP).

Parametre Kullanım Açıklama
Ortak alan
message_type Zorunlu, dize

Bu parametre, mesajın türünü belirtir: kontrol.

control olarak ayarlandığında, mesajda kontrol mesajının türünü belirten control_type bulunur.

control_type İsteğe bağlı, dize

Bu parametre, FCM adresinden gönderilen kontrol mesajının türünü belirtir.

Şu anda yalnızca CONNECTION_DRAINING desteklenmektedir. FCM, yük dengeleme yapmak için bir bağlantıyı kapatmadan önce bu kontrol mesajını gönderir. Bağlantı boşaldıkça bağlantıya başka mesaj gönderilmesine izin verilmez ancak ardışık düzendeki mevcut mesajlar işlenmeye devam eder.