¡Guau! Crea tu integración de WhatsApp. Empieza gratis. Regístrate ahora
WhatsApp API

Pago confirmado: envía la invitación al grupo

Ofrece a quien paga un camino directo del checkout a tu grupo privado de WhatsApp. Cuando se confirme el pago, tu backend puede obtener la invitación y entregarla al pagador automáticamente con Whapi.Cloud. Este caso de uso muestra a los integradores cómo implementar ese flujo con la WhatsApp API.

Lo dispara tu webhook de pago La invitación llega al WhatsApp del pagador
Confirmación de checkout junto a una invitación de grupo de WhatsApp lista para que el pagador la abra.
Burbuja decorativa
Caso de uso

Cuándo usar este flujo

Vendes acceso a un grupo privado de WhatsApp

El producto de pago es un lugar en un grupo privado de WhatsApp, y la entrada es el enlace de invitación de ese grupo.

El grupo de destino se resuelve de forma dinámica

Tu backend elige qué grupo de WhatsApp corresponde al producto o nivel comprado.

La invitación debe enviarse sola

El pagador debe recibir la invitación sin que alguien copie el enlace.

Chat de WhatsApp en un teléfono con el mensaje de invitación al grupo que el pagador puede abrir para unirse.
Experiencia del cliente

El pagador recibe la invitación sin esperar

Antes de automatizar, alguien copia el enlace del grupo o persigue al pagador después del checkout, y quien ya pagó se queda parado sin saber si tiene acceso.

Tras confirmar el pago, la invitación al grupo aparece en el chat de WhatsApp del pagador para que la abra y se una cuando quiera. Los integradores construyen este resultado con la WhatsApp API.

Flujo

Del pago confirmado a la invitación al grupo

1

Pago confirmado

Tu webhook de pago pasa al backend el número de WhatsApp del pagador y el producto o nivel comprado.

2

Resuelve el grupo de pago

GET /groups

Empareja la compra con el grupo de WhatsApp correcto. Si su id aún no está guardado, getGroups devuelve la lista con la que comparas.

3

Obtén el código de invitación

GET /groups/{GroupID}/invite

getGroupInvite lee el código de invitación del grupo que acabas de resolver.

4

Envía la invitación al pagador

POST /groups/link/{InviteCode}

sendGroupInvite entrega esa invitación al número de WhatsApp del pagador que viene del evento de pago. El pagador entra al abrir el enlace.

¿Necesitas seguir la entrega? Sigue lo que ocurre después del envío con webhooks de estado. La respuesta del envío solo confirma que la petición fue aceptada. Más sobre el estado de entrega →

Requisitos

Antes de ejecutar el flujo

Conecta el número de WhatsApp que enviará la invitación y autentica cada petición con el token de API de ese número. Tu webhook de pago se queda en tu stack. Whapi.Cloud ejecuta las llamadas de la invitación al grupo.

Opcional: profundiza en este flujo

Implementación de la API

Las tres llamadas en orden

Resuelve el grupo de pago, obtén su código de invitación y entrega la invitación al pagador. Mapea el teléfono del pagador desde tu payload de pago al campo to del cuerpo de envío.

Obtén tu token de API gratis después de registrarte en whapi.cloud y usa ese token en el código en lugar de Your_Token de los ejemplos.

Resuelve el grupo de pago

Encuentra el grupo de WhatsApp que corresponde al producto que compró el pagador cuando ese id de grupo aún no está guardado.

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

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/groups",
  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);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
import requests

url = "https://gate.whapi.cloud/groups"

headers = {
    "accept": "application/json",
    "authorization": "Bearer Your_Token",
}

response = requests.get(url, headers=headers)

print(response.text)
const url = 'https://gate.whapi.cloud/groups';

const response = await fetch(url, {
  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")
  .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");
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", nil)
	req.Header.Set("accept", "application/json")
	req.Header.Set("authorization", "Bearer Your_Token")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}

Obtén el código de invitación

Lee el código de invitación del grupo que resolviste.

curl --request GET \
     --url https://gate.whapi.cloud/groups/{GroupID}/invite \
     --header 'accept: application/json' \
     --header 'authorization: Bearer Your_Token'
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/groups/{GroupID}/invite",
  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);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
import requests

url = "https://gate.whapi.cloud/groups/{GroupID}/invite"

headers = {
    "accept": "application/json",
    "authorization": "Bearer Your_Token",
}

response = requests.get(url, headers=headers)

print(response.text)
const url = 'https://gate.whapi.cloud/groups/{GroupID}/invite';

