Wow! WhatsApp entegrasyonunuzu oluşturun. Ücretsiz başlayın. Şimdi Kaydol
WhatsApp API

WhatsApp'ta olmayan numaralar kullanılmaz

WhatsApp'ta olmayan bir lead gönderimin ve CRM aktarımının dışında kalır. Bir telefon listesi kullanılmak üzereyken Make veya n8n bu numarayı kontrol edip sonraki adımı Whapi.Cloud üzerinden durdurabilir. Bu senaryo, entegratörlere akışın WhatsApp API ile nasıl kurulacağını gösterir.

Gönderim dalı metni yollayabilir Aktarım dalı mesaj göndermez
Dizüstü bilgisayarda telefon listesi, listenin dışında bırakılan numara için açılmamış bir WhatsApp sohbeti ve o numara için boş bir CRM satırı olan bir masa.
Dekoratif balon
Kullanım senaryosu

Bu akışı ne zaman kullanmalı

Liste gönderilecek veya aktarılacak

Liste bir CRM, ERP veya başka bir hizmetten gönderilecek ya da aktarılacaksa bu akışı kullanın.

Sonraki modül Make veya n8n

Make veya n8n aksi halde WhatsApp'ta olmayan bir numarayı gönderir ya da aktarırsa bu akışı kullanın.

Listenin önce numara kontrolüne ihtiyacı var

Listede WhatsApp'ta olmayan bir numara gönderilmesin ve aktarılmasın diye numarayı kullanmadan önce kontrol etmek gerektiğinde bu akışı kullanın.

Gönderimin dışında bırakılan numara için yeni bir yazışma olmayan WhatsApp sohbet listesini gösteren bir telefon ve bu numarayı içermeyen bir CRM kişi listesi.
Müşteri deneyimi

Lead'e boşuna yazılmaz

Otomasyondan önce gönderim hâlâ WhatsApp'ta olmayan numaralara gider ve CRM aktarımı bu numaraları tutar; lead'e ulaşılamaz ve aktarılan liste kirli kalır.

Akış çalıştıktan sonra WhatsApp'ta olmayan kişi gönderimi almaz ve bu numara CRM aktarımına girmez. Entegratörler bu sonucu WhatsApp API ile kurar.

Akış

Listeyi kontrol et, sonra gönder veya dur

1

Liste kullanılmak üzere

Bir CRM, ERP veya başka bir hizmetten gelen telefon listesi Make veya n8n içinde gönderilmek ya da aktarılmak üzere.

2

Hangi numaraların WhatsApp'ta olduğunu kontrol edin

POST /contacts

checkPhones checkPhones listedeki telefonları kontrol eder. Bu telefonları contacts içine verin. HTTP 200 contacts döndürür. Her öğede input ve status vardır. valid ayrıca wa_id içerir. invalid, numaranın WhatsApp'ta olmadığı anlamına gelir. Bu numarayı göndermeyin, aktarmayın ve onun için sendMessageText çağırmayın.
{"contacts":[{"input":"15052462002","status":"valid","wa_id":"[email protected]"},{"input":"15058662314","status":"invalid"}]}

3

Metni gönderim dalında yollayın

POST /messages/text

sendMessageText yalnızca liste bir gönderimse ve checkPhones o numara için status valid döndürdüyse çalışır. Numarayı to alanına koyun. status invalid olan kişi bu adıma gelmez. CRM aktarımı kontrolden sonra durur ve bu gönderimi çağırmaz.

Teslimatı izlemek gerekir mi? Gönderim yanıtı kişinin metni zaten aldığı anlamına gelmez. Durum değişiklikleri bu gönderimden sonra gelir. CRM aktarımının izlenecek bir gönderimi yoktur. Teslimat durumunu öğren →

Ön koşullar

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

Listeyi kontrol eden ve metni gönderen WhatsApp numarasını bağlayın. Her istek o numaranın API tokenini kullanır. Make veya n8n senaryonuzda kalır. Whapi.Cloud kontrolü ve gönderim dalında metni çalıştırır.

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

API uygulaması

Bu kapı için iki çağrı

Önce listedeki telefonları kontrol edin. Metni yalnızca liste bir gönderimse ve numara WhatsApp'taysa yollayın. CRM aktarımı kontrolden sonra durur.

whapi.cloud'a kaydolduktan sonra API tokeninizi ücretsiz alın ve örneklerdeki Your_Token yerine bu tokeni kullanın.

Hangi numaraların WhatsApp'ta olduğunu kontrol edin

Her numaranın status değerini okuyun. Sonraki adım için yalnızca valid kalsın. invalid, numaranın WhatsApp'ta olmadığı anlamına gelir; göndermeyin ve aktarmayın.

curl --request POST \
     --url https://gate.whapi.cloud/contacts \
     --header 'accept: application/json' \
     --header 'authorization: Bearer Your_Token' \
     --header 'content-type: application/json' \
     --data '
{
  "contacts": ["15052462002", "15058662314"]
}
'
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/contacts",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{  \"contacts\": [\"15052462002\", \"15058662314\"]}",
  CURLOPT_HTTPHEADER => [
    "accept: application/json",
    "authorization: Bearer Your_Token",
    "content-type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);
echo $response;
import requests

url = "https://gate.whapi.cloud/contacts"
payload = {"contacts": ["15052462002", "15058662314"]}
headers = {
    "accept": "application/json",
    "authorization": "Bearer Your_Token",
    "content-type": "application/json"
}

response = requests.request("POST", url, json=payload, headers=headers)
print(response.text)
const response = await fetch("https://gate.whapi.cloud/contacts", {
  method: "POST",
  headers: {
    accept: "application/json",
    authorization: "Bearer Your_Token",
    "content-type": "application/json"
  },
  body: JSON.stringify({ contacts: ["15052462002", "15058662314"] })
});

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

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{  \"contacts\": [\"15052462002\", \"15058662314\"]}");
Request request = new Request.Builder()
  .url("https://gate.whapi.cloud/contacts")
  .method("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/contacts");
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 { contacts = new[] { "15052462002", "15058662314" } });
var response = await client.ExecuteAsync(request);

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

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

