Uau! Construiți-vă integrarea WhatsApp. Începeți gratuit. Înregistrați-vă acum
Moderare cereri de intrare · scenariu WhatsApp API

Gestionează cererile de intrare în grupurile WhatsApp din backend

Cluburile plătite și comunitățile private nu mai pierd solicitanți când cozile stau pe un telefon. Când cineva cere acces la un grup doar cu aprobare, backend-ul tău poate reacționa la un webhook groups.put, lista cererile pendente și admite sau respinge fiecare prin Whapi.Cloud. Acest scenariu arată integratorilor cum să implementeze fluxul prin WhatsApp API.

Webhook groups.put cu action request GET cereri pendente, apoi POST sau DELETE per id
Laptop cu diagramă de integrare lângă un telefon cu vizualizare admin grup WhatsApp și o coadă scurtă de cereri pendente.
Scenariu

Când să folosești acest flux

Grupul cere aprobare înainte de intrare

Folosește fluxul când grupul WhatsApp nu e deschis: cineva apasă linkul de invitație și creează o cerere pe care un admin ar aproba sau refuza în app.

Regulile de moderare stau în backend-ul tău

Folosește fluxul când own_backend decide cine intră (listă plătită, cod referral, allowlist manual) și ai nevoie de un traseu HTTP stabil în loc să copiezi atingeri de pe telefon.

Rulezi mai multe grupuri doar cu aprobare

Folosește fluxul când cererile se acumulează în mai multe grupuri sau în afara programului și vrei un singur model: listare, aprobare, respingere.

Ecran info grup WhatsApp pe telefon cu cerere rezolvată: membrul apare în listă sau cererea pendente dispare după respingere.
Experiența clientului

Solicitanții află repede dacă intră sau nu

Fără automatizare, o cerere poate rămâne pendente până cineva deschide WhatsApp pe telefon și apasă aprobă sau respinge.

După regulile tale, cine e aprobat poate intra în grup pe aceeași invitație, iar o cerere respinsă nu mai blochează coada. Integratorii construiesc rezultatul cu WhatsApp API.

Flux de lucru

De la cerere pendente la aprobare sau respingere

1

Cineva cere să intre în grup

Persoana folosește linkul de invitație cât grupul e în mod doar cu aprobare. Cu webhook-ul de canal groups.put activ, Whapi publică un payload unde groups_participants[].action e request, event.type e groups, event.event e put: semnal pentru own_backend să listeze cereri și să decidă aprobare sau respingere.

2

Listează cererile de intrare pendente

GET /groups/{GroupID}/applications

GET /groups/{GroupID}/applications pentru GroupID configurat. Citește fiecare id de cerere (și câmpuri legate) din răspuns pentru pasul următor.

3

Aprobă o cerere

POST /groups/{GroupID}/applications

Dacă trec regulile own_backend, POST /groups/{GroupID}/applications cu id-ul cererii în corp. OpenAPI indică un id per apel: iterează când sunt mai multe cereri.

4

Respinge o cerere

DELETE /groups/{GroupID}/applications

Dacă regulile eșuează, DELETE /groups/{GroupID}/applications cu aceeași formă de id. Un apel per cerere respinsă, separat de aprobare.

Ai nevoie de forma completă a webhook-ului? Callback-ul cererii de intrare e documentat în secțiunea de livrare de mai jos — nu ack-uri de mesaje. Vezi payload groups.put →

Cerințe preliminare

Înainte să rulezi fluxul

Conectează contul WhatsApp care administrează grupul la Whapi.Cloud, activează webhook-ul de canal groups.put și folosește tokenul API al canalului pe endpoint-urile de cereri ale grupului. Stochează GroupID țintă și regulile de moderare în own_backend înainte de procesare.

Opțional — detalii despre flux

Implementare API

Apeluri cereri grup în ordine

Trei pași HTTP oglindesc lanțul din catalog: ia coada, admite solicitanții permisi, respinge restul. Whapi expune listare, aprobare și respingere pe același path de cereri al grupului, fără atingeri manuale de admin.

Obține token API gratuit după înregistrare pe whapi.cloud și folosește-l în cod în loc de Your_Token din exemple.

Listează cererile de intrare pendente

Returnează cererile de intrare în așteptare pe grup ca own_backend să potrivească fiecare cerere cu allowlist sau starea plății.

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))
}

Aprobă o cerere

Acceptă o cerere pendente ca persoana să acceseze grupul pe calea normală de invitație după aprobare reușită.

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))
}

Respinge o cerere

Refuză o cerere pendente ca să iasă din coadă fără admitere.

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))
}
Eveniment intrare

Cereri de intrare pe groups.put

