TL;DR: Whapi.Cloud'un üç endpoint'i grup katılım isteği döngüsünün tamamını kapsar: GET bekleyen istekleri listelemek için, POST birini kabul etmek için, DELETE birini reddetmek için. Bir groups.put webhook'u yapılandırın, action: "request"'e göre filtreleyin ve kuralınıza göre kabul ya da redde yönlendirin. Python Flask işleyicisi 50 satırın altındadır. Make veya n8n için Webhook tetikleyicisi artı bir HTTP modülüdür. Dağıtımdan önce her çağrıyı test etmek için ücretsiz bir sandbox ile başlayın.
Manuel Grup Moderasyonu Neden Ölçekte Çöküyor
Her kapalı WhatsApp grubu eninde sonunda manuel moderasyon altında başarısız olur. Haftada 20 katılım isteğinde görev rutin bir kesintiyken; 100'de istekler yanıtsız yığılır ve grubun bütünlüğü bozulur.
Çevrimiçi kurs grupları, SaaS beta toplulukları ve ücretli üyelik kanallarının tamamı aynı sorunla karşılaşır: uygulamayı açması, her isteği okuması ve onay ya da red düğmesine basması gereken bir yönetici. Bu iş ölçeklenmez.
Whapi.Cloud tam moderasyon döngüsünü kapsar: katılım isteğini geldiği anda algılar, isteğe bağlı olarak bekleyen tam listeyi getirir, belirli bir başvuruyu kabul eder ve diğerlerini reddeder; tüm bunları üç REST endpoint'i aracılığıyla gerçekleştirir. Bu kılavuz, hem Python geliştiricileri hem de Make veya n8n kullanan ekipler için bu endpoint'lerin nasıl birleştirileceğini tam olarak göstermektedir.
Kapsamlı Gruplar API referansı ve grup otomasyon kılavuzu API'nin tüm yüzeyini kapsar; bu makale özellikle katılım isteği moderasyonuna odaklanmaktadır.
Başlamadan Önce Ön Koşullar
Herhangi bir kod yazmadan önce aşağıdaki dört öğeye sahip olduğunuzu doğrulayın. Herhangi birinin eksik olması API çağrılarının sessizce başarısız olmasına veya 403 döndürmesine neden olur.
-
Bağlı numaraya sahip Whapi.Cloud hesabı: panel.whapi.cloud/register adresine kaydolun, QR kodunu tarayın ve kontrol panelinden kanal tokenınızı kopyalayın.
-
Grup yönetici rolü: bağlı numara hedef grupta yönetici olmalıdır. Yönetici olmayan hesaplar tüm moderasyon endpoint'lerinde 403 alır.
-
Kapalı/özel grup ayarı: katılım istekleri yalnızca grup "Özel" olarak ayarlandığında vardır; yalnızca yöneticiler yeni üyeleri onaylayabilir. Açık gruplarda bekleyen başvuru kuyruğu yoktur.
-
Python 3.8+ ile
requestsveFlask(geliştirici yolu için) veya aktif bir Make ya da n8n hesabı (düşük kod yolu için).
WhatsApp Grup Katılım İstekleri Nasıl Çalışır
Bir WhatsApp grubu özel olarak ayarlandığında, davet bağlantısı aracılığıyla katılmaya çalışan herkes hemen katılmak yerine bekleyen bir kuyruğa girer. GET /groups/{GroupID}/applications bu kuyruğu API aracılığıyla sunar.
Her başvuran, açıkça kabul edilene veya reddedilene kadar kuyrukta kalır. Otomatik süre sonu yoktur. Yüksek hacimli topluluklar için, yönetilmezse kuyruk yüzlerce girişe ulaşabilir. Otomatik moderasyon, ayak uydurmanın tek güvenilir yoludur.
Katılım İstekleri için Webhook Tetikleyicisini Kurma
Bir katılım isteği webhook'u, biri grubunuza girmek istediği anda tetiklenir. Liste endpoint'ini sorgulamanıza gerek yoktur; Whapi.Cloud, WhatsApp onu iletir iletmez olayı URL'nize gerçek zamanlı olarak gönderir.
Bunu etkinleştirmek için Whapi.Cloud kanal ayarlarınıza gidin ve groups.put webhook olayını etkinleştirin. Webhook URL'ini sunucu endpoint'inize (veya Make/n8n Webhook URL'inize) ayarlayın. Etkinleştirildikten sonra, her grup üyeliği değişikliği — katılımlar, ayrılmalar, terfi ettirmeler ve katılım istekleri — bu URL'ye POST gönderecektir.
Bir katılım isteğinin payload'ı şöyle görünür. Tam alan açıklamaları için gelen webhook formatı referansına bakın:
{
"groups_participants": [
{
"group_id": "[email protected]",
"participants": [
"61371989850"
],
"action": "request"
}
],
"event": {
"type": "groups",
"event": "put"
},
"channel_id": "MANTIS-M72HC"
}
Ayırt edici action alanıdır. Aynı groups.put webhook'u katılımlar, ayrılmalar, yönetici terfiler ve kaldırmalar için de tetiklenir. İşleyiciniz herhangi bir moderasyon endpoint'ini çağırmadan önce action === "request"'i kontrol etmelidir. Aksi takdirde zaten katılmış kişileri onaylamaya çalışırsınız.
Payload'dan iki değer çıkarın: group_id (ör., [email protected]) ve participants içindeki her giriş (başvuranın telefon numarası veya @lid tanımlayıcısı). Her ikisi de her moderasyon API çağrısı için zorunlu parametrelerdir.
Bekleyen Katılım İsteklerinin Listesini Alma
GET endpoint'i, webhook'lardan bağımsız olarak tam bekleyen kuyruğu isteğe bağlı olarak getirir. Başlangıçta onayları tamamlamak, mevcut kuyruğu denetlemek veya bir inceleme panosu görüntülemek için kullanın.
| Parametre | Tür | Zorunlu | Açıklama |
GroupID |
string | Evet | @g.us soneki dahil tam grup ID'si |
count |
number | Hayır | Döndürülecek maksimum sonuç sayısı |
offset |
number | Hayır | Sayfalama için sonuç kaydırması |
count ve offset kullanın; her çağrı yalnızca count'ta belirtilen kadar kayıt döndürür.
Aşağıdaki Python çağrısı, yetkilendirme başlığında kanal tokenınızla bekleyen başvuruları listeler. Tam yanıt alanı açıklamaları için Whapi.Cloud grup üyesi belgelerine bakın.
import requests
WHAPI_TOKEN = "your_channel_token_here"
WHAPI_BASE = "https://gate.whapi.cloud"
def get_pending_applications(group_id):
"""Lists pending join requests for a group. Inputs: group_id (str). Returns: list of applicants."""
url = f"{WHAPI_BASE}/groups/{group_id}/applications"
headers = {"Authorization": f"Bearer {WHAPI_TOKEN}"}
resp = requests.get(url, headers=headers)
resp.raise_for_status()
return resp.json()
# Example usage
pending = get_pending_applications("[email protected]")
print(pending)
Yanıt, her başvuranın telefon numarasını veya @lid tanımlayıcısını içerir. 50'den fazla girişi olan kuyrukları sayfalamak için count ve offset kullanın.
API Aracılığıyla Katılım İsteğini Kabul Etme
POST /groups/{GroupID}/applications çağrı başına tam olarak bir başvuruyu kabul eder. Webhook payload'ından gelen telefon numarasını veya @lid tanımlayıcısını application parametresi olarak geçirin. Birden fazla başvuruyu onaylamak için döngü içinde çağırın.
| Parametre | Konum | Zorunlu | Açıklama |
GroupID |
path | Evet | Tam grup ID'si (ör., [email protected]) |
application |
body (JSON) | Evet | Başvuranın Chat ID'si (webhook payload'ından telefon numarası veya @lid) |
Authorization |
header | Evet | Bearer {channel_token} |
application parametresi hem telefon numarasını hem de @lid tanımlayıcısını kabul eder; her ikisi de kabul ve red endpoint'leri için geçerli Chat ID'lerdir.
Python Yolu: İsteği Kabul Etme
Aşağıdaki fonksiyon tek bir başvuruyu kabul eder. Webhook payload'ındaki participants dizisindeki her giriş için çağırın. Yanıt durum kodunu kontrol edin: 200 başarı anlamına gelir, 4xx başvuran ID'sinin yanlış olduğu veya yönetici haklarınızın olmadığı anlamına gelir.
def approve_application(group_id, participant):
"""Accepts one join request. Inputs: group_id (str), participant phone (str). Returns: response."""
url = f"{WHAPI_BASE}/groups/{group_id}/applications"
headers = {"Authorization": f"Bearer {WHAPI_TOKEN}"}
body = {"application": participant}
resp = requests.post(url, json=body, headers=headers)
if resp.status_code not in (200, 201):
print(f"Approve failed [{resp.status_code}]: {resp.text}")
return resp
Düşük Kod Yolu: Make'te Kabul Etme
Make'te: Webhook modülü tetiklenir, HTTP modülü Whapi.Cloud endpoint'ini çağırır. Webhook tetikleyiciniz katılım isteği olayını filtreledikten sonra HTTP modülünü yapılandırın. Tam senaryo kurulumu için Make.com entegrasyon kılavuzuna bakın:
-
URL:
https://gate.whapi.cloud/groups/{{groups_participants[].group_id}}/applications -
Yöntem: POST
-
Başlıklar: Ad
Authorization, DeğerBearer {{your_channel_token}}içeren bir başlık ekleyin -
Gövde türü: Raw, İçerik türü: JSON
-
Gövde içeriği:
{"application": "{{groups_participants[].participants[]}}"}
Düşük Kod Yolu: n8n'de Kabul Etme
n8n'de: Webhook düğümü olayı yakalar, HTTP Request düğümü kabul veya reddi çağırır. Webhook düğümünüzden ve body.groups_participants[0].action === "request"'e göre filtreleyen bir IF düğümünden sonra HTTP Request düğümünü yapılandırın:
-
URL:
https://gate.whapi.cloud/groups/{{$json.body.groups_participants[0].group_id}}/applications -
Yöntem: POST
-
Kimlik doğrulama: Header Auth. Ad:
Authorization, Değer:Bearer {{your_channel_token}} -
Gövde parametreleri: Gövdeyi JSON olarak gönder. Anahtar:
application, Değer:{{$json.body.groups_participants[0].participants[0]}}
API Aracılığıyla Katılım İsteklerini Reddetme
DELETE endpoint'i, kabul endpoint'iyle aynı parametrelerle çağrı başına bir başvuruyu reddeder. HTTP yöntemini DELETE olarak değiştirin; diğer her şey aynı kalır. Toplu reddetmeler için katılımcı listesinde döngü yapın.
application gövde alanını kullanır; yalnızca HTTP yöntemi POST'tan DELETE'e değişir.
Python Yolu: İsteği Reddetme
def reject_application(group_id, participant):
"""Rejects one join request. Inputs: group_id (str), participant phone (str). Returns: response."""
url = f"{WHAPI_BASE}/groups/{group_id}/applications"
headers = {"Authorization": f"Bearer {WHAPI_TOKEN}"}
body = {"application": participant}
resp = requests.delete(url, json=body, headers=headers)
if resp.status_code not in (200, 201):
print(f"Reject failed [{resp.status_code}]: {resp.text}")
return resp
Düşük Kod Yolu: Make'te Reddetme
Yukarıdaki kabul akışıyla aynı HTTP modülü yapılandırması. Yalnızca bir alanı değiştirin:
-
Yöntem: DELETE (diğer tüm alanlar — URL, başlıklar, gövde — kabul modülüyle aynı kalır)
Düşük Kod Yolu: n8n'de Reddetme
-
Yöntem: DELETE (URL, kimlik doğrulama ve gövde parametreleri kabul düğümüyle aynı kalır)
-
n8n'de IF düğümünüzün hem "true" (onayla) hem de "false" (reddet) dallarını ilgili yöntemlerle ayrı HTTP Request düğümlerine bağlayın.
Tam Moderasyon Otomasyon Akışını Oluşturma
Tam Python işleyicisi, webhook'u filtreleyen, kuralınızı uygulayan ve POST veya DELETE çağıran tek bir Flask rotasıdır. 50 satırın altında sığar ve üç endpoint'in tamamını kapsar.
should_approve() fonksiyonunu kendi mantığınızla değiştirin: izin verilen liste kontrolü, e-posta alan adı doğrulaması, CRM'inizde telefon numarası arama veya kendi veritabanınızı sorgulama. Bu işleyiciyi genişletmek istiyorsanız Python WhatsApp bot eğitimi ek Flask kalıplarını kapsar.
import requests
from flask import Flask, request, jsonify
app = Flask(__name__)
WHAPI_TOKEN = "your_channel_token_here"
WHAPI_BASE = "https://gate.whapi.cloud"
def get_pending_applications(group_id):
"""Lists pending join requests. Inputs: group_id (str). Returns: API response JSON."""
url = f"{WHAPI_BASE}/groups/{group_id}/applications"
headers = {"Authorization": f"Bearer {WHAPI_TOKEN}"}
resp = requests.get(url, headers=headers)
resp.raise_for_status()
return resp.json()
def approve_application(group_id, participant):
"""Accepts one join request. Inputs: group_id (str), participant phone (str). Returns: response."""
url = f"{WHAPI_BASE}/groups/{group_id}/applications"
headers = {"Authorization": f"Bearer {WHAPI_TOKEN}"}
resp = requests.post(url, json={"application": participant}, headers=headers)
if resp.status_code not in (200, 201):
print(f"Approve failed [{resp.status_code}]: {resp.text}")
return resp
def reject_application(group_id, participant):
"""Rejects one join request. Inputs: group_id (str), participant phone (str). Returns: response."""
url = f"{WHAPI_BASE}/groups/{group_id}/applications"
headers = {"Authorization": f"Bearer {WHAPI_TOKEN}"}
resp = requests.delete(url, json={"application": participant}, headers=headers)
if resp.status_code not in (200, 201):
print(f"Reject failed [{resp.status_code}]: {resp.text}")
return resp
def should_approve(phone_number):
"""
Your custom approval rule. Return True to accept, False to reject.
Replace this with your own logic: allowlist check, CRM lookup, domain validation, etc.
"""
# Example: approve any number (replace with real condition)
return True
@app.route("/webhook", methods=["POST"])
def handle_webhook():
"""Receives Whapi.Cloud webhook events and routes join requests to approve or reject."""
data = request.get_json(force=True)
for group_event in data.get("groups_participants", []):
# Only process join request events — skip joins, leaves, and promotions
if group_event.get("action") != "request":
continue
group_id = group_event["group_id"]
for participant in group_event.get("participants", []):
if should_approve(participant):
approve_application(group_id, participant)
else:
reject_application(group_id, participant)
return jsonify({"status": "ok"})
if __name__ == "__main__":
app.run(port=5000)
Hata yönetimi hakkında: 403 yanıtı, bağlı numaranın grup yöneticisi olmadığı anlamına gelir. 404, grup ID'sinin yanlış olduğu veya başvuranın kuyruktan çıktığı anlamına gelir. Her ikisini de kaydedin: yapılandırma hatalarını, geçici hataları değil, tanımlarlar.
Düşük kod yolu için Make veya n8n'deki tam akış şu sırayı izler:
-
Webhook tetikleyicisi: Custom Webhook modülü (Make) veya Webhook düğümü (n8n), Whapi.Cloud'dan
groups.putpayload'ını alır. -
Filtre: Router (Make) veya IF düğümü (n8n),
groups_participants[].action'ınrequest'e eşit olduğunu kontrol eder. Eşleşmeyen olaylar atılır. -
Karar: Kendi koşulunuzu ekleyin: bir Google Sheets izin listesinde katılımcı telefonunu arayın, bir veritabanı HTTP isteğini kontrol edin veya basit bir metin filtresi kullanın.
-
HTTP modülü (kabul yolu): JSON gövdesinde
{"application": "{participant}"}ilehttps://gate.whapi.cloud/groups/{group_id}/applications'a POST yapın. -
HTTP modülü (red yolu): aynı URL, aynı gövde; yöntem DELETE'e değişir.
Whapi.Cloud tek bir ayrıştırıcı alanla temiz bir JSON payload sunar. Make ve n8n bunu middleware veya özel dönüştürücü olmadan doğrudan eşler. Otomatik moderasyon, manuel yönetici kuyruğunu ortadan kaldırır ve bağlı numaranın yönettiği tüm gruplarda tutarlı erişim kuralları uygular.
Katılım İsteklerindeki @lid Tanımlayıcıları Hakkında Not
WhatsApp'ın 2025 gizlilik değişiklikleri nedeniyle bazı başvuranlar telefon numaraları yerine 1524746986546@lid gibi @lid tanımlayıcıları olarak görünür. @lid değerlerini doğrudan application parametresi olarak geçirin; kabul ve red endpoint'lerinde telefon numaralarıyla aynı şekilde çalışırlar.
Whapi.Cloud, WhatsApp eşlemeyi sağladığında @lid'yi telefon numaralarına otomatik olarak çözer. Çözümleme mevcut olmadığında @lid değeri olduğu gibi döndürülür ve yine de kabul veya red endpoint'ine application parametresi olarak doğrudan geçirilebilir. Tam açıklama için Whapi.Cloud bilgi tabanındaki WhatsApp gruplarında @lid nedir ve @lid SSS makalelerine bakın.
Endpoint Özeti: Tam Moderasyon Döngüsü
Üç endpoint — GET listele, POST kabul et, DELETE reddet — tam moderasyon döngüsünü kapsar. Teste geçmeden önce tam başvuru tablosu:
| İşlem | Yöntem | Endpoint | Zorunlu Gövde | Notlar |
| Bekleyen istekleri listele | GET | /groups/{GroupID}/applications |
Yok | Tam kuyruğu döndürür; sayfalamayı destekler |
| Bir isteği kabul et | POST | /groups/{GroupID}/applications |
{"application": "phone_or_lid"} |
Çağrı başına bir başvuran; birden fazlası için döngü |
| Bir isteği reddet | DELETE | /groups/{GroupID}/applications |
{"application": "phone_or_lid"} |
Çağrı başına bir başvuran; birden fazlası için döngü |
Üç çağrının tamamı aynı yetkilendirme başlığını kullanır: Bearer {channel_token}. Temel URL https://gate.whapi.cloud'dur. Eklediğiniz herhangi bir hız sınırlama, Whapi.Cloud API kısıtlamalarından değil, WhatsApp tarafındaki spam tespitinden kaynaklanır; üretim planlarında API düzeyinde katı hız limiti yoktur.
Ücretsiz Sandbox'ta Test Etmeye Başlayın
Katılım isteği API'sini ödeme yapmadan test etmek için ücretsiz bir Whapi.Cloud sandbox başlatın. Sandbox kalıcı olarak ücretsizdir: ayda 5 aktif konuşma, zaman sınırı yok. Bir QR kodu tarayın, bir numara bağlayın ve üretime dağıtmadan önce bu kılavuzdaki her endpoint'i gerçek bir WhatsApp grubunda çalıştırın.









