Wow! WhatsApp entegrasyonunuzu oluşturun. Ücretsiz başlayın. Şimdi Kaydol
Kanal içerik senkronu · WhatsApp API kullanım senaryosu

İçerik yayına girdiğinde WhatsApp kanalında yayın

Aboneler, site veya mağaza yayınladığı anda uygulamaya metni elle kopyalamadan WhatsApp kanalınızda aynı lansmanı veya promoyu görebilir. Backend içeriği canlı işaretlediğinde worker kanal id'sini bulup duyuruyu Whapi.Cloud üzerinden paylaşabilir. Bu kullanım senaryosu entegratörlere akışın WhatsApp API ile nasıl kurulacağını gösterir.

CMS veya mağaza yayınladığında tetiklenir getNewsletters, ardından sendMessageText
CMS veya mağaza yayın ekranı; yanında WhatsApp kanalında yeni duyuru ve abone bildirimi görünen bir telefon.
Dekoratif balon
Kullanım senaryosu

Bu akışı ne zaman kullanın

Tetikleyici backend'de bir yayın olayıdır

own_backend'de bir blog, ürün, promo veya CMS go-live olayı bir WhatsApp Kanalını da güncellemeli olduğunda bu akışı kullanın; yalnızca gelen sohbetlere yanıt verdiğinizde değil.

Yayın hedefi bir WhatsApp Kanalıdır

Gönderi bir kanal JID'sine gittiğinde bu akışı kullanın; topluluğun her üyesinin alt grup duyurusunu görmesi gerektiğinde değil.

Göndermeden önce kanal id'sine ihtiyacınız var

Worker'ın doğru JID'yi seçmek için getNewsletters ile kanal listesini okuması gerektiğinde bu akışı kullanın; id zaten yapılandırmada kayıtlıyken değil.

Telefonda yeni duyuru gönderisi ve standart kanal bildirim banner'ı olan bir WhatsApp kanalı.
Müşteri deneyimi

Aboneler güncellemeyi alır

Site veya mağaza yeni makaleyi veya promoyu zamanında gösterir, ancak WhatsApp kanalı hâlâ birinin aynı metni elle yapıştırmasını bekler.

Akış çalıştıktan sonra kanal aboneleri duyuruyu kanalda görür ve telefonlarında olağan kanal bildirimini alır. Entegratörler bu sonucu WhatsApp API ile kurar.

Akış

Yayın olayından kanal gönderisine

1

İçerik backend'de başarıyla yayınlanır

CMS, mağaza veya zamanlayıcı makale, ürün veya promonun canlı olduğunu bildirir. Bir worker duyuru metnini ve kanal gövdesi için isteğe bağlı bağlantıyı hazırlar.

2

Hedef kanal JID'sini bulun

GET /newsletters

getNewsletters kanallarınızı meta verilerle döner. Kampanyanızın güncellemesi gereken kanalı eşleştirin ve gönderim adımı için id'sini alın.

3

Duyuruyu kanala yayınlayın

POST /messages/text

sendMessageText hazırlanan metni o kanala paylaşır. Kanal id'sini to alanına, duyuruyu body alanına koyun.

Teslimat takibi gerekiyor mu? Başarılı bir API yanıtı her abonenin gönderiyi zaten aldığı anlamına gelmez. Teslimat durumu hakkında →

Ön koşullar

Akışı çalıştırmadan önce

Kanala sahip WhatsApp numarasını bağlayın ve her isteği o numaranın API token'ı ile doğrulayın. Yayın kancaları, CMS eşlemesi ve hedef kanal sizin backend'inizde kalır.

İsteğe bağlı — bu akışta derinleşin

API uygulaması

Kanalı listeleyin, sonra paylaşın

Newsletters listesinden kanal JID'sini okuyun; içerik olayı tetiklendiğinde duyuru gövdesini o id'ye yayınlayın.

whapi.cloud'da kayıt olduktan sonra API token'ınızı ücretsiz alın ve örneklerdeki Your_Token yerine kodda bu token'ı kullanın.

Hedef kanal JID'sini bulun

Yapılandırmada kayıtlı değilken worker'ın doğru JID'yi seçebilmesi için kanal meta verilerini döndürün.

curl --request GET \
     --url https://gate.whapi.cloud/newsletters \
     --header 'accept: application/json' \
     --header 'authorization: Bearer Your_Token'
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/newsletters",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "accept: application/json",
    "authorization: Bearer Your_Token"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
import requests

url = "https://gate.whapi.cloud/newsletters"

headers = {
    "accept": "application/json",
    "authorization": "Bearer Your_Token",
}

response = requests.get(url, headers=headers)

