# Desk360'a Giriş

Geliştiriciler için özel olarak hazırlanan bu sayfalarda hangi özelliğin ne işe yaradığına ve nasıl kullanıldığına, hangi terimin ne anlama geldiğine ve Whatsapp entegrasyonlarının nasıl yapıldığına dair detaylı dokümantasyon içeriklerine ulaşabilir, ürünlerinizi Desk360 platformuna hızlı bir şekilde entegre edebilirsiniz.\
\
Desk360 resmi bir WhatsApp Business çözüm sağlayıcısıdır ve tüm WhatsApp iletişimlerini doğrudan Desk360 platformu üzerinden yönetebilirsiniz.\
\
**WhatsApp Business API ne işe yarar?**\
\
İşletmelerin WhatsApp mesajlaşma özelliklerini kendi sistemleri ve yazılımlarıyla entegre etmelerini ve şablon mesajlar, bildirimler göndererek geniş ölçekte müşteri desteği sağlamasına olanak tanır.

\
\
&#x20;                                                     [<mark style="color:blue;">**Ana Sayfa**</mark>](https://desk360.com/tr)                                          [<mark style="color:blue;">**Fiyatlandırma**</mark>](https://desk360.com/tr/fiyatlandirma)


# Kayıt Ol

Desk360 platformuna [buraya tıklayarak](https://my.desk360.com/register) kaydolabilirsiniz.

<figure><img src="/files/jlZ4mKr8JN2gUhGopeiK" alt="" width="375"><figcaption></figcaption></figure>

E-posta, adı soyadı, telefon numarası ve ülke alanlarını da doldurduktan sonra yeni bir kayıt oluşturabilirsiniz. Kayıt esnasında “Google ile Devam Et” i seçerek açılan pencere Google hesabınızla oturum açtıktan sonra ilgili hesabınızın e-posta ve ad soyadı bilgilerini kullanabilirsiniz.

Dikkat edilmesi gerekenler:

* Adı soyadı alanına minimum 3 karakter girişi yapılmalı.

&#x20;                                                     [<mark style="color:blue;">**Ana Sayfa**</mark>](https://desk360.com/tr)                                          [<mark style="color:blue;">**Fiyatlandırma**</mark>](https://desk360.com/tr/fiyatlandirma)


# Giriş Yap

Desk360 platformuna [buraya tıklayarak](https://my.desk360.com/login) giriş yapabilirsiniz.<br>

<figure><img src="/files/6Q47yZKZNeij9JWGyjvE" alt="" width="375"><figcaption><p>Desk360 email giriş ekranı</p></figcaption></figure>

Google hesabınızla kaydolduysanız “Google ile Giriş Yap” a tıkladıktan sonra karşınıza açılan pencerede Google hesabınızla oturum açtıktan sonra Desk360 platformuna giriş yapabilirsiniz. Ayrıca E-Posta Adresi alanını doldurduktan sonra bir adet 6 haneli tek kulanımlık şifre eposta adresinize gelecektir. Tek kullanımlık şifreyi girdikten sonra Desk360 hesabınızla oturum açabilirsiniz.\ <br>

<figure><img src="/files/syDllwe3e9nzLYZPYOtF" alt="" width="375"><figcaption><p>Tek kullanımlık şifre giriş ekranı</p></figcaption></figure>

&#x20;                                                     [<mark style="color:blue;">**Ana Sayfa**</mark>](https://desk360.com/tr)                                          [<mark style="color:blue;">**Fiyatlandırma**</mark>](https://desk360.com/tr/fiyatlandirma)


# Şifre Yenileme

Şifrenizi unuttuysanız [buraya tıklayarak](https://my.desk360.com/forgot-password) ya da Desk360 hesabınıza giriş yaptığınız sayfanın alt kısmında yer alan “Parolanızı mı unuttunuz?” a tıklayarak şifre sıfırlama sayfasına erişebilirsiniz.

Açılan sayfada Desk360 hesabınıza ait olan e-posta adresini girmeniz ve “Gönder” e basmanız yeterli olacaktır. Ardından sonra e-posta adresinize gönderilecek olan şifre sıfırlama e-postasındaki yönergeleri takip ederek yeni bir şifre oluşturabilirsiniz.

Şifre sıfırlama e-postasını almadıysanız:

* Lütfen e-postanızın spam kutusunu kontrol ediniz. Şifre sıfırlama e-postası spam kutunuza düşmüş olabilir.
* &#x20;Bir süre bekleyerek tekrar deneyiniz.
* Eğer hala şifre sıfırlama e-postasını size ulaşmadıysa <support@desk360.com> e-posta adresine bir destek talebi gönderebilirsiniz.

<figure><img src="/files/YdGZElqWkO2CHw79Y0wi" alt="" width="375"><figcaption></figcaption></figure>

&#x20;                                                     [<mark style="color:blue;">**Ana Sayfa**</mark>](https://desk360.com/tr)                                          [<mark style="color:blue;">**Fiyatlandırma**</mark>](https://desk360.com/tr/fiyatlandirma)


# WhatsApp Business API Kurulumu

WhatsApp Business API Kurulum sayfası, Business API hizmeti almak istediğiniz telefon numarası için hızlı ve kolay kurulum yapabilmenizi sağlar.

Kurulum 5 adımdan oluşur. Bunlar sırasıyla:

1. Facebook İşletme Hesabınızın bağlanması
2. Kullanmak istediğiniz telefon numarasının ve işletme profilinizin görünen adının belirlenmesi
3. Faturalandırma
4. Telefon numarası doğrulama
5. Kurulumun tamamlanması

Kuruluma başlamadan önce dikkat edilmesi gerekenler:

* WhatsApp Business API kurulumunun yapılabilmesi için Doğrulanmış bir Facebook İşletme Hesabınızın olması gerekir.
* Bir telefon numarası aynı anda Business API ve Business App’te kullanılamaz. Meta kuralları gereği sadece 1 platformdan yararlanabilirsiniz.
* Telefon numaranız E.164 formatında ve uluslararası ulaşılabilir olmalıdır.
* Kurulum yapmak istediğiniz telefon numarası WhatsApp uygulamasına kayıtlıysa lütfen WhatsApp hesaplarınızdan siliniz. *WhatsApp uygulamasını silseniz dahi hesabınız kayıtlı kalır. Bu nedenle WhatsApp uygulamasından “Hesap” bölümüne giderek hesabınızı silmeniz gerekir.* Hesabınızı sildikten sonra 5 dakika beklemeniz gerekmektedir.
* Kurulum öncesindeki eski mesajlaşmalarınız transfer edilemez.
* Kurulum yapmak istediğiniz telefon numarası farklı bir Business API sağlayıcısında kayıtlıysa, kurulum öncesinde Facebook Business Manager’ınıza giderek 2 Step Verification’ı kapatınız. İlgili [linkten](https://www.facebook.com/help/147926301947841) bilgi alabilirsiniz.
* Adımların hepsinin başarılı bir şekilde tamamlanması gerekmektedir. Herhangi bir adımın atlanması mümkün değildir.&#x20;

### **1.Adım: Facebook Hesabının Bağlanması**&#x20;

Bu adımı tamamlayabilmeniz için Doğrulanmış bir Facebook İşletme Hesabınızın olması gerekmektedir. Facebook İşletme Hesabı ile ilgili daha fazla bilgi için [tıklayınız](https://www.facebook.com/business/tools/business-manager/get-started-guide).

Hesabınızı bağlayabilmek için “Devam Et” butonuna basınız ve ardından açılan pencerede Facebook Business Manager Hesabınızla oturum açınız.

### **2.Adım: Telefon Numarası ve Görünür Adın Belirlenmesi**

Bu adımda WhatsApp Business API kurulumu yapmak istediğiniz telefon numarası ve telefon numaranızın görünür adını girmeniz gerekir.

Görünür Ad, müşterileriniz tarafından görüntülenebilen WhatsApp İşletme Profilinizin ismidir. Belirleyeceğiniz isim WhatsApp tarafından değerlendirme sürecine girer ve ancak onaylanırsa kullanabilirsiniz. Görünür isim ve dış kaynaklar (örneğin: şirket web sitesi) arasında tutarlı bir marka bütünlüğü oluşturulmalıdır.

Görünür Adınızın onaylanması için dikkat etmeniz gerekenler:

* Belirleyeceğiniz ad işletmenizle ilgili olmalıdır.
* WhatsApp Ticaret ve İşletme ilkelerini ihlale etmemelidir.
* Büyük-küçük harf kullanımını şirket isminize göre yazılmalı
* Emoji kullanılmamalı.
* Minimum 3 harf içermeli.
* Diğer görünen Ad kurallarına uygun olmalıdır. Kurallara ulaşmak için [tıklayınız](https://www.facebook.com/business/help/757569725593362).

Aşağıdaki durumlarda Görünür Adınız onaylanmayabilir.

* İsim - Soyisim girilmesi
* Genel İsimler (Örnek: Elma, Kıyafet, Ayakkabı)
* Coğrafi isimler (Örnek: İstanbul)

Telefon numaranızı ve Görünür Adınızı girdikten sonra “Devam Et” butonuna basabilir ve adımı tamamlayabilirsiniz.\
\
Görünen ismin görünürlüğü, göndericinin konumuna bağlıdır.

Endonezya, Meksika veya Kolombiya'daki gönderenler: Görünür isminiz son kullanıcıya görünür. \
\
Diğer bölgelerdeki gönderenler: Eğer doğrulanmış bir gönderici iseniz(yeşil tik sahibi iseniz), görünen isminiz son kullanıcıya görünür. Onaylanmış bir gönderici veya sınırlı erişimli onaylanmış bir gönderici iseniz, son kullanıcı görünen isminizi yalnızca WhatsApp'taki iletişim bilgileri bölümünde görebilir.\
\
Başka bir hizmet sağlayıcıda kayıtlı olan numaranızı Desk360'a taşıdığınızda, WhatsApp işletme hesabınıza ait olan aşağıdaki haklarınızı korursunuz;

* Telefon numarası
* İşletme adı
* Kalite derecesi
* Mesajlaşma limitleri
* Resmi işletme hesabı durumu
* Onaylanan mesaj şablonları: Yalnızca WhatsApp tarafından onaylanan yüksek kaliteli şablonlar taşınır. Aşağıdaki şablonlar taşınmaz.
  * Düşük kalite
  * WhatsApp tarafından reddedildi
  * WhatsApp tarafından onay beklenenler

### **3.Adım: Faturalandırma**

2\. adımı tamamladıktan sonra faturalandırma adımı karşınıza çıkacaktır. Bu adımda Yıllık ve Aylık olarak 2 farklı seçenek size sunulur. İhtiyacınıza uygun olan paketi seçtikten sonra “Devam Et” butonuna basınız.

Ardından açılacak olan pencerede kart bilgilerinizi giriniz ve “İleri” butonuna tıklayınız.

İleri butonuna bastıktan sonra, yapacağınız ödeme için faturalandırma yapılabilmesi adına sizden bazı bilgiler istenecektir. Bireysel fatura için “Bireysel Seçim”, Ticari fatura içinse “Ticareti Seçim” i seçmeniz gerekir. Bu ekranda yapacağınız seçim ve gireceğiniz bilgilere göre faturanız hazırlanacaktır.

Fatura için gerekli bilgileri girdikten sonra “İleri” butonuna basınız ve faturalandırmanın son adımı olan “Aboneliği Tamamla” ekranında ücretlendirme detaylarınızı tekrar kontrol ettikten sonra “Tamamla” butonuna basarak bu adımı tamamlayabilirsiniz. \
\
Abonelik ücretiniz bu adımda tahsis edilir. Kredi kartınıza anında yansıtılır. Ancak farklı bir ürününüzü ekliyorsanız ücretiniz bakiyenizden düşürülür.

### **4.Adım: Telefon Numarası Doğrulama**

Bu adımda Business API kurulumu yapılacak telefon numarasının doğrulanma süreci tamamlanır.

Doğrulama için 2 farklı yöntem mevcuttur. Bunlar kısa mesaj ve telefon aramasıdır. İhtiyacınıza en uygun olanı seçerek “Gönder” e basabilirsiniz. Ardından Meta, sizin belirlediğiniz yöntem ile telefon numaranıza 6 haneli bir doğrulama kodu gönderecek. Bu kodu açılacak olan alana girmeniz ve ”Doğrula” ya basmanız yeterlidir.

Eğer doğrulama kodu size ulaşmazsa “Geri dön” butonuna basarak diğer doğrulama yöntemini deneyebilirsiniz.

Doğrulama kodunu göndermeden önce dikkat edilmesi gerekenler:

* Telefon araması yöntemini tercih etmeniz halinde, eğer telefon numaranıza tanımlanmış bir IVR varsa kodu göndermeden önce devre dışı bırakılması ya da çağrı yönlendirme yapılması gerekmektedir. Aksi taktirde doğrulama kodu size ulaşmayacaktır.
* Telefon numaranız farklı bir hizmet sağlayıcıdan taşınacaksa Facebook Business Manager’ınıza giriş yaparak 2 Step Verification’ı kapatınız.
* Telefon numaranız WhatsApp uygulamasına kayıtlıysa uygulamaya giderek “Hesap” bölümünden hesabınızı siliniz ve doğrulama kodunu göndermeden önce 5 dakika bekleyiniz.

### **5.Adım: Kurulumun Tamamlanması**

Doğrulama kodu adımın tamamlandıktan kurulum süreci başlar ve sürecin tamamlanması birkaç dakika sürebilir. Kurulum tamamlandıktan sonra sayfanın en üstünde kurulumun tamamlandığına dair bir bildirim alır ve WhatsApp Hesapları sayfasına yönlendirilirsiniz.

&#x20;                                                     [<mark style="color:blue;">**Ana Sayfa**</mark>](https://desk360.com/tr)                                          [<mark style="color:blue;">**Fiyatlandırma**</mark>](https://desk360.com/tr/fiyatlandirma)&#x20;


# Sanal Numara Seçim Ekranı

## Sanal Numara Seçim Ekranı Kullanım Kılavuzu

Bu doküman, WhatsApp Business API (WABA) kurulum sürecinde sanal numara seçimi özelliğinin nasıl kullanılacağını açıklar.

### Neden Sanal Numara?

Sanal numara özelliği aşağıdaki avantajları sağlar:

* Fiziksel SIM kart gerektirmez.
* WABA kurulum sürecini hızlandırır.
* Platformu denemek isteyen kullanıcılar için düşük giriş bariyeri sunar.

### Adım Adım Kullanım

#### 1. Numara Seçme Ekranı

WABA kurulum sürecinde, tüm kullanıcılar aşağıdaki ekranla karşılaşır.

* "Numara Satın Almak için Tıklayın" butonuna basıldığında numara ekleme alanı açılır.

#### 2. Numara Gösterimi

İlgili alan içerisinde aşağıdaki alanlar yer alır:

* Telefon Numarası: Kullanıcıya otomatik bir numara gösterilir.
* Refresh butonu: Tıklanıldığında kullanıcıya rastgele yeni bir numara gösterilir.
* **"Numarayı Kendim Seçeceğim"** butonu: Kullanıcının kendi numarasını seçmesine olanak tanır.
* Güncel olarak sadece ABD uyarlı telefon numaraları alınabilir.

#### 3. Numara Seçimi ve Özet Ekranı

"Numara Seç" butonuna tıklanıldığında bir özet ekranına yönlendirilir.

* Seçilen numara burada görüntülenir.
* Seçilen numara kullanıcı için 15 dakikalığına rezerve edilir. Bu ekranda 15 dakikadan fazla beklerse numaranın rezervasyonu iptal edilir.

#### 4. Kurulumu Tamamlama

"Tamamla" butonuna tıklanmasının ardından:

* Arka planda Meta’dan SMS yoluyla OTP (doğrulama kodu) alınır.
* Kod otomatik olarak doğrulanır.
* Kurulumun son adımı olan "Kurulum Tamamlanıyor" ekranına geçilir.


# WhatsApp Hesabı

WhatsApp Hesaplarınızı WhatsApp Hesabı sayfasından yönetebilir ve özelleştirebilirsiniz. Sol menüdeki ilk butona tıklayarak bu sayfaya erişebilirsiniz. Bu sayfada:

* Önceden eklenmiş olan WhatsApp hesaplarınızı görebilir,
* Yeni bir WhatsApp hesabı ekleyebilir,
* Yarıda kalmış bir WhatsApp kurulumunuzu tamamlayabilir/vazgeçebilir,
* WhatsApp hesaplarınızın detaylarına erişebilir (mesaj gönderim limiti, telefon numaranızın kalite durumu gibi.),
* WhatsApp hesap profilinizi düzenleyebilir,
* WhatsApp hesabınız için yeni kullanıcılar ekleyebilir/silebilir,
* Yeşil tik başvurusunda (green tick / official account) bulunabilir,
* Public API servisinden yararlanabilir,
* Mobil ya da web chat platformlarına erişim sağlayabilir,
* Mevcut WhatsApp hesabınızı silebilirsiniz.

## **WhatsApp Hesap Listesi**

Bu ekranda kurulumu tamamlanmış olan ya da yarıda kalan WhatsApp hesaplarınız (Ürünleriniz) listelenir ve her satır 1 WhatsApp hesabını temsil eder. Ayrıca sağ üst köşede bulunan “+ Yeni” butonuna tıklayarak yeni bir WhatsApp Business API Kurulumu başlatabilirsiniz.

Kurulumu tamamlanmış hesaplarınızın Görünen Adı ve Telefon numarası bilgisinin sağında sırasıyla Ayarlar, Public API ve Chat  servislerine erişebileceğiniz butonlar bulunur.

Kurulumu tamamlanmamış olan hesaplarınız için ise Görünen Adı ve Telefon numarası bilgisinin sağında “Entegrasyonu Tamamla” ve “Vazgeç” butonları bulunur.

Eğer yarıda kalan WhatsApp hesabınızın entegrasyonunu tamamlamak istiyorsanız “Entegrasyonu Tamamla” butonuna basabilir ve bu hesap için WhatsApp Business API Kurulum sayfasına erişebilirsiniz. Eğer entegrasyonu tamamlamadan işlemden vazgeçmek isterseniz de “Vazgeç” butonuna basabilirsiniz.

## **WhatsApp Hesap Ayarları**

Ürün ayarlarına erişebilmek için Sol menüden Ürünler’e tıklayın ve ardından Ürün listeleme ekranından “Ayarlar” sayfasına erişmek istediğiniz ürünün hemen sağında bulunan ayarlar butonuna tıklayın. Bu ekranda kurulumu tamamlanmış olan ürünleriniz ile ilgili birçok bilgiye erişebilir ve düzenleyebilirsiniz.

İşte ayarlar sekmesinde yapabileceğiniz işlemler:\
\
Ayarlar sekmesinde açılan sayfanın en üstünde; WhatsApp hesabınızın telefon numarasını, görünen adını, kalite durumunu, mesaj gönderme limitini, ülkesini, entegrasyon tipini görebilir ve hesabınızı tamamen silebilir/entegrasyonu kaldırabilirsiniz. \
\
**Mesajlaşma limitleri**, bir işletme telefon numarasından müşteri hizmeti penceresi dışında, benzersiz WhatsApp kullanıcı numaralarına, **24 saatlik hareketli bir dönem** içinde gönderilebilecek maksimum mesaj sayısını ifade eder.

Varsayılan olarak, yeni işletme telefon numaraları için bu limit **250 teslim edilen mesajdır**. Ancak bu limit kademeli olarak artırılabilir:

* **1.000** (ölçeklendirme adımlarından birini tamamlayarak)
* **10.000** (otomatik ölçeklendirme ile)
* **100.000** (otomatik ölçeklendirme ile)
* **Sınırsız** (otomatik ölçeklendirme ile)

#### Limitinizi Artırma

Mesajlaşma limitinizi **1.000**’e yükseltmek için aşağıdaki ölçeklendirme yollarından birini tamamlamanız gerekir.\
Ardından, **otomatik ölçeklendirme kriterlerini** karşıladığınız sürece limitiniz bir üst seviyeye otomatik olarak yükseltilir.

#### Ölçeklendirme Yolları

* **İşletmenizi doğrulayın.**
* **30 günlük hareketli bir dönem** içinde, müşteri hizmeti penceresi dışında, yüksek kalite derecesine sahip şablonlar kullanarak **1.000 benzersiz kullanıcıya 1.000 mesaj gönderin.**

#### Kalite Analizi

Bu yolları tamamladıktan sonra, gönderdiğiniz mesajların **kalite durumu** incelenir. Yapılan değerlendirmeye göre, telefon numaranızın **otomatik ölçeklendirme için uygunluğu onaylanabilir veya reddedilebilir.**\
\
Kalite durumunuz ve mesaj gönderme limitiniz Meta tarafından belirlenir. Kalite durumunuz mesajlaşma sınırınızı direkt olarak etkileyen bir unsurdur. Müşteri tarafından spam bildirilmeniz, bloklanmanız bu kaliteyi etkileyen unsurlardan birkaçıdır. Kalite durumunuzu yüksek tutmak için;

* Kişiselleştirilmiş mesajları tercih edin
* Gönderim sıklığınız, gönderim içeriğinizin uzunluğu gibi konularda dikkatli olun. Daha detaylı bilgiler için WhatsApp'ın kendi [dökümanına](https://business.whatsapp.com/policy) bakmayı unutmayın.

İşletme Profili başlığında ise işletmeniz ile ilgili birçok bilgiyi özelleştirebilirsiniz. Yaptığınız özelleştirmelerin kaydedilmesi için sayfanın en altında bulunan “Kaydet” butonuna basabilirsiniz.&#x20;

**Profil Fotoğrafı:** Bu alandan WhatsApp hesabınız için bir profil fotoğrafı yükleyebilirsiniz.

**Görünen Ad:** Bu alandan WhatsApp hesabınızın görünen adını değiştirebilirsiniz. Görünen adı değiştirmek için alanda bulunan kalem ikonuna tıklayın. Ardından açılan pencerede yeni görünün adınızı girin ve “Tamam” butonuna basın.

Değişiklik talebiniz Meta’nın onayına gidecek ve değerlendirme aşamasına geçecektir. Değerlendirme sürecini ve sonucu görünen adınızın hemen üstünde bulunan “Onaylandı”, “Reddedildi”, “Değerlendirmede” gibi size gösterilen bilgilendirme alanından takip edebilirsiniz. Eğer görünen ad değişikliği talebiniz reddedilirse eski adınızı kullanmaya devam edebilir ya da yeni bir değişiklik talebinde bulunabilirsiniz. Facebook Adlandırma Kuralları için [buraya](https://www.facebook.com/business/help/338047025165344) göz atabilirsiniz.

**Kategori:** Bu alanda işletmenize uygun olan bir kategori seçimi yapabilirsiniz.

**Resmi İşletme Hesabı (Mavi Tik):** Bu alandan WhatsApp hesabınız için Resmi İşletme Hesabı (yeşil tik) başvurusunda bulunabilirsiniz. Bunu yapmak için “Talep Gönder” butonuna basın ve karşınıza çıkacak olan başvuru formunu doldurun.

Önemli hatırlatmalar ve notlar:

* Resmi işletme hesabını başvuruları Meta tarafından değerlendirilir ve ortalama 2-3 iş günü içerisinde sonuçlanır.
* Eğer başvurunuz reddedilirse tekrar başvurmak için 1 ay beklemeniz gerekir.
* Başvurabilmek için mesajlaşma limitinizin 1K/24 saat ’ten yüksek olması, doğrulanmış bir Facebook İşletme Hesabı’na sahip olmanız, görünen adınızın onaylanmış durumda olması ve hesabınızın 2FA ayarının açık olması gerekir.
* Başvurunuzun değerlendirme sürecini ve sonucu “Talep Gönder” butonunun hemen altında bulunan “Onaylandı”, “Reddedildi”, “Değerlendirmede” gibi size gösterilen bilgilendirme alanından takip edebilirsiniz.

**Açıklama:** Bu alanda işletmenizi için bir açıklama metni girebilirsiniz.

**İletişim Bilgileri:** Bu alanda işletmeniz için adres, e-posta ve web site (en fazla 2 adet) bilgilerini girebilirsiniz.

**İşletme Profili Ön İzleme:** Bu alanda yaptığınız değişikliklerin bir ön izlemesini görebilirsiniz.

## **Public API**

Bu sekme altında kurulumu tamamlanmış olan WhatsApp İşletme Hesabınız için Public API hizmeti alabilirsiniz.

**Nasıl çalışır?**\
Bu hizmetten faydalanabilmek için açılan ekrana bir Webhook Url ve Token bilgisi girmeniz gerekmektedir. Bilgileri girdikten sonra “Kaydet” butonuna basınız. Bilgileri kaydettikten sonra WhatsApp tarafından Desk360’a gönderilen mesajlaşma verileri sizin oluşturduğunuz ve kaydettiğiniz Webhook Url’ye POST metodu ile iletilir. Bu aşamadan sonra mesajlaşma verileriniz Desk360’a iletilmeyecektir.

İşlemi iptal etmek isterseniz aynı ekranda bulunan “Sil” butona basabilirsiniz. İşlem iptal olduktan sonra mesajlaşma verileriniz Desk360’a iletilecek ve Webhook Url’nize veri akışı duracaktır.

## Davet Etme ve Rol Belirleme

Bu sekme altında Müşteri Hizmetleriniz için takım arkadaşlarınıza bir Desk360 hesabı oluşturmaları için davet gönderebilir, Desk360 WhatsApp Messenger uygulamasını indirebilir, Web tabanlı mesajlaşma yapabileceğiniz panelimize erişebilirsiniz.

Müşteri hizmetlerinize yeni takım arkadaşlarınızı eklemek ve davet gönderebilmek için ekranda bulunan “Yeni kişi davet et” e basın ve Davet göndermek istediğiniz kişilerin e-posta adreslerini girin. Ardından “Davet Et” butonuna basın. Davet gönderebilmek için yeterli bakiye olduğundan emin olunuz.

Göndereceğiniz davet 72 saat boyunca geçerli olacaktır. Davet süresinin bitmesi halinde tekrar davet gönderebilirsiniz. Daha önceden davet gönderdiğiniz bir kişiye tekrar davet göndermek için kullanıcı bilgisinin sağında bulunan “Daveti tekrar gönder” butonuna basabilirsiniz.\
\
Eklenmiş olan bir kullanıcıyı silmek içinse kullanıcı bilgisinin sağında bulunan “Sil” butonuna basabilirsiniz.\
\
3 farklı rol kullanıcılara sunulur. Bunlar Admin - Supervisor - Agent şeklindedir. WhatsApp işletme hesabını kuran kişi Admin olarak atanır. Davet edilen diğer kullanıcılar sistem tarafından otomatik olarak Agent şeklinde görülür.\
\
Supervisor ve Admin arasındaki tek fark, supervisorlar bakiye hareketlerine, bakiyeye ve kredi kartı bilgilerine erişemez ve düzenleyemez.\ <br>

| Yetki | Admin                        | Supervisor | Agent |       |
| ----- | ---------------------------- | ---------- | ----- | ----- |
| 1     | Otomatik Yanıt Oluşturma     | TRUE       | TRUE  | FALSE |
| 2     | Veri İçe Aktarma Oluşturma   | TRUE       | TRUE  | FALSE |
| 3     | Entegrasyon Oluşturma        | TRUE       | TRUE  | FALSE |
| 4     | Hızlı Yanıt Oluşturma        | TRUE       | TRUE  | FALSE |
| 5     | Reason Oluşturma             | TRUE       | TRUE  | FALSE |
| 6     | Etiket Oluşturma             | TRUE       | TRUE  | FALSE |
| 7     | Şablon Oluşturma             | TRUE       | TRUE  | FALSE |
| 8     | Kullanıcı Daveti Oluşturma   | TRUE       | TRUE  | FALSE |
| 9     | Otomatik Yanıt Silme         | TRUE       | TRUE  | FALSE |
| 10    | Veri İçe Aktarma Silme       | TRUE       | TRUE  | FALSE |
| 11    | Entegrasyon Silme            | TRUE       | TRUE  | FALSE |
| 12    | Hızlı Yanıt Silme            | TRUE       | TRUE  | FALSE |
| 13    | Reason Silme                 | TRUE       | TRUE  | FALSE |
| 14    | Etiket Silme                 | TRUE       | TRUE  | FALSE |
| 15    | Şablon Silme                 | TRUE       | TRUE  | FALSE |
| 16    | Kullanıcı Daveti Silme       | TRUE       | TRUE  | FALSE |
| 17    | Otomatik Yanıt Düzenleme     | TRUE       | TRUE  | FALSE |
| 18    | Sohbet Düzenleme             | TRUE       | TRUE  | FALSE |
| 19    | Veri İçe Aktarma Düzenleme   | TRUE       | TRUE  | FALSE |
| 20    | Entegrasyon Düzenleme        | TRUE       | TRUE  | FALSE |
| 21    | Marketplace Düzenleme        | TRUE       | TRUE  | FALSE |
| 22    | Profil Düzenleme             | TRUE       | TRUE  | FALSE |
| 23    | Hızlı Yanıt Düzenleme        | TRUE       | TRUE  | FALSE |
| 24    | Reason Düzenleme             | TRUE       | TRUE  | FALSE |
| 25    | Etiket Düzenleme             | TRUE       | TRUE  | FALSE |
| 26    | Şablon Düzenleme             | TRUE       | TRUE  | TRUE  |
| 27    | Kullanıcı Daveti Düzenleme   | TRUE       | TRUE  | FALSE |
| 28    | Otomatik Yanıt Görüntüleme   | TRUE       | TRUE  | FALSE |
| 29    | Sohbet Görüntüleme           | TRUE       | TRUE  | FALSE |
| 30    | Sohbet Botunu Görüntüleme    | TRUE       | TRUE  | FALSE |
| 31    | Sohbet Kokpitini Görüntüleme | TRUE       | TRUE  | FALSE |
| 32    | Sohbet Raporunu Görüntüleme  | TRUE       | TRUE  | TRUE  |
| 33    | Veri İçe Aktarma Görüntüleme | TRUE       | TRUE  | FALSE |
| 34    | Entegrasyon Görüntüleme      | TRUE       | TRUE  | FALSE |
| 35    | Marketplace Görüntüleme      | TRUE       | TRUE  | FALSE |
| 36    | Profil Görüntüleme           | TRUE       | TRUE  | TRUE  |
| 37    | Hızlı Yanıt Görüntüleme      | TRUE       | TRUE  | FALSE |
| 38    | Reason Görüntüleme           | TRUE       | TRUE  | FALSE |
| 39    | Etiket Görüntüleme           | TRUE       | TRUE  | FALSE |
| 40    | Şablon Görüntüleme           | TRUE       | TRUE  | TRUE  |
| 41    | Kullanıcı Daveti Görüntüleme | TRUE       | TRUE  | TRUE  |
| 42    | Bakiye Görüntüleme           | TRUE       | FALSE | FALSE |

<br>

## WhatsApp Web Widget

WhatsApp Web Widget, web sitenizin köşesinde görünür ve ziyaretçilerin işletme ile sohbet başlatmaya teşvik eder.Bu ekran üzerinden widget’ın dilini, görünümünü, metinlerini ve temasını özelleştirebilir, ardından HTML kodunu alarak web sitenize entegre edebilebilir.

<figure><img src="/files/YXukIP9J2yc1xjD222RK" alt=""><figcaption></figcaption></figure>

### **a) Alanlar ve Özellikler**

Varsayılan Dil

* Widget’ın varsayılan görüntüleneceği dili seçin.
* Örn: English, Türkçe.

WhatsApp Web Widget Varsayılan Görünüm

* **Kapalı gelsin** → Kullanıcı siteye girdiğinde widget kapalı başlar.
* **Açık gelsin** → Siteye girişte widget otomatik açık görünür.

Açılma Süresi

* Widget’ın siteye girişten sonra kaç saniye içinde açılacağını belirler.
* Örn: `0` → anında, `5` → 5 saniye sonra.

Diğer Diller

* Farklı dil seçenekleri ekleyerek çok dilli destek verebilirsiniz.
* Örn: Türkçe, Almanca, Fransızca.

Marka Adı

* Widget üst kısmında görünen marka veya şirket adı.
* Karakter sınırı: 75.

Alt Başlık

* Markanın altında gösterilen bilgilendirici metin.
* Örn: “We typically reply within a day.”

Buton Adı

* WhatsApp butonunda görünecek metin.
* Örn: “Message us” veya “Bize Yazın”.

Karşılama Mesajı

* Sohbet kutusu açıldığında görünen ilk mesaj.
* Örn: “Hi there! How can I help you?”

Müşteri Mesajı

* Kullanıcının yazabileceği ilk varsayılan mesaj önerisi.
* Örn: “Hello, can you help me with something?”

Tema ve Hizalama

* **Tema**: Açık Tema / Kapalı Tema.
* **Hizalama**: Widget’ın ekranın soluna veya sağına hizalanması.

Kaydet

* Yaptığınız değişiklikleri kaydetmek için **Kaydet** butonuna basın.

Kodu Kopyala

* Hazırlanan HTML kodunu kopyalayarak web sitenizin ilgili yerine yapıştırın.
* Bu kod widget’ın sitenizde çalışmasını sağlar.<br>

&#x20;                                                     [<mark style="color:blue;">**Ana Sayfa**</mark>](https://desk360.com/tr)                                          [<mark style="color:blue;">**Fiyatlandırma**</mark>](https://desk360.com/tr/fiyatlandirma)


# Sohbet

Desk360 Chat arayüzü, kullanıcılarla anlık olarak iletişim kurmanıza olanak tanır. Panel yönetim arayüzündeki "Sohbet" butonuna tıkladığınızda, sohbet listesine ve müşteri profillerine erişebilirsiniz.

* 1 - Sol alan: Aktif ve Arşivlenmiş Sohbet Listeleri
* 2 - Orta Alan: Müşteri ile konuşma alanı
* 3 - Sağ taraf: Müşteri profili ve genel bilgilendirme alanı

<figure><img src="/files/v3kMSeIVjThM0NZ6fjh2" alt=""><figcaption></figcaption></figure>

Sohbet listesi iki ana kategoriye ayrılır:

* Aktif Sohbet Listesi: 24 saatlik konuşma periyodu içinde bulunan kullanıcıların sohbetlerini içerir. Bu listedeki tüm kullanıcılarla mesajlaşmaya devam edilebilir.
* Arşiv Sohbet Listesi: 24 saatlik süreyi tamamlamış veya belirlenen bir sebep ile çözüme ulaştırılmış sohbetlerin bulunduğu alandır. 24 saatlik süre dolmamış sohbetler tekrar aktif listeye taşınabilir.<br>

b) Statü Seçimi\
\
Kullanıcılar statülerini bulundukları duruma göre güncelleyebilir. Her statü güncellemesinden sonra aşağıda bulunan sayaç sıfırlanıp yeniden başlar. Statü açıklamaları aşağıdaki gibidir.\
\
Çevrimiçi: Kullanıcı çevrimiçi olduğunda üzerine ve sıraya yeni müşteri alabilir. Aktif ve arşivlenen sohbetlere erişim vardır.\
\
Görünmez: Kullanıcı üzerine ve sıraya yeni müşteri alamaz ancak mevcut müşterilerle aktif konuşmaya devam edebilir. Aktif ve arşivlenen sohbetlere erişim vardır.\
\
Mola: Kullanıcı üzerine ve sıraya yeni müşteri alamaz ancak mevcut müşterilerle aktif konuşmaya devam edebilir. Aktif ve arşivlenen sohbetlere erişim vardır.\
\
Çevrimdışı: Kullanıcı üzerine ve sıraya yeni müşteri alamaz, mevcut müşterilerle aktif konuşmaya devam edemez. Arşivlenen sohbetlere erişim vardır. Eğer kullanıcı Çevrimiçi durumdan çevrimdışı durumuna geçerse aktif chatleri başkasına sırayla atanır. <br>


# Aktif Sohbet

Aktif bir sohbet açıldığında, müşteriye ait aşağıdaki bilgiler görüntülenir;

* Kullanıcının WhatsApp görünür adı ve numarası
* Önceki konuşmalar ve konuşma başlangıç zamanı
* Kullanıcıya ve konuşmaya özel notlar
* Kullanıcıya eklenen etiketler

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcaMCsv-UOOetIjAuCtordud6z9_twdk6o1_Wz7VC-OcMaLxcGqYskB-DGszPS5wRSurKlE9NoaR8sKi-P8tfc0xjpF6X1B6F0jjYXy6oBUlkNiHuGOLHNggjX7q7u_amtQD1gVrg?key=GOXdnFWCEPJiWEhvnlu4V5mv" alt=""><figcaption></figcaption></figure>

Bu alanda yapılabilecek fonksiyonlar aşağıdaki gibidir.

**a) Konuşmayı Başka Bir Temsilciye Atama**

* Müşteri temsilcisi, talebe anlık cevap veremediğinde konuşmayı başka online bir temsilciye yönlendirebilir.
* "Sohbeti Ata" butonuna basılarak atanabilecek temsilciler listelenir.
* Temsilci listesi otomatik olarak açılır. Uygun temsilci seçildiğinde konuşma anında aktarılır.

<figure><img src="/files/m4qvzQoSfzNbiZ5croAa" alt=""><figcaption><p>"Sohbeti Ata" diyerek farklı bir müşteri temsilcine atanır </p></figcaption></figure>

**b) Etiket Ekleme**

* Kullanıcıları kategorize etmek amacıyla etiketler eklenebilir.
* Örneğin, yeni bir müşteri "Yeni Müşteri" etiketiyle işaretlenebilir.
* "Etiket Ekle" butonu aracılığıyla etiket girilir ve "Enter" tuşu ile ekleme tamamlanır.
* İstenildiğinde eklenen etiket kaldırılabilir.

<figure><img src="/files/AWRwu4S5YuTd1sMkljSd" alt=""><figcaption><p>Eklenmek istenen etiket yazılır.</p></figcaption></figure>

<figure><img src="/files/BmYbmL0NuuflHmgu3c7Y" alt=""><figcaption><p>Enter tuşuna basıldıktan sonra ilgili etiket müşteriye kaydedilir. Çarpı butonuna basıldığında eklenen etiket kaldırılabilir.<br><br></p></figcaption></figure>

Eklenen etiketlerdeki kişileri görebilmek için Arşiv chat sayfasından filtreme yöntemi kullanılabilir.<br>

**c) Şablon Mesaj Gönderme**

* 2 farklı şekilde şablon mesaj gönderilebilir: Chatbox içinden veya sol üstte bulunan "+" tuşu ile.
* Textbox içi şablon mesaj gönderimi: Önceden oluşturulmuş şablon mesajlar, aktif sohbet listesindeki müşterilere gönderilebilir. Şablon mesajları için sohbet balonun içindeki kırmızı alandaki simgeye tıklanmalıdır. Tıklandıktan sonra daha önceden onaylanmış ve gönderime hazır şablon mesajları listelenir. Eğer yeterli bakiye limitini karşılamıyorsanız şablon mesaj gönderimi engellenir ve bakiye yükleme uyarısı ortaya çıkar.
* Chat içi şablon mesaj gönderimi: Önceden oluşturulmuş şablon mesajlar arşiv veya daha önce göndermeyen numaralara gönderilebilir. Manuel olarak göndermek istenen telefon numarasının girilmesi gerekmektedir.  Toplu şablon mesaj gönderimi bu alanda gerçekleşemez. Eğer yeterli bakiye limitini karşılamıyorsanız şablon mesaj gönderimi engellenir ve bakiye yükleme uyarısı ortaya çıkar.

<div align="left"><figure><img src="/files/fC3kaeRLrwLv1UxNlBDY" alt="" width="375"><figcaption><p>Textbox içi şablon mesaj gönderimi</p></figcaption></figure> <figure><img src="/files/C8xHvL9Edc455iwPwU6q" alt="" width="375"><figcaption><p>Chat içi şablon mesaj gönderimi</p></figcaption></figure></div>

c.1) Sohbet listesi haricinde Şablon Mesaj gönderme\
\
Aktif konuşma sırasında Şablon Mesaj gönderebileceği gibi yeni veya daha önce arşivlenen sohbetlerdeki kişilere de yeni Şablon Mesaj ilgili arayüzden gönderilebilir.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcR0bDQpWvVRa6IZeAajSvCrJM74SpdCPfZi3rIvZ-KiDh0PpyPHi34N-2M1MIkRtmeUJb3z_zA1wLIC_sxU22leI_HLOZP1xf0Qcs_bY0zkzlSRDs_MvAUGuiEW0E6oWf3QUr9mg?key=GOXdnFWCEPJiWEhvnlu4V5mv" alt=""><figcaption></figcaption></figure>

İlgili “+” butonuna basıldığında şablon mesajı göndermek istenen numaranın gireleceği ekran açılır.\
&#x20;

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcXi8uiWQ96_-ZdyFfY9Hlmi523Xf3_4angVnvvg_X4MiN3GK-lUdecsPyKG7LS-8-0qwkXDpYjxse7eZwNbLQ2c7woAsyTmG7Vv1GGkNdmR7sDRRAdHlMqUes_tamhrZyd33Bdxw?key=GOXdnFWCEPJiWEhvnlu4V5mv" alt=""><figcaption></figcaption></figure>

Buraya Şablon Mesaj gönderilmek istenen numara girilir. İlgili alanda sadece 1 adet numara girme izni vardır. Eğer birden fazla numaraya mesaj göndermek isteniyorsa [ilgili sayfada](https://whatsapp-tr.desk360.com/whatsapp-mesaj-sablonlari#mesaj-sablonu-gonderme) detaylar bulunabilir. Numara girildikten sonra Şablon Mesaj seçme ekranı açılır.<br>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdWE4ZTkZCf210bWu27pRwbQMEtcc2ymfOSpTMZPUQaK5jG48ooInoVY5X5vG95WrquUHv9baFPAfi7ZUK47S61DNr-y0g-JXrhe6TCkBmf2zmE1-EtEQGKnvYuf8OhhykND-wr3w?key=GOXdnFWCEPJiWEhvnlu4V5mv" alt=""><figcaption></figcaption></figure>

Şablon Mesajlar listesinden gönderilmek istenen Şablon Mesaj seçilir. Burada bir adet Şablon Mesaj seçilebilir. Fare imlecini göz ikonuna getirdiğinizde Şablon Mesajın içeriği okunur. Ardından son kontrol adımına geçilir.\ <br>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdKD47AXqcG-msSUQLcc6y0rAIWy3pHZ_-RPPP9KtS7ZoJE6rYV1nq05aPoqF0XhrXBqukgY0YOiQsPfQod3bCGG1JzgYx4iCXONMAUdBt18dJRYyIwIh-R72CEgGD694RNp7h4UQ?key=GOXdnFWCEPJiWEhvnlu4V5mv" alt=""><figcaption></figcaption></figure>

\
İlgili numaranın son kontrolleri yapılır. Devam tuşuna basıldığı an seçilen Şablon Mesaj gönderilir.<br>

**d) Konuşmayı Sonlandırma**

* Sohbet sonlandırılmadan önce bir "Sebep" seçilmelidir.
* Sebep listesi, Ana Panel → Sohbet Ayarları → Talep Konuları sekmesinden yönetilir.
* Sebep seçildikten sonra yanındaki "Onay" butonuna basılarak sohbet kapatılır ve Arşiv Sohbet Listesi'ne taşınır.
* Müşteriden yeni bir mesaj gelene kadar sohbet tekrar aktif listeye düşmez. Eğer 24 saatlik konuşma pencresi devam ediyorsa tekrardan manuel olarak aktif konuşma alanına alınabilir.
* Panelden yeni bir sebep ekledikten sonra listede görüntülenmesi için lütfen sayfayı yenilemeyi unutmayın.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcFxztZPpLG4kUX8JRVKIIwUlZaSDAp0PP__n70MvSZvcAR1vFq9MH26n_S6cGnNoOFRY62GMKPXnTOPApKnH-LzB_jdxOt40v6CssSFLRXFzaX9SdC_-vr_G18TjR_jhptSvYc?key=GOXdnFWCEPJiWEhvnlu4V5mv" alt=""><figcaption></figcaption></figure>

**e) Kullanıcı Engelleme**

İstenmeyen/İletişime geçmek istemediğiniz kullanıcıları engelleme şansı vardır. Kullanıcıyı engelledikten sonra, ilgili kullanıcı arşiv sohbete taşınır. Kullanıcının engeli dilediği zaman kaldırılabilir.\
\
Sağ tarafta bulunan "Engelle" butonu ile ilgili işlem yapılabilir.\ <br>

<figure><img src="/files/YkXSgImZM8lwpjZgQKmL" alt=""><figcaption></figcaption></figure>


# Arşiv Sohbet

Arşiv Sohbet Listesi ekranına erişmek için, sohbet yönetim menüsünde belirtilen menü butonuna tıklanmalıdır.

* Arşivlenmiş konuşmalara yeni etiketler eklenebilir, ancak çözüm sebebi değiştirilemez.
* 24 saatlik konuşma periyodu kapanmadan arşive alınan konuşmalar, tekrar Aktif Sohbet Listesi’ne taşınabilir ve müşteriyle iletişim devam ettirilebilir.
* Arşiv Sohbet Listesi’ndeki bir müşteri tekrar mesaj attığında, sohbet otomatik olarak Aktif Sohbet Listesi’ne taşınır.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXe09jQO0ulfOllHc8mdzwZeZRw6o4mdGqwjlG27Xm0UVtGwI2gU0CGw5tEmYAFxESCUNihiYa32OBjBhPGa-x_MmuUyv4tPFM2QG3italTZgZN1snAcUgwxFTMs8MmzW1CuKikOoA?key=GOXdnFWCEPJiWEhvnlu4V5mv" alt=""><figcaption></figcaption></figure>

#### a)  Arşiv Sohbetlerinden Aktif Sohbete Taşıma

* 24 saatlik konuşma periyodu içinde arşive alınan konuşmalar, ilgili buton kullanılarak tekrar Aktif Sohbet Listesi’ne taşınabilir.
* 24 saatlik süreyi aşan sohbetler için bu buton görüntülenmez.
* Tekrardan aktife taşımak için kullanıcıya şablon mesaj da gönderilebilir.

<figure><img src="/files/5dlM4bipr6Ha6kWcRpVB" alt=""><figcaption></figcaption></figure>

**b) Filtreleme**

