Wow! WhatsApp entegrasyonunuzu oluşturun. Ücretsiz başlayın. Şimdi Kaydol
Grup katılım moderasyonu · WhatsApp API senaryosu

WhatsApp grup katılım isteklerini backend'den yönetin

Ücretli kulüpler ve kapalı topluluklar, kuyruklar telefonda kaldığında başvuran kaybetmez. Onay gerektiren bir gruba erişim isteyen biri olduğunda backend'iniz groups.put webhook'una tepki verebilir, bekleyen başvuruları listeleyebilir ve Whapi.Cloud üzerinden her birini kabul veya red edebilir. Bu senaryo, integratörlere akışı WhatsApp API ile nasıl kuracaklarını gösterir.

action request ile groups.put webhook GET bekleyen başvurular, sonra id başına POST veya DELETE
Entegrasyon diyagramlı dizüstü bilgisayarın yanında WhatsApp grup yönetici görünümü ve kısa bekleyen başvuru kuyruğu olan telefon.
Senaryo

Bu akış ne zaman?

Gruba girmeden önce onay gerekir

WhatsApp grubu herkese açık değilken kullanın: biri davet linkine dokunur ve adminin uygulamada onaylayıp reddedeceği bir başvuru oluşturur.

Moderasyon kuralları backend'inizde

own_backend kimin gireceğine karar verdiğinde (ücretli liste, referral kodu, manuel allowlist) ve telefondan dokunuş kopyalamak yerine stabil bir HTTP yolu gerektiğinde bu akışı kullanın.

Birden fazla yalnızca onaylı grup yönetiyorsunuz

Başvurular birden fazla grupta veya mesai dışında biriktiğinde ve listeleme, onay, red için tek entegrasyon deseni istediğinizde kullanın.

Telefonda WhatsApp grup bilgi ekranı: başvuru çözüldü — üye listede veya red sonrası bekleyen başvuru yok.
Müşteri deneyimi

Başvuranlar hızla içerde mi değil mi öğrenir

Otomasyon olmadan bir başvuru, biri telefonda WhatsApp'ı açıp onayla veya reddet'e basana kadar bekleyebilir.

Kurallarınız çalıştıktan sonra onaylanan kişi aynı davet yolundan gruba girebilir; reddedilen başvuru kuyruğu artık tıkamaz. Integratörler sonucu WhatsApp API ile kurar.

İş akışı

Bekleyen başvurudan onay veya rede

1

Biri gruba katılmak istiyor

Grup yalnızca onay modundayken kişi davet linkini kullanır. Kanal groups.put webhook'u açıkken Whapi, groups_participants[].action request, event.type groups, event.event put olan payload gönderir: own_backend'in başvuruları listelemesi ve onay/red kararı vermesi için sinyal.

2

Bekleyen katılım başvurularını listele

GET /groups/{GroupID}/applications

Yapılandırılmış GroupID için GET /groups/{GroupID}/applications. Sonraki adım için yanıttan her başvuru id'sini (ve ilgili alanları) okuyun.

3

Bir başvuruyu onayla

POST /groups/{GroupID}/applications

own_backend kuralları geçerse, gövdede başvuru id'si ile POST /groups/{GroupID}/applications. OpenAPI çağrı başına bir id der — birden fazla bekleyen varsa döngü kurun.

4

Bir başvuruyu reddet

DELETE /groups/{GroupID}/applications

Kurallar başarısızsa, aynı id biçimiyle DELETE /groups/{GroupID}/applications. Reddettiğiniz her başvuru için bir çağrı, onaydan ayrı.

Webhook'un tam şekli mi lazım? Katılım isteği callback'i aşağıdaki teslimat bölümünde — mesaj teslim ack'leri değil. groups.put payload →

Ön koşullar

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

Grubu yöneten WhatsApp hesabını Whapi.Cloud'a bağlayın, kanal groups.put webhook'unu açın ve o kanalın API token'ını grup başvuru endpoint'lerinde kullanın. İşlemeden önce hedef GroupID ve moderasyon kurallarını own_backend'de saklayın.

İsteğe bağlı — akış hakkında daha fazla

API uygulaması

Grup başvuru çağrıları sırayla