Folosește setarea webhook de canal pentru groups.put ca să primești evenimente de cerere de intrare. Whapi trimite JSON cu groups_participants (fiecare item are group_id, participants, action), plus event.type groups, event.event put și channel_id. Când action e request, cineva a cerut intrarea: apelează getGroupApplicationsList pentru group_id potrivit, apoi aprobă sau respinge. E separat de urmărirea livrării mesajelor statuses.post.

  • Formă exemplu confirmată de operator: groups_participants cu action request, event groups/put și channel_id în același payload pe care Whapi îl postează la URL-ul tău.

  • Mapează groups_participants[].group_id la GroupID în GET /groups/{GroupID}/applications înainte de aprobare sau respingere.

  • Id-urile participanților din webhook identifică cine a cerut acces; combină-le cu răspunsul listării la ApplicationRequest.

  • Polling getGroupApplicationsList programat funcționează și fără webhook; se schimbă doar declanșatorul.

Ce să citești despre livrare și webhook-uri

Contactează suportul dacă ceva a mers greșit
Când ceva se strică

Gestionează eșecuri la fiecare pas

Dacă listarea cererilor sau apelurile de aprobare/respingere eșuează, cererile rămân pendente — reîncearcă, sari id-uri vechi sau alertează ops, nu presupune că cineva a fost admis.

Când cererile nu dispar

GroupID greșit, grup lipsă sau răspunsuri 400 repetate lasă solicitanții blocați. Corectează parametrul de rută, confirmă că canalul încă administrează grupul și reîncearcă aprobare/respingere doar pentru id-ul curent; nu presupune că un id vechi e valid. Dacă erorile persistă după reîncercare, contactează suportul Whapi cu GroupID și corpul eșuat.

Contactează suportul dacă ceva a mers greșit

Depanare pe pas API

Stare Ce înseamnă Ce să faci
400 Wrong request parameters Corectează parametri query ca count sau offset conform OpenAPI înainte de a relista.
404 Specified group not found Confirmă că GroupID e un grup pe care canalul îl poate gestiona; actualizează config own_backend.
Stare Ce înseamnă Ce să faci
400 Wrong request parameters Trimite un id de cerere valid în corp; aprobă un id per apel ca în OpenAPI.
404 Specified group not found Listează din nou — id-ul poate fi deja aprobat, respins sau retras.
Stare Ce înseamnă Ce să faci
400 Wrong request parameters Potrivește corpul DELETE la OpenAPI și trimite id-ul pe care vrei să îl respingi.
404 Specified group not found Reia coada; cererea poate să nu mai existe pe server.
Întrebări frecvente

Cereri de intrare și id-uri de cerere

Activează groups.put pe webhook-ul canalului. Whapi postează event.type groups și event.event put cu groups_participants unde action e request, group_id e JID-ul grupului, participants listează id solicitant; apoi worker-ul apelează getGroupApplicationsList și approveGroupApplicationsList sau rejectGroupApplicationsList.
OpenAPI descrie un id de cerere per apel approveGroupApplicationsList și unul per rejectGroupApplicationsList. Iterează în own_backend când așteaptă mai multe persoane.
Folosește identificatorul din răspunsul getGroupApplicationsList (câmpul application pentru ApplicationRequest). Dacă primești 404, listează din nou înainte de reîncercare — coada s-a putut schimba.
Tratează ca failure_mode din catalog: grupul e încă doar cu aprobare, linkul de invitație e valid, nu ai respins același id în altă parte. Alertează ops în loc să lași încercări duplicate de aprobare la infinit.
Funcționalități WhatsApp suportate

Tot ce ai nevoie pentru a construi automatizări pe WhatsApp

Whapi.Cloud îți oferă acces la un set complet de funcționalități WhatsApp — mesaje, media, grupuri, canale, webhook-uri și altele. Construiește boți, automatizări și integrări fără limitări de funcții.

Ales de dezvoltatori

De încredere pentru peste 3.300 de dezvoltatori și echipe SaaS

Dezvoltatori din întreaga lume se bazează pe Whapi.Cloud pentru a crea automatizări, boți, integrări CRM, instrumente de mesagerie în masă și fluxuri avansate WhatsApp. Infrastructura noastră procesează milioane de cereri API cu o stabilitate ridicată — iar numărul crește în fiecare lună.

Pictogramă funcționalitate

5,5K+

canale API active

Pictogramă funcționalitate

21M+

cereri API pe lună

„Totul este simplu, intuitiv și ușor de folosit. Documentația este clară, iar toate informațiile necesare sunt la îndemână. Foarte bine făcut.”

Roberto K. / Web Developer

„Am conectat WhatsApp la fluxurile noastre în n8n în doar câteva minute. Fără cod, fără complicații — totul a funcționat din prima.”

Martin P. / Developer

„Whapi.Cloud a devenit o parte esențială a comunicării cu clienții. Am automatizat actualizări de produse, notificări de comenzi și mesaje de suport — fără șabloane sau aprobări Meta.”

Oscar T. / CTO

Bulă decorativă