const response = await fetch(url, {
  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/{GroupID}/invite")
  .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/{GroupID}/invite");
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/{GroupID}/invite", nil)
	req.Header.Set("accept", "application/json")
	req.Header.Set("authorization", "Bearer Your_Token")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}

Envía la invitación al pagador

Entrega esa invitación al número de teléfono del evento de pago.

curl --request POST \
     --url https://gate.whapi.cloud/groups/link/{InviteCode} \
     --header 'accept: application/json' \
     --header 'authorization: Bearer Your_Token' \
     --header 'content-type: application/json' \
     --data '
{
  "to": "447123456789"
}
'
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/groups/link/{InviteCode}",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\"to\":\"447123456789\"}",
  CURLOPT_HTTPHEADER => [
    "accept: application/json",
    "authorization: Bearer Your_Token",
    "content-type: application/json"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
import requests

url = "https://gate.whapi.cloud/groups/link/{InviteCode}"

payload = {
  "to": "447123456789"
}
headers = {
    "accept": "application/json",
    "authorization": "Bearer Your_Token",
    "content-type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const url = 'https://gate.whapi.cloud/groups/link/{InviteCode}';

const response = await fetch(url, {
  method: 'POST',
  headers: {
    accept: 'application/json',
    authorization: 'Bearer Your_Token',
    'content-type': 'application/json',
  },
  body: JSON.stringify({
  "to": "447123456789"
}),
});

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

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"to\":\"447123456789\"}");
Request request = new Request.Builder()
  .url("https://gate.whapi.cloud/groups/link/{InviteCode}")
  .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/link/{InviteCode}");
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 = "447123456789" });
var response = await client.PostAsync(request);

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

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

func main() {
	body := []byte(`{"to":"447123456789"}`)
	req, _ := http.NewRequest("POST", "https://gate.whapi.cloud/groups/link/{InviteCode}", 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))
}
Entrega

Estado después de la respuesta de envío

Una respuesta de envío correcta no significa que el pagador ya tenga la invitación. El primer estado visible antes de un webhook es pending. Los cambios posteriores llegan solo en statuses.post y statuses.put. Si el estado se queda en pending y no pasa a sent, delivered o un ack posterior, el mensaje no se entregó. Revisa el payload y si la cuenta puede enviar este tipo de mensaje.

  • La llamada de envío queda aceptada cuando la respuesta incluye sent.

  • Los cambios de ack posteriores llegan en statuses.post y statuses.put, no como campos extra de la respuesta de envío.

Qué leer sobre entrega y webhooks

Contacta con soporte si algo salió mal
Cuando algo falla

Gestiona los fallos en cada paso

El pago puede confirmarse y la cadena de invitación romperse igual, cuando el grupo de pago no está en la lista, no se puede obtener el código de invitación o falla sendGroupInvite. Trata la rotura en ese paso para que el pagador siga recibiendo el enlace.

¿El pago se confirmó, pero la invitación falló?

Separa el estado del pago de la entrega de la invitación. Reintenta el paso que falló o avisa a tu equipo para que el pagador reciba el enlace. No vuelvas a pasar al cliente por el checkout. Los clientes suelen decir que nuestro soporte responde. No dudes en pedir ayuda.

Contacta con soporte si algo salió mal

Diagnostica por paso de API

Status What it means What to do
400 Wrong request parameters
500 Internal Error
Status What it means What to do
400 Wrong request parameters
401 Need channel authorization for create invite link
403 You do not have permissions for this action
404 Specified group not found
429 Too many requests
500 Internal Error
Status What it means What to do
400 Wrong request parameters
401 Need channel authorization for this action
402 Trial version limit exceeded
404 Specified group not found
429 Too many requests
500 Internal Error
FAQ

Preguntas que hacen los operadores

Si el GroupID del grupo de pago ya está guardado, puedes saltar getGroups y empezar en getGroupInvite. Sigues necesitando el código de invitación antes de sendGroupInvite.
Mapea el teléfono del pagador desde el payload de tu webhook de pago al campo to de sendGroupInvite. Whapi.Cloud no lee tu sistema de cobro.
El envío entrega un enlace de invitación en el chat. El pagador entra cuando abre el enlace.
Reintenta el paso de invitación que falló o avisa a tu equipo. No dejes al pagador esperando y no le pidas que pague otra vez.
Resolver un grupo, obtener una invitación y enviar ese enlace es una razón central para elegir una pasarela con funciones completas cuando el producto es el acceso a una comunidad.
Funciones compatibles de WhatsApp

Todo lo que necesitas para crear automatizaciones en WhatsApp

Whapi.Cloud te da acceso a un conjunto completo de funciones de WhatsApp — mensajería, multimedia, grupos, canales, webhooks y más. Crea bots, automatizaciones e integraciones sin limitaciones de funciones.

Elegido por desarrolladores

Confiado por más de 3.300 desarrolladores y equipos SaaS

Desarrolladores de todo el mundo confían en Whapi.Cloud para crear automatizaciones, bots, integraciones con CRM, herramientas de mensajería masiva y flujos avanzados de WhatsApp. Nuestra infraestructura procesa millones de solicitudes API con alta estabilidad, y este número crece cada mes.

Icono de característica

5,5K+

canales API activos

Icono de característica

21M+

solicitudes API al mes

“Todo es simple, intuitivo y fácil de usar. La documentación es clara y toda la información está justo donde la necesito. Excelente trabajo.”

Roberto K. / Desarrollador Web

“Conectamos WhatsApp a nuestros flujos en n8n en solo unos minutos. Sin código, sin complicaciones — todo funcionó a la primera.”

Martin P. / Desarrollador

“Whapi.Cloud se convirtió en una parte clave de nuestra comunicación con clientes. Automatizamos actualizaciones de productos, notificaciones de pedidos y mensajes de soporte — sin plantillas ni aprobaciones de Meta.”

Oscar T. / CTO

Burbuja decorativa