Arşivlenmiş sohbetlerde çeşitli filtrelemeler yaparak geçmişe dönük konuşmalara göz atılabilir. Bu filtreleme alanı şuan için Aktif Sohbet listelerinde çalışmaz. Aşağıdaki 4 konu için arşivlenen sohbetler filtrelenebilir.<br>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfDCn3e-QdvAxhjdXdgEC8ZTNXAublX0SY--xE4vX8NF3vhHv84-I6ckUpur5APGKzINJPy7oGFSjQ3YgI2Z76GMPVBW-SPRZAnaP3qD9jkE8vs42JdU3weID_MhyWBVRk1E8Sp1g?key=GOXdnFWCEPJiWEhvnlu4V5mv" alt=""><figcaption></figcaption></figure>

Kullanıcı: Arşive gönderilen sohbetleri kimin gönderdiğine göre filtrelenir. Arşiv ve aktif sohbetler erişilebilir.

Sebep: Hangi sebebe göre arşive kaldırıldığını gösterir. Bu konuşmayı sonlandırırken seçilen sebeptir. Bu alanda aktif-pasif olmasına bakılmaksızın bütün sebeplerler gösterilir.\
\
Etiket: Kullanıcıya eklenen etiketlere göre filtrelenir. Bu alanda tüm etiketler gösterilir.\
\
Tarih: Dilenen tarih aralığında kullanıcılar konuşmalara erişebilir.


# Sohbet Raporu

Sohbet raporları, müşteri temsilcilerinizin (agent) performansını ve WhatsApp üzerinden gelen sohbetlerin istatistiklerini izlemeyi sağlar. Bu sayfadan bekleme süreleri, etiket dağılımları, yoğun saatler gibi verileri takip edebilir ve detaylı raporları indirebilir.<br>

### Sayfaya Erişim

* Sol menüden **Chat > Chat Reports** seçildiğinde, sayfa açılır.
* Açılışta **son 30 gün** verileri varsayılan olarak gösterilir.
* Sağ üstte tarih filtresi kullanarak farklı aralıkları seçebilirsiniz.
* Sol üstte **WhatsApp Hesabı seçimi** yapılabilir:
  * Tek WABA entegrasyonu varsa seçim gerekmez.
  * Birden fazla WABA varsa, varsayılan olarak ilk eklenen hesabın verileri gösterilir.
* **Not:** Tüm veriler, seçilen tarih aralığına göre filtrelenir.

<figure><img src="/files/Vk6V7xeaGX0Cb4VVJ2pN" alt=""><figcaption></figcaption></figure>

### Sayfa Özeti (Künye)

Seçilen tarih aralığı için:

* **Toplam Sohbet Sayısı** (çözülen + çözülmeyen).
  * Arşivden tekrar aktife alınan sohbetler toplam sayıyı artırır.
  * Agentlar arasında sohbet atandığında toplam sayı artmaz.
  * AI’ın yanıtladığı sohbetler toplam sayıya dahil edilmez.
* **Ortalama Bekleme Süresi**
* **En Çok Talep Edilen Konu**
* **En Yoğun Gün**
* **En Yoğun Saat Aralığı** (ilgili tarih aralığındaki sohbetler baz alınarak).\ <br>

  <figure><img src="/files/cvFBPMjo5t7heKLdfAwM" alt=""><figcaption></figcaption></figure>

### Bilgiler

1. **Sohbet Hacim Tablosu**
   * Günlük gelen sohbet sayısını gösterir.
   * **Not:** Ortalama sohbet sayısı hesaplanırken mesaj gelmeyen günler de hesaba katılır.Eğer bir müşteri 2 oturum gerçekleştirdiyse bu 2. oturum da toplama eklenir.\ <br>

     <figure><img src="/files/bdtPWbnV0HcH3ZYWD619" alt=""><figcaption></figcaption></figure>
2. **Bekleme Süresi**
   * Müşterilerin temsilciye aktarılana kadar bekledikleri süreyi günlük ortalama olarak gösterir. AI kullanımı bu süreye dahil edilmez.
   * Format: `1G 18Sa 12dk 37Sn`.\ <br>

     <figure><img src="/files/dq7iNNWjttmKTKxdnAf1" alt=""><figcaption></figcaption></figure>
3. **Talep Konusu Raporu**
   * Hangi konunun kaç defa seçildiğini, en çoktan aza doğru sıralı şekilde gösterir. Eğer bir kullanıcının Talep Konusu değiştirilirse bir önceki konu istatistiklerde kalmaya devam etmez.<br>

     <figure><img src="/files/WLH82ZxQAUafq2qq3xu9" alt=""><figcaption></figcaption></figure>
4. **Etiket Raporu**
   * Sohbetlere eklenen etiketlerin kullanım sıklığını gösterir.
   * **Not:** Bir etiketi sohbetten kaldırırsanız raporlar dinamik olarak güncellenir (indirme dahil).\ <br>

     <figure><img src="/files/EqmtUQSLok4YKPpUPT9k" alt=""><figcaption></figcaption></figure>
5. **Yoğun Saatler**

   * Haftanın günleri (dikeyde) ve günün 24 saati (yatayda) gösterilir.
   * Renk skalası ile yoğunluk belirtir (daha koyu renk = daha fazla sohbet).
   * **Not:** Bu rapor haftalık bazda gösterilir.

   <figure><img src="/files/YPVU68efycCvSMsrQ2pB" alt=""><figcaption></figcaption></figure>

### Raporu E-posta ile Alma

Sayfanın en altında:

* **“Raporu Gönder”** butonuna basarak, seçilen tarih aralığına ait detaylı rapor CSV olarak kayıtlı e-posta adresinize gönderilir.
* Başarılı gönderim sonrası bilgilendirme mesajı görünür.

CSV’de yer alan veriler:

* Chat ID
* Create Date
* Last Message Date
* Restart Count
* First Response Date
* Resolved Date
* Phone Number
* Name (WhatsApp adı)
* Reason
* Tags
* **Not:** 24 saat sonunda otomatik arşivlenen sohbetler *“Auto Arşiv”* reason’ı ile işaretlenir ve arşive taşındığı tarihe göre kaydedilir.


# Kullanıcı Raporları

Kullanıcı raporları, her bir müşteri temsilcisinin (agent) performansını ölçmenizi sağlar.

#### Sayfa Özellikleri

* Tarih filtresi (varsayılan son 30 gün).

#### Gösterilen Veriler

* **Kullanıcı Adı**
* **Ortalama İlk Yanıt Süresi** (sohbet atandıktan sonra ilk yanıtın ortalaması).
* **Ortalama Çözüm Süresi** (sohbetin arşive taşınma süresi, yeniden aktife alınanlar dahil).
* **Atanan Konuşmalar** (ilgili temsilcinin yönlendirilenler dahil).
* **Çözülen Konuşmalar** (ilgili temsilcinin arşivlediği sohbetler).
  * **Not:** 24 saat sonunda otomatik arşivlenen sohbetler, *“Çözülen Konuşma”* sayısına dahil edilmez.
* **Arşivden Aktife Taşınanlar**
* **Yönlendirilen Konuşmalar**

#### Rapor İndirme

* Sayfanın en altında “Raporu Gönder” butonu ile seçilen tarih aralığındaki tüm veriler CSV olarak e-posta adresinize gönderilir.
* CSV sütunları: Kullanıcı Adı, Ortalama İlk Yanıt Süresi, Ortalama Çözüm Süresi, Atanan Konuşmalar, Çözülen Konuşmalar, Arşivden Aktife Taşınanlar, Yönlendirilen Konuşmalar.\ <br>

  <figure><img src="/files/m9z06MAy0eiPaheXqMiS" alt=""><figcaption></figcaption></figure>


# Kokpit

Kokpit, müşteri temsilcilerinin anlık durumlarını ve performanslarını gösterir.

* Sadece **root hesaplar** erişebilir.
* Veriler **her gün sonunda sıfırlanır**.\ <br>

  <figure><img src="/files/aWLqWVwXvlOO4JF2FOep" alt=""><figcaption></figcaption></figure>

#### Özellikler

* WhatsApp hesabı seçimi (birden fazla WABA varsa seçim yapılabilir).
* Agentlar statülerine göre gruplanır:
  * Çevrimiçi
  * Mola
  * Görünmez
  * Çevrimdışı (kapalı görünür, tıklanınca açılır).

#### Gösterilen Veriler

* Kullanıcı adı
* Kullanıcı durumu (root admin değiştirilebilir)
  * Çevrimdışı bir agentın durumu değiştirilemez.
  * Durum değişikliği sonrası veriler sıfırlanmaz, sadece gün sonu tüm veriler sıfırlanır.
* Ortalama İlk Yanıt Süresi (günlük, anlık).
* Ortalama Çözüm Süresi (günlük, anlık).
* Aktif Konuşmalar.
* Çözülen Konuşmalar.
* Arşivden Aktife Taşınanlar.
* Yönlendirilen Konuşmalar.


# WhatsApp Mesaj Şablonları

Hesap güncellemeleri, kargo takip, randevu hatırlatıcıları, müşteri hizmetleri ve daha pek çok kategoride bildirim göndermek için WhatsApp mesaj şablonları kullanılır. Bu mesajlar Meta tarafından önceden onaylanır. Onaylandıktan sonra gönderebilirsiniz. Şablon mesajların bazı özellikleri şunlardır;

* Müşteriye atılan ilk mesaj sadece şablon mesaj şeklinde olabilir. Müşteri cevap verirse  24 saatlik bir konuşma başlatılmış olur. Her mesaj 24 saatlik süreyi yeniden başlatmış olur.
* Müşteri şablon mesaja cevap vermezse, 24 saatlik süre sona erer ve yeni bir şablon mesaj atmanız gerekir.
* Eğer müşteri Instagram veya Facebook reklamları üzerinden size ulaştıysa bu süre 24 saatten 72 saate yükseltilir.
* Çok sayıda müşteri bir şablon mesajı rapor eder veya engellerse, Meta şablon mesajı 3 saatliğine kullanıma durdurur.

## WhatsApp mesaj şablonları oluştururken dikkat edilmesi gerekenler

WhatsApp mesaj şablonları oluştururken akılda tutulması gereken birtakım durumlar mevcuttur. Örneğin;