Üç HTTP adımı katalog zincirini yansıtır: kuyruğu al, izin verilenleri kabul et, geri kalanı reddet. Whapi listeleme, onay ve red'i aynı grup başvuru yolunda sunar — manuel admin dokunuşu olmadan moderasyon.

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

Bekleyen katılım başvurularını listele

Grupta bekleyen katılım başvurularını döndürür; own_backend her başvuruyu allowlist veya ödeme durumuyla eşleştirir.

curl --request GET \
     --url https://gate.whapi.cloud/groups/[email protected]/applications \
     --header 'accept: application/json' \
     --header 'authorization: Bearer Your_Token'
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/groups/[email protected]/applications",
  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);
curl_close($curl);
echo $response;
import requests

url = "https://gate.whapi.cloud/groups/[email protected]/applications"
headers = {
    "accept": "application/json",
    "authorization": "Bearer Your_Token",
}
response = requests.get(url, headers=headers)
print(response.text)
const response = await fetch('https://gate.whapi.cloud/groups/[email protected]/applications', {
  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/groups/[email protected]/applications")
  .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/groups/[email protected]/applications");
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/groups/[email protected]/applications", nil)
	req.Header.Set("accept", "application/json")
	req.Header.Set("authorization", "Bearer Your_Token")
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}

Bir başvuruyu onayla

Bekleyen bir başvuruyu kabul eder; onay başarılı olunca kişi normal davet yolundan gruba girebilir.

curl --request POST \
     --url https://gate.whapi.cloud/groups/[email protected]/applications \
     --header 'accept: application/json' \
     --header 'authorization: Bearer Your_Token' \
     --header 'content-type: application/json' \
     --data '
{
  "application": "61371989850@..."
}
'
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/groups/[email protected]/applications",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\"application\": \"61371989850@...\"}",
  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/groups/[email protected]/applications"
payload = {
    "application": "61371989850@..."
}
headers = {
    "accept": "application/json",
    "authorization": "Bearer Your_Token",
    "content-type": "application/json",
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const response = await fetch('https://gate.whapi.cloud/groups/[email protected]/applications', {
  method: 'POST',
  headers: {
    accept: 'application/json',
    authorization: 'Bearer Your_Token',
    'content-type': 'application/json',
  },
  body: JSON.stringify({
  "application": "61371989850@..."
}),
});
console.log(await response.text());
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"application\": \"61371989850@...\"}");
Request request = new Request.Builder()
  .url("https://gate.whapi.cloud/groups/[email protected]/applications")
  .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/groups/[email protected]/applications");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("Authorization", "Bearer Your_Token");
request.AddJsonBody(new { application = "61371989850@..." });
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
package main

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

func main() {
	body := []byte(`{"application": "61371989850@..."}`)
	req, _ := http.NewRequest("POST", "https://gate.whapi.cloud/groups/[email protected]/applications", 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))
}

Bir başvuruyu reddet

Bekleyen bir başvuruyu reddeder; kişi kabul edilmeden kuyruktan çıkar.

curl --request DELETE \
     --url https://gate.whapi.cloud/groups/[email protected]/applications \
     --header 'accept: application/json' \
     --header 'authorization: Bearer Your_Token' \
     --header 'content-type: application/json' \
     --data '
{
  "application": "61371989850@..."
}
'
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/groups/[email protected]/applications",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_POSTFIELDS => "{\"application\": \"61371989850@...\"}",
  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/groups/[email protected]/applications"
payload = {
    "application": "61371989850@..."
}
headers = {
    "accept": "application/json",
    "authorization": "Bearer Your_Token",
    "content-type": "application/json",
}
response = requests.delete(url, json=payload, headers=headers)
print(response.text)
const response = await fetch('https://gate.whapi.cloud/groups/[email protected]/applications', {
  method: 'DELETE',
  headers: {
    accept: 'application/json',
    authorization: 'Bearer Your_Token',
    'content-type': 'application/json',
  },
  body: JSON.stringify({
  "application": "61371989850@..."
}),
});
console.log(await response.text());
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"application\": \"61371989850@...\"}");
Request request = new Request.Builder()
  .url("https://gate.whapi.cloud/groups/[email protected]/applications")
  .delete(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/groups/[email protected]/applications");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("Authorization", "Bearer Your_Token");
request.AddJsonBody(new { application = "61371989850@..." });
var response = await client.DeleteAsync(request);
Console.WriteLine("{0}", response.Content);
package main

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

func main() {
	body := []byte(`{"application": "61371989850@..."}`)
	req, _ := http.NewRequest("DELETE", "https://gate.whapi.cloud/groups/[email protected]/applications", 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))
}
Gelen olay