func main() {
	body := []byte(`{
  "contacts": ["15052462002", "15058662314"]
}`)
	req, _ := http.NewRequest("POST", "https://gate.whapi.cloud/contacts", 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))
}

Metni gönderim dalında yollayın

Metni yalnızca kontrolün tuttuğu numaraya yollayın ve CRM aktarımında bu çağrıyı atlayın.

curl --request POST \
     --url https://gate.whapi.cloud/messages/text \
     --header 'accept: application/json' \
     --header 'authorization: Bearer Your_Token' \
     --header 'content-type: application/json' \
     --data '
{
  "to": "15052462002",
  "body": "Hello"
}
'
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/messages/text",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{  \"to\": \"15052462002\",  \"body\": \"Hello\"}",
  CURLOPT_HTTPHEADER => [
    "accept: application/json",
    "authorization: Bearer Your_Token",
    "content-type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);
echo $response;
import requests

url = "https://gate.whapi.cloud/messages/text"
payload = {"to": "15052462002", "body": "Hello"}
headers = {
    "accept": "application/json",
    "authorization": "Bearer Your_Token",
    "content-type": "application/json"
}

response = requests.request("POST", url, json=payload, headers=headers)
print(response.text)
const response = await fetch("https://gate.whapi.cloud/messages/text", {
  method: "POST",
  headers: {
    accept: "application/json",
    authorization: "Bearer Your_Token",
    "content-type": "application/json"
  },
  body: JSON.stringify({ to: "15052462002", body: "Hello" })
});

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

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{  \"to\": \"15052462002\",  \"body\": \"Hello\"}");
Request request = new Request.Builder()
  .url("https://gate.whapi.cloud/messages/text")
  .method("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/messages/text");
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 = "15052462002", body = "Hello" });
var response = await client.ExecuteAsync(request);

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

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

func main() {
	body := []byte(`{
  "to": "15052462002",
  "body": "Hello"
}`)
	req, _ := http.NewRequest("POST", "https://gate.whapi.cloud/messages/text", 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önderimden sonraki durum

Bu izleme yalnızca gönderim metni içindir. CRM aktarımı mesaj göndermez. Başarılı bir gönderim yanıtı, alıcının metni zaten aldığı anlamına gelmez. Webhook'tan önce görünen ilk durum pending olur. Sonraki değişiklikler yalnızca statuses.post ve statuses.put ile gelir. Durum pending kalır ve sent, delivered ya da sonraki bir ack'e geçmezse mesaj teslim edilmemiştir. Payload'u ve hesabın bu türü gönderme iznini kontrol edin.

  • Başarılı bir sendMessageText yanıtı sent içerir. Bu, kişinin metni zaten aldığı anlamına gelmez.

  • Sonraki ack değişiklikleri statuses.post ve statuses.put ile gelir.

Teslimat ve webhook hakkında ne okunur

Bir şey ters gittiyse desteğe yazın
Bir şey bozulunca

Hataları her adımda ele alın

Kontrol, numaranın WhatsApp'ta olmadığını gösterebilir; Make veya n8n'deki sonraki adım yine de mesajı gönderir ya da numarayı aktarır. Bu kullanımı o adımda durdurun.

Kontrol hayır dedi ama sonraki adım yine de çalıştı mı?

Bu Make veya n8n adımını durdurun. Mesajı göndermeyin ve numarayı aktarmayın. Müşteriler desteğimizin hızlı yanıt verdiğini sık söyler. Yardım istemekten çekinmeyin.

Bir şey ters gittiyse desteğe yazın

API adımına göre bakın

Durum Ne anlama gelir Ne yapmalı
200 OK HTTP 200 returns contacts. valid includes wa_id. invalid means the number does not have WhatsApp, so do not mail it, do not import it, and do not call sendMessageText for it. Example: {"contacts":[{"input":"15052462002","status":"valid","wa_id":"[email protected]"},{"input":"15058662314","status":"invalid"}]}.
400 Wrong request parameters
401 Need channel authorization for check phones Authorize the channel before this check.
402 Trial version limit exceeded
429 Too many requests
500 Internal Error
Durum Ne anlama gelir Ne yapmalı
200 Created
400 Wrong request parameters
401 Need channel authorization for send message Authorize the channel before this send.
402 Trial version limit exceeded
403 It is forbidden to send to this group/recipient
413 Request body too large
429 Too many requests
500 Internal Error
SSS

Operatörlerin soruları

Hayır. CRM aktarımı checkPhones sonrasında durur ve sendMessageText çağırmaz. Metin yalnızca liste bir gönderimse ve kontrol numaranın WhatsApp'ta olduğunu söylüyorsa gider.
Bu Make veya n8n adımını durdurun. Mesajı göndermeyin ve numarayı aktarmayın.
Hayır. Kontrol yalnızca numaranın WhatsApp'ta olup olmadığını söyler. Gönderimi alma onayını kaydetmez.
Bir CRM, ERP veya başka bir hizmetten Make veya n8n'e. Whapi.Cloud o sistemi okumaz. Verdiğiniz telefonları kontrol eder ve metni yalnızca gönderim dalında yollar.
WhatsApp'ta olmayan bir numara gönderilmesin ve aktarılmasın diye. Kontrol, listenin kapısıdır; ayrı bir onay adımı değildir.
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