* Onay süreci şablondan şablona göre değişiklik gösterir. Bazı mesajlar birkaç dakika içinde onaylanırken bazıları 48 saati bulabilir. Müşterilere göndermek istediğiniz tüm şablonlar WhatsApp tarafından onaylanmalıdır.
* Mesajlarınız yazım yanlışları ya da dilbilgisi sorunları içeriyorsa spam veya güvenilmez olarak işaretlenebilir. Şablonlarınızı onaya göndermeden önce olası yazım hatalarını kontrol ettiğinizden emin olmalısınız. Spam içerikli olduğu şüpheli durumlarda Meta hesabınızı 3 günlüğüne kapatabilir. Spam veya dolandırıcı mesaj içeriklerini müşterilerinize gönderemeyin.
* WhatsApp mesaj şablonu seçilen dilde olmalıdır. Örneğin, şablon dilini Türkçe olarak ayarladığınız mesajlara farklı dilde kelimeler girerseniz şablonunuz onaylanmayacaktır.
* Yanlış veya hatalı değişkenler de redde yol açabilir. Değişkenlerinizi iki süslü parantezin içine (ör. {{1}}, {{2}} vb.) aldığınızdan emin olun.
* İki değişkeni yan yana yazmayın. Aralarında en az bir kelime olduğundan emin olun.&#x20;
* Değişken parametrelerini ardışık yazın.  {{1}}, {{2}}, {{4}}, {{5}} gibi kullanımlar hatalı kabul edilebilir.

## WhatsApp Mesaj Şablonu Oluşturma

Bir WhatsApp Mesaj Şablonu oluşturabilmek için öncelikle Desk360 hesabınızla oturum açmanız ve kurulumu tamamlanmış en az 1 WhatsApp Hesabına sahip olmanız gerekir. Sol menüden Mesaj Şablonları butonuna basarak şablon mesajlarınızı görebileceğiniz, yönetebileceğiniz ve yeni mesaj şablonu oluşturabileceğiniz sayfaya erişebilirsiniz.

Sadece 1 WhatsApp hesabı kurulumu yaptıysanız mesaj şablonunuz direkt olarak listelenecektir. Ancak birden fazla WhatsApp hesabınız varsa öncelikle işlem yapmak istediğiniz WhatsApp hesabını seçmeniz gerekir.

Açılan sayfada sağ kısımda bulunan “Şablon Oluştur” butonuna basarak yeni bir Mesaj Şablonu oluşturmaya başlayabilirsiniz.

<figure><img src="/files/TtiqDshD7L14eeVFjEx9" alt=""><figcaption></figcaption></figure>

Bu ekranda yapmanız gereken 3 işlem vardır; Kategori seçimi, isimlendirme ve dil seçimi. Alanlarından tamamının doldurulması zorunludur.