groups.put üzerinde katılım istekleri

Katılım isteği olayları için kanal webhook ayarında groups.put kullanın. Whapi, groups_participants (her öğede group_id, participants, action) içeren JSON gönderir; ayrıca event.type groups, event.event put, channel_id. action request olduğunda biri katılmak istemiştir: eşleşen group_id için getGroupApplicationsList çağırın, sonra onaylayın veya reddedin. Bu, mesaj statuses.post teslim takibinden ayrıdır.

  • Operatörün onayladığı örnek şekil: action request ile groups_participants, event groups/put ve channel_id — Whapi'nin URL'nize gönderdiği payload'ta.

  • Onay veya red öncesi groups_participants[].group_id'yi GET /groups/{GroupID}/applications GroupID ile eşleştirin.

  • Webhook'taki katılımcı id'leri kimin erişim istediğini gösterir; ApplicationRequest doldururken listeleme yanıtıyla birleştirin.

  • Webhook kullanmazsanız getGroupApplicationsList zamanlamalı polling hâlâ çalışır; yalnızca tetikleyici değişir.

Teslimat ve webhook hakkında okuyun

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

Her adımda hataları yönet

Başvuru listesi veya onay/red çağrıları başarısız olursa başvurular beklerde kalır — yeniden dene, eski id'leri atla veya ops uyar; birinin kabul edildiğini varsayma.

Başvurular hiç bitmiyorsa

Yanlış GroupID, eksik grup veya tekrarlayan 400 yanıtları başvuranları bekletmede bırakır. Rota parametresini düzeltin, kanalın hâlâ o grubu yönettiğini doğrulayın ve yalnızca güncel başvuru id'si için onay/red deneyin; eski id'nin geçerli olduğunu varsaymayın. Yeniden denemeden sonra hata sürerse GroupID ve başarısız istek gövdesiyle Whapi desteğine yazın.

Bir şey ters gittiyse desteğimize yazın

API adımına göre teşhis

Durum Anlamı Ne yapmalı
400 Wrong request parameters Listeyi yeniden denemeden önce count veya offset gibi sorgu parametrelerini OpenAPI'ye göre düzeltin.
404 Specified group not found GroupID'nin bu kanalın yönetebildiği bir grupla eşleştiğini doğrulayın; own_backend yapılandırmasını güncelleyin.
Durum Anlamı Ne yapmalı
400 Wrong request parameters Gövdede geçerli başvuru id gönderin; OpenAPI'de olduğu gibi çağrı başına bir id onaylayın.
404 Specified group not found Başvuruları yeniden listeleyin — id zaten onaylanmış, reddedilmiş veya geri çekilmiş olabilir.
Durum Anlamı Ne yapmalı
400 Wrong request parameters DELETE gövdesini OpenAPI ile eşleştirin ve reddetmek istediğiniz başvuru id'sini verin.
404 Specified group not found Kuyruğu yeniden alın; başvuru sunucuda artık olmayabilir.
SSS

Katılım istekleri ve başvuru id'leri

Kanal webhook'unda groups.put'u açın. Whapi event.type groups ve event.event put ile groups_participants gönderir; action request, group_id grup JID, participants istek sahibi id — ardından worker getGroupApplicationsList ve approveGroupApplicationsList veya rejectGroupApplicationsList çağırır.
OpenAPI approveGroupApplicationsList ve rejectGroupApplicationsList için çağrı başına bir başvuru id tanımlar. Birden fazla kişi beklerken own_backend'de döngü kurun.
getGroupApplicationsList yanıtındaki başvuru tanımlayıcısını kullanın (ApplicationRequest'in beklediği application alanı). 404 dönerse yeniden denemeden önce tekrar listeleyin — kuyruk değişmiş olabilir.
Katalog failure_mode gibi ele alın: grup hâlâ yalnızca onaylı, davet linki geçerli, aynı id'yi başka yerde reddetmediniz. Sonsuz yinelenen onay denemeleri bırakmak yerine ops uyarı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