Solicitar compartir el contacto
Envíe un mensaje con el botón nativo para compartir el contacto. La persona decide si desea compartir su teléfono con la empresa.
Rutas y autenticación
Utilice el token de API de la empresa, creado en Configuración → Integraciones → Tokens de API. Los tokens restringidos necesitan el alcance waba, incluso en la ruta unificada. Los tokens anteriores sin alcances siguen permitidos. CHANNEL_UUID debe pertenecer a la empresa del token.
| POST | Autenticación |
|---|---|
/api/v1/channels/CHANNEL_UUID/request-contact | WABA o ZuckZapGo; token de API de la empresa |
/api/v1/waba/CHANNEL_UUID/request-contact | Solo WABA; token de API de la empresa |
/api/messages/request-contact | Canal asociado al token de conexión; Authorization: Bearer TOKEN_DEL_CANAL |
Ejemplo WABA: solicitar por teléfono
Reemplace CHANNEL_UUID, SU_API_TOKEN y el teléfono con los datos de su integración. Incluya el código de país y utilice solo dígitos. El texto debe tener entre 1 y 1024 caracteres.
curl --request POST 'https://backend.sendeasy.app/api/v1/channels/CHANNEL_UUID/request-contact' \
--header 'Authorization: Bearer SU_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{"to":"5511999999999","body":"Comparta su contacto para continuar con la atención."}'
WABA: contacto sin teléfono
Si recibe solo un BSUID, pase ese identificador opaco en to sin modificarlo. El username es un nombre visible y no sustituye al destinatario. SendEasy envía un mensaje nativo request_contact_info a Meta. La disponibilidad y las reglas de envío dependen de la cuenta y del proveedor.
{
"to": "BR.Example123",
"body": "Comparta su contacto para continuar con la atención."
}
ZuckZapGo: teléfono o LID
Para un canal WhatsApp con proveedor ZuckZapGo/WuzAPI, utilice la misma ruta unificada e incluya id, obligatorio con 1 a 128 caracteres alfanuméricos. El destinatario puede ser un teléfono, JID de teléfono o LID completo. Esta integración no acepta BSUID, username, grupos ni JID con sufijo de dispositivo.
{
"to": "123456789012345@lid",
"body": "Comparta su contacto para continuar con la atención.",
"id": "ContactRequest202610060001"
}
Respuesta y confirmación de entrega
HTTP 200 devuelve la respuesta del proveedor. En WABA, messages[0].id identifica el mensaje aceptado. La aceptación no confirma la entrega: siga los eventos statuses de Meta o consulte la ruta de estado a continuación. Este endpoint no crea por sí solo un mensaje de salida ni un ticket en el inbox WABA.
{
"messaging_product": "whatsapp",
"contacts": [{ "input": "5511999999999", "wa_id": "5511999999999" }],
"messages": [{ "id": "wamid.EXAMPLE" }]
}
curl 'https://backend.sendeasy.app/api/v1/waba/CHANNEL_UUID/messages/MESSAGE_ID/status' \
--header 'Authorization: Bearer SU_API_TOKEN'
Cuando la persona comparte el contacto
El contacto compartido sigue el flujo normal de mensajes entrantes y se conserva el payload original al reenviar webhooks. En la API oficial, la tarjeta tiene origin: "contact_request"; el teléfono está en contacts[].phones[].wa_id. En ZuckZapGo, el evento Message tiene contactMessage.isSelfContact: true; el vCard contiene la identidad compartida. La correlación se hace por conversación, dentro de la empresa y canal. Una tarjeta común de terceros no debe sustituir la identidad del remitente.
Errores y reintentos
El ID estable y la idempotencia descritos aquí se aplican a ZuckZapGo. Reutilice el mismo id y payload cuando se permita un reintento. SendEasy no reintenta automáticamente. Incluir id en WABA no añade idempotencia al envío.
| Error | Significado |
|---|---|
CONTACT_REQUEST_BODY_INVALID | Texto vacío o superior a 1024 caracteres. |
CONTACT_REQUEST_RECIPIENT_INVALID | Destinatario inválido para el proveedor. |
CONTACT_REQUEST_ID_REQUIRED | ZuckZapGo exige un ID alfanumérico de 1 a 128 caracteres. |
CHANNEL_NOT_FOUND | Canal inexistente o fuera de la empresa del token. |
CONTACT_REQUEST_DISPATCH_UNKNOWN | Resultado incierto después de un timeout/fallo de transporte. No reenviar automáticamente. |
contact_request_dispatch_unknown | El proveedor no puede determinar si despachó. No reenviar ni generar otro ID. |
contact_request_id_conflict | El ID se reutilizó con datos diferentes. |
Otros errores conservan el estado HTTP del proveedor y sus detalles en provider. Confirme que la cuenta permite este tipo de mensaje. Un fallo documentado por el proveedor como anterior al despacho puede permitir un reintento con el mismo ID y payload.
Vea también API Pública y WABA API.