Uau! Construiți-vă integrarea WhatsApp. Începeți gratuit. Înregistrați-vă acum
WhatsApp API

Numerele care nu sunt pe WhatsApp rămân nefolosite

Un lead care nu este pe WhatsApp rămâne în afara trimiterii și a importului în CRM. Când o listă de telefoane urmează să fie folosită, Make sau n8n pot verifica numărul și opri pasul următor prin Whapi.Cloud. Acest caz arată integratorilor cum implementează fluxul cu WhatsApp API.

Ramura de trimitere poate trimite textul Ramura de import nu trimite
Un birou cu o listă de telefoane pe laptop, un chat WhatsApp care nu s-a deschis pentru un număr lăsat în afara listei și un rând CRM gol pentru acel număr.
Bulă decorativă
Caz de utilizare

Când folosești acest flux

Lista urmează să fie trimisă sau importată

Folosește acest flux când lista urmează să fie trimisă sau importată dintr-un CRM, ERP sau alt serviciu.

Modulul următor este Make sau n8n

Folosește acest flux când Make sau n8n ar trimite sau importa altfel un număr care nu este pe WhatsApp.

Lista are nevoie întâi de o verificare

Folosește acest flux când trebuie să verifici numărul înainte de a folosi lista, ca un număr care nu este pe WhatsApp să nu fie trimis și să nu fie importat.

Un telefon cu lista de chat-uri WhatsApp fără un fir nou pentru un număr lăsat în afara trimiterii, lângă o listă de contacte CRM care nu include acel număr.
Experiența clientului

Lead-ul nu este contactat degeaba

Înainte de automatizare, trimiterea ajunge încă la numere care nu sunt pe WhatsApp, iar importul în CRM păstrează acele numere, așa că lead-ul nu este atins și lista importată rămâne murdară.

După ce fluxul rulează, o persoană care nu este pe WhatsApp nu primește trimiterea, iar numărul nu intră în importul CRM. Integratorii construiesc acest rezultat cu WhatsApp API.

Flux

Verifică lista, apoi trimite sau oprește

1

Lista este pe cale să fie folosită

O listă de telefoane dintr-un CRM, ERP sau alt serviciu este pe cale să fie trimisă sau importată în Make sau n8n.

2

Verifică ce numere sunt pe WhatsApp

POST /contacts

checkPhones checkPhones verifică telefoanele din listă. Pasează acele telefoane în contacts. HTTP 200 întoarce contacts. Fiecare element are input și status. valid include și wa_id. invalid înseamnă că numărul nu are WhatsApp. Nu trimite numărul, nu îl importa și nu apela sendMessageText pentru el.
{"contacts":[{"input":"15052462002","status":"valid","wa_id":"[email protected]"},{"input":"15058662314","status":"invalid"}]}

3

Trimite textul pe ramura de mailing

POST /messages/text

sendMessageText rulează doar când lista este o trimitere și checkPhones a întors status valid pentru acel număr. Pune numărul în to. Un contact cu status invalid nu ajunge la acest pas. Importul în CRM se oprește după verificare și nu trebuie să apeleze această trimitere.

Ai nevoie de urmărirea livrării? Răspunsul trimiterii nu înseamnă că persoana are deja textul. Schimbările de status sosesc după acea trimitere. Importul în CRM nu are o trimitere de urmărit. Află statusul livrării →

Cerințe

Înainte să rulezi fluxul

Conectează numărul WhatsApp care verifică lista și trimite textul. Fiecare cerere folosește tokenul API al acelui număr. Make sau n8n rămân în scenariul tău. Whapi.Cloud face verificarea și, pe ramura de trimitere, textul.

Opțional — intră mai adânc în acest flux

Implementarea API

Două apeluri pentru această poartă

Verifică întâi telefoanele din listă. Trimite un text doar când lista este o trimitere și numărul este pe WhatsApp. Importul în CRM se oprește după verificare.

Primești tokenul API gratuit după ce te înregistrezi pe whapi.cloud și îl folosești în cod în loc de Your_Token din exemple.

Verifică ce numere sunt pe WhatsApp

Citește status fiecărui număr. Păstrează doar valid pentru pasul următor. invalid înseamnă că numărul nu are WhatsApp, deci nu îl trimite și nu îl importa.

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

Trimite textul pe ramura de mailing

Trimite textul doar unui număr păstrat de verificare și sare peste acest apel la un import CRM.

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

Status după trimitere

Această urmărire este doar pentru textul trimiterii. Un import CRM nu trimite. Un răspuns reușit nu înseamnă că destinatarul are deja textul. Primul status vizibil înainte de un webhook este pending. Schimbările ulterioare sosesc doar pe statuses.post și statuses.put. Dacă statusul rămâne pending și nu trece la sent, delivered sau un ack ulterior, mesajul nu a fost livrat. Verifică payload-ul și permisiunea contului de a trimite acel tip.

  • Un răspuns reușit de la sendMessageText include sent. Asta nu înseamnă că persoana are deja textul.

  • Schimbările ulterioare de ack sosesc pe statuses.post și statuses.put.

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

Contactează suportul dacă ceva nu a mers
Când ceva se rupe

Gestionează eșecurile la fiecare pas

Verificarea poate arăta că un număr nu este pe WhatsApp, în timp ce pasul următor din Make sau n8n tot trimite mesajul sau importă numărul. Oprește acea folosire la acel pas.

Verificarea a spus nu, dar pasul următor a rulat?

Oprește acel pas Make sau n8n. Nu trimite mesajul și nu importa numărul. Clienții spun adesea că suportul nostru răspunde. Nu ezita să ceri ajutor.

Contactează suportul dacă ceva nu a mers

Depanează pe pas API

Status Ce înseamnă Ce să faci
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
Status Ce înseamnă Ce să faci
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
FAQ

Întrebări ale operatorilor

Nu. Importul în CRM se oprește după checkPhones și nu trebuie să apeleze sendMessageText. Textul pleacă doar când lista este o trimitere și verificarea spune că numărul este pe WhatsApp.
Oprește acel pas Make sau n8n. Nu trimite mesajul și nu importa numărul.
Nu. Verificarea spune doar dacă numărul este pe WhatsApp. Nu înregistrează consimțământul de a primi trimiterea.
Dintr-un CRM, ERP sau alt serviciu, către Make sau n8n. Whapi.Cloud nu citește acel sistem. Verifică telefoanele pe care le trimiți și trimite un text doar pe ramura de mailing.
Ca un număr care nu este pe WhatsApp să nu fie trimis și să nu fie importat. Verificarea este poarta listei, nu un pas separat de consimțământ.
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ă