print(response.text)
const url = 'https://gate.whapi.cloud/newsletters';

const response = await fetch(url, {
  method: 'GET',
  headers: {
    accept: 'application/json',
    authorization: 'Bearer Your_Token',
  },
});

console.log(await response.text());
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://gate.whapi.cloud/newsletters")
  .get()
  .addHeader("accept", "application/json")
  .addHeader("authorization", "Bearer Your_Token")
  .build();

Response response = client.newCall(request).execute();
using RestSharp;

var options = new RestClientOptions("https://gate.whapi.cloud/newsletters");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("authorization", "Bearer Your_Token");
var response = await client.GetAsync(request);

Console.WriteLine("{0}", response.Content);
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://gate.whapi.cloud/newsletters", nil)
	req.Header.Set("accept", "application/json")
	req.Header.Set("authorization", "Bearer Your_Token")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}

Duyuruyu kanala yayınlayın

Hazırlanan duyuru metnini o kanala yayınlayın; aboneler kanal bildirimiyle güncellemeyi görsün.

curl --request POST \
     --url https://gate.whapi.cloud/newsletters/link/{InviteCode} \
     --header 'accept: application/json' \
     --header 'authorization: Bearer Your_Token' \
     --header 'content-type: application/json' \
     --data '
{
  "to": "1203632001928471@newsletter",
  "body": "New on the site: Summer promo is live. Read more: https://example.com/promo"
}
'
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/newsletters/link/{InviteCode}",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\"to\":\"447123456789\"}",
  CURLOPT_HTTPHEADER => [
    "accept: application/json",
    "authorization: Bearer Your_Token",
    "content-type: application/json"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
import requests

url = "https://gate.whapi.cloud/newsletters/link/{InviteCode}"

payload = {
  "to": "1203632001928471@newsletter",
  "body": "New on the site: Summer promo is live. Read more: https://example.com/promo"
}
headers = {
    "accept": "application/json",
    "authorization": "Bearer Your_Token",
    "content-type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const url = 'https://gate.whapi.cloud/newsletters/link/{InviteCode}';

const response = await fetch(url, {
  method: 'POST',
  headers: {
    accept: 'application/json',
    authorization: 'Bearer Your_Token',
    'content-type': 'application/json',
  },
  body: JSON.stringify({
  "to": "1203632001928471@newsletter",
  "body": "New on the site: Summer promo is live. Read more: https://example.com/promo"
}),
});

console.log(await response.text());
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"to\":\"447123456789\"}");
Request request = new Request.Builder()
  .url("https://gate.whapi.cloud/newsletters/link/{InviteCode}")
  .post(body)
  .addHeader("accept", "application/json")
  .addHeader("authorization", "Bearer Your_Token")
  .addHeader("content-type", "application/json")
  .build();

Response response = client.newCall(request).execute();
using RestSharp;

var options = new RestClientOptions("https://gate.whapi.cloud/newsletters/link/{InviteCode}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("authorization", "Bearer Your_Token");
request.AddHeader("content-type", "application/json");
request.AddJsonBody(new { to = "447123456789" });
var response = await client.PostAsync(request);

Console.WriteLine("{0}", response.Content);
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
)

func main() {
	body := []byte(`{"to":"1203632001928471@newsletter","body":"New on the site: Summer promo is live. Read more: https://example.com/promo"}`)
	req, _ := http.NewRequest("POST", "https://gate.whapi.cloud/newsletters/link/{InviteCode}", bytes.NewReader(body))
	req.Header.Set("accept", "application/json")
	req.Header.Set("authorization", "Bearer Your_Token")
	req.Header.Set("content-type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
Teslimat

Gönderinin gerçekten ulaştığını bilin

Başarılı bir gönderim yanıtı her abonenin gönderiyi zaten gördüğü anlamına gelmez. Webhook'tan önce görünen ilk durum pending'dir. Sonraki değişiklikler yalnızca statuses.post ve statuses.put üzerinden gelir. Durum pending'de kalıp sent, delivered veya daha sonraki bir ack'e geçmezse mesaj teslim edilmemiştir. İstek gövdesini ve hesabın o kanala gönderme iznini kontrol edin.

  • sendMessageText yanıtı her abonenin duyuruyu aldığını kanıtlamaz.

  • İlerlemeyen pending, gönderinin teslim edilmediği anlamına gelir.

  • Kanal gönderilerinde sonraki ack'ler için statuses.post ve statuses.put izleyin.

  • Teslimat hiç tamamlanmazsa worker yeniden denemeli ise webhook'ları etkinleştirin.

Teslimat ve webhook hakkında okunacaklar

Bir şeyler ters gittiyse destekle iletişime geçin
Bir şeyler bozulduğunda

Her adımda hataları ele alın

Newsletters listesi boşsa, yanlış kanal JID'si seçilirse veya sendMessageText reddedilir ya da teslim edilmezse içerik sitede yayına girebilirken kanal senkronu yine de bozulabilir.

Site yayınlandı ama kanal güncellenmedi mi?

CMS yayın durumunu kanal senkronundan ayrı tutun. getNewsletters başarısız olursa veya eşleşen kanal dönmezse, ya da sendMessageText başarısız olursa yeniden deneyin veya operasyonu uyarın ve içeriği kanalla senkronize edilmiş olarak işaretlemeyin. Yeniden denemeden sonra kanal gönderisi hâlâ başarısızsa kanal id'si ve başarısız yanıtla Whapi desteğine başvurun.

Bir şeyler ters gittiyse destekle iletişime geçin

API adımına göre giderin

Durum Ne anlama gelir Ne yapmalı
400 Wrong request parameters Yanlış istek parametreleri — liste isteğinde count ve offset değerlerini kontrol edin.
500 Internal Error
Durum Ne anlama gelir Ne yapmalı
400 Wrong request parameters Yanlış istek parametreleri — gönderim gövdesinde to ve body alanlarını kontrol edin.
401 Need channel authorization for send message Mesaj göndermek için kanal yetkilendirmesi gerekir — bağlı numaranın o kanala gönderi yapabildiğini doğrulayın.
402 Trial version limit exceeded
403 It is forbidden to send to this group/recipient Bu gruba veya alıcıya göndermek yasak — listeleme adımındaki kanal JID'sini doğrulayın.
413 Request body too large
429 Too many requests
500 Internal Error
SSS

Entegratörlerin sorduğu sorular

Kanal JID'si yapılandırmanızda zaten kayıtlıysa getNewsletters atlayıp o id ile sendMessageText çağırabilirsiniz. Id bilinmiyorsa veya kanallar değişiyorsa önce listeleyin.
Hayır. Bu akış tek bir WhatsApp Kanalına paylaşır. Bağlı gruplarla topluluk çapında duyurular ayrı bir senaryodur.
Hayır. Bu akış bir kanal JID'sine bir kez yayınlar. Bireysel numaralara soğuk DM farklı bir iştir.
Evet. URL'yi duyuru metniyle birlikte body içine koyun. Kanalda gönderi içi yanıt dizisi yoksa kişisel sohbet bağlantısı isteğe bağlı bir CTA olabilir.
Hayır. Duyuruyu body içinde yazıp sendMessageText ile gönderirsiniz. Gönderim o mesaj için önceden onaylı şablon beklemez.
Listeleme adımı başarısız olursa, eşleşen kanal yoksa veya gönderim başarısız olursa yeniden deneyin veya operasyonu uyarın; yayın başarılı olana kadar içeriği kanalla senkronize edilmiş saymayın.
Desteklenen WhatsApp Özellikleri

WhatsApp otomasyonları oluşturmak için ihtiyacınız olan her şey

Whapi.Cloud; mesajlaşma, medya, gruplar, kanallar, webhook’lar ve daha fazlası dahil olmak üzere WhatsApp’ın tüm özelliklerine erişim sağlar. Özellik kısıtlamaları olmadan botlar, otomasyonlar ve entegrasyonlar oluşturun.

Geliştiricilerin tercihi

3.300+ geliştirici ve SaaS ekibi tarafından güveniliyor

Dünya genelindeki geliştiriciler, otomasyonlar, botlar, CRM entegrasyonları, toplu mesaj araçları ve gelişmiş WhatsApp iş akışları oluşturmak için Whapi.Cloud'a güveniyor. Altyapımız her ay yüksek kararlılıkla milyonlarca API isteği işliyor — ve bu sayı giderek artıyor.

Özellik simgesi

5,5K+

aktif API kanalı

Özellik simgesi

21M+

aylık API isteği

“Her şey basit, sezgisel ve kullanımı kolay. Dokümantasyon net ve gerekli tüm bilgiler elimizin altında. Harika iş.”

Roberto K. / Web Geliştirici

“WhatsApp'ı n8n kullanarak iş akışlarımıza sadece birkaç dakikada bağladık. Kod yok, karmaşa yok — her şey ilk denemede çalıştı.”

Martin P. / Geliştirici

“Whapi.Cloud, müşteri iletişimimizin önemli bir parçası haline geldi. Ürün güncellemelerini, sipariş bildirimlerini ve destek mesajlarını Meta şablonlarına veya onaylara ihtiyaç duymadan otomatikleştirdik.”

Oscar T. / CTO

Dekoratif balon