**Kategori seçimi:** Bu alanda şablon mesajınızın içeriğine en uygun olan kategoriyi seçmelisiniz. Doğru olmayan kategori seçimlerinde mesaj şablonuz Meta tarafından reddedilebilir. Kategoriler ile ilgili daha fazla bilgi için [buraya](https://developers.facebook.com/docs/whatsapp/updates-to-pricing/new-template-guidelines) tıklayabilirsiniz.

* Pazarlama: İndirim, karşılama, randevu hatırlatması gibi durumlarda seçilen mesaj türüdür.
* Bilgilendirme: Devam eden işlemler, satın alma sonrası bildirimler ve/veya yinelenen faturalandırma ihtiyaçlarında kullanabilirsiniz.
* Kimlik Doğrulama: Birden fazla adımda tek seferlik kimlik teyit mesajı olarak kullanılır. (Şuanda kullanıma açık değil)

**İsim:** Bu alanda şablonunuza bir isim vermeniz gerekir. İsim alanı için dikkat edilmesi gereken noktalar:

* Yalnızca küçük harf, ingilizce karakterler ve özel karakterlerden "\_" kullanılabilir.
* &#x20;İsim alanına girilecek karakter sayısı maksimum 512 olmalıdır.
* Bir mesaj şablonuna “test” ismi verilemez.
* Silinen bir şablon mesajın ismini tekrar kullanmak mümkün değildir.

**Dil:** Bu alanda en az 1 dil seçimi yapmalısınız. Birden fazla dil seçimi de yapabilirsiniz.\
\
Bu 3 alanı da doldurduktan sonra sağ üst köşede bulunan “Devam Et” butonuna basarak mesaj şablonunuzun içeriğini oluşturabileceğiniz sayfaya erişebilirsiniz.

## Mesaj Şablonu İçerik Oluşturma

<figure><img src="/files/Kjxsu6tWjLmnuMYcUGZM" alt=""><figcaption><p>Örnek bir mesaj şablonu</p></figcaption></figure>

**Başlık:** Bu alan isteğe bağlıdır. Şablonunuza bir başlık eklemek istemiyorsanız seçim yapmayabilirsiniz. Bu alan için 3 farklı seçim yapabilirsiniz. Bunlar sırasıyla: Hiçbiri, Metin ve Medya’dır.

* Hiçbiri: Başlık kullanmak istemiyorsanız bu seçenek seçili olmalıdır.
* Metin: Şablonunuza başlık olarak bir metin eklemek istiyorsanız bu seçimi yapabilirsiniz. Maksimum 60 karakter girişi yapabilirsiniz. Sağ alt köşede bulunan “Değişken Ekle” butonu ile metninize değişken tanımlayabilirsiniz. Değişken karakter sayısı da 60 karakterlik kullanım limitine dahildir.
* Medya: Bu seçimi yaptığınızda şablonunuza başlık olarak görsel, video ya da belge ekleyebilirsiniz. Bu alana ekleyeceğiniz medya mutlaka örnek olmalıdır, herhangi bir müşteri verisi içermemelidir. Medyaların aslını şablon onaylandıktan sonra mesajınızı müşterilerinize gönderirken yüklemeniz gerekir.\
  Görsel seçiminde desteklenen dosya türleri JPG, JPEG ve PNG’dir. Video seçiminde desteklenen dosya türü MP4’tür. Doküman seçiminde desteklenen dosya türü ise PDF’dir.

<figure><img src="/files/UiFsNcobx2oUOrViWwdL" alt=""><figcaption></figcaption></figure>

**Gövde:** Giriş yapılması zorunlu alandır, boş bırakılamaz. Bu alana şablon mesajınızın içeriğini yazabilirsiniz. Yazacağınız içerik müşterilerinize göndereceğiniz mesajın aslını içermelidir. Giriş yapabileceğiniz maksimum karakter sayısı 1024’tür. Bu alana değişkenler ekleyebilirsiniz. Değişkeninizin karakter sayısı da kullanabileceğiniz maksimum karakter limitine dahildir. Gövde alanına ekleyeceğiniz içerik bir değişken ile başlamamalı ve bitmemelidir.

<figure><img src="/files/QthAqPlSwvbBjpRZNGOG" alt=""><figcaption></figcaption></figure>

**Alt Bilgi:** Bu alan isteğe bağlıdır. Şablonunuza bir alt bilgi ya da imza eklemek istiyorsanız bu alanı kullanabilirsiniz. Bu bölüm yalnızca metin destekler, maksimum 60 karakterden girişi yapılabilir ve herhangi bir değişken eklenemez.

<figure><img src="/files/n5et5yfjcnXx5qSX3YRZ" alt=""><figcaption></figcaption></figure>

**Butonlar:** Bu alan isteğe bağlıdır. Şablonunuza buton ekleyerek müşterilerinizin mesajınıza cevap vermesini ya da aksiyon almasını sağlayabilirsiniz. Mesajınıza en fazla 10 adet buton ekleyebilirsiniz. Butonlar 2’ye ayrılır; Hızlı Yanıt ve Eylem Çağrısı.&#x20;

* Hızlı Yanıt Butonları: Özel buton seçeneğini içerir.\
  Özel buton ile belirleyeceğiniz metinleri içeren butonlar oluşturabilirsiniz. En fazla 25 karakter girişi yapabilirsiniz ve 10 adet ekleyebilirsiniz.
* Eylem Çağrısı Butonları: İnternet sitesini ziyaret et ve Telefon numarasını Ara olarak 2 farklı buton türünü içerir.\
  İnternet sitesini ziyaret et butonuyla müşterilerinizi belirli internet adreslerine yönlendirebilirsiniz. Butona maksimum 25 karakter uzunluğunda metin girişi yapabilirsiniz ve vereceğiniz url maksimum 2000 karakter içerebilir. Url’nin başına https\:// eklemeyi unutmayınız.\
  Telefon numarasını ara butonuyla müşterilerinizin belirleyeceğiniz telefon numarasını aramasını sağlayabilirsiniz. Butona maksimum 25 karakter uzunluğunda metin girişi yapabilirsiniz.

<figure><img src="/files/Bv2T2Q28QZF36kXWNNs3" alt=""><figcaption></figcaption></figure>

**Dil Ekleme/Çıkarma:** Sayfanın sol bölümünde bulunan Dil alanından yeni bir dil ekleyebilir ya da var olan bir dili silebilirsiniz. Şablonlar her dil için ayrı ayrı onay sürecine girer. Örneğin İngilizce ve Türkçe olarak 2 farklı dilde hazırladığınız şablonun İngilizcesi onaylanırken Türkçesi reddedilebilir. Onay süreci ile ilgili daha detaylı bilgi almak için WhatsApp Mesaj Şablonları sayfasını ziyaret edebilirsiniz.

**Mesaj Ön İzleme:** Sayfanın sağ bölümünde bulunan Mesaj Ön İzleme alanından, mesajınız ile ilgili yaptığınız tüm değişiklikleri anlık olarak aşağıdaki gibi ön izleme şeklinde görüntüleyebilirsiniz.

<figure><img src="/files/9EvGFbiIxC1Q6ErBdkln" alt="" width="283"><figcaption></figcaption></figure>

**Onaya Gönderme:** Sağ kısımda bulunan “Gönder” butonu ile hazırladığınız mesaj şablonunu onaya gönderebilirsiniz. Şablon onaylanırsa hemen kullanıma başlayabilir ve müşterilerinize gönderebilirsiniz. Ancak onaylanmayan şablonlarda hiçbir şekilde gönderim yapamazsınız.

## Mesaj Şablonu Düzenleme

Daha önce oluşturduğunuz bir WhatsApp mesaj şablonunu düzenlemek için Desk360 hesabınızda oturum açtıktan sonra sol menüden “Mesaj Şablonları” butona basmalısınız.

Eğer sadece 1 WhatsApp hesabı kurulumu yaptıysanız mesaj şablonlarınız direkt olarak listelenecektir. Ancak birden fazla WhatsApp hesabınız varsa öncelikle işlem yapmak istediğiniz WhatsApp hesabını seçmeniz gerekir.

Listelenen mesaj şablonlarının sağında bulunan düzenleme (kalem ikonu) butonuna basarak mesaj şablonunuzu düzenleyebilirsiniz.

Düzenlemeniz tamamlandığı zaman ekranın sağ kısmında bulunan “Gönder” butonu ile şablonunuzu Meta’nın değerlendirmesi için gönderebilirsiniz. Gönderdikten sonra şablonunuzun statüsü "Pending" olarak güncellenecektir. Eğer talebiniz reddedilirse şablon mesajınızı tekrar düzenleyerek yeniden Meta’nın onayına gönderebilirsiniz.

Bir mesaj şablonu 24 saat içerisinde sadece 1 kere düzenlenebilir.

## Mesaj Şablonu Silme

Daha önce oluşturduğunuz bir WhatsApp mesaj şablonunu silmek için Desk360 hesabınızda oturum açtıktan sonra sol menüden “Mesaj Şablonları” butona basmalısınız.

Eğer sadece 1 WhatsApp hesabı kurulumu yaptıysanız mesaj şablonlarınız direkt olarak listelenecektir. Ancak birden fazla WhatsApp hesabınız varsa öncelikle işlem yapmak istediğiniz WhatsApp hesabını seçmeniz gerekir.

Listelenen mesaj şablonlarının sağında bulunan silme (çöp kutusu ikonu) butonuna basarak mesaj şablonunuzu silebilirsiniz.\
\
Önemli notlar:   &#x20;

* Silmek istediğiniz mesaj şablonu birden fazla dil içeriyorsa tüm dillerdeki mesajlarınız silinecektir.
* Silinen mesaj şablonun adı tekrar kullanılamaz.

Eğer birden fazla dilde hazırladığınız bir şablonun yalnızca tek dildeki içeriğini silmek istiyorsanız, listelenen mesaj şablonlarının sağında bulunan düzenleme (kalem ikonu) butonuna basarak bu işlemi yapabilirsiniz. Silmek için, karşınıza açılan mesaj şablonu düzenleme ekranında sol kısımda bulunan Dil alanını kullanabilirsiniz.

## Mesaj Şablonu Gönderme

Önceden oluşturduğunuz ve onaylanmış olan bir mesaj şablonunu müşterilerinize göndermek için Desk360 hesabınızda oturum açtıktan sonra sol menüden “Mesaj Şablonları” butona basmalısınız.

Eğer sadece 1 WhatsApp hesabı kurulumu yaptıysanız mesaj şablonlarınız direkt olarak listelenecektir. Ancak birden fazla WhatsApp hesabınız varsa öncelikle işlem yapmak istediğiniz WhatsApp hesabını seçmeniz gerekir.

Listelenen mesaj şablonlarının sağında bulunan gönderme (ok ikonu) butonuna basarak mesaj şablonu gönderme sayfasına erişebilirsiniz.

Mesaj Şablonu gönderim seçenekleri 2’ye ayrılır. Bunlar: Tekli Gönderim ve Çoklu Gönderimdir.

**Tekli Gönderim:** Açılan sayfanın sağ üst köşesinde bulunan “Tekli Gönderim” seçeneği ile aynı mesajı, metninizdeki değişkenleri ve medyalarını değiştirerek bir veya birden fazla numaraya aynı anda gönderebilirsiniz. Telefon numarasının ekleneceği kısma numarasını mutlaka ülke kodunuzu giriniz. Eğer mesajınızda bir değişken veya medya varsa, o alanları da eksiksiz olarak doldurmanız gerekir.

<figure><img src="/files/V2lh8qvK4AhUyj7xWml5" alt=""><figcaption></figcaption></figure>

**Çoklu Gönderim:** Açılan sayfanın sağ üst köşesinde bulunan “Çoklu Gönderim” seçeneği ile aynı mesajı, birden fazla telefon numarasına aynı değişkenler ve aynı medya ile gönderebilirsiniz. Ayın anda maksimum 1000 telefon numarasına gönderim yapabilirsiniz.

Çoklu gönderim için 2 farklı yöntem vardır. İlk yöntem, CSV Dosyası alanından örnek bir .csv dosyası indirerek, indirdiğiniz dosyaya gönderim yapacağınız telefon numaralarını ve değişkenlerinizi kaydedebilir ve ardından aynı dosyayı yükleyerek toplu gönderim yapabilirsiniz. İkinci yöntem ise, telefon numaralarını “Manuel Yükleme” alanından tek tek girebilir ve hemen altında bulunan değişken ve medya yükleme alanına değişkenlerini girebilir ve medyalarını yükleyebilirsiniz.

<figure><img src="/files/Vwk7Cacq6DRXFWN0AyYt" alt=""><figcaption></figcaption></figure>

**Kategori ve Etiket ile Gönder**: [Veri Yükle](https://whatsapp-tr.desk360.com/veri-yukleme) alanından seçtiğiniz kategorilerinize şablon mesajı göndermek için ilgili seçenek seçilir. Ayrıca seçtiğiniz belli etiketlere gönderim sağlarken seçtiklerinize göndermeme seçeneği bulunur.&#x20;

* "Kategori" → Veri Yükle alanından oluşturulan kategoriyi seçmesi sağlanır
* "Mesaj Gönderilecek Etiketler" → hedef kitlenizi seçmeyi sağlar.
* "Mesaj Gönderilmeyecek Etiketler" → hariç tutmak istenen kişileri filtreler.\
  \
  \
  Örneğin, **“Ağustos Ayı Kampanya Listesi”** adıyla **10 kişilik** bir kategori oluşturuldu.
* Bu listedeki tüm numaralara **“Kampanya”** etiketi eklendi.
* Ancak bu kişilerin **2’sinde** daha önce verilmiş olan **“İletişime Geçilmesin”** etiketi bulunuyor.
* Mesaj gönderiminde, **“Mesaj Gönderilmeyecekler”** listesinden **“İletişime Geçilmesin”** etiketi seçildiğinde, bu 2 kişi otomatik olarak hariç tutuluyor.
* Böylece, mesaj toplamda **8 kişiye** gönderilmiş oluyor. <br>

<figure><img src="/files/GRFgYS35NQ5UABUFdH03" alt=""><figcaption></figcaption></figure>

**Etikete Gönder:** Şimdiye kadar etiket eklenen tüm numaraları kapsayacak şekilde belli etiketlere gönderim yapılıp yapılmamasını sağlar.<br>

* "Mesaj Gönderilecek Etiketler" → hedef kitlenizi seçmenizi sağlar.
* "Mesaj Gönderilmeyecek Etiketler" → hariç tutmak istediğiniz kişileri filtreler.

\
Bir işletmenin toplamda **100 kişiyle** iletişime geçtiğinde;

* Bu kişilerin **60’ı "Kadın" etiketi** ile işaretlenmiştir.
* **“Mesaj Gönderilecek Etiketleri Seçin”** alanından **"Kadın"** seçildiğinde, mesaj yalnızca bu 60 kişiye gönderilir.

Ek olarak:

* Bu 60 kişinin **30’unda ayrıca "İletişime Geçilmesin" etiketi** bulunuyorsa,
* **“Mesaj Gönderilmeyecek Etiketleri Seçin”** alanından **"İletişime Geçilmesin"** seçildiğinde, bu kişiler hariç tutulur.

**Sonuç:** Mesaj toplamda **30 kişiye** iletilir.

<figure><img src="/files/3QiYyCkjXb93EyC8VQQ7" alt=""><figcaption></figcaption></figure>

&#x20;                                                     [<mark style="color:blue;">**Ana Sayfa**</mark>](https://desk360.com/tr)                                          [<mark style="color:blue;">**Fiyatlandırma**</mark>](https://desk360.com/tr/fiyatlandirma)


# Şablon Mesaj Künyesi

### Özet

Gönderim Özeti, Desk360 üzerinden gönderdiğiniz her WhatsApp şablon mesajına otomatik olarak eklenen bir istatistik panelidir. Mesajın kaç kişiye ulaştığını, kaç kişinin okuduğunu, hangi butonlara tıklandığını ve mesajı kimin gönderdiğini tek bir ekranda görmenizi sağlar.

***

### Gönderim Özeti Ne Gösterir

Panel, gönderilen her şablon mesaj için aşağıdaki bilgileri sunar:

| Alan                         | Açıklama                                                                                                                                                                                                                                                                        |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Şablon Adı**               | Kullanılan WhatsApp mesaj şablonunun adı.                                                                                                                                                                                                                                       |
| **Gönderim Tarihi ve Saati** | Mesajın gönderildiği tarih ve saat.                                                                                                                                                                                                                                             |
| **Dil**                      | Şablonun gönderildiği dil.                                                                                                                                                                                                                                                      |
| **Gönderen**                 | Mesajı gönderen kullanıcı veya hesabın adı. Kullanıcı adı yoksa e-posta adresi gösterilir. İlgili kullanıcı sistemden silinse dahi bu bilgi kaybolmaz; gösterilmeye devam eder.                                                                                                 |
| **Alıcı Sayısı**             | Mesajın gönderildiği toplam kişi sayısı.                                                                                                                                                                                                                                        |
| **İletilme Oranı**           | Mesajı başarıyla alan alıcıların yüzdesi.                                                                                                                                                                                                                                       |
| **Okunma Oranı**             | Mesajı açıp okuyan alıcıların yüzdesi.                                                                                                                                                                                                                                          |
| **Tıklanan Butonlar**        | Toplam tıklama sayısı ve her butona ait tıklama dağılımı tooltip olarak gösterilir (örn. 1. Buton: %35, 2. Buton: %20, 3. Buton: %45). Şablonun buton metni daha sonra değiştirilmiş olsa bile, o mesaj için geçmişte kullanılan buton metni korunarak gösterilmeye devam eder. |

***

### Gönderim Özetini Rapor Olarak Dışa Aktarma

Gönderim Özeti verilerini rapor dosyası olarak dışa aktarabilirsiniz. Dışa aktarılan rapor, yukarıdaki tüm alanları içermenin yanı sıra ek bir kolon daha sunar:

#### `clickedButton` Kolonu

Rapor dışa aktarıldığında her satır bir alıcıyı temsil eder. `clickedButton` kolonu, o alıcının **ilk tıkladığı butonun metin etiketini** gösterir.

* Alıcı bir butona tıkladıysa → kolonda butonun metin etiketi görünür.
* Alıcı hiçbir butona tıklamadıysa → kolon boş bırakılır.

Bu sayede alıcıları aldıkları aksiyona göre kolayca filtreleyebilirsiniz — örneğin "Evet, ilgileniyorum" butonuna tıklayanları, tıklamayanlardan ayırt etmek için.

***

### Notlar ve Sınırlamalar

* Gönderim Özeti, **tüm** gönderilen şablon mesajlarında görünür — tek kişiye ya da toplu olarak gönderilmiş olmasından bağımsız.
* İletilme ve okunma oranı verileri WhatsApp'ın raporlamasına bağlıdır. Alıcı okundu bildirimini kapattıysa bu durum okunma oranına yansır ve oran daha düşük görünebilir.
* Buton tıklama verileri, tıklamanın gerçekleştiği andaki buton metnine göre kaydedilir. Şablon daha sonra güncellenmiş olsa bile eski mesajlar için orijinal buton metni gösterilmeye devam eder.
* `clickedButton` kolonu yalnızca her alıcının **ilk tıkladığı** butonu kaydeder. Sonraki tıklamalar ayrıca kayıt altına alınmaz.
* Gönderen bilgisi kalıcı olarak saklanır. Mesajı gönderen kullanıcının hesabı Desk360'tan silinmiş olsa bile, o kullanıcının adı veya e-posta adresi ilgili mesajların Gönderim Özetinde gösterilmeye devam eder.

***

### Sıkça Sorulan Sorular

**S: Gönderim Özeti hem tekil hem de toplu gönderilen şablon mesajlarında çalışıyor mu?** C: Evet. Mesajın nasıl gönderildiğinden bağımsız olarak, tüm gönderilen şablon mesajlarında otomatik olarak görünür.

**S: Alıcı mesajı almadıysa iletilme oranı etkilenir mi?** C: Evet. Mesajı almayan alıcılar iletilme oranına dahil edilmez. Alıcı Sayısı ile İletilme Oranı'nı karşılaştırarak kaç kişiye ulaşılamadığını görebilirsiniz.

**S: Okunma oranım neden iletilme oranımdan düşük?** C: Bu normaldir. Okunma oranı yalnızca mesajı açıp okuyan alıcıları sayar. Alıcı mesajı almış ancak açmamışsa ya da WhatsApp'ta okundu bildirimini kapattıysa okunma oranına dahil edilmez.

**S: Hangi kişinin hangi butona tıkladığını görebilir miyim?** C: Evet — raporu dışa aktarın ve `clickedButton` kolonunu kullanarak her alıcının ilk tıkladığı butonu bireysel olarak görebilirsiniz.


# Şablon Mesaj İstatistikleri

### Özet

Şablon Mesaj İstatistikleri sayfası, gönderdiğiniz herhangi bir WhatsApp şablon mesajının performansını tek ekranda görmenizi sağlar. Teslimat ve okunma oranlarını takip edebilir, buton etkileşimlerini analiz edebilir, hata dağılımlarını inceleyebilir ve tüm verileri seçtiğiniz tarih aralığına göre filtreleyerek dışa aktarabilirsiniz.

***

### Kimler İçin

WhatsApp şablon mesajı gönderen ve bu mesajların nasıl performans gösterdiğini takip etmek isteyen tüm Desk360 kullanıcıları için uygundur: destek ekibi liderleri, kampanya yöneticileri ve müşteri deneyimi yöneticileri.

***

### Nasıl Erişilir

1. Sol navigasyon menüsünden **Şablon Mesaj Yönetimi** bölümüne gidin.
2. **Şablon Mesajları** sayfasını açın.
3. Listeden analiz etmek istediğiniz şablonu bulun.
4. O şablonun satırındaki istatistik tıklayın.

Seçilen şablonun İstatistikler sayfası açılır. Tarih aralığı otomatik olarak **Son 30 gün** olarak gelir.

> Seçilen şablon daha önce hiç gönderilmediyse istatistik yerine boş durum ekranı gösterilir.

***

### Tarih Aralığı Filtreleme

Sayfanın üst kısmındaki **tarih aralığı dropdown menüsünü** kullanarak sayfadaki tüm istatistikleri filtreleyebilirsiniz.

Kullanılabilir seçenekler:

| Seçenek     | Ne gösterir                                     |
| ----------- | ----------------------------------------------- |
| Son 7 gün   | Geçmiş 7 gün                                    |
| Son 30 gün  | Geçmiş 30 gün *(varsayılan)*                    |
| Son 90 gün  | Geçmiş 90 gün                                   |
| Özel aralık | Başlangıç ve bitiş tarihini manuel olarak seçin |

Tarih aralığını değiştirdiğinizde sayfadaki tüm metrikler, grafikler ve tablolar otomatik olarak güncellenir.

***

### Üst Seviye Metrik Kartlar

Sayfanın üst kısmında, seçilen döneme ait maliyet özetini anlık olarak sunan üç kart bulunur:

| Kart                     | Ne gösterir                                      | Örnek format |
| ------------------------ | ------------------------------------------------ | ------------ |
| **Harcanan Tutar**       | Bu dönemde gönderilen mesajların toplam maliyeti | 12,5 B       |
| **Mesaj Başına Ücret**   | Gönderilen her mesajın birim maliyeti            | $0,01        |
| **Tıklama Başına Ücret** | Alınan her buton tıklamasının birim maliyeti     | $0,40        |

Her kartın yanında bir **ⓘ bilgi ikonu** bulunur. Tıkladığınızda o metriğin nasıl hesaplandığını açıklayan bir tooltip görüntülenir.

***

### Performans Metrikleri

Performans bölümü iki sekmeye ayrılmıştır: **Eğilim** ve **Huni**.

#### Eğilim Sekmesi

Seçilen dönem için her temel metriğin toplam hacmini gösterir:

| Metrik                     | Ne sayar                                          |
| -------------------------- | ------------------------------------------------- |
| **Gönderilen Mesajlar**    | Gönderilen toplam şablon mesajı sayısı            |
| **Teslim Edilen Mesajlar** | Alıcıya başarıyla ulaşan mesajlar                 |
| **Okunan Mesajlar**        | Alıcı tarafından açılıp okunan mesajlar           |
| **Tıklamalar**             | Teslim edilen mesajlardaki toplam buton tıklaması |

> **Not:** Şablon herhangi bir buton içermiyorsa Tıklamalar metriği gösterilmez.

#### Huni Sekmesi

Mesaj yolculuğunun her aşaması arasındaki dönüşüm oranlarını gösterir:

```
Gönderilen Mesajlar     %100
         ↓
Teslim Edilen Mesajlar   %46
         ↓
Okunan Mesajlar          %56
         ↓
Tıklamalar               %10
```

Her yüzde, bir önceki aşamaya göre oranı ifade eder. Alıcıların hangi noktada akıştan çıktığını belirlemek için bu görünümü kullanabilirsiniz.

***

### Zaman Serisi Grafiği

Metrik kartlarının altında, seçilen tarih aralığında temel metriklerin zaman içinde nasıl değiştiğini gösteren bir çizgi grafik bulunur.

**Grafikte gösterilenler:**

| Çizgi                  | Metrik                    | Renk    |
| ---------------------- | ------------------------- | ------- |
| Gönderilen mesajlar    | Güne göre toplam gönderim | Sarı    |
| Teslim edilen mesajlar | Güne göre toplam teslimat | Kırmızı |
| Okunan mesajlar        | Güne göre toplam okunma   | Mavi    |

**Nasıl kullanılır:**

* Grafik üzerinde herhangi bir noktanın üzerine gelin; o tarihe ait tam değeri görüntüleyin.
* Grafiğin üst kısmındaki **legend** ile her çizginin hangi metriği temsil ettiğini takip edebilirsiniz.
* X ekseni seçilen tarih aralığını, Y ekseni ise mesaj sayısını gösterir.

***

### Hata Mesajları Analizi

**Hata Mesajları** bölümü, bazı mesajların neden teslim edilemediğini kategorilere ayırarak gösterir. İki sekmeye ayrılmıştır:

#### Özet Sekmesi

Her hata kategorisi bir progress bar olarak gösterilir; hem sayısı hem de toplam hatalara oranı görsel olarak belirtilir.

Sık karşılaşılan hata kategorileri:

| Hata                                           | Açıklama                                                                               |
| ---------------------------------------------- | -------------------------------------------------------------------------------------- |
| **Mesaj iletilemez**                           | Mesaj, alıcının numarasına teslim edilemedi                                            |
| **Ekosistem sağlığı: mesaj teslimi seçilmedi** | WhatsApp'ın ekosistem kalite kontrolleri kapsamında bu mesaj teslim edilmemeye seçildi |
| **Kullanıcı numarası bir deneyin parçası**     | Alıcının numarası, teslimatı etkileyen bir WhatsApp tarafı testine dahil edildi        |

Progress bar'lar yeşil tonlarında gösterilir; bar ne kadar koyuysa o hata türünün oranı o kadar yüksektir.

#### Eğilim Sekmesi

Hata hacimlerinin zaman içinde nasıl değiştiğini, sayfanın geri kalanıyla aynı tarih aralığını kullanarak gösterir.

***

### Buton Tıklama Analizi

Şablonunuz buton içeriyorsa bu bölüm, alıcıların butonlarla nasıl etkileşime geçtiğini gösterir. İki sekmeye ayrılmıştır:

#### Tablo Görünümü

Her satır, şablondaki bir butonu temsil eder:

| Sütun            | Açıklama                                                                                                         |
| ---------------- | ---------------------------------------------------------------------------------------------------------------- |
| **TAG**          | Butonun tanımlayıcı etiketi                                                                                      |
| **TYPE**         | Buton tipi (örn. İnternet sitesi, Hızlı yanıt)                                                                   |
| **TOTAL CLICKS** | Bu butona yapılan toplam tıklama sayısı                                                                          |
| **TITLE**        | Butonun görüntülenen metin etiketi                                                                               |
| **CLICK RATE**   | Teslim edilen mesajlar içinde bu butona tıklama oranı *(hesaplama: tıklama sayısı ÷ teslim edilen mesaj sayısı)* |

#### Grafik Görünümü

Şablondaki tüm butonlar arasındaki tıklama dağılımının görsel temsili.

***

### Mesaj Önizleme

Sayfanın sağ tarafındaki **Mesaj Önizleme** paneli, şablon mesajınızın alıcılar tarafından WhatsApp'ta nasıl göründüğünü birebir gösterir.

Önizleme şunları içerir:

* Mesajın tam gövde metni
* Etiketleriyle birlikte tüm butonlar
* Mesaj zaman damgası

Bu panel, performans rakamlarını müşterilerinizin gerçekte aldığı mesajla ilişkilendirmenize yardımcı olur.

***

### Başlıca Engelleme Nedeni

Sayfanın sağ alt köşesindeki **Başlıca Engelleme Nedeni** widget'ı, son 30 gün içinde mesajların engellenmesinin veya teslim edilmemesinin en yaygın tek nedenini öne çıkarır.

* Toplam engellenen mesaj sayısı büyük fontla vurgulanır.
* **ⓘ bilgi ikonu** bu metriğin ne anlama geldiğine dair ek bağlam sağlar.

***

### Şablonu Düzenleme

Bir performans sorunu fark edip değişiklik yapmak isterseniz sayfanın üst kısmındaki **Şablonu Düzenle** butonuna tıklayın. Şablon düzenleme ekranına yönlendirilirsiniz. Değişikliklerinizi kaydettikten sonra şablon listesi sayfasına geri dönersiniz.

***

### İstatistikleri Dışa Aktarma

İstatistik verilerini indirmek için sayfanın üst kısmındaki **Dışa Aktar** butonuna tıklayın.

* **Format:** CSV
* **İçerik:** Seçilen tarih aralığına ait metrik verileri

Dışa aktarılan dosya şu formatta adlandırılır: `insights_YYYY-AA-GG_to_YYYY-AA-GG.csv`

***

### Notlar ve Sınırlamalar

* İstatistikler, mesaj adedinden bağımsız olarak gönderilen tüm şablon mesajlarında kullanılabilir — yalnızca bir mesaj gönderilmiş olsa bile.
* Sayfadaki veriler, her sayfa yenilemesinde dinamik olarak güncellenir.
* **Tıklamalar** metriği ve Buton Tıklama Analizi bölümü yalnızca şablon buton içeriyorsa gösterilir.
* **Yanıtlar** metriği şu anda geliştirme aşamasındadır ve henüz kullanılabilir değildir.
* Buton Tıklama Analizi'ndeki Tıklama Oranı şu şekilde hesaplanır: ilgili butona yapılan tıklama sayısı ÷ teslim edilen toplam mesaj sayısı (gönderilen mesaj sayısına göre değil).
* Başlıca Engelleme Nedeni widget'ı, sayfanın geri kalanında seçilen tarih aralığından bağımsız olarak her zaman son 30 günlük veriyi gösterir.

***

### Sıkça Sorulan Sorular

**S: Göz ikonuna tıkladım ama boş bir ekran görüyorum — neden?** C: Seçtiğiniz şablon daha önce hiç gönderilmemiş. İstatistikler yalnızca o şablonla en az bir mesaj gönderildikten sonra görünür.

**S: Teslim edilen mesaj sayısı neden gönderilen mesaj sayısından az?** C: Gönderilen her mesaj başarıyla teslim edilemeyebilir. Alıcının telefonunun kapalı olması, numara sorunları veya WhatsApp ekosistem kontrolleri teslimatı engelleyebilir. Ayrıntılar için Hata Mesajları bölümünü inceleyin.

**S: Tıklamalar bölümü neden görünmüyor?** C: Görüntülediğiniz şablon hiçbir buton içermiyor. Tıklama metrikleri yalnızca buton içeren şablonlarda görünür.

**S: Tıklama Oranı nasıl hesaplanır?** C: Tıklama Oranı = O butona yapılan tıklama sayısı ÷ Teslim edilen mesaj sayısı. Mesajı alan alıcıların ne kadarının o butona tıkladığını ölçer.

**S: İki şablonu yan yana karşılaştırabilir miyim?** C: Bu sayfada değil — her istatistik sayfası tek bir şablon içindir. Başka bir şablonun istatistiklerini görmek için Şablon Mesajları listesine dönüp o şablonun göz ikonuna tıklayın.


# AI Agent Kurulum ve Yapılandırma

## Desk360: AI Agent Müşteri Asistanı Kurulum ve Yapılandırma Rehberi

### Giriş&#x20;

Desk360 tarafından geliştirilen AI Agent, müşteri destek süreçlerini otomatikleştirerek, temsilcilerin iş yükünü azaltmayı ve müşteri deneyimini geliştirmeyi hedeflemektedir. Bu yapay zeka destekli sistem, müşteri temsilcilerinin canlı destek veremediği zamanlarda bile kesintisiz hizmet sunarak, 7/24 erişilebilirlik sağlar.

AI Agent, genişleyen müşteri kitlesiyle daha hızlı ve etkili iletişim kurulmasına olanak tanır. Böylece, müşteri taleplerine anında yanıt verilirken temsilciler, daha karmaşık ve kritik sorunlara odaklanabilir. Bu, hem operasyonel verimliliği artırmakta hem de müşteri memnuniyetini yükseltmektedir.

#### AI Agent'ın Devreye Girdiği Senaryolar

AI Agent kullanımında iki temel senaryo bulunmaktadır:

* Temsilciler offline olduğunda: Eğer müşteri temsilcisi sistemde aktif değilse, AI Agent devreye girerek müşterinin sorularını karşılamakta ve yönlendirmektedir.
* Her zaman aktif mod: AI Agent, müşteri temsilcilerinin çevrim içi olup olmamasına bakılmaksızın her durumda yanıt vermek üzere yapılandırılabilir.

Bu esneklik, kurumların hizmet sürekliliğini sağlamada avantaj sunar.  AI Agent, müşteri ile etkileşimi kesintisiz kılarak, destek deneyimini kesintisiz ve hızlı hale getirir.

### Giriş Ekranı ve Kullanıcı Arayüzü

Desk360 platformunda kullanıcı, henüz bir AI Agent oluşturmadıysa ya da mevcut AI Agent silindiyse, karşısına ChatGPT logosu içeren özel bir giriş ekranı gelir. Başla butonuna basarsa, AI Agent oluşturma sürecine dair adımlaı kullanıcıya açık ve anlaşılır şekilde sunulup ilk adımı olan Genel sekmesine yönlendirilir.

AI Agent oluşturulduktan sonra, kullanıcı arayüzünde beş ana sekmeden oluşan yapı ile karşılaşır:

* Genel: Temel ayarların yapıldığı bölüm.
* Bilgi Havuzu: AI için eğitim verilerinin yüklendiği alan.
* Komut: Yanıtları özelleştirmek için komutların düzenlendiği sekme.
* Temsilci yönlendirmeleri: Anahtar kelimeler tanımlanarak müşteri temsilcisine yönlendirme ayarları yapılır.
* Deneme Alanı: Agent test edilip aktif hale getirilir.

Her sekmede yapılan ayar ve içerikler, "Kaydet ve Devam et" butonuyla kaydedilir ve kullanıcı otomatik olarak bir sonraki sekmeye yönlendirilir.\
\
Ayrıca, AI Agent arayüzünde aktiflik durumu kontrolü yapılabilir; kullanıcı istediği zaman Agent'i aktif veya pasif hale getirebilir. Silme işlemi ise, çöp kutusu ikonuna tıklanmasıyla başlar ve ekranda çıkan onay pop-up’ı ile devam eder. Kullanıcı, silme işlemini onayladığında AI Agent geri dönüşü olmayan şekilde sistemden kaldırılır.

### 1) Genel Sekmesi: AI Agent Temel Ayarları

Genel sekmesi, AI Agent'ın temel çalışma prensiplerinin ve iletişim stilinin belirlendiği kritik bir yapılandırma aşamasıdır. Bu bölümde kullanıcıdan aşağıdaki altı temel ayar yapılması beklenir:

1. WhatsApp Business Hesabı Seçimi\
   AI Agent'ın hangi WhatsApp Business hesabı üzerinden yanıt vereceği bu kısımda seçilir. Kullanıcıya birden fazla WhatsApp Business hesabı tanımlıysa seçim alanı açılır, tek hesap mevcut ise otomatik atanır. Yeni WhatsApp Business hesabı eklendiğinde seçim ekranı tekrar görünür hale gelir.
2. AI Agent Yanıtları\
   AI Agent'ın yanıt verme koşulu burada belirlenir. İki seçenek mevcuttur:

* Her zaman: AI Agent, her zaman müşteriye yanıt verir.
* Sadece operatör çevrimdışıyken: Sadece müşteri temsilcileri çevrim dışıyken yanıt verir.
* Varsayılan ayar Her zaman olarak gelir.

3. Konuşma Tonu (Tone of Voice)\
   AI’nin iletişim tonu seçilir. Mevcut seçenekler Neutral, Friendly ve Formaldir. Kullanıcı deneyimi ve marka kimliği doğrultusunda uygun tonun seçilmesi önemlidir. Varsayılan değer Nötr’dür.
4. Emoji Kullanımı\
   Mesajlarda emoji kullanımı tercihi burada belirlenir. Varsayılan olarak emoji kullanımı kapalıdır. Kullanıcı, müşteriye daha samimi bir iletişim sunmak isterse bu özelliği aktif edebilir.
5. GPT Model Seçimi\
   AI Agent'ın temel dil modeli burada seçilir. Varsayılan olarak GPT-4o Mini modeli atanmıştır. Desk360 tarafından desteklenen farklı modeller liste halinde sunulur ve seçilen modele göre performans ve özellikler değişebilir. Tüm bu ayarların doğru ve bilinçli yapılması, AI Agent'ın hem teknik performansını hem de müşteri ile etkileşim kalitesini doğrudan etkiler. Kullanıcı, her tamamlanan ayarda “Kaydet ve Devam Et” butonuna basarak seçilen tercihlerin kaydedilmesini sağlar ve sonraki yapılandırma adımına geçer.

### 2) Bilgi Havuzu Sekmesi: AI Agent İçin Bilgi Tabanı Oluşturma

Bilgi Havuzu sekmesi, AI Agent'ın doğru, hızlı ve etkili yanıtlar verebilmesi için temel veri kaynağını oluşturur. Bu bölümde kullanıcılar, çeşitli veri türleri ekleyerek AI’ın eğitimini sağlar ve müşteri taleplerine yönelik bilgi kapasitesini artırır.\
\
Eklenen tüm bilgiler, AI Agent'ın algoritması tarafından işlenir ve yanıt üretiminde kullanılır. Doğru ve çeşitli veri kaynakları sunmak, AI’ın müşteri taleplerini daha iyi anlamasına ve hızlı çözüm üretmesine olanak tanır. Esneklik sağlayarak farklı veri formatlarının yüklenebilmesi, kullanıcıların kendi sektörlerine ve ihtiyaçlarına özel bilgi tabanları oluşturmasına imkan verir.\
\
Bilgi havuzu oluşturma adımları ve kuralları aşağıdaki gibidir:

#### Dosya Yükleme

Kullanıcılar, AI Agent'ın öğrenmesi için dökümanlar yükleyebilir. Desteklenen dosya formatları arasında .pdf, .doc, .docx, .txt, .csv, .dot, .ppt bulunmaktadır. Her kullanıcı için maksimum 5 dosya yüklenebilir ve dosya başına 10 MB boyut sınırı uygulanır.&#x20;

#### Metin Girişi

Kullanıcılar doğrudan metin yazarak da AI’a bilgi sunabilir. Bu metinler en fazla 1024 karakter ile sınırlandırılmıştır. Metin girişi kolay ve hızlı şekilde ek bilgi sağlamak için idealdir, örneğin açıklamalar, kısa yönergeler veya sık kullanılan cevaplar için tercih edilir.

#### Web Sitesi Ekleme

Bilgi tabanına web siteleri eklenebilir ve iki ana yöntem kullanılır: Tara ve tekil websitesi. Tara yöntemi seçildiğinde, belirtilen URL'ye bağlı olan sayfalar “Bağlı Linkler” adı altında listelenir ve kullanıcı bu sayfalar arasında seçme veya çıkarma yapabilir. Maksimum 20 farklı web sitesi eklenebilir. Eğer 20'nin üzerinde link varsa, “Ekle” butonu otomatik olarak devre dışı bırakılır.&#x20;

#### Soru-Cevap Tanımlama

AI Agent'ın sıkça sorulan sorulara doğru yanıtlar vermesi için soru ve cevap çiftleri eklenir. Bu alanda hem soru hem cevap girilmesi zorunludur; alanlardan biri boş bırakılırsa kullanıcıya "Bu alan zorunludur." uyarısı gösterilir. Maksimum 20 soru-cevap çifti eklenebilir.

### 3) Komut Sekmesi: Özel Yanıt Oluşturma ve Optimizasyon

Komut sekmesi, AI Agent'ın müşteri iletişiminde kişiselleştirilmiş ve optimize yanıtlar vermesi için kritik bir adımdır. Bu bölümde kullanıcı, sol taraftaki metin giriş alanına özel gereksinimlerini kısa ve net bir şekilde yazar. Ardından “Oluştur” butonuna basarak, girilen bilgiyi kullanarak AI modeli tarafından oluşturulmuş optimize edilmiş bir komut sağlanır. Sağ tarafta görüntülenen komut, kullanıcı tarafından düzenlenebilir ve ihtiyaçlara göre özelleştirilebilir.\
\
Komut sekmesi, AI Agent'ın müşteriyle olan iletişiminin kalitesini doğrudan etkiler. İyi yapılandırılmış bir komut, doğru ve amaca uygun yanıtların üretilmesini sağlar. Kullanıcı, gerekli düzenlemeleri yaptıktan sonra sayfa altındaki “Kaydet ve Devam Et” butonuna tıklayarak değişiklikleri kaydeder ve bir sonraki adım olan Temsilci Yönlendirmeleri sekmesine yönlendirilir.

### 4) Temsilci Yönlendirmeleri Sekmesi: Tetikleyici Ayarları ve Yönlendirme

Temsilci Yönlendirmeleri sekmesi, AI Agent'ın müşteri temsilcisine otomatik yönlendirmeler yapmasını sağlayan bir yapılandırma alanıdır. Bu bölümde kullanıcı, belirli anahtar kelimeler tanımlayarak, müşterinin bu kelimeleri kullanması halinde doğrudan gerçek temsilciye aktarılmasını sağlayabilir. Örneğin, “indirim, satın almak istiyorum” gibi ifadeler tanımlanabilir.

Ayrıca, müşteri temsilcisi çevrimdışı olduğu durumlarda, AI Müşteri Temsilcisinin Konuşmayı Sürdür özelliği ile müşteriye bilgilendirme mesajı sunar ve iletişimi kesintisiz devam ettirir. Bu sayede kullanıcı deneyimi olumsuz etkilenmez.

Yapılan tüm ayarlar “Kaydet ve Devam Et” butonuyla kaydedilir ve sonraki sekmeye sorunsuz geçiş sağlanır.

### 5) Deneme Alanı Sekmesi: Test Etme ve Yayına Alma

Deneme Alanı sekmesi, AI Agent'ın yapılandırmasının tamamlanmasının ardından test edilip aktif hale getirildiği son aşamadır. Bu bölümde kullanıcı, AI Agent'ın müşteri sorularına verdiği yanıtları deneyimleyerek doğruluk, akıcılık ve tutarlılık açısından değerlendirir.

Kullanıcı, test sırasında ihtiyaç duyarsa önceki sekmelere geri dönüp gerekli düzenlemeleri yapabilir; böylece AI Agent optimize edilir.

Bu aşama, kesintisiz ve kaliteli müşteri deneyimi sağlayabilmek için oluşturulmuştur AI Agent sahadaki performansı konusunda fikir sahibi olunur.

Testlerden memnun kalındığında, kullanıcı "Bitir" butonuna basarak AI Agent yaratılmış olur. Yayınlama tamamlandığında sistem, kullanıcıyı giriş ekranına yönlendirir ve AI Agent pasif durumda hizmete açılır. Kullanıcının aktife çekmesi için anahtarı açık duruma getirmesi gerekmektedir.\
\
Tek seferde sadece 1 adet AI Agent aktif olabilir.\
\
AI Agent ücretlendirmesi aşağıdaki tablodaki gibidir.\ <br>

<table><thead><tr><th>GPT-4o</th><th></th><th></th><th width="133.75390625"></th></tr></thead><tbody><tr><td>Conversation Number</td><td>Total Token</td><td>Total($)</td><td>%40 Desk360 Comission ($)</td></tr><tr><td>1000</td><td>400k</td><td>4</td><td>1,6</td></tr><tr><td>10000</td><td>4M</td><td>40</td><td>16</td></tr><tr><td>100000</td><td>40M</td><td>400</td><td>160</td></tr><tr><td></td><td></td><td></td><td></td></tr><tr><td>GPT-4o mini</td><td></td><td></td><td></td></tr><tr><td>Conversation Number</td><td>Total Token</td><td>Total($)</td><td>%40 Desk360 Comission ($)</td></tr><tr><td>1000</td><td>400k</td><td>0,32</td><td>0,13</td></tr><tr><td>10000</td><td>4M</td><td>3,2</td><td>1,28</td></tr><tr><td>100000</td><td>40M</td><td>32</td><td>12,8</td></tr></tbody></table>


# Veri Yükleme

Bu kılavuz, işletmenizin numara verilerini Desk360 Panel’e yükleyerek şablon mesaj göndermeyi kolaylaştırmanız için hazırlanmıştır. Müşterilerinizin numara verilerini bir kez panele yükleyip, istediğiniz zaman bu verilerle mesaj gönderebilmenizi sağlamak amaçlı geliştirme yapılmıştır.\
\
**Nasıl Çalışır?**

1. **Menüden “Veri Yükle”ye gidin**
   * Sol menüde “Veri Yükle” alanına tıklayın.

2. **Yeni Veri Oluşturun**

   * Sağ üstteki **“Yeni Veri Yükle”** butonuna basın.

   <br>

   <figure><img src="/files/aGy8Hmi98jAkANN1TO6X" alt=""><figcaption></figcaption></figure>

3. **Kategori Adı Girin**
   * Maksimum **60 karakter** uzunluğunda bir isim verin (ör. “Eylül Kampanya Listesi”).
   * Daha sonra bu adı değiştirebilirsiniz.

4. **Etiket Ekleyin**
   * Daha önce oluşturduğunuz etiketleri listeden seçebilir veya yeni etiket ekleyebilirsiniz.
   * Etiket sayısında bir sınır yoktur.

5. **CSV Dosyası Yükleyin**
   * Telefon numaralarını **ülke kodu ile** içeren bir CSV dosyası ekleyin.
   * Yükleme sonrası, geçerli telefon sayısını görebilirsiniz.

6. **Kaydedin**

   * “Kaydet”e tıkladığınızda listeniz kategori tablosuna eklenir.

   <figure><img src="/files/i8DSqHkw7eXrVWPq00j5" alt=""><figcaption></figcaption></figure>

**Kategori Listesi Ekranı**

Burada her kategori için şu bilgileri görebilirsiniz:

* **ID**
* **Kategori Adı**
* **Telefon Sayısı**
* **Etiketler** (5’ten fazlaysa üzerine geldiğinizde tümü görünür)
* **Yönet Butonu** (Düzenle / Kopyala)<br>

<figure><img src="/files/9nBdc8f9g5tTLaPK8sOW" alt=""><figcaption></figcaption></figure>

<br>


# Desk360 Bakiye Yönetimi

Desk360 ile, WhatsApp Business API kurulumu, abonelik, yeni kullanıcı ekleme, WhatsApp Mesaj Şablonları gibi faydalandığınız birçok hizmetin ödeme süreçlerini tek bir yerden yönetebilirsiniz. Ücretli bir hizmetten faydalanmadan önce hesabınıza bakiye yükleme yapmanız gerekir. Ayrıca yapılan işlemlerin detaylarını görebilir ve faturasını alabilirsiniz.\
\
Desk360 yalnızca Amerikan Doları (USD) ile ödeme kabul etmektedir. Ancak, ödemeniz ve faturalandırmanız kullandığınız kartın para birimine dönüştürülür. Örneğin, 50 dolar yüklediğinizde, güncel USD kuru üzerinden kartınıza yansıtılır.

## Bakiye Yönetimi&#x20;

Desk360 üzerinden kart ekleme/güncelleme, bakiye görüntüleme, bakiye yükleme ve iade talebi gibi ödeme süreçlerinizi yönetebilir ve bakiye hareketlerinize erişebilirsiniz.

**Kart ekleme / güncelleme:** Kullanıma hazır bir kart eklemek için bu adımları takip edebilirsiniz: Bakiye Yönetimi > Ödeme Yöntemi Ekle. Karşınıza açılan pencerede kart bilgilerinizi girmeniz ve girdiğiniz bilgileri kaydetmeniz yeterlidir.\
\
Bakiye yönetiminde esnasında sadece 1 kart kaydedebilirsiniz. Önceden girmiş olduğunuz kart bilgilerini yine kaydetmiş olduğunuz kartın sağ üstünde bulunan 3 noktaya tıklayarak değiştirebilirsiniz.

**Bakiye görüntüleme ve yükleme:** Mevcut bakiyenizi görüntüleyebilir ya da banka transferi veya kredi kartı/banka kartı yöntemleriyle şu adımları takip ederek yükleme yapabilirsiniz: Bakiye Yönetimi > Bakiye Ekle.&#x20;

“Bakiye Ekle” sayfasına eriştikten sonra yüklemek istediğiniz miktarı yazmanız gerekir. Bakiye olarak yükleyebileceğiniz minimum miktar 50 USD’dir. Yükleme miktarını belirledikten sonra “Ödeme Yöntemi” sayfasına geçiş yapabilirsiniz.

Ödeme Yöntemi sayfasından Banka Transferi ya da Kart seçeneklerinden ihtiyacınıza uygun olan yöntemi seçebilirsiniz.

Banka Transferi yöntemini seçerseniz, ekranın sağ tarafında yapacağınız ödemenin işlem özetini görebilirsiniz. Bu adımı tamamladıktan sonra “Havale Transfer Yönergeleri” sayfasına yönlendirilirsiniz. Bu sayfada ödeme özetinize ulaşabilir ve banka transferini yapacağınız hesabın detaylarına ulaşabilirsiniz. Hesap detay satırlarının hemen sağında bulunan kopyalama fonksiyonunu kullanarak hesap bilgilerini hızlıca kopyalayabilirsiniz. Banka Transferini Gir butonuna basarak banka transferinizin girişini yapabilirsiniz.

Bu işlem hesabınızdan otomatik olarak para transferi gerçekleştirmez. Sizinle paylaşılan yönergeleri takip ederek Desk360 banka hesabına para transferi yapmanız gerekir.

Kart ile ödemeyi seçerseniz, daha önce bilgilerinizi girdiğiniz kartı kullanarak ya da yeni kart bilgileriyle ödemeyi yapabilirsiniz. Ekranın sağ kısmında ödeme özetinizi görüntüleyebilir ve ödeme işlemine devam edebilirsiniz.

**Bakiye Hareketleri:** Bakiye hareketlerini görüntülemek için şu adımları takip edebilirsiniz: Bakiye Yönetimi > Bakiye hareketleri. Bu sayfada mevcut bakiyenizi, yapmış olduğunuz yükleme ve harcamaların son durumlarını görüntüleyebilir, tarih filtresi vererek arama yapabilirsiniz. Tarih filtresinin sağında bulunan butona tıklayarak bakiye hareketlerinizin bir dökümünü indirebilirsiniz.

**Fatura Bilgileri:** Fatura bilgilerinizi görüntülemek ve düzenlemek için bu adımları takip edebilirsiniz: Bakiye Yönetimi > Fatura Bilgileri ya da Ayarlar > Fatura Bilgileri.

Bu ekranda fatura bilgilerinize erişebilir, düzenleyebilir ya da önceden kesilmiş olan faturalarınızı görüntüleyebilirsiniz.

Bu sayfada sağ üst köşede bulunan Düzenle butonuna basarak faturanızı düzenleme ekranına erişebilirsiniz. Fatura düzenleme ekranında Bireysel ya da Kurumsal seçeneklerden size uygun olanı seçerek karşınıza çıkan alanları doldurmanız yeterlidir. Tüm alanların doldurulması zorunludur. Ayrıca Tüm Faturaları Gör’e tıklayarak geçmiş faturalarınıza erişebilirsiniz. Kesilen faturalar e-posta adresinize gönderilecektir.&#x20;

## Otomatik Yükleme

Gönderim esnasında ücret limitlerine takılmamak için kullanıcılar bakiyelerinin belli limitler altına düştüklerinde otomatik yükleme talimatı oluşturabilirler.\ <br>

<figure><img src="/files/zONCG6jRaUrlhqc02Xs2" alt=""><figcaption></figcaption></figure>

Minimum $50 dolar girişi yaptıktan sonra eklemek istenen miktar alttaki ücret giriş alına yazılır. Buradaki ücret limiti de minimum $50 olmalıdır.

## WABA Ücretlendirmeleri

* Meta, **24 saatlik konuşma bazlı fiyatlamayı** kaldırarak, **her teslim edilen mesaj başına ücretlendirme**ye geçiyor.
* Ücretlendirme şu üç kategoriye göre yapılıyor:
  * **Marketing** (Pazarlama)
  * **Utility** (Yardım/İşlevsel)
  * **Authentication** (Kimlik Doğrulama)
  * **Service (Hizmet/Müşteri Yanıtı)** – Müşteri başlattığı bir konuşma çerçevesinde gelen mesajlara yanıt olarak gönderilen "service" mesajları ücretsizdir.
* Ücretsiz “giriş noktaları” hâlâ geçerli: Reklam ya da site üzerindeki WhatsApp butonlarıyla başlatılan konuşmalar sonrası 72 saat boyunca gönderilen mesajlar ücretsizdir.

#### 2. Bölgesel Fiyatlandırma (Yaklaşık USD bazında)

| Bölge                                                    | Marketing ($)                            | Utility ($)                                    | Authentication ($)                       |
| -------------------------------------------------------- | ---------------------------------------- | ---------------------------------------------- | ---------------------------------------- |
| **Türkiye**                                              | \~0.010–0.012                            | \~0.005–0.006                                  | \~0.008–0.009                            |
| **Avrupa** (örneğin Fransa / Almanya / Birleşik Krallık) | Fr: \~0.143 / Alm: \~0.137 / UK: \~0.053 | Fr: \~0.030–0.085 / Alm: \~0.055 / UK: \~0.022 | Fr: \~0.069 / Alm: \~0.077 / UK: \~0.036 |
| **Kuzey Amerika** (ABD/Kanada)                           | \~0.025                                  | \~0.004                                        | \~0.0135                                 |

*(Fiyatlar değişebilir; en doğru güncel oranları Meta'nın resmi "message rate" tablo aracından kontrol edin.)*<br>

#### 3. Ek Avantajlar ve Uyarılar

* **Ücretsiz Service mesajları:** Müşteri başlatmalı konuşmalar (#Service) 24-saatlik yanıt aralığında ücretsizdir; Utility mesajlar da bu aralıkta ücretsiz olabilir.
* **Giriş Noktası avantajı:** Reklam ya da sayfadaki butonlarla gelen kullanıcı başlatmalı etkileşimler sonrası 72 saat boyunca tüm mesajlar ücretsizdir.

**Ek Bilgiler**

Tüm WABA konuşmaları 24 saatlik oturumlar ile ölçümlenir. Bir WhatsApp konuşması işletme tarafından gönderilen şablon mesajlarla veya kullanıcıların işletmelere gönderdiği mesaja karşılık verilen yanıt ile başlar ve 24 saat boyunca ek ödeme gerektirmeden devam eder. 24 saat boyunca kullanıcılarınızla sınırsız konuşabilir ve oturum başlattığınız kullanıcınıza sınırsız şablon mesaj gönderebilirsiniz.

Konuşma ücretleri, işletmenize mesaj gönderen veya sizin mesaj gönderdiğiniz kullanıcının ülke koduna göre değişiklik gösterir. Her ay tüm WABA işletmeleri için ilk 1000 oturum ücretsizdir. 1000 oturumdan sonra her bir oturum için kullanıcının ülke koduna göre ücretlendirme uygulanacaktır.

Tüm ülkeler için ücretlendirme bilgisine [buradan](https://developers.facebook.com/docs/whatsapp/pricing) ulaşabilirsiniz.

&#x20;                                                     [<mark style="color:blue;">**Ana Sayfa**</mark>](https://desk360.com/tr)                                          [<mark style="color:blue;">**Fiyatlandırma**</mark>](https://desk360.com/tr/fiyatlandirma)


# Sohbet Ayarları

Sohbet Ayarları, sohbet sürecinde ihtiyaç duyabileceğiniz özelleştirmeleri yönetmenizi sağlayan bir alandır. Bu menü altında dört temel seçenek bulunmaktadır:\
\
Talep Konuları: Chat ekranında konuşmayı sonlandırıp arşive taşımak için eklenen sebeplerin yer aldığı bölümdür. Yeni talep konuları oluşturabilir, mevcutları düzenleyebilir veya pasife alabilirsiniz.\
\
Etiket Yönetimi: Etiketler, taleplere birden fazla bağlam eklemenizi sağlayan anahtar kelimeler veya kısa ifadelerdir. Bu etiketler müşteri sohbet sayfasında görünür ancak karşı tarafa yansıtılmaz.\
\
Otomatik Yanıtlar: Müşteri temsilcisi müsait olmadığında veya belirlediğiniz kurala göre saat/gün aralıklarında otomatik olarak gönderilen mesajlardır.<br>

Hızlı Yanıtlar: Sıkça sorulan sorulara hızlıca cevap vermenizi sağlayan önceden tanımlanmış mesajlardır. Hızlı Yanıtlar Sohbet ekranında doğrudan kullanılabilir.\ <br>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdb-GZ32U_Fa3unC7NFS5Z8wrXc_xO4TCOlQvgRE84YdAItIVcgI7wsL6pmdLgX3c-ga8Rw2Mc_lMGy-tU-QqIehicKGZz82042hKSukM80tsBWKa58AtUUO4xjtBlwgQD5vMl8zA?key=W3Cgw-nel014-YsCM-rJyi80" alt=""><figcaption></figcaption></figure>

<br>

<br>


# Talep Konuları

Desk360 üzerinden gelen müşteri taleplerine göre farklı konu başlıkları oluşturabilirsiniz. Bu konular, ürün özelliklerine göre özelleştirilebilir. Bu sayede, müşterilerin hangi konuda iletişime geçtiği kolayca analiz edilebilir. Müşteriyle aktif bir sohbeti sonlandırmak istediğinizde, bir talep konusu seçerek sohbeti Arşiv’e alabilirsiniz. 24 saat içinde tekrar iletişime geçmek isterseniz, sohbeti yeniden "Aktif Sohbet" sayfasına taşıyabilirsiniz.

Konu Ekle butonunu kullanarak yeni bir talep konusu oluşturabilir, mevcut konuları düzenleyebilir veya pasif duruma alabilirsiniz.\ <br>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdyKosKDijbv7ZBxElwpNCoosyNMNyv0O28IE9h1gadaLS-yPxl20T6HMSU5fYUs0ROmAOGXcRile31g597E2lA8PzY44T2sXtnYpZbeDQasITknl-7Hdfy7BZr_OrlQhHUP3yhPw?key=W3Cgw-nel014-YsCM-rJyi80" alt=""><figcaption></figcaption></figure>

a) Talep Konusu Oluşturma\
\
Yeni bir konu eklemek için “Konu Ekle” butonuna tıklayın. Açılan ekranda iki temel bilgi girmeniz gerekir:\
\
Talep Konusu Adı: En fazla 50 karakterlik bir başlık.

Statü: Aktif veya pasif olarak belirlenebilir. Pasif konular sohbet ekranında görünmez.\ <br>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdCyaLxX_2IY_-M8ZzTZ8zrBPZBnpV1Cd0zvfxLycvkMDBo8zIka1ezk9gWB80SGP6Eeo3Z35pMB0AzEjY0Ghx0evxZr8wHGkX-p0K-jAcbEOy_BvMjyTdqKsi3tdmpRyNrh1Nkyw?key=W3Cgw-nel014-YsCM-rJyi80" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdeGwiBbE6eJGt_qinz96Lh9HRYNySbkzSQEg9qmRq2SN9AWrjy_xKHe6f6MaR1ViCJ_8doZ5AU2ixp-O5cGRXd6IC4htdNyo-i3qvwrUUMSXM97ZvAuGefrS8ACmW441hX8bvX0A?key=W3Cgw-nel014-YsCM-rJyi80" alt=""><figcaption><p>Sohbet sayfasında "Talep Konuları" görünümü</p></figcaption></figure>


# Etiket Konuları

Etiketler, müşterilerinizi veya destek taleplerinizi kategorize etmenizi ve ekipler arasında iş paylaşımını kolaylaştırmanızı sağlar. Örneğin, teknik sorunlar için “teknik\_arıza” etiketi eklenebilir. Bu etiket sayesinde talepleri filtreleyebilir ve toplu işlemler gerçekleştirebilirsiniz. Etiketler silinemez.

#### a) Yeni Etiket Ekleme

Yeni bir etiket eklemek için Sohbet Ayarlarını veya Chat sayfasını kullanabilirsiniz.\
\
Sohbet Ayarları altındaki Etiket Yönetimi sayfasına giderek Etiket Ekle butonuna tıklayın.\
Chat sayfasından etiket eklemek için ise, listenizde olmayan kelimeleri girerek enter butonuna basın.\
\
Etiket Adı Maksimum 50 karakter olmalıdır. Boşluk kullanılmaz; yerine "-" veya "\_" kullanabilirsiniz.\
\ <br>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfRSpKxrZYs-U5EehO60HMRLnBHXJHHuqauYsc6eUydw4us8DpRjpFVU76AIqTEKv6b2wrE33BdzBAuzwDLDNdTiOJPIKhOHFNc7wrCOSliykRi7rW2Q-SgKEN7AQkgzmXmH7gvLQ?key=W3Cgw-nel014-YsCM-rJyi80" alt=""><figcaption><p>Eklenen etiketlerin görünümü</p></figcaption></figure>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfAuf5gFsub4WVJKHXEXwrnJubddT_F5aoyKKksE2usO5xuyd8neL0mchop05BCJ-HyZ2ZZ8BzdDzBFek59BHwI0f4H5NaiEjK1kdnv4t8k1IKYQaKaqHrC47RrA0CKQyhYaMGTZQ?key=W3Cgw-nel014-YsCM-rJyi80" alt=""><figcaption><p>Etiket ekleme alanı</p></figcaption></figure>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfTtBIV1c_Y0BN5bLMFxgAKuYShXd__beYAX_iGoQKN3rPNlubwHezEOeKtMVBPcFbc4IJHENXfPPSmkPTGiHP8wXCNkkxRaOYdZPx9oX7QadFV-yfJ0DA2RQnLYWvqnvOOB-H0ug?key=W3Cgw-nel014-YsCM-rJyi80" alt=""><figcaption><p>Kişiye chat sayfasından etiket atama. Bunu arşiv veya aktif chat içinde yapabilirsiniz.</p></figcaption></figure>


# Otomatik Yanıtlar

WhatsApp Otomatik Yanıt özelliği ile selamlama, bilgilendirme veya yasal metinler gibi mesajları belirlenen gün ve saatlerde müşterilere otomatik olarak gönderebilirsiniz. Bu, müşteri memnuniyetini artırır ve geri dönüş sürelerini kısaltır.

Otomatik yanıtlar silinebilir veya düzenlenebilir.

\
a) Otomatik Yanıt Oluşturma

“Otomatik Yanıt Ekle” butonuna tıklayın ve aşağıdaki alanları doldurun:

Ad: En fazla 50 karakter. Listelemede görünen isim.\
\
Açıklama: Gönderilecek mesajın içeriği. Maksimum 4096 karakter. İsteğe bağlı olarak .jpeg, .jpg, .pdf, .doc, .mp4, .png formatında dosya eklenebilir.\
\
Gün Seçimi: Mesajın hangi günlerde gönderileceğini belirler. Saat seçilmezse, tüm gün geçerli olur. 1 adetten fazla gün seçebilirsiniz.\
\
Saat Seçimi: Mesajın hangi saat aralığında gönderileceğini tanımlar (isteğe bağlıdır).<br>

Tüm alanları doldurduktan sonra Kaydet butonuna tıklayarak otomatik yanıtı aktif hale getirebilirsiniz.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcNjlzfO1UqnUnNnDC3Z15-26LQv5xl_iQbK5JZLKtLVtiy3jSi1fnZ1m7hUF7mzjxEDERTurVY-iuJcO6A3DKcgLHI6ZSt9wii5Oz7Pq2srUq2L4bljeRJXe0U0wUeEWZIC29TJQ?key=W3Cgw-nel014-YsCM-rJyi80" alt=""><figcaption><p>Eklenen Otomatik Yanıt'ın liste görünümü</p></figcaption></figure>

<br>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdptCUP8Ml9ZUaa2qX5lAMmKTQqT_nQ0gTD0sGtWkekky6876mipNpeXAz1gktGxjbKaeBo0D24jd1Kek2mY2A08Z7iejBkKI0n9BBe0CByK9xRLK7YEdW7LTgBuTfz5kKHTGoMdQ?key=W3Cgw-nel014-YsCM-rJyi80" alt=""><figcaption><p>Otomatik Yanıt oluşturma sırasında istenen bilgiler</p></figcaption></figure>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdD_2N721hGeBf9n8LS4aYv1E6UCZaqu7TzVoa1_i9pcd3IHo5y3J8-2jJYwOL10EtysHs625CLOjUC1GenPpIMpSPWjz5_ZZB_qkxh5shuzbP3-MiXB58LMYPTJjo5Wk_9YzfmCg?key=W3Cgw-nel014-YsCM-rJyi80" alt=""><figcaption><p>Örnek Mesaj</p></figcaption></figure>


# Hızlı Yanıtlar

Hızlı Yanıtlar, sıkça karşılaşılan sorulara önceden hazırlanmış yanıtlar oluşturarak müşteri temsilcilerinin zamandan tasarruf etmesini sağlar. Bu sayede, destek ekipleri tekrarlayan cevapları manuel olarak yazmak yerine, tek tıklamayla hazır yanıtları gönderebilir.

#### a) Hızlı Yanıt Oluşturma

Sağ üstteki + Hızlı Yanıt Ekle butonuna tıklayın. Açılan formda şu alanları doldurun:

Başlık: Yanıtı tanımlayan kısa bir isim.\
\
İçerik: Müşteriye gönderilecek mesaj. Biçimlendirme (kalın, italik, bağlantı, emoji) mümkündür.\
\
Durum: Yanıtın aktif veya pasif olduğunu belirler.<br>

Tüm alanları doldurduktan sonra Kaydet butonuna tıklayın. Yanıtı düzenlemek için ✏️, silmek için 🗑️ ikonunu kullanabilirsiniz. Silme işlemi geri alınamaz.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXd3p9ahmapERlS70i7QrbKxiy2AVz9K7eGJaxF58HpCl6VVn4ONSdgkH5vl3bKCHQtkTWzHeL0Bb3iTpqcaqthZGSDmFHLba0X2rixwc2xekDaUSibmu5-grPiOesnp4Ked8SUEDw?key=W3Cgw-nel014-YsCM-rJyi80" alt=""><figcaption><p>Hızlı Yanıtlar listeleme ekranı</p></figcaption></figure>

#### b) Hızlı Yanıt Gönderme

Tanımladığınız hızlı yanıtları aktif sohbet sırasında şu adımlarla kullanabilirsiniz:

1. Sohbet ekranını açın.
2. Aktif bir müşteri görüşmesini seçin.
3. Mesaj alanının yanındaki hızlı yanıt simgesine tıklayın.
4. Tanımlı yanıtlar listelenir. Uygun olanı seçin.
5. Yanıt metni otomatik olarak yazım alanına eklenir. İsteğe bağlı olarak düzenlenebilir.
6. Gönder butonuna tıklayarak mesajı iletin.

Notlar:

* Yalnızca aktif yanıtlar görünür.
* Bir müşteriye birden fazla hızlı yanıt arka arkaya gönderilebilir.
* Yanıtlar düzenlenebilir ve kişiselleştirilebilir.\ <br>

  <figure><img src="/files/4FcOE0nuIfIz1awKYmu7" alt=""><figcaption><p>Sol altta şimşek ikonu ile gösterilen "Hızlı Yanıtlar" butonu</p></figcaption></figure>

<figure><img src="/files/tC9tXxqdAxKqJBU0mLMf" alt=""><figcaption><p>"Hızlı Yanıtlar" Sohbet içinde liste görünümü</p></figcaption></figure>

<br>

<figure><img src="/files/qPU5WoBL0qtzG17AgaSt" alt=""><figcaption><p>Liste içinden herhangi bir hızlı yanıt seçilirse göndermeden önce sohbet alanında görünür. İlgili eklemeler de yapılabilir.</p></figcaption></figure>


# Ayarlar

## Hesap Ayarları

Hesap ayarları sayfasından Desk360 hesabınızın kullanıcı ayarlarını düzenleyebilir, şifrenizi ya da panel dilinizi değiştirebilirsiniz. Hesap ayarlarına Ayarlar > Hesap Ayarları adımlarını takip ederek erişebilirsiniz.

**Kullanıcı ayarları:** Bu bölümde Desk360 hesabınız için profil fotoğrafı belirleyebilir, ad soyad ya da telefon numarası değişim işlemlerini yapabilir.

**Panel Ayarları:** Bu alandan Desk360 panel dilinizi İngilizce ya da Türkçe olarak değiştirebilir.

**Saat Dilimi:** Kullanıcı ürünün bulunduğu saat dilimi için geçerli işlemleri yapabilir. Örneğin Türkiye'den Amerika'ya hizmet veren bir ürün bulunuyorsa Amerika saat dilimi kullanılabilir.

## Fatura Bilgileri

Fatura bilgileri sayfasıyla ilgili detaylı bilgiye "[Bakiye Yönetimi](https://my.desk360.com/wallet)" başlığı altından erişebilirsiniz.

&#x20;                                                     [<mark style="color:blue;">**Ana Sayfa**</mark>](https://desk360.com/tr)                                          [<mark style="color:blue;">**Fiyatlandırma**</mark>](https://desk360.com/tr/fiyatlandirma)

&#x20;


# API Documentation

## :speech\_balloon: Introduction

​Desk360 API is a Representational State Transfer ([REST](https://en.wikipedia.org/wiki/Representational_state_transfer)) ​​structure that provides operations such as:\
\
:black\_medium\_small\_square:Reading\
:black\_medium\_small\_square:Modifying\
:black\_medium\_small\_square:Adding data\
:black\_medium\_small\_square:Deleting data\
\
from your help desk.

{% hint style="success" %}
Desk360 APIs also support Cross-Origin Resource Sharing ([CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing)).
{% endhint %}

### :sparkles: HTTP Methods

> **The list of API commands used by Desk360**

| **Command** | **Description**            |
| ----------- | -------------------------- |
| **GET**     | Fetches object(s)          |
| **POST**    | Creates an object          |
| **PUT**     | Updates/Modifies an object |
| **DELETE**  | Deletes an object          |

{% hint style="info" %}
All API requests must reach the secure endpoint i.e. **HTTPS** only
{% endhint %}

### :dash: **Rate Limit** <a href="#rate-limit" id="rate-limit"></a>

This rate limit applies are based on IP address.

| **Plan**     | **Rate Limit/Minute** |
| ------------ | --------------------- |
| **Business** | 60                    |

{% hint style="success" %}

* Make sure to apply the rate limit-best practices and it stays within the rate limit.
* Make sure to make API calls in a safe layer such as your backend, **not** **front-end or your mobile application**.
* Remind that even invalid requests are included in the rate limit.
  {% endhint %}

Check your current rate limit status by looking at the following HTTP headers returned in response to each API request:

```http
HTTP/1.1 200 OK
Content-Type: application/json
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
```

| **Title**                 | **Description**                                                                                                                                            |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **X-RateLimit-Limit**     | Total number of API calls allowed per minute.                                                                                                              |
| **X-RateLimit-Remaining** | The number of requests remaining in the current rate limit window.                                                                                         |
| **X-RateLimit-Reset**     | The reset time in Unix epoch time format.                                                                                                                  |
| **Retry-After**           | <p>The number of seconds you should wait in order to trigger your next API request.</p><p>This header is returned only when the rate limit is reached.</p> |

{% hint style="info" %}
If your API request is received after the rate limit is reached, Desk360 will return an error in the response. The **Retry-After** value in the response header will tell you how long to wait before sending another API request.
{% endhint %}

```http
HTTP/1.1 200 OK
Content-Type: application/json
Retry-After: 26
```

## :rocket: Getting Started

### :lock: Authentication <a href="#authentication" id="authentication"></a>

> **Who can access my helpdesk? Can anyone see my data?**

Before prioritizing responding to a customer or using any of the APIs listed above, you must authenticate or log in as you sign in to your helpdesk web portal.

You need to create an API Key for your WABA account using the "Create API Key" button on the Public API page where you entered your webhook URL information. You must use the API Key you generate as the Bearer token required for authorization in Desk360 API requests.

All Desk360 API endpoints need this API Key as Bearer token in order to respond to your request.

You can see an example of the API Key below.

```
06RS4pzxsPquYVOmHAZlogoRNatNjYnVCI1eZZiUK1Fu1DpxqFz1Fl9zyRON4juM
```

### :paperclip: Attachments

The following endpoints are supported with attachments:

:black\_medium\_small\_square:Sending a media message\
:black\_medium\_small\_square:Sending a interactive message

{% hint style="info" %}
Please follow the guidelines listed below:

* Only files on a local machine can be added using the API. You can not use links!
* **Content-Type** should always be multi-part/form-data for attached requests.
  {% endhint %}

### :x: Errors

> **I received an error. How can I solve it?**

API requests that cause errors will return an appropriate HTTP status code to help determine the type of error. You can use the following table to understand what each code means:

| **HTTP Status Code** | **Status Code Definition**       | **Description**                                                                                                                                                                                                                                                                            |
| -------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **400**              | **Client or Validation Error**   | <p>The request body/query string is not in the correct format.</p><p>For example, the <strong>Send a message</strong> API requires the <strong>to</strong> field to be submitted as part of the request, and if it is missing, this status code is returned.</p>                           |
| **401**              | **Authentication Failure**       | <p>This indicates that the <strong>Authorization</strong> field is either missing or incorrect.</p><p>Check <a href="#authentication">Authentication</a> for more information.</p>                                                                                                         |
| **404**              | **Requested Resource not Found** | <p>The request contains an <strong>invalid ID</strong> or <strong>invalid parameters in the URL</strong>.<br>For example, an API call to retrieve a integration with an invalid ID will return an <strong>HTTP 404</strong> status code to inform you that no such integration exists.</p> |
| **405**              | **Method not allowed**           | <p>This API request has used the wrong HTTP method.</p><p>For example, a <strong>DELETE</strong> requested on <strong>/integrations</strong> endpoint will return an <strong>HTTP 405</strong> as <strong>/integrations</strong> allows only <strong>GET</strong> requests.</p>            |
| **406**              | **Unsupported Accept Header**    | Only **application/json** and **\*/\*** are supported. When uploading files **multipart/form-data** are supported.                                                                                                                                                                         |
| **415**              | **Unsupported Content-type**     | Only **application/json** is supported.                                                                                                                                                                                                                                                    |
| **429**              | **Rate Limit Exceeded**          | The API rate limit allowed for your Desk360 domain has been exhausted. Check[ Rate Limit](#rate-limit).                                                                                                                                                                                    |
| **500**              | **Unexpected Server Error**      | You can't do much more here. This indicates an error on the Desk360 side. Please [email us](mailto:support@desk360.com) your API script with response headers. We will contact you and fix this issue as soon as possible.                                                                 |

**Sample error response**

In addition to the HTTP status code, most errors also return a response with more information to help you troubleshoot the error. An example error response is shown below. The format of the error response is explained after the example.

```http
    "error": {
        "code": "failed_validation",
        "message": "The to field is required."
        "doc_url": "https://docs.desk360.com/api"
    }
}
```

**Error Response Fields**

| **Field**    | **Description**                                                  |
| ------------ | ---------------------------------------------------------------- |
| **code**     | Custom error code that is machine-parseable.                     |
| **message**  | Descriptive error message.                                       |
| **doc\_url** | A link to guide you if there is a solution on the documentation. |

#### Error Codes

| **Code**                            | **Description**                                                                                                                                                                            |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **authentication\_exception**       | Authentication failed. The token is missing or invalid. Do not forget to put "**Bearer**" in the beginning of your token. eg: "**Bearer YOUR-API-TOKEN**"                                  |
| **method\_not\_allowed\_exception** | If the method and endpoint is mismatched, you will get this error. Please check the endpoint method. eg:  [Products](broken://pages/-MQC-odt5EE5AOxHXsnb#products) only allows GET method. |
| **not\_found\_exception**           | You may have made a typo in your request URL.                                                                                                                                              |
| **model\_not\_found\_exception**    | Requested resource not found, the resource maybe deleted or maybe the resource is not yours.                                                                                               |
| **internal\_server\_error**         | The error is coming from our servers. If you have been receiving this error message for a while, [contact us](mailto:support@desk360.com).                                                 |
| **insecure\_request\_exception**    | HTTP is not allowed. Use **HTTPS** instead.                                                                                                                                                |
| **too\_many\_requests\_exception**  | Check [Rate Limit](#rate-limit).                                                                                                                                                           |
| **invalid\_credentials**            | You typed your email/password wrong.                                                                                                                                                       |
| **too\_many\_attempts**             | If you entered your email/password wrong more than 5 times, you should wait for a minute.                                                                                                  |
| **not\_authorized**                 | You do not have permission to modify the resource.                                                                                                                                         |
| **not\_found**                      | Requested resource not found, the resource maybe deleted or maybe the resource is not yours.                                                                                               |
| **failed\_validation**              | This is a validation error, please read the message and apply what it says.                                                                                                                |

### :page\_facing\_up: Pagination

API responses that return a list of objects are paginated, for example, **View Integration List**. Add the parameter page to the query string to navigate through the pages. The page number starts from 1 and each page is fixed to show 20 objects.

```http
https://public-api.desk360.com/api/v1/integrations?page=1
```

The "Link" header in the response will be showing the next page if it exists:

```http
Headers
"Link" : <https://public-api.desk360.com/v1/integrations?page=2>; rel=next
```

{% hint style="info" %}
If you are on the last page the link header will not be filled.
{% endhint %}

### :white\_check\_mark: Best Practices

* Whenever it is possible, please queue API calls on your side. This allows you to buffer recent calls to avoid reaching the rate limit. Once you reach the rate limit, retry API calls after the retry period.
* Whenever it is feasible, cache the data that does not change much on your side. For example, the mapping between agent name and ID is extremely unlikely to change, so it is a useful approach to cache this data to avoid the rate limit.&#x20;
* Avoid making API calls directly from a mobile app, instead, send the request to your servers and make API calls from there. This ensures that if an API endpoint is changed, you can make and deploy the change on your server instead of updating your application and forcing your customers to the latest version.

## Integrations

Apart from its competitors, Desk360 enables its customers to manage multiple integrations under one account.

In order to find your **Integration ID**, visit [Integrations](#introduction).

### Integrations <a href="#integrations" id="integrations"></a>

<mark style="color:blue;">`GET`</mark> `https://public-api.desk360.com/v1/integrations`

List of your integrations.

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | string | Your API token |

{% tabs %}
{% tab title="200 " %}

```json
[
    {
        "id": 11,
        "display_name": "YourIntegration1",
        "phone_number": "+905554443322"
    },
    {
        "id": 22,
        "display_name": "YourIntegration2",
        "phone_number": "+905555555555"
    }
]
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

<pre class="language-bash"><code class="lang-bash">curl --location --request GET 'https://public-api.desk360.com/v1/integrations' \
<strong>--header 'Authorization: Bearer YOUR_API_TOKEN'
</strong></code></pre>

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClient("https://public-api.desk360.com/v1/integrations");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations")
  .method("GET", null)
  .addHeader("Authorization", "Bearer YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var axios = require('axios');

var config = {
  method: 'get',
  url: 'https://public-api.desk360.com/v1/integrations',
  headers: { 
    'Authorization': 'Bearer YOUR_API_TOKEN'
  }
};

axios(config)
.then(function (response) {
  console.log(JSON.stringify(response.data));
})
.catch(function (error) {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations"

payload={}
headers = {
  'Authorization': 'Bearer YOUR_API_TOKEN'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)
```

{% endtab %}
{% endtabs %}

## Chats

Every WhatsApp conversation between your customers and an integration is stored as a chat. Each chat belongs to exactly one integration and groups all messages exchanged with the same contact.

In order to find your Chat ID, list the chats under an integration via List Chats.

### Chats

<mark style="color:blue;">`GET`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId`/chats

List of your chats.

#### Path Parameters

| Name                                             | Type    | Description                      |
| ------------------------------------------------ | ------- | -------------------------------- |
| IntegrationId <mark style="color:red;">\*</mark> | Integer | The ID of your integration       |
| tag\_start\_date                                 | String  | The start date for tag filtering |
| tag\_end\_date                                   | String  | The end date for tag filtering   |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | string | Your API token |

{% tabs %}
{% tab title="200 " %}

```json
[
    {
        "id": 1024,
        "integration_id": 11,
        "phone": "90xxxxxxxxxx",
        "name": "John",
        "tags": [
            {
                "id": 12,
                "name": "tag-name-1",
                "created_at": "2024-05-30T12:14:28.000000Z",
                "updated_at": "2024-05-31T06:33:30.000000Z"
            },
            {
                "id": 27,
                "name": "tag-name-2",
                "created_at": "2024-05-30T12:14:28.000000Z",
                "updated_at": "2024-05-31T06:33:30.000000Z"
            }
        ],
        "last_message_at": "2024-05-31T06:33:30.000000Z",
        "created_at": "2024-05-30T06:33:30.000000Z"
    },
    {
        "id": 1025,
        "integration_id": 11,
        "phone": "90xxxxxxxxxx",
        "name": "Doe",
        "tags": [],
        "last_message_at": "2024-05-31T06:33:30.000000Z",
        "created_at": "2024-05-30T06:33:30.000000Z"
    }
]
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

<pre class="language-bash"><code class="lang-bash">curl --location --request GET 'https://public-api.desk360.com/integrations/:integrationId/chats' \
<strong>--header 'Authorization: Bearer YOUR_API_TOKEN'
</strong></code></pre>

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClient("https://public-api.desk360.com/v1/integrations");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations")
  .method("GET", null)
  .addHeader("Authorization", "Bearer YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var axios = require('axios');

var config = {
  method: 'get',
  url: 'https://public-api.desk360.com/v1/integrations',
  headers: { 
    'Authorization': 'Bearer YOUR_API_TOKEN'
  }
};

axios(config)
.then(function (response) {
  console.log(JSON.stringify(response.data));
})
.catch(function (error) {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations"

payload={}
headers = {
  'Authorization': 'Bearer YOUR_API_TOKEN'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)
```

{% endtab %}
{% endtabs %}

### Chat Messages

<mark style="color:blue;">`GET`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId`/chats/:chatId/messages

List of your chat messages.

#### Path Parameters

| Name                                             | Type    | Description                |
| ------------------------------------------------ | ------- | -------------------------- |
| integrationId <mark style="color:red;">\*</mark> | Integer | The ID of your integration |
| chatId <mark style="color:red;">\*</mark>        | Integer | The ID of your chat        |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | string | Your API token |

{% tabs %}
{% tab title="200 " %}

```json
[
    {
        "id": 55012,
        "chat_id": 1024,
        "writer_name": "Jon Doe",
        "content": "Hello, I need help with my order *#A123*.",
        "attachments": null,
        "payload": null,
        "is_customer": true,
        "platform_message_id": "wamid.HBgLOTA1...",
        "platform_parent_id": null,
        "type": 6,
        "status": 3,
        "created_at": "2026-05-04T14:21:08.000000Z"
    },
    {
        "id": 55013,
        "chat_id": 1024,
        "writer_name": "Jon Doe",
        "content": "Hello, I need help with my order *#A123*.",
        "attachments": null,
        "payload": null,
        "is_customer": true,
        "platform_message_id": "wamid.HBgLOTA1...",
        "platform_parent_id": null,
        "type": 6,
        "status": 4,
        "created_at": "2026-05-04T14:22:08.000000Z"
    }
]
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

<pre class="language-bash"><code class="lang-bash">curl --location --request GET 'https://public-api.desk360.com/integrations/:integrationId/chats/:chatId/messages' \
<strong>--header 'Authorization: Bearer YOUR_API_TOKEN'
</strong></code></pre>

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClient("https://public-api.desk360.com/v1/integrations");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations")
  .method("GET", null)
  .addHeader("Authorization", "Bearer YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var axios = require('axios');

var config = {
  method: 'get',
  url: 'https://public-api.desk360.com/v1/integrations',
  headers: { 
    'Authorization': 'Bearer YOUR_API_TOKEN'
  }
};

axios(config)
.then(function (response) {
  console.log(JSON.stringify(response.data));
})
.catch(function (error) {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations"

payload={}
headers = {
  'Authorization': 'Bearer YOUR_API_TOKEN'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)
```

{% endtab %}
{% endtabs %}

## Tags

Tags let you label chats with short keywords.

Tag names must be 3–25 characters long and follow the allowed tag-name pattern. When you attach tags to a chat you can either reference an existing tag by its id or create a new one on the fly by sending only its name. The system will create it under the integration automatically.

A typical flow looks like this:

1. List the integration's existing tags via Integration Tags.
2. List the tags currently attached to a chat via Chat Tags.
3. Attach / replace / detach tags on a chat via Attach Chat Tags.

> The attach endpoint is a sync operation. The chat's tags become exactly the list you send. Any tag that is currently attached but missing from your payload will be detached.

### Integration Tags

<mark style="color:blue;">`GET`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId/tags`

List of your integration tags.

#### Path Parameters

| Name                                             | Type    | Description                |
| ------------------------------------------------ | ------- | -------------------------- |
| integrationId <mark style="color:red;">\*</mark> | Integer | The ID of your integration |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | String | Your API token |

{% tabs %}
{% tab title="200 " %}

```json
[
    {
        "id": 12,
        "name": "tag-name-1"
    },
    {
        "id": 27,
        "name": "tag-name-2"
    },
    {
        "id": 88,
        "name": "tag-name-3"
    }
]
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

<pre class="language-bash"><code class="lang-bash">curl --location --request GET 'https://public-api.desk360.com/integrations/:integrationId/tags' \
<strong>--header 'Authorization: Bearer YOUR_API_TOKEN'
</strong></code></pre>

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClient("https://public-api.desk360.com/v1/integrations");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations")
  .method("GET", null)
  .addHeader("Authorization", "Bearer YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var axios = require('axios');

var config = {
  method: 'get',
  url: 'https://public-api.desk360.com/v1/integrations',
  headers: { 
    'Authorization': 'Bearer YOUR_API_TOKEN'
  }
};

axios(config)
.then(function (response) {
  console.log(JSON.stringify(response.data));
})
.catch(function (error) {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations"

payload={}
headers = {
  'Authorization': 'Bearer YOUR_API_TOKEN'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)
```

{% endtab %}
{% endtabs %}

### Chat Tags

<mark style="color:blue;">`GET`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId/chats/:chatId/tags`

List of your chat tags.

#### Path Parameters

| Name                                             | Type    | Description                |
| ------------------------------------------------ | ------- | -------------------------- |
| integrationId <mark style="color:red;">\*</mark> | Integer | The ID of your integration |
| chatId <mark style="color:red;">\*</mark>        | Integer | The ID of your chat        |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | String | Your API Token |

{% tabs %}
{% tab title="200 " %}

```json
[
    {
        "id": 12,
        "name": "tag-name-1"
    },
    {
        "id": 27,
        "name": "tag-name-2"
    }
]
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

<pre class="language-bash"><code class="lang-bash">curl --location --request GET 'https://public-api.desk360.com/integrations/:integrationId/chats/:chatId/tags' \
<strong>--header 'Authorization: Bearer YOUR_API_TOKEN'
</strong></code></pre>

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClient("https://public-api.desk360.com/v1/integrations");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations")
  .method("GET", null)
  .addHeader("Authorization", "Bearer YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var axios = require('axios');

var config = {
  method: 'get',
  url: 'https://public-api.desk360.com/v1/integrations',
  headers: { 
    'Authorization': 'Bearer YOUR_API_TOKEN'
  }
};

axios(config)
.then(function (response) {
  console.log(JSON.stringify(response.data));
})
.catch(function (error) {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations"

payload={}
headers = {
  'Authorization': 'Bearer YOUR_API_TOKEN'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)
```

{% endtab %}
{% endtabs %}

### Chat Tags Attach

<mark style="color:blue;">`POST`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId/chats/:chatId/tags`

Attach of your chat tags.

#### Path Parameters

| Name                                             | Type    | Description                |
| ------------------------------------------------ | ------- | -------------------------- |
| integrationId <mark style="color:red;">\*</mark> | Integer | The ID of your integration |
| chatId <mark style="color:red;">\*</mark>        | Integer | The ID of your chat        |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | String | Your API token |

#### Body Parameters

| Name                                            | Type    | Description                                                                                                               |
| ----------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------- |
| tags <mark style="color:red;">\*</mark>         | Array   | The full list of tags the chat should have after the call. Each item is an object with **either** `id` **or** `name`.     |
| tags\[].id                                      | Integer | The id of an existing tag under the integration. Use this to attach a tag that is already defined.                        |
| tags\[].name <mark style="color:red;">\*</mark> | String  | A new tag name (3–25 chars). If no tag with this name exists under the integration, it will be created and then attached. |

{% tabs %}
{% tab title="200 " %}

```json
[
    {
        "id": 12,
        "name": "tag-name-1"
    },
    {
        "id": 104,
        "name": "new-tag-name"
    }
]
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request POST 'https://public-api.desk360.com/v1/integrations/:integrationId/chats/:chatId/tags' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--data-raw '{
    "tags": [
        { "id": 12, "name": "tag-name-1" },
        { "id": 27, "name": "tag-name-2" },
        { "id": null, "name": "new-tag-name" }
    ]
}'
```

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClient("https://public-api.desk360.com/v1/integrations");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations")
  .method("GET", null)
  .addHeader("Authorization", "Bearer YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var axios = require('axios');

var config = {
  method: 'get',
  url: 'https://public-api.desk360.com/v1/integrations',
  headers: { 
    'Authorization': 'Bearer YOUR_API_TOKEN'
  }
};

axios(config)
.then(function (response) {
  console.log(JSON.stringify(response.data));
})
.catch(function (error) {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations"

payload={}
headers = {
  'Authorization': 'Bearer YOUR_API_TOKEN'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)
```

{% endtab %}
{% endtabs %}

## WhatsApp Message Templates

<mark style="color:blue;">`GET`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates`

Get WhatsApp message template and languages list from a product.

#### Path Parameters

| Name                                             | Type    | Description                |
| ------------------------------------------------ | ------- | -------------------------- |
| IntegrationId <mark style="color:red;">\*</mark> | Integer | The ID of your integration |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | String | Your API Token |

{% tabs %}
{% tab title="200 " %}

```json
[
  {
    "id": 75,
    "name": "template_02",
    "category_editable": false,
    "sendable": true,
    "category": {
      "value": 2,
      "label": "template-messages.new.custom",
      "subLabel": "template-messages.new.custom-subtitle",
      "status": 1,
      "children": []
    },
    "category_label": "template-messages.new.custom",
    "supported_languages": [
      {
        "label": "English",
        "value": 1,
        "filled": true
      },
      {
        "label": "Türkçe",
        "value": 2,
        "filled": true
      }
    ],
    "translations": [
      {
        "language_id": 1,
        "language": "English",
        "header_type": null,
        "header_variables": null,
        "header": null,
        "header_file": null,
        "body": "English content test",
        "body_variables": null,
        "footer": null,
        "variables": [],
        "buttons": [],
        "editable": true,
        "status": "template-messages.in-review",
        "status_value": 1,
        "quality": "template-messages.quality-unavailable",
        "updated_at": "2024-05-31T06:33:30.000000Z"
      },
      {
        "language_id": 2,
        "language": "Türkçe",
        "header_type": {
          "value": 4,
          "label": "TEXT"
        },
        "header_variables": [
          {
            "id": "",
            "key": "1",
            "value": "Header 1"
          }
        ],
        "header": "Merhaba {{1}} ,",
        "header_file": null,
        "body": "Merhaba {{1}}, Sipariş takip numaranız: {{2}} Bu takip numarası ile siparişinizin durumunu sorgulayabilirsiniz.",
        "body_variables": [
          {
            "id": "",
            "key": "1",
            "value": "Ahmet Kara"
          },
          {
            "id": "",
            "key": "2",
            "value": "SP123456789"
          }
        ],
        "footer": null,
        "variables": [
          "header-1",
          "body-1",
          "body-2"
        ],
        "buttons": [],
        "editable": true,
        "status": "template-messages.active",
        "status_value": 2,
        "quality": "template-messages.quality-unavailable",
        "updated_at": "2024-05-30T12:16:37.000000Z"
      }
    ],
    "created_at": "2024-05-30T12:14:28.000000Z",
    "updated_at": "2024-05-31T06:33:30.000000Z"
  }
]
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request GET 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/?page=1' \
--header 'Authorization: Bearer YOUR_API_TOKEN'
```

{% endtab %}

{% tab title="C#" %}

```csharp
var client = new RestClientRestClient("https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates")
  .method("GET", null)
  .addHeader("Authorization", "Bearer YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="Javascript" %}

```javascript
var axios = require('axios');

var config = {
  method: 'get',
  url: 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates',
  headers: { 
    'Authorization': 'Bearer YOUR_API_TOKEN', 
  }
};

axios(config)
.then(function (response) {
  console.log(JSON.stringify(response.data));
})
.catch(function (error) {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer YOUR_API_TOKEN',
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates"

payload={}
headers = {
  'Authorization': 'Bearer YOUR_API_TOKEN',
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

```

{% endtab %}
{% endtabs %}

### Send WhatsApp Message Template

<mark style="color:green;">`POST`</mark> `https://public-api.desk360.com/v1/integrations/:integrationsId/conversations/templates/send`

Send active WhatsApp message template to a WhatsApp number. If you send with attachments, use form-data. You can also send other body parameters with form-data as well.&#x20;

#### Path Parameters

| Name                                             | Type    | Description                |
| ------------------------------------------------ | ------- | -------------------------- |
| IntegrationId <mark style="color:red;">\*</mark> | Integer | The ID of your integration |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | string | Your API Token |

#### Request Body

<table><thead><tr><th width="261">Name</th><th width="109">Type</th><th>Description</th></tr></thead><tbody><tr><td>template_id <mark style="color:red;">*</mark></td><td>Integer</td><td>The template id of the template to be sent.</td></tr><tr><td>language_id <mark style="color:red;">*</mark></td><td>Integer</td><td>The language id of the template to be sent.</td></tr><tr><td>destinations[] <mark style="color:red;">*</mark></td><td>array</td><td>Required parameters for the template. The key list received in the template list should be used as a key during submission.</td></tr><tr><td>destinations.*.phone <mark style="color:red;">*</mark></td><td>string</td><td>WhatsApp number to be sent. It should start with (+) and a country code.</td></tr><tr><td>destinations.*.parameters</td><td>object</td><td>Required parameters for the template. The key list received in the template list should be used as a key during submission.</td></tr><tr><td>attachment </td><td>file</td><td>Attachment for the message template (only allowed in form-data).</td></tr></tbody></table>

{% tabs %}
{% tab title="200 " %}

```json
{
    "message_id": "gBEGkFBXUQRnAglW0luHY8xsrFk"
}
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request POST 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send' \
--header 'Authorization: YOUR_API_TOKEN' \
--form 'template_id="1"' \
--form 'language_id="1"' \
--form 'destinations[0][phone]="+905555555555"' \
--form 'destinations[0][parameters][header-1]="Header 1"' \
--form 'destinations[0][parameters][body-1]="Body 1"' \
--form 'destinations[0][parameters][body-2]="Body 2"' \
--form 'attachment=@"/test_image.jpg"'
```

{% endtab %}

{% tab title="C#" %}

```csharp
var options = new RestClientOptions("https://public-api.desk360.com")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/v1/integrations/integrationId/conversations/templates/send", Method.Post);
request.AddHeader("Authorization", "YOUR_API_TOKEN");
request.AlwaysMultipartFormData = true;
request.AddParameter("template_id", "1");
request.AddParameter("language_id", "1");
request.AddParameter("destinations[0][phone]", "+905555555555");
request.AddParameter("destinations[0][parameters][header-1]", "Header 1");
request.AddParameter("destinations[0][parameters][body-1]", "Body 1");
request.AddParameter("destinations[0][parameters][body-2]", "Body 2");
request.AddFile("attachment", "/test_image.jpg");
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("template_id","1")
  .addFormDataPart("language_id","1")
  .addFormDataPart("destinations[0][phone]","+905555555555")
  .addFormDataPart("destinations[0][parameters][header-1]","Header 1")
  .addFormDataPart("destinations[0][parameters][body-1]","Body 1")
  .addFormDataPart("destinations[0][parameters][body-2]","Body 2")
  .addFormDataPart("attachment","test_image.jpg",
    RequestBody.create(MediaType.parse("application/octet-stream"),
    new File("/test_image.jpg")))
  .build();
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send")
  .method("POST", body)
  .addHeader("Authorization", "YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="Javascript" %}

```javascript
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
let data = new FormData();
data.append('template_id', '1');
data.append('language_id', '1');
data.append('destinations[0][phone]', '+905555555555');
data.append('destinations[0][parameters][header-1]', 'Header 1');
data.append('destinations[0][parameters][body-1]', 'Body 1');
data.append('destinations[0][parameters][body-2]', 'Body 2');
data.append('attachment', fs.createReadStream('/test_image.jpg'));

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send',
  headers: { 
    'Authorization': 'YOUR_API_TOKEN', 
    ...data.getHeaders()
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('template_id' => '1','language_id' => '1','destinations[0][phone]' => '+905555555555','destinations[0][parameters][header-1]' => 'Header 1','destinations[0][parameters][body-1]' => 'Body 1','destinations[0][parameters][body-2]' => 'Body 2','attachment'=> new CURLFILE('/test_image.jpg')),
  CURLOPT_HTTPHEADER => array(
    'Authorization: YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send"

payload = {'template_id': '1',
'language_id': '1',
'destinations[0][phone]': '+905555555555',
'destinations[0][parameters][header-1]': 'Header 1',
'destinations[0][parameters][body-1]': 'Body 1',
'destinations[0][parameters][body-2]': 'Body 2'}
files=[
  ('attachment',('test_image.jpg',open('/test_image.jpg','rb'),'image/png'))
]
headers = {
  'Authorization': 'YOUR_API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)

```

{% endtab %}
{% endtabs %}

### Bulk Send WhatsApp Message Template

<mark style="color:green;">`POST`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk`

Send active WhatsApp message template to multiple WhatsApp number. If you send with attachments, use form-data. You can also send other body parameters with form-data as well.&#x20;

#### Path Parameters

| Name                                             | Type    | Description                |
| ------------------------------------------------ | ------- | -------------------------- |
| IntegrationId <mark style="color:red;">\*</mark> | Integer | The ID of your integration |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | string | Your API Token |

#### Request Body

<table><thead><tr><th width="219">Name</th><th width="96">Type</th><th>Description</th></tr></thead><tbody><tr><td>template_id <mark style="color:red;">*</mark></td><td>Integer</td><td>The template id of the template to be sent.</td></tr><tr><td>language_id <mark style="color:red;">*</mark></td><td>Integer</td><td>The language id of the template to be sent.</td></tr><tr><td>destinations[]</td><td>array</td><td>Destinations for the template.</td></tr><tr><td>destinations.*.phone</td><td>string</td><td>WhatsApp number to be sent. It should start with (+) and a country code.</td></tr><tr><td>parameters</td><td>object</td><td>Required parameters for the template. The key list received in the template list should be used as a key during submission.</td></tr><tr><td>attachment </td><td>file</td><td>Attachment for the message template (only allowed in form-data).</td></tr><tr><td>destinations_file</td><td>file</td><td>WhatsApp numbers csv file to be sent. It should start with (+) and a country code.</td></tr></tbody></table>

{% tabs %}
{% tab title="200 " %}

```json
{
    "phones": [
        "+905555555555"
    ]
}
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request POST 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk' \
--header 'Authorization: YOUR_API_TOKEN' \
--form 'template_id="1"' \
--form 'language_id="1"' \
--form 'destinations[0][phone]="+905555555555"' \
--form 'parameters[header-1]="Header 1"' \
--form 'parameters[body-1]="Body 1"' \
--form 'parameters[body-2]="Body 2"' \
--form 'attachment=@"/test_image.jpg"'
```

{% endtab %}

{% tab title="C#" %}

```csharp
var options = new RestClientOptions("https://public-api.desk360.com")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/v1/integrations/:integrationId/conversations/templates/send/bulk", Method.Post);
request.AddHeader("Authorization", "YOUR_API_TOKEN");
request.AlwaysMultipartFormData = true;
request.AddParameter("template_id", "1");
request.AddParameter("language_id", "1");
request.AddParameter("destinations[0][phone]", "+905555555555");
request.AddParameter("parameters[header-1]", "Header 1");
request.AddParameter("parameters[body-1]", "Body 1");
request.AddParameter("parameters[body-2]", "Body 2");
request.AddFile("attachment", "/test_image.jpg");
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("template_id","1")
  .addFormDataPart("language_id","1")
  .addFormDataPart("destinations[0][phone]","+905555555555")
  .addFormDataPart("parameters[header-1]","Header 1")
  .addFormDataPart("parameters[body-1]","Body 1")
  .addFormDataPart("parameters[body-2]","Body 2")
  .addFormDataPart("attachment","test_image.jpg",
    RequestBody.create(MediaType.parse("application/octet-stream"),
    new File("/test_image.jpg")))
  .build();
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk")
  .method("POST", body)
  .addHeader("Authorization", "YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
let data = new FormData();
data.append('template_id', '1');
data.append('language_id', '1');
data.append('destinations[0][phone]', '+905555555555');
data.append('parameters[header-1]', 'Header 1');
data.append('parameters[body-1]', 'Body 1');
data.append('parameters[body-2]', 'Body 2');
data.append('attachment', fs.createReadStream('/test_image.jpg'));

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk',
  headers: { 
    'Authorization': 'YOUR_API_TOKEN', 
    ...data.getHeaders()
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('template_id' => '1','language_id' => '1','destinations[0][phone]' => '+905555555555','parameters[header-1]' => 'Header 1','parameters[body-1]' => 'Body 1','parameters[body-2]' => 'Body 2','attachment'=> new CURLFILE('/test_image.jpg')),
  CURLOPT_HTTPHEADER => array(
    'Authorization: YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk"

payload = {'template_id': '1',
'language_id': '1',
'destinations[0][phone]': '+905555555555',
'parameters[header-1]': 'Header 1',
'parameters[body-1]': 'Body 1',
'parameters[body-2]': 'Body 2'}
files=[
  ('attachment',('desk360_facebook.png',open('/test_image.jpg','rb'),'image/png'))
]
headers = {
  'Authorization': 'YOUR_API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)

```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request POST 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send' \
--header 'Authorization: YOUR_API_TOKEN' \
--form 'template_id="1"' \
--form 'language_id="1"' \
--form 'destinations[0][phone]="+905555555555"' \
--form 'destinations[0][parameters][header-1]="Header 1"' \
--form 'destinations[0][parameters][body-1]="Body 1"' \
--form 'destinations[0][parameters][body-2]="Body 2"' \
--form 'attachment=@"/test_image.jpg"'
```

{% endtab %}

{% tab title="C#" %}

```csharp
var options = new RestClientOptions("https://public-api.desk360.com")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/v1/integrations/integrationId/conversations/templates/send", Method.Post);
request.AddHeader("Authorization", "YOUR_API_TOKEN");
request.AlwaysMultipartFormData = true;
request.AddParameter("template_id", "1");
request.AddParameter("language_id", "1");
request.AddParameter("destinations[0][phone]", "+905555555555");
request.AddParameter("destinations[0][parameters][header-1]", "Header 1");
request.AddParameter("destinations[0][parameters][body-1]", "Body 1");
request.AddParameter("destinations[0][parameters][body-2]", "Body 2");
request.AddFile("attachment", "/test_image.jpg");
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("template_id","1")
  .addFormDataPart("language_id","1")
  .addFormDataPart("destinations[0][phone]","+905555555555")
  .addFormDataPart("destinations[0][parameters][header-1]","Header 1")
  .addFormDataPart("destinations[0][parameters][body-1]","Body 1")
  .addFormDataPart("destinations[0][parameters][body-2]","Body 2")
  .addFormDataPart("attachment","test_image.jpg",
    RequestBody.create(MediaType.parse("application/octet-stream"),
    new File("/test_image.jpg")))
  .build();
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send")
  .method("POST", body)
  .addHeader("Authorization", "YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="Javascript" %}

```javascript
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
let data = new FormData();
data.append('template_id', '1');
data.append('language_id', '1');
data.append('destinations[0][phone]', '+905555555555');
data.append('destinations[0][parameters][header-1]', 'Header 1');
data.append('destinations[0][parameters][body-1]', 'Body 1');
data.append('destinations[0][parameters][body-2]', 'Body 2');
data.append('attachment', fs.createReadStream('/test_image.jpg'));

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send',
  headers: { 
    'Authorization': 'YOUR_API_TOKEN', 
    ...data.getHeaders()
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('template_id' => '1','language_id' => '1','destinations[0][phone]' => '+905555555555','destinations[0][parameters][header-1]' => 'Header 1','destinations[0][parameters][body-1]' => 'Body 1','destinations[0][parameters][body-2]' => 'Body 2','attachment'=> new CURLFILE('/test_image.jpg')),
  CURLOPT_HTTPHEADER => array(
    'Authorization: YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send"

payload = {'template_id': '1',
'language_id': '1',
'destinations[0][phone]': '+905555555555',
'destinations[0][parameters][header-1]': 'Header 1',
'destinations[0][parameters][body-1]': 'Body 1',
'destinations[0][parameters][body-2]': 'Body 2'}
files=[
  ('attachment',('test_image.jpg',open('/test_image.jpg','rb'),'image/png'))
]
headers = {
  'Authorization': 'YOUR_API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)

```

{% endtab %}
{% endtabs %}

### Bulk Send WhatsApp Message Template

<mark style="color:green;">`POST`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk`

Send active WhatsApp message template to multiple WhatsApp number. If you send with attachments, use form-data. You can also send other body parameters with form-data as well.&#x20;

#### Path Parameters

| Name                                             | Type    | Description                |
| ------------------------------------------------ | ------- | -------------------------- |
| IntegrationId <mark style="color:red;">\*</mark> | Integer | The ID of your integration |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | string | Your API Token |

#### Request Body

<table><thead><tr><th width="219">Name</th><th width="96">Type</th><th>Description</th></tr></thead><tbody><tr><td>template_id <mark style="color:red;">*</mark></td><td>Integer</td><td>The template id of the template to be sent.</td></tr><tr><td>language_id <mark style="color:red;">*</mark></td><td>Integer</td><td>The language id of the template to be sent.</td></tr><tr><td>destinations[]</td><td>array</td><td>Destinations for the template.</td></tr><tr><td>destinations.*.phone</td><td>string</td><td>WhatsApp number to be sent. It should start with (+) and a country code.</td></tr><tr><td>parameters</td><td>object</td><td>Required parameters for the template. The key list received in the template list should be used as a key during submission.</td></tr><tr><td>attachment </td><td>file</td><td>Attachment for the message template (only allowed in form-data).</td></tr><tr><td>destinations_file</td><td>file</td><td>WhatsApp numbers csv file to be sent. It should start with (+) and a country code.</td></tr></tbody></table>

{% tabs %}
{% tab title="200 " %}

```json
{
    "phones": [
        "+905555555555"
    ]
}
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request POST 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk' \
--header 'Authorization: YOUR_API_TOKEN' \
--form 'template_id="1"' \
--form 'language_id="1"' \
--form 'destinations[0][phone]="+905555555555"' \
--form 'parameters[header-1]="Header 1"' \
--form 'parameters[body-1]="Body 1"' \
--form 'parameters[body-2]="Body 2"' \
--form 'attachment=@"/test_image.jpg"'
```

{% endtab %}

{% tab title="C#" %}

```csharp
var options = new RestClientOptions("https://public-api.desk360.com")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/v1/integrations/:integrationId/conversations/templates/send/bulk", Method.Post);
request.AddHeader("Authorization", "YOUR_API_TOKEN");
request.AlwaysMultipartFormData = true;
request.AddParameter("template_id", "1");
request.AddParameter("language_id", "1");
request.AddParameter("destinations[0][phone]", "+905555555555");
request.AddParameter("parameters[header-1]", "Header 1");
request.AddParameter("parameters[body-1]", "Body 1");
request.AddParameter("parameters[body-2]", "Body 2");
request.AddFile("attachment", "/test_image.jpg");
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("template_id","1")
  .addFormDataPart("language_id","1")
  .addFormDataPart("destinations[0][phone]","+905555555555")
  .addFormDataPart("parameters[header-1]","Header 1")
  .addFormDataPart("parameters[body-1]","Body 1")
  .addFormDataPart("parameters[body-2]","Body 2")
  .addFormDataPart("attachment","test_image.jpg",
    RequestBody.create(MediaType.parse("application/octet-stream"),
    new File("/test_image.jpg")))
  .build();
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk")
  .method("POST", body)
  .addHeader("Authorization", "YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
let data = new FormData();
data.append('template_id', '1');
data.append('language_id', '1');
data.append('destinations[0][phone]', '+905555555555');
data.append('parameters[header-1]', 'Header 1');
data.append('parameters[body-1]', 'Body 1');
data.append('parameters[body-2]', 'Body 2');
data.append('attachment', fs.createReadStream('/test_image.jpg'));

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk',
  headers: { 
    'Authorization': 'YOUR_API_TOKEN', 
    ...data.getHeaders()
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('template_id' => '1','language_id' => '1','destinations[0][phone]' => '+905555555555','parameters[header-1]' => 'Header 1','parameters[body-1]' => 'Body 1','parameters[body-2]' => 'Body 2','attachment'=> new CURLFILE('/test_image.jpg')),
  CURLOPT_HTTPHEADER => array(
    'Authorization: YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk"

payload = {'template_id': '1',
'language_id': '1',
'destinations[0][phone]': '+905555555555',
'parameters[header-1]': 'Header 1',
'parameters[body-1]': 'Body 1',
'parameters[body-2]': 'Body 2'}
files=[
  ('attachment',('desk360_facebook.png',open('/test_image.jpg','rb'),'image/png'))
]
headers = {
  'Authorization': 'YOUR_API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)

```

{% endtab %}
{% endtabs %}

### List Message Template Sending Stats

<mark style="color:blue;">`GET`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/stats`

Get the list of WhatsApp message template sendings. Each item represents a single sending operation (single or bulk) and its id is the sending id used in the detail endpoint.

**Path Parameters**

| Name                                             | Type    | Description                |
| ------------------------------------------------ | ------- | -------------------------- |
| IntegrationId <mark style="color:red;">\*</mark> | Integer | The ID of your integration |

**Query Parameters**

| Name | Type    | Description     |
| ---- | ------- | --------------- |
| page | Integer | The page number |

**Headers**

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | String | Your API Token |

{% tabs %}
{% tab title="200 " %}

```json
[
    {
        "id": "5d3c5c2a-8b1a-4c6d-1e7f-2a4b6c9d0e1c",
        "name": "template_02",
        "message": "Merhaba {{1}}, Sipariş takip numaranız: {{2}} Bu takip numarası ile siparişinizin durumunu sorgulayabilirsiniz.",
        "language": "English",
        "import_status": "",
        "posted_by": "John Doe",
        "last_sended": "2026-06-30T09:41:12.000000Z"
    }
]
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request GET 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/stats?page=1' \
--header 'Authorization: Bearer YOUR_API_TOKEN'
```

{% endtab %}

{% tab title="C#" %}

```csharp
var options = new RestClientOptions("https://public-api.desk360.com")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/v1/integrations/:integrationId/conversations/templates/send/bulk", Method.Post);
request.AddHeader("Authorization", "YOUR_API_TOKEN");
request.AlwaysMultipartFormData = true;
request.AddParameter("template_id", "1");
request.AddParameter("language_id", "1");
request.AddParameter("destinations[0][phone]", "+905555555555");
request.AddParameter("parameters[header-1]", "Header 1");
request.AddParameter("parameters[body-1]", "Body 1");
request.AddParameter("parameters[body-2]", "Body 2");
request.AddFile("attachment", "/test_image.jpg");
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("template_id","1")
  .addFormDataPart("language_id","1")
  .addFormDataPart("destinations[0][phone]","+905555555555")
  .addFormDataPart("parameters[header-1]","Header 1")
  .addFormDataPart("parameters[body-1]","Body 1")
  .addFormDataPart("parameters[body-2]","Body 2")
  .addFormDataPart("attachment","test_image.jpg",
    RequestBody.create(MediaType.parse("application/octet-stream"),
    new File("/test_image.jpg")))
  .build();
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk")
  .method("POST", body)
  .addHeader("Authorization", "YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
let data = new FormData();
data.append('template_id', '1');
data.append('language_id', '1');
data.append('destinations[0][phone]', '+905555555555');
data.append('parameters[header-1]', 'Header 1');
data.append('parameters[body-1]', 'Body 1');
data.append('parameters[body-2]', 'Body 2');
data.append('attachment', fs.createReadStream('/test_image.jpg'));

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk',
  headers: { 
    'Authorization': 'YOUR_API_TOKEN', 
    ...data.getHeaders()
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('template_id' => '1','language_id' => '1','destinations[0][phone]' => '+905555555555','parameters[header-1]' => 'Header 1','parameters[body-1]' => 'Body 1','parameters[body-2]' => 'Body 2','attachment'=> new CURLFILE('/test_image.jpg')),
  CURLOPT_HTTPHEADER => array(
    'Authorization: YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk"

payload = {'template_id': '1',
'language_id': '1',
'destinations[0][phone]': '+905555555555',
'parameters[header-1]': 'Header 1',
'parameters[body-1]': 'Body 1',
'parameters[body-2]': 'Body 2'}
files=[
  ('attachment',('desk360_facebook.png',open('/test_image.jpg','rb'),'image/png'))
]
headers = {
  'Authorization': 'YOUR_API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)
```

{% endtab %}
{% endtabs %}

### Get Message Template Sending Stats Detail

<mark style="color:blue;">`GET`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/stats/:sendingId`

Get the per-recipient delivery statuses of a single template sending.

**Path Parameters**

| Name                                             | Type    | Description                                         |
| ------------------------------------------------ | ------- | --------------------------------------------------- |
| IntegrationId <mark style="color:red;">\*</mark> | Integer | The ID of your integration                          |
| SendingId <mark style="color:red;">\*</mark>     | String  | The sending id returned from the sending stats list |

**Query Parameters**

| Name | Type    | Description     |
| ---- | ------- | --------------- |
| page | Integer | The page number |

**Headers**

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | String | Your API Token |

{% tabs %}
{% tab title="200 " %}

```json
[
    {
        "id": "5d3c5c2a-8b1a-4c6d-1e7f-2a4b6c9d0e1c",
        "phone": "+905555555555",
        "status_id": 4,
        "status_label": "Read",
        "error_code": null,
        "error_message": null,
        "date": "2026-06-30T09:41:12.000000Z"
    },
    {
        "id": "5d3c5c2a-8b1a-4c6d-1e7f-2a4b6c9d0e1c",
        "phone": "+905555555556",
        "status_id": 3,
        "status_label": "Delivered",
        "error_code": null,
        "error_message": null,
        "date": "2026-06-30T09:41:12.000000Z"
    },
    {
        "id": "5d3c5c2a-8b1a-4c6d-1e7f-2a4b6c9d0e1c",
        "phone": "+905555555557",
        "status_id": 5,
        "status_label": "Failed",
        "error_code": 131049,
        "error_message": "Meta chose not to deliver",
        "date": "2026-06-30T09:41:12.000000Z"
    }
]
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request GET 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/stats/:sendingId?page=1' \
--header 'Authorization: Bearer YOUR_API_TOKEN'
```

{% endtab %}

{% tab title="C#" %}

```csharp
var options = new RestClientOptions("https://public-api.desk360.com")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/v1/integrations/:integrationId/conversations/templates/send/bulk", Method.Post);
request.AddHeader("Authorization", "YOUR_API_TOKEN");
request.AlwaysMultipartFormData = true;
request.AddParameter("template_id", "1");
request.AddParameter("language_id", "1");
request.AddParameter("destinations[0][phone]", "+905555555555");
request.AddParameter("parameters[header-1]", "Header 1");
request.AddParameter("parameters[body-1]", "Body 1");
request.AddParameter("parameters[body-2]", "Body 2");
request.AddFile("attachment", "/test_image.jpg");
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("template_id","1")
  .addFormDataPart("language_id","1")
  .addFormDataPart("destinations[0][phone]","+905555555555")
  .addFormDataPart("parameters[header-1]","Header 1")
  .addFormDataPart("parameters[body-1]","Body 1")
  .addFormDataPart("parameters[body-2]","Body 2")
  .addFormDataPart("attachment","test_image.jpg",
    RequestBody.create(MediaType.parse("application/octet-stream"),
    new File("/test_image.jpg")))
  .build();
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk")
  .method("POST", body)
  .addHeader("Authorization", "YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
let data = new FormData();
data.append('template_id', '1');
data.append('language_id', '1');
data.append('destinations[0][phone]', '+905555555555');
data.append('parameters[header-1]', 'Header 1');
data.append('parameters[body-1]', 'Body 1');
data.append('parameters[body-2]', 'Body 2');
data.append('attachment', fs.createReadStream('/test_image.jpg'));

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk',
  headers: { 
    'Authorization': 'YOUR_API_TOKEN', 
    ...data.getHeaders()
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('template_id' => '1','language_id' => '1','destinations[0][phone]' => '+905555555555','parameters[header-1]' => 'Header 1','parameters[body-1]' => 'Body 1','parameters[body-2]' => 'Body 2','attachment'=> new CURLFILE('/test_image.jpg')),
  CURLOPT_HTTPHEADER => array(
    'Authorization: YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations/:integrationId/conversations/templates/send/bulk"

payload = {'template_id': '1',
'language_id': '1',
'destinations[0][phone]': '+905555555555',
'parameters[header-1]': 'Header 1',
'parameters[body-1]': 'Body 1',
'parameters[body-2]': 'Body 2'}
files=[
  ('attachment',('desk360_facebook.png',open('/test_image.jpg','rb'),'image/png'))
]
headers = {
  'Authorization': 'YOUR_API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)
```

{% endtab %}
{% endtabs %}

## WhatsApp Messages

Use the messages node to send text, location, contact, media, interactive, location request and read receipt message to your customers.

{% hint style="info" %}
If the user has no phone number (contacted you via a WhatsApp username), send the message using the `recipient` parameter with their business-scoped user ID (e.g. `TR.15590A515V846X34`) instead of `to`. Provide only one of the two.
{% endhint %}

### Send WhatsApp Message

<mark style="color:green;">`POST`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages`

Send message to an active WhatsApp number.

#### Path Parameters

| Name                                            | Type    | Description                |
| ----------------------------------------------- | ------- | -------------------------- |
| IntegrationId<mark style="color:red;">\*</mark> | Integer | The ID of your integration |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | string | Your API Token |

#### Request Body

| Name                                    | Type   | Description                                                              |
| --------------------------------------- | ------ | ------------------------------------------------------------------------ |
| to<mark style="color:red;">\*</mark>    | string | WhatsApp number to be sent. It should start with (+) and a country code. |
| text <mark style="color:red;">\*</mark> | string | Message body. It should max 4096 chars.                                  |

#### Text Formatting

You can style message text using the HTML tags listed below. Include them directly in the message `body` and the recipient's client will render them.

```html
# Inline styles
Bold            <b>Bold</b>
Italic          <i>Italic</i>
Strikethrough   <s>Strikethrough</s>
Monospace       <code>Monospace</code>

# Structure
Line break      <br>
Paragraph       <p>Paragraph</p>
Quote           <blockquote>Quote</blockquote>

# Lists
Bullet list     <ul><li>item</li></ul>
Numbered list   <ol><li>item</li></ol>

# Link
Link            <a href="https://example.com">Link</a>
```

{% tabs %}
{% tab title="200 " %}

```json
{
    "message_id": "gBEGkFBXUQRnAgnoOJ1ESPKBwME"
}
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request POST 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--form 'to="+90xxxxxxxxxx"' \
--form 'text="Hello!"'
```

{% endtab %}

{% tab title="C#" %}

```csharp
var options = new RestClientOptions("https://public-api.desk360.com")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/v1/integrations/:integrationId/conversations/messages", Method.Post);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
request.AlwaysMultipartFormData = true;
request.AddParameter("to", "+90xxxxxxxxxx");
request.AddParameter("text", "Hello!");
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("to","+90xxxxxxxxxx")
  .addFormDataPart("text","Hello!")
  .build();
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages")
  .method("POST", body)
  .addHeader("Authorization", "Bearer YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const FormData = require('form-data');
let data = new FormData();
data.append('to', '+90xxxxxxxxxx');
data.append('text', 'hello!');

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages',
  headers: { 
    'Authorization': 'Bearer YOUR_API_TOKEN', 
    ...data.getHeaders()
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('to' => '+90xxxxxxxxxx','text' => 'Hello!'),
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages"

payload = {'to': '+90xxxxxxxxxx',
'text': 'Hello!'}
files=[

]
headers = {
  'Authorization': 'Bearer YOUR_API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)

```

{% endtab %}
{% endtabs %}

### Send WhatsApp Location Message

<mark style="color:green;">`POST`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages`

Send location message to an active WhatsApp number.

#### Path Parameters

| Name                                            | Type    | Description                |
| ----------------------------------------------- | ------- | -------------------------- |
| IntegrationId<mark style="color:red;">\*</mark> | Integer | The ID of your integration |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | String | Your API Token |

#### Request Body

| Name                                                 | Type    | Description                                                              |
| ---------------------------------------------------- | ------- | ------------------------------------------------------------------------ |
| to<mark style="color:red;">\*</mark>                 | String  | WhatsApp number to be sent. It should start with (+) and a country code. |
| location<mark style="color:red;">\*</mark>           | Object  | An object of the message.                                                |
| location.longitude<mark style="color:red;">\*</mark> | Numeric | Longitude of location.                                                   |
| location.latitude<mark style="color:red;">\*</mark>  | Numeric | Latitude of location.                                                    |
| location.name<mark style="color:red;">\*</mark>      | String  | Name of location.                                                        |
| location.address<mark style="color:red;">\*</mark>   | String  | Address of location.                                                     |

{% tabs %}
{% tab title="200 " %}

```json
{
    "message_id": "gBEGkFBXUQRnAgn3kXajlucbaso"
}
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request POST 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/locations' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--data '{
    "to": "+90xxxxxxxxxx",
    "location": {
        "longitude": -122.425332,
        "latitude": 37.758056,
        "name": "Facebook HQ",
        "address": "1 Hacker Way, Menlo Park, CA 94025"
    }
}'
```

{% endtab %}

{% tab title="C#" %}

```csharp
var options = new RestClientOptions("https://public-api.desk360.com")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/v1/integrations/:integrationId/conversations/messages/locations", Method.Post);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
var body = @"{" + "\n" +
@"    ""to"": ""+90xxxxxxxxxx""," + "\n" +
@"    ""location"": {" + "\n" +
@"        ""longitude"": -122.425332," + "\n" +
@"        ""latitude"": 37.758056," + "\n" +
@"        ""name"": ""Facebook HQ""," + "\n" +
@"        ""address"": ""1 Hacker Way, Menlo Park, CA 94025""" + "\n" +
@"    }" + "\n" +
@"}";
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"to\": \"+90xxxxxxxxxx\",\n    \"location\": {\n        \"longitude\": -122.425332,\n        \"latitude\": 37.758056,\n        \"name\": \"Facebook HQ\",\n        \"address\": \"1 Hacker Way, Menlo Park, CA 94025\"\n    }\n}");
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/locations")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
let data = JSON.stringify({
  "to": "+90xxxxxxxxxx",
  "location": {
    "longitude": -122.425332,
    "latitude": 37.758056,
    "name": "Facebook HQ",
    "address": "1 Hacker Way, Menlo Park, CA 94025"
  }
});

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/locations',
  headers: { 
    'Content-Type': 'application/json', 
    'Authorization': 'Bearer YOUR_API_TOKEN'
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/locations',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "to": "+90xxxxxxxxxx",
    "location": {
        "longitude": -122.425332,
        "latitude": 37.758056,
        "name": "Facebook HQ",
        "address": "1 Hacker Way, Menlo Park, CA 94025"
    }
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'Authorization: Bearer YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests
import json

url = "https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/locations"

payload = json.dumps({
  "to": "+90xxxxxxxxxx",
  "location": {
    "longitude": -122.425332,
    "latitude": 37.758056,
    "name": "Facebook HQ",
    "address": "1 Hacker Way, Menlo Park, CA 94025"
  }
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer YOUR_API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

```

{% endtab %}
{% endtabs %}

### Send WhatsApp Contact Message

<mark style="color:green;">`POST`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/contacts`

Send contact message to an active WhatsApp number.

#### Path Parameters

| Name                                            | Type    | Description                |
| ----------------------------------------------- | ------- | -------------------------- |
| IntegrationId<mark style="color:red;">\*</mark> | Integer | The ID of your integration |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | String | Your API Token |

#### Request Body

| Name                                                               | Type   | Description                                                              |
| ------------------------------------------------------------------ | ------ | ------------------------------------------------------------------------ |
| to<mark style="color:red;">\*</mark>                               | String | WhatsApp number to be sent. It should start with (+) and a country code. |
| contacts<mark style="color:red;">\*</mark>                         | Array  | An array of the message.                                                 |
| contacts.\*.addresses.\*.street                                    | String | Street of address.                                                       |
| contacts.\*.addresses.\*.city                                      | String | City of address.                                                         |
| contacts.\*.addresses.\*.state                                     | String | State of address.                                                        |
| contacts.\*.addresses.\*.zip                                       | String | Zip code of address.                                                     |
| contacts.\*.addresses.\*.country                                   | String | Country of address.                                                      |
| contacts.\*.addresses.\*.country\_code                             | String | Country code of address.                                                 |
| contacts.\*.addresses.\*.type                                      | String | Type of address.                                                         |
| contacts.\*.birthday                                               | String | Birtday of contacts. Must be "Y-m-d" format.                             |
| contacts.\*.emails.\*.email                                        | String | Email of emails.                                                         |
| contacts.\*.emails.\*.type                                         | String | Type of emails.                                                          |
| contacts.\*.name.formatted\_name<mark style="color:red;">\*</mark> | String | Formatted name of name object.                                           |
| contacts.\*.name.first\_name<mark style="color:red;">\*</mark>     | String | First name of name object.                                               |
| contacts.\*.name.last\_name<mark style="color:red;">\*</mark>      | String | Last name of name object.                                                |
| contacts.\*.name.middle\_name                                      | String | Middle name of name object.                                              |
| contacts.\*.name.suffix                                            | String | Suffix of name.                                                          |
| contacts.\*.name.prefix                                            | String | Prefix of name.                                                          |
| contacts.\*.org.company                                            | String | Company name of organization.                                            |
| contacts.\*.org.department                                         | String | Department of organization.                                              |
| contacts.\*.org.title                                              | String | Title of organization.                                                   |
| contacts.\*.phones.\*.phone                                        | String | Phone number of phones.                                                  |
| contacts.\*.phones.\*.type                                         | String | Type of phones.                                                          |
| contacts.\*.phones.\*.wa\_id                                       | String | WAID of phones                                                           |
| contacts.\*.urls.\*.url                                            | String | Url of urls.                                                             |
| contacts.\*.urls.\*.type                                           | String | Type of urls.                                                            |

{% tabs %}
{% tab title="200 " %}

```json
{
    "message_id": "gBEGkFBXUQRnAgkCL1xSaIMoDz0"
}
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request POST 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/contacts' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--data-raw '{
    "to": "+90xxxxxxxxxx",
    "contacts": [
        {
            "addresses": [
                {
                    "city": "Menlo Park",
                    "country": "United States",
                    "country_code": "us",
                    "state": "CA",
                    "street": "1 Hacker Way",
                    "type": "HOME",
                    "zip": "94025"
                }
            ],
            "birthday": "2012-08-18",
            "emails": [
                {
                    "email": "test@whatsapp.com",
                    "type": "WORK"
                }
            ],
            "name": {
                "first_name": "John",
                "formatted_name": "John Smith",
                "last_name": "Smith"
            },
            "org": {
                "company": "WhatsApp",
                "department": "Design",
                "title": "Manager"
            },
            "phones": [
                {
                    "phone": "+1 (650) 555-1234",
                    "type": "WORK",
                    "wa_id": "16505551234"
                }
            ],
            "urls": [
                {
                    "url": "https://www.facebook.com",
                    "type": "WORK"
                }
            ]
        }
    ]
}'
```

{% endtab %}

{% tab title="C#" %}

```csharp
var options = new RestClientOptions("https://public-api.desk360.com")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/v1/integrations/:integrationId/conversations/messages/contacts", Method.Post);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
var body = @"{" + "\n" +
@"    ""to"": ""+90xxxxxxxxxx""," + "\n" +
@"    ""contacts"": [" + "\n" +
@"        {" + "\n" +
@"            ""addresses"": [" + "\n" +
@"                {" + "\n" +
@"                    ""city"": ""Menlo Park""," + "\n" +
@"                    ""country"": ""United States""," + "\n" +
@"                    ""country_code"": ""us""," + "\n" +
@"                    ""state"": ""CA""," + "\n" +
@"                    ""street"": ""1 Hacker Way""," + "\n" +
@"                    ""type"": ""HOME""," + "\n" +
@"                    ""zip"": ""94025""" + "\n" +
@"                }" + "\n" +
@"            ]," + "\n" +
@"            ""birthday"": ""2012-08-18""," + "\n" +
@"            ""emails"": [" + "\n" +
@"                {" + "\n" +
@"                    ""email"": ""test@whatsapp.com""," + "\n" +
@"                    ""type"": ""WORK""" + "\n" +
@"                }" + "\n" +
@"            ]," + "\n" +
@"            ""name"": {" + "\n" +
@"                ""first_name"": ""John""," + "\n" +
@"                ""formatted_name"": ""John Smith""," + "\n" +
@"                ""last_name"": ""Smith""" + "\n" +
@"            }," + "\n" +
@"            ""org"": {" + "\n" +
@"                ""company"": ""WhatsApp""," + "\n" +
@"                ""department"": ""Design""," + "\n" +
@"                ""title"": ""Manager""" + "\n" +
@"            }," + "\n" +
@"            ""phones"": [" + "\n" +
@"                {" + "\n" +
@"                    ""phone"": ""+1 (650) 555-1234""," + "\n" +
@"                    ""type"": ""WORK""," + "\n" +
@"                    ""wa_id"": ""16505551234""" + "\n" +
@"                }" + "\n" +
@"            ]," + "\n" +
@"            ""urls"": [" + "\n" +
@"                {" + "\n" +
@"                    ""url"": ""https://www.facebook.com""," + "\n" +
@"                    ""type"": ""WORK""" + "\n" +
@"                }" + "\n" +
@"            ]" + "\n" +
@"        }" + "\n" +
@"    ]" + "\n" +
@"}";
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"to\": \"+90xxxxxxxxxx\",\n    \"contacts\": [\n        {\n            \"addresses\": [\n                {\n                    \"city\": \"Menlo Park\",\n                    \"country\": \"United States\",\n                    \"country_code\": \"us\",\n                    \"state\": \"CA\",\n                    \"street\": \"1 Hacker Way\",\n                    \"type\": \"HOME\",\n                    \"zip\": \"94025\"\n                }\n            ],\n            \"birthday\": \"2012-08-18\",\n            \"emails\": [\n                {\n                    \"email\": \"test@whatsapp.com\",\n                    \"type\": \"WORK\"\n                }\n            ],\n            \"name\": {\n                \"first_name\": \"John\",\n                \"formatted_name\": \"John Smith\",\n                \"last_name\": \"Smith\"\n            },\n            \"org\": {\n                \"company\": \"WhatsApp\",\n                \"department\": \"Design\",\n                \"title\": \"Manager\"\n            },\n            \"phones\": [\n                {\n                    \"phone\": \"+1 (650) 555-1234\",\n                    \"type\": \"WORK\",\n                    \"wa_id\": \"16505551234\"\n                }\n            ],\n            \"urls\": [\n                {\n                    \"url\": \"https://www.facebook.com\",\n                    \"type\": \"WORK\"\n                }\n            ]\n        }\n    ]\n}");
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/contacts")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
let data = JSON.stringify({
  "to": "+90xxxxxxxxxx",
  "contacts": [
    {
      "addresses": [
        {
          "city": "Menlo Park",
          "country": "United States",
          "country_code": "us",
          "state": "CA",
          "street": "1 Hacker Way",
          "type": "HOME",
          "zip": "94025"
        }
      ],
      "birthday": "2012-08-18",
      "emails": [
        {
          "email": "test@whatsapp.com",
          "type": "WORK"
        }
      ],
      "name": {
        "first_name": "John",
        "formatted_name": "John Smith",
        "last_name": "Smith"
      },
      "org": {
        "company": "WhatsApp",
        "department": "Design",
        "title": "Manager"
      },
      "phones": [
        {
          "phone": "+1 (650) 555-1234",
          "type": "WORK",
          "wa_id": "16505551234"
        }
      ],
      "urls": [
        {
          "url": "https://www.facebook.com",
          "type": "WORK"
        }
      ]
    }
  ]
});

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/contacts',
  headers: { 
    'Content-Type': 'application/json', 
    'Authorization': 'Bearer YOUR_API_TOKEN'
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/contacts',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "to": "+90xxxxxxxxxx",
    "contacts": [
        {
            "addresses": [
                {
                    "city": "Menlo Park",
                    "country": "United States",
                    "country_code": "us",
                    "state": "CA",
                    "street": "1 Hacker Way",
                    "type": "HOME",
                    "zip": "94025"
                }
            ],
            "birthday": "2012-08-18",
            "emails": [
                {
                    "email": "test@whatsapp.com",
                    "type": "WORK"
                }
            ],
            "name": {
                "first_name": "John",
                "formatted_name": "John Smith",
                "last_name": "Smith"
            },
            "org": {
                "company": "WhatsApp",
                "department": "Design",
                "title": "Manager"
            },
            "phones": [
                {
                    "phone": "+1 (650) 555-1234",
                    "type": "WORK",
                    "wa_id": "16505551234"
                }
            ],
            "urls": [
                {
                    "url": "https://www.facebook.com",
                    "type": "WORK"
                }
            ]
        }
    ]
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'Authorization: Bearer YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests
import json

url = "https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/contacts"

payload = json.dumps({
  "to": "+90xxxxxxxxxx",
  "contacts": [
    {
      "addresses": [
        {
          "city": "Menlo Park",
          "country": "United States",
          "country_code": "us",
          "state": "CA",
          "street": "1 Hacker Way",
          "type": "HOME",
          "zip": "94025"
        }
      ],
      "birthday": "2012-08-18",
      "emails": [
        {
          "email": "test@whatsapp.com",
          "type": "WORK"
        }
      ],
      "name": {
        "first_name": "John",
        "formatted_name": "John Smith",
        "last_name": "Smith"
      },
      "org": {
        "company": "WhatsApp",
        "department": "Design",
        "title": "Manager"
      },
      "phones": [
        {
          "phone": "+1 (650) 555-1234",
          "type": "WORK",
          "wa_id": "16505551234"
        }
      ],
      "urls": [
        {
          "url": "https://www.facebook.com",
          "type": "WORK"
        }
      ]
    }
  ]
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer YOUR_API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

```

{% endtab %}
{% endtabs %}

### Send WhatsApp Media Message

<mark style="color:green;">`POST`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/medias`

Send media messages to an active WhatsApp number.

#### Path Parameters

| Name                                            | Type    | Description                |
| ----------------------------------------------- | ------- | -------------------------- |
| IntegrationId<mark style="color:red;">\*</mark> | Integer | The ID of your integration |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | string | Your API Token |

#### Request Body

| Name                                             | Type   | Description                                                                                       |
| ------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------- |
| to<mark style="color:red;">\*</mark>             | string | WhatsApp number to be sent. It should start with (+) and a country code.                          |
| attachments\[]<mark style="color:red;">\*</mark> | object | <p>Attachment for the message (Only allowed in form-data).</p><p>Max Count: 5, Max Size: 20MB</p> |

{% tabs %}
{% tab title="200 " %}

```json
{
    "medias": {
        "images": [
            {
                "url": "https://my-cdn.desk360.com/integrations/integrationId/attachments/bTARCYuscrcWU20t0dA8aesXufZKVuS0INd8rR5L.png",
                "name": "desk360.png",
                "type": "image",
                "aws": true,
                "content_type": "image/png",
                "message_id": "gBEGkFBXUQRnAgkEg3us4YW8UJE",
                "media_id": "cae26b43-1463-44f5-9a81-f4119afbf6d9"
            }
        ]
    }
}
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request POST 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/medias' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--form 'to="+90xxxxxxxxxx"' \
--form 'attachments[]=@"/path/to/file"'
```

{% endtab %}

{% tab title="C#" %}

```csharp
var options = new RestClientOptions("https://public-api.desk360.com")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/v1/integrations/:integrationId/conversations/messages/medias", Method.Post);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
request.AlwaysMultipartFormData = true;
request.AddParameter("to", "+90xxxxxxxxxx");
request.AddFile("attachments[]", "/path/to/file");
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("to","+90xxxxxxxxxx")
  .addFormDataPart("attachments[]","file",
    RequestBody.create(MediaType.parse("application/octet-stream"),
    new File("/path/to/file")))
  .build();
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/medias")
  .method("POST", body)
  .addHeader("Authorization", "Bearer YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
let data = new FormData();
data.append('to', '+90xxxxxxxxxx');
data.append('attachments[]', fs.createReadStream('/path/to/file'));

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/medias',
  headers: { 
    'Authorization': 'Bearer YOUR_API_TOKEN', 
    ...data.getHeaders()
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/medias',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('to' => '+90xxxxxxxxxx','attachments[]'=> new CURLFILE('/path/to/file')),
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/medias"

payload = {'to': '+90xxxxxxxxxx'}
files=[
  ('attachments[]',('file',open('/path/to/file','rb'),'application/octet-stream'))
]
headers = {
  'Authorization': 'Bearer YOUR_API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)

```

{% endtab %}
{% endtabs %}

### Get WhatsApp Media

<mark style="color:blue;">`GET`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/medias/:mediaId`

Get whatsapp media by media id.

#### Path Parameters

| Name                                            | Type    | Description                |
| ----------------------------------------------- | ------- | -------------------------- |
| IntegrationId<mark style="color:red;">\*</mark> | Integer | The ID of your integration |
| MediaId<mark style="color:red;">\*</mark>       | String  | The ID of media            |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | string | Your API Token |

{% tabs %}
{% tab title="200 " %}

```json
{fileObject}
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request GET 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/medias/:mediaId' \
--header 'Authorization: Bearer YOUR_API_TOKEN'
```

{% endtab %}

{% tab title="C#" %}

```csharp
var options = new RestClientOptions("https://public-api.desk360.com")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/v1/integrations/:integrationId/conversations/messages/medias/:mediaId", Method.Get);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(JSON, "{}");
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/medias/:mediaId")
  .method("GET", body)
  .addHeader("Authorization", "Bearer YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const FormData = require('form-data');
let data = new FormData();

let config = {
  method: 'get',
  maxBodyLength: Infinity,
  url: 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/medias/:mediaId',
  headers: { 
    'Authorization': 'Bearer YOUR_API_TOKEN', 
    ...data.getHeaders()
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/medias/:mediaId',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/medias/:mediaId"

payload = {}
files={}
headers = {
  'Authorization': 'Bearer YOUR_API_TOKEN'
}

response = requests.request("GET", url, headers=headers, data=payload, files=files)

print(response.text)

```

{% endtab %}
{% endtabs %}

### Send WhatsApp Interactive Message

<mark style="color:green;">`POST`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/interactive`

Send interactive message to an active WhatsApp number.

#### Path Parameters

| Name                                            | Type    | Description                |
| ----------------------------------------------- | ------- | -------------------------- |
| IntegrationId<mark style="color:red;">\*</mark> | Integer | The ID of your integration |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | string | Your API Token |

#### Request Body

| Name                                               | Type   | Description                                                                                                                                        |
| -------------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| to<mark style="color:red;">\*</mark>               | String | WhatsApp number to be sent. It should start with (+) and a country code.                                                                           |
| body<mark style="color:red;">\*</mark>             | String | Message body. It must be max 1024 chars.                                                                                                           |
| buttons\[]<mark style="color:red;">\*</mark>       | Array  | Required parameters for the interactive message. It must be max 10 button object item.                                                             |
| buttons.\*.id<mark style="color:red;">\*</mark>    | String | Unique identifier for your button. This ID is returned in the webhook when the button is clicked by the user. Maximum length: 200 chars.           |
| buttons.\*.title<mark style="color:red;">\*</mark> | String | Button title. It cannot be an empty string and must be unique within the message. Emojis are supported, markdown is not. Maximum length: 20 chars. |
| header                                             | Object | An object with the header of the message.                                                                                                          |
| header.type                                        | String | Required if header is set. Supported values: text, image, video or document.                                                                       |
| header.text                                        | String | Required if header's type is text. It must be max 60 chars.                                                                                        |
| header.document.link                               | String | Required if header's type is document.                                                                                                             |
| header.document.filename                           | String | Header's document filename.                                                                                                                        |
| header.video.link                                  | String | Required if header's type is video.                                                                                                                |
| header.image.link                                  | String | Required if header's type is image.                                                                                                                |
| footer                                             | Object | An object with the footer of the message.                                                                                                          |
| footer.text                                        | String | Required if footer object. It must be max 60 chars.                                                                                                |

{% tabs %}
{% tab title="200 " %}

```json
{
    "message_id": "gBEGkFBXUQRnAglHuQTBEMHpUdo"
}
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request POST 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/interactive' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--data '{
    "to": "+90xxxxxxxxxx",
    "header": {
        "type": "image",
        "image": {
            "link": "https://fastly.picsum.photos/id/879/200/300.jpg?hmac=07llkorYxtpw0EwxaeqFKPC5woveWVLykQVnIOyiwd8"
        }
    },
    "body": "<p>Hello</p>",
    "footer": {
        "text": "<b>Bye</b>"
    },
    "buttons": [
        {
            "id": "ID 1.1",
            "title": "Button 1"
        },
        {
            "id": "ID 1.2",
            "title": "Button 2"
        },
        {
            "id": "ID 1.3",
            "title": "Button 3"
        }
    ]
}'
```

{% endtab %}

{% tab title="C#" %}

```csharp
var options = new RestClientOptions("https://public-api.desk360.com")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/v1/integrations/:integrationId/conversations/messages/interactive", Method.Post);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
var body = @"{" + "\n" +
@"    ""to"": ""+90xxxxxxxxxx""," + "\n" +
@"    ""header"": {" + "\n" +
@"        ""type"": ""image""," + "\n" +
@"        ""image"": {" + "\n" +
@"            ""link"": ""https://fastly.picsum.photos/id/879/200/300.jpg?hmac=07llkorYxtpw0EwxaeqFKPC5woveWVLykQVnIOyiwd8""" + "\n" +
@"        }" + "\n" +
@"    }," + "\n" +
@"    ""body"": ""<p>Hello</p>""," + "\n" +
@"    ""footer"": {" + "\n" +
@"        ""text"": ""<b>Bye</b>""" + "\n" +
@"    }," + "\n" +
@"    ""buttons"": [" + "\n" +
@"        {" + "\n" +
@"            ""id"": ""ID 1.1""," + "\n" +
@"            ""title"": ""Button 1""" + "\n" +
@"        }," + "\n" +
@"        {" + "\n" +
@"            ""id"": ""ID 1.2""," + "\n" +
@"            ""title"": ""Button 2""" + "\n" +
@"        }," + "\n" +
@"        {" + "\n" +
@"            ""id"": ""ID 1.3""," + "\n" +
@"            ""title"": ""Button 3""" + "\n" +
@"        }" + "\n" +
@"    ]" + "\n" +
@"}";
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"to\": \"+90xxxxxxxxxx\",\n    \"header\": {\n        \"type\": \"image\",\n        \"image\": {\n            \"link\": \"https://fastly.picsum.photos/id/879/200/300.jpg?hmac=07llkorYxtpw0EwxaeqFKPC5woveWVLykQVnIOyiwd8\"\n        }\n    },\n    \"body\": \"<p>Hello</p>\",\n    \"footer\": {\n        \"text\": \"<b>Bye</b>\"\n    },\n    \"buttons\": [\n        {\n            \"id\": \"ID 1.1\",\n            \"title\": \"Button 1\"\n        },\n        {\n            \"id\": \"ID 1.2\",\n            \"title\": \"Button 2\"\n        },\n        {\n            \"id\": \"ID 1.3\",\n            \"title\": \"Button 3\"\n        }\n    ]\n}");
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/interactive")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
let data = JSON.stringify({
  "to": "+90xxxxxxxxxx",
  "header": {
    "type": "image",
    "image": {
      "link": "https://fastly.picsum.photos/id/879/200/300.jpg?hmac=07llkorYxtpw0EwxaeqFKPC5woveWVLykQVnIOyiwd8"
    }
  },
  "body": "<p>Hello</p>",
  "footer": {
    "text": "<b>Bye</b>"
  },
  "buttons": [
    {
      "id": "ID 1.1",
      "title": "Button 1"
    },
    {
      "id": "ID 1.2",
      "title": "Button 2"
    },
    {
      "id": "ID 1.3",
      "title": "Button 3"
    }
  ]
});

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/interactive',
  headers: { 
    'Content-Type': 'application/json', 
    'Authorization': 'Bearer YOUR_API_TOKEN'
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/interactive',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "to": "+90xxxxxxxxxx",
    "header": {
        "type": "image",
        "image": {
            "link": "https://fastly.picsum.photos/id/879/200/300.jpg?hmac=07llkorYxtpw0EwxaeqFKPC5woveWVLykQVnIOyiwd8"
        }
    },
    "body": "<p>Hello</p>",
    "footer": {
        "text": "<b>Bye</b>"
    },
    "buttons": [
        {
            "id": "ID 1.1",
            "title": "Button 1"
        },
        {
            "id": "ID 1.2",
            "title": "Button 2"
        },
        {
            "id": "ID 1.3",
            "title": "Button 3"
        }
    ]
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'Authorization: Bearer YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests
import json

url = "https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/interactive"

payload = json.dumps({
  "to": "+90xxxxxxxxxx",
  "header": {
    "type": "image",
    "image": {
      "link": "https://fastly.picsum.photos/id/879/200/300.jpg?hmac=07llkorYxtpw0EwxaeqFKPC5woveWVLykQVnIOyiwd8"
    }
  },
  "body": "<p>Hello</p>",
  "footer": {
    "text": "<b>Bye</b>"
  },
  "buttons": [
    {
      "id": "ID 1.1",
      "title": "Button 1"
    },
    {
      "id": "ID 1.2",
      "title": "Button 2"
    },
    {
      "id": "ID 1.3",
      "title": "Button 3"
    }
  ]
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer YOUR_API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

```

{% endtab %}
{% endtabs %}

### Send WhatsApp Location Request Interactive Message

<mark style="color:green;">`POST`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/interactive/location-request`

Send location request interactive message to an active WhatsApp number.

#### Path Parameters

| Name                                            | Type    | Description                |
| ----------------------------------------------- | ------- | -------------------------- |
| IntegrationId<mark style="color:red;">\*</mark> | Integer | The ID of your integration |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | String | Your API Token |

#### Request Body

| Name                                   | Type   | Description                                                              |
| -------------------------------------- | ------ | ------------------------------------------------------------------------ |
| to<mark style="color:red;">\*</mark>   | String | WhatsApp number to be sent. It should start with (+) and a country code. |
| body<mark style="color:red;">\*</mark> | String | Message body. It must be max 1024 chars.                                 |

{% tabs %}
{% tab title="200 " %}

```json
{
    "message_id": "gBEGkFBXUQRnAgn6gWf5CzaF6Ko"
}
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request POST 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/interactive/location-request' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--data '{
    "to": "+90xxxxxxxxxx",
    "body": "<i>Send Location</i>"
}'
```

{% endtab %}

{% tab title="C#" %}

```csharp
var options = new RestClientOptions("https://public-api.desk360.com")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/v1/integrations/:integrationId/conversations/messages/interactive/location-request", Method.Post);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
var body = @"{" + "\n" +
@"    ""to"": ""+90xxxxxxxxxx""," + "\n" +
@"    ""body"": ""<i>Send Location</i>""" + "\n" +
@"}";
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"to\": \"+90xxxxxxxxxx\",\n    \"body\": \"<i>Send Location</i>\"\n}");
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/interactive/location-request")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
let data = JSON.stringify({
  "to": "+90xxxxxxxxxx",
  "body": "<i>Send Location</i>"
});

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/interactive/location-request',
  headers: { 
    'Content-Type': 'application/json', 
    'Authorization': 'Bearer YOUR_API_TOKEN'
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/interactive/location-request',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "to": "+90xxxxxxxxxx",
    "body": "<i>Send Location</i>"
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'Authorization: Bearer YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests
import json

url = "https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/interactive/location-request"

payload = json.dumps({
  "to": "+90xxxxxxxxxx",
  "body": "<i>Send Location</i>"
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer YOUR_API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

```

{% endtab %}
{% endtabs %}

### Read WhatsApp Message

<mark style="color:green;">`POST`</mark> `https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/reads`

Mark messages from webhook as read.

#### Path Parameters

| Name                                            | Type    | Description                |
| ----------------------------------------------- | ------- | -------------------------- |
| IntegrationId<mark style="color:red;">\*</mark> | Integer | The ID of your integration |

#### Headers

| Name                                             | Type   | Description    |
| ------------------------------------------------ | ------ | -------------- |
| Authorization <mark style="color:red;">\*</mark> | string | Your API Token |

#### Request Body

| Name                                              | Type   | Description                                                              |
| ------------------------------------------------- | ------ | ------------------------------------------------------------------------ |
| message\_ids\[]<mark style="color:red;">\*</mark> | object | Message ids to mark as read                                              |
| to<mark style="color:red;">\*</mark>              | String | WhatsApp number to be read. It should start with (+) and a country code. |

{% tabs %}
{% tab title="200 " %}

```json
{
    "message_ids": [
        "gBEGkFBXUQRnAgn6gWf5CzaF6Ko",
        "gBEGkFBXUQRnAglHuQTBEMHpUdo"
    ]
}
```

{% endtab %}
{% endtabs %}

**Code Samples**

{% tabs %}
{% tab title="cURL" %}

```bash
curl --location --request POST 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/reads' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--form 'to="+90xxxxxxxxxx"' \
--form 'message_ids[]="xxxxxxxxxxxxxxxx"'
```

{% endtab %}

{% tab title="C#" %}

```csharp
var options = new RestClientOptions("https://public-api.desk360.com")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/v1/integrations/:integrationId/conversations/messages/reads", Method.Post);
request.AddHeader("Authorization", "Bearer YOUR_API_TOKEN");
request.AlwaysMultipartFormData = true;
request.AddParameter("to", "+90xxxxxxxxxx");
request.AddParameter("message_ids[]", "xxxxxxxxxxxxxxxx");
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java" %}

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("to","+90xxxxxxxxxx")
  .addFormDataPart("message_ids[]","xxxxxxxxxxxxxxxx")
  .build();
Request request = new Request.Builder()
  .url("https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/reads")
  .method("POST", body)
  .addHeader("Authorization", "Bearer YOUR_API_TOKEN")
  .build();
Response response = client.newCall(request).execute();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const axios = require('axios');
const FormData = require('form-data');
let data = new FormData();
data.append('to', '+90xxxxxxxxxx');
data.append('message_ids[]', 'xxxxxxxxxxxxxxxx');

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/reads',
  headers: { 
    'Authorization': 'Bearer YOUR_API_TOKEN', 
    ...data.getHeaders()
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/reads',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('message_ids[]' => 'xxxxxxxxxxxxxxxx','to' => '+90xxxxxxxxxx'),
  CURLOPT_HTTPHEADER => array(
    'Authorization: Bearer YOUR_API_TOKEN'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages/reads"

payload = {'message_ids[]': 'xxxxxxxxxxxxxxxx', 'to': '+90xxxxxxxxxx'}
files=[

]
headers = {
  'Authorization': 'Bearer YOUR_API_TOKEN'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)

```

{% endtab %}
{% endtabs %}

## WhatsApp Webhooks

Subscribe to Webhooks to be notified about messages and message status updates your business receives.

### Received Messages Examples <a href="#received-messages-examples" id="received-messages-examples"></a>

**Text Messages**

```json
{
  "messages": {
    "id": "ABEGkFMIcyRoAgo-sGaD-H6MgPEt",
    "text": "Hello",
    "from": "90xxxxxxxxxx",
    "timestamp": "1630913975",
    "name": "John Doe",
    "type": "text"
  }
}
```

**Location Messages**

```json
{
  "messages": {
    "id": "ABEGkFBXUQRnAgo6cHkZc1yy0dAx",
    "text": "Main Street Beach - Main Street Beach, Santa Cruz, CA, latitude: 38.9806263495, longitude: -131.9428612257",
    "from": "90xxxxxxxxxx",
    "timestamp": "1700052659",
    "name": "John Doe",
    "location": {
      "address": "Main Street Beach, Santa Cruz, CA",
      "latitude": 38.9806263495,
      "longitude": -131.9428612257,
      "name": "Main Street Beach"
    },
    "type": "location"
  }
}
```

**Contact Messages**

```json
{
  "messages": {
    "id": "ABEGkFBXUQRnAgo6PXn8aI1fmlOm",
    "from": "90xxxxxxxxxx",
    "timestamp": "1700052797",
    "name": "John Doe",
    "type": "contacts",
    "contacts": [
      {
        "addresses": [
          {
            "city": "Menlo Park",
            "country": "United States",
            "country_code": "us",
            "state": "CA",
            "street": "1 Hacker Way",
            "type": "WORK",
            "zip": "94025"
          }
        ],
        "birthday": "2012-08-18",
        "emails": [
          {
            "email": "kfish@fb.com",
            "type": "WORK"
          }
        ],
        "ims": [
          {
            "service": "AIM",
            "user_id": "kfish"
          }
        ],
        "name": {
          "first_name": "Kerry",
          "formatted_name": "Kerry Fisher",
          "last_name": "Fisher"
        },
        "org": {
          "company": "Meta",
          "department": "WhatsApp"
        },
        "phones": [
          {
            "phone": "+1 (650) 555-1234",
            "type": "WORK",
            "wa_id": "16505551234"
          }
        ],
        "urls": [
          {
            "url": "https://www.facebook.com",
            "type": "WORK"
          }
        ]
      }
    ]
  }
}
```

**Media Messages**

```json
{
  "messages": {
    "id": "ABEGkFBXUQRnAgo6xTEQCONO2nW9",
    "from": "90xxxxxxxxxx",
    "timestamp": "1689756449",
    "name": "John Doe",
    "image": {
      "message": null,
      "media_id": "83518734-56a9-4b51-8372-93f1432cfa9b",
      "mime_type": "image/jpeg",
      "sha": "7e18d97d50eea65a50d9fa93db26e1c689da7c7de64d829b22aad38c4f541510"
    },
    "attachments": {
      "images": [
        {
          "url": "https://path/to/file/9oCtWHWxkv4E0PQhtHA4uW4NRinIROKCO8NEae5p.jpeg",
          "name": "9oCtWHWxkv4E0PQhtHA4uW4NRinIROKCO8NEae5p.jpeg",
          "type": "image",
          "aws": true
        }
      ]
    },
    "type": "image"
  }
}
```

**Messages Triggered by WhatsApp Ads**

```json
{
  "messages": {
    "id": "wamid.HBgMOTA1MDU3NTExxxxxxxxxxxxxxx",
    "from": "90xxxxxxxxxx",
    "name": "John Doe",
    "text": "Hello",
    "type": "text",
    "referral": {
      "id": "AD_OR_POST_ID",
      "url": "AD_OR_POST_FB_URL",
      "body": "AD_OR_POST_DESCRIPTION",
      "type": "ad or post",
      "header": "AD_OR_POST_TITLE",
      "media_url": "RAW_MEDIA_URL",
      "media_type": "image or video",
      "thumbnail_url": "RAW_THUMBNAIL_URL"
    },
    "timestamp": "1741867567"
  }
}
```

### Status Updates <a href="#received-messages-examples" id="received-messages-examples"></a>

{% code fullWidth="false" %}

```json
{
  "statuses": {
    "id": "gBEGkFBXUQRnAglM82HET_hbwJs",
    "from": "90xxxxxxxxxx",
    "status": "delivered|read"
  }
}
```

{% endcode %}

&#x20;                                                     [<mark style="color:blue;">**Ana Sayfa**</mark>](https://desk360.com/tr)                                          [<mark style="color:blue;">**Fiyatlandırma**</mark>](https://desk360.com/tr/fiyatlandirma)


# Meta Süreçleri

## Facebook İşletme Hesabı Oluşturma

#### Başlamadan önce:

* Kişisel bir Facebook hesabına sahip olmanız gerekir. Bu hesabı işletme portfolyonuzu oluşturabileceğiniz Meta Business Suite veya Business Manager'a giriş yapmak için kullanacaksınız.
* En fazla 2 adet işletme portfolyosu oluşturabilirsiniz. Not: Bu, dahil olabileceğiniz portfolyo sayısına ilişkin bir sınır değildir.
* [Business Manager](https://www.facebook.com/business/help/113163272211510) izinleri diğer izinleri geçersiz kılar.

#### İşletme portfolyosu oluşturmak için:

1. Bir masaüstü tarayıcıda [business.facebook.com](http://business.facebook.com/) adresine gidin. Bu adresi Meta Business Suite veya Business Manager'a giriş yaparken de kullanacaksınız. Meta Business Suite ve Business Manager'a zaten erişiminiz varsa sol gezinme çubuğunun üstündeki açılır menüye de tıklayabilirsiniz. Daha sonra 4. adıma geçin.
2. **Bir hesap oluştur**'a tıklayın.
3. Kişisel Facebook hesabınıza giriş yapın. Hesabınız yoksa kaydolmak için Hesap oluştur'a tıklayın.
4. **Bir hesap oluştur**'a tıklayın.
5. İşletme detaylarınızı girin.

* **İşletme portfolyosunun adı**. Girdiğiniz ad Meta'da görüneceğinden işletmenizin veya kuruluşunuzun herkese açık adıyla aynı olmalıdır. Özel karakter içeremez.
* **Adınız.**
* **İşletme e-postası.** Meta, sizinle işletmeniz hakkında iletişime geçmek için bu e-posta adresini kullanacaktır. Müşterileriniz bunu göremez.

6. Portfolyonuzu oluşturmak için **Gönder'**&#x65; veya **Oluştur**'a tıklayın. İş e-posta adresinizi onaylamanızı isteyen bir e-posta alırsınız. Ardından size gönderilen mail aracılığıyla iş e-posta adresinizi doğrulayabilirsiniz.

&#x20;                                                     [<mark style="color:blue;">**Ana Sayfa**</mark>](https://desk360.com/tr)                                          [<mark style="color:blue;">**Fiyatlandırma**</mark>](https://desk360.com/tr/fiyatlandirma)


# n8n Webhook ve Desk360 Public API Kullanım

🧩 Giriş

n8n, görsel tabanlı bir otomasyon aracıdır. Her akış (workflow) tetikleyici (trigger) ve aksiyon (action) adımlarından oluşur.

Bu  adımda, en çok kullanılan iki node olan Webhook ve HTTP Request node'larının nasıl kullanılacağını anlatıyoruz.

🧠 1. Webhook Node Nedir?

Webhook Node, dış sistemlerden (örneğin bir web formu, CRM, veya API) gelen HTTP isteklerini (POST, GET vb.) yakalayarak n8n akışını başlatır.

🔹 Örnek Kullanım Senaryosu

Whatsapp Business API numaranıza mesaj geldiğinde otomatik olarak n8n webhook workflow'unu tetiklemek

⚙ 2. Webhook Node Ayarları

Ayar Açıklama

HTTP Method `GET`, `POST`, `PUT` vb. -- genellikle `POST` kullanılır.

Path Webhook'un URL'sinin son kısmı. Örnek: `/new-message`

Response Mode `On Received` (istek gelir gelmez cevap döner) veya `Last Node`

(workflow tamamlanınca cevap döner).

Response Data İsteğe dönecek JSON veya metin cevabı.

🔹 Örnek Kurulum

Method: POST

Path: /new-message

Response Mode: Last Node

Workflow URL:

`https://n8n.yourdomain.com/webhook/new-message`

Bu durumda, workflow'u tetikler.

`/webhook/new-message` adresine gönderilen tüm HTTP POST istekleri bu workflowu tetikler.

🧩 3. HTTP Request Node Nedir?

HTTP Request Node, n8n içinden başka bir servise veya API' ye istek göndermeni sağlar.

Bu, diğer sistemlerle entegrasyon kurmanın temel yöntemidir.

🔹 Örnek Kullanım Senaryosu

Desk360 Public API'ye mesaj gönderme

⚙ 4. HTTP Request Node Ayarları

Method `GET`, `POST`, `PUT`, `PATCH`, `DELETE` -- isteğin türünü belirtir.

URL API adresi (örnek: `https://public-api.desk360.com/...`)

Authentication Basic Auth, OAuth2, Header Token gibi yetkilendirme seçenekleri

Headers `Content-Type`, `Authorization` vb. özel başlıklar

Body JSON, form-data, URL encoded formatında gönderilecek veri

Response Format JSON, Text, veya Binary

🧾 5. Webhook → AI Message Model → HTTP Request Akışı

Örneği

Bu örnek, Whatsapp Business API numaranıza mesaj geldiğinde Desk360 Public API ayarları

sayfasından ayarlanan webhook url'e POST isteği gönderir. Otomatik olarak n8n webhook

workflow'unu tetikler bu gelen POST isteğini alıp AI modelinde işleyip, AI'dan dönen yanıtı

Desk360 Public API aracılığıyla mesaj gönderen numaraya mesaj gönderir.

NOT: Webhook node kullanabilmek için Desk360 Public API ayarları sayfasından webhook

url'inizi eklemeniz gerekmektedir.

🔹 Adım 1: Webhook Node

Method: POST\\

Path: /`webhook/new-message\`

Response Mode: Last Node

Örnek gelen veri:

```json
{
  "messages": {
    "id": "ABEGkFMIcyRoAgo-sGaD-H6MgPEt",
    "text": "Hello",
    "from": "90xxxxxxxxxx",
    "timestamp": "1630913975",
    "name": "John Doe",
    "type": "text"
  }
}
```

🔹 Adım 2: AI Message Model Node (Opsiyonel)

Model: Gpt-4.1-mini veya başka bir model\\

Input: Sen bir müşteri destek temsilcisi yerine yanıt veren bir chat botsun. Gelen mesaja göre uygun, yalın bir dilde mesaj dönmelisin. \
\
Mesaj: `{{ $json.body.messages.text}}\`

🔹 Adım 3: Desk360 Public API ile Mesaj Gönderme

```
Method: POST
URL: https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages
Headers:
  Authorization: Bearer <API_KEY>
  Content-Type: application/json
Body (JSON):
{
  "to": "+{{ $('Webhook').item.json.body.messages.from }}",
  "text": "{{ $json.message.content.response }}"
}
```

🔹 Adım 3: Webhook Response (Opsiyonel)

Node tipi: Respond to Webhook\\

Response Data:

{% code title="" %}

```
{ "status": "Message sent successfully" }
```

{% endcode %}

🧠 6. Örnek Workflow JSON

Aşağıdaki JSON, yukarıdaki örneğin n8n'e direkt import edilebilen halidir:

```json
{
  "name": "Desk360-PublicApi",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "5012e5b7-e22b-4c0e-927d-",
        "authentication": "headerAuth",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        0,
        0
      ],
      "id": "32724226-6ec0-404f-9a54-",
      "name": "Webhook",
      "webhookId": "5012e5b7-e22b-4c0e-927d-",
      "credentials": {
        "httpHeaderAuth": {
          "id": "scRqgJBSllnf21C8",
          "name": "Header Auth account"
        }
      }
    },
    {
      "parameters": {
        "modelId": {
          "__rl": true,
          "value": "gpt-4.1-mini",
          "mode": "list",
          "cachedResultName": "GPT-4.1-MINI"
        },
        "messages": {
          "values": [
            {
              "content": "=Sen bir müşteri destek temsilcisi yerine yanıt veren bir chat botsun. Gelen mesaja göre uygun, yalın bir dilde mesaj dönmelisin.\nMesaj: {{ $json.body.messages.text }}"
            }
          ]
        },
        "jsonOutput": true,
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [
        208,
        0
      ],
      "id": "787749b6-09d0-42e4-99a0-",
      "name": "Message a model",
      "credentials": {
        "openAiApi": {
          "id": "Dk5hN5YnS94m3tpU",
          "name": "n8n free OpenAI API credits"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://public-api.desk360.com/v1/integrations/:integrationId/conversations/messages",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n \"to\": \"+{{ $('Webhook').item.json.body.messages.from }}\",\n \"text\": \"{{ $json.message.content.response }}\"\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        560,
        0
      ],
      "id": "ce449f17-ed1b-42ee-80e9-",
      "name": "HTTP Request",
      "credentials": {
        "httpBearerAuth": {
          "id": "vHYqOLNzLykjmQGl",
          "name": "Bearer Auth account"
        }
      }
    }
  ],
  "pinData": {},
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Message a model",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Message a model": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
```

✅ 7. Sonuç

Bu dokümantasyon sayesinde:

* n8n'de webhook oluşturabilir,
* Gelen verileri alıp işleyebilir,
* HTTP Request node ile Desk360 Public API' ye istek gönderebilirsin.


