En la actualidad, más de 1.500 millones de personas en más de 180 países utilizan WhatsApp para mantenerse en contacto con sus amigos y familiares, en cuaquier lugar y en cualquier momento. Las empresas de todo el mundo ya han comenzado a utilizar WhatsApp de manera informal para comunicarse con sus clientes, ya sea sobre consultas de productos o actualizaciones de transacciones. El API de WhatsApp Business es una nueva manera en que las empresas pueden mejorar el manejo de estas conversaciones con sus clientes y llegar a otros nuevos que también valorarán la experiencia de mensajería instantánea rápida, cómoda y privada.

Esta guía proporciona las especificaciones de las API de Gupshup para enviar y recibir mensajes en WhatsApp a través de un API REST sencillo mediante los modos HTTP/HTTPS.

Establecer la URL del Webhook/Callback

Los Webhooks gestionan los mensajes entrantes de las personas que te responden en WhatsApp, incluyendo texto, ubicación y multimedia tal como imágenes y documentos, así como el estado de los mensajes que has enviado. Los Webhooks son esenciales ya que se utilizan para entregar notificaciones oportunas y errores out-of-band (OOB) , y es por lo tanto, muy recomendable que configures uno en los ajustes de la aplicación.

Los mensajes entrantes enviados por los clientes a tu número de teléfono de WhatsApp Business se enviarán a tu Webhook, es decir, cuando un cliente envía un mensaje de texto o un archivo multimedia adjunto en WhatsApp, la plataforma de Gupshup registra el evento e inmediatamente envía una notificación (solicitud HTTP POST) al Webhook especificado en la configuración de tu aplicación. Algunos puntos importantes acerca de Webhook:

1. El Webhook debería devolver HTTP_SUCCESS (code: 2xx) con una respuesta vacía. Si no lo hace en 10 segundos, consideraremos que la notificación ha fallado y lo intentaremos de nuevo después de un breve período.
2. Tu Webhook debería procesar mensajes y eventos entrantes de forma asíncrona, pero confirmar su recepción de forma sincrónica e inmediata. El mejor tiempo de confirmación debería ser menor a 100 milisegundos, y dado que cierto retraso en la red es comprensible, se recomienda que sea de 500 a 1000 milisegundos. Cuanto mayor sea el tiempo de respuesta, mayor será el retraso de los mensajes y eventos entrantes que recibirás en cada ocasión.
3. El Webhook debería aceptar el encabezado HTTP: User-Agent User-Agent
4. El Webhook debería aceptar el evento de usuario: sandbox-start
5. El Webhook debería tener acceso público, y si por razones de seguridad quieres mantenerlo privado, es necesario que pongas en lista blanca las IPs de solicitud de entrada de Gupshup. Contáctanos en devsupport@gupshup.io para obtener estas IPs.

Consulta la imagen a continuación para localizar la opción de establecer Webhook/Callback en la configuración de la app. Si la opción de URL de devolución de llamada está desactivada, podrás ver los mensajes entrantes en Mensajes Entrantes | Eventos el campo. Estos mensajes y eventos registrados se almacenan temporalmente, lo que significa que se borran si se actualiza la página.

Mensajes entrantes y eventos

Los tres tipos de notificaciones entrantes entregadas a tu Webhook son:

  1. usuario-evento
  2. eventos-del sistema
  3. mensaje-evento
  4. billing-evento
  5. mensaje

Parámetros/Propiedades comunes a todas las notificaciones entrantes

{
  "app": "DemoApp",
  "timestamp": 1580227766370,
  "version": 2,
  "type": "user-event"|"template-event"|"message-event"|"message",
  "payload": << Varia según el valor de la propiedad - "type" >>
}
Clave Tipo Descripción Ejemplo
app string El nombre de la app en Gupshup a la que el cliente ha enviado un mensaje en WhatsApp DemoApp
timestamp string La hora es una marca de tiempo UNIX de cuando el mensaje fue enviado por el cliente y recibido por Gupshup. 1584898839530
version string Versión de la payload de la devolución de llamada 2
type string Mensaje eventos
Evento de usuario|Evento de mensaje|mensaje
user-event
payload object El objeto de payload contiene información sobre el tipo de notificación correspondiente.
En la última parte de la documentación se describe brevemente cada payload
Por ejemplo: Evento de usuario

{«phone»:»918x98xx21x4″,»type»:»sandbox-start»}

Evento

En esta sección entenderemos:
1.  Evento de usuario: Estos son generados por nuestra plataforma cuando ocurre algún evento. Por ejemplo, recibirás los siguientes eventos del sistema cuando:
-Una URL de devolución de llamada es establecida para una app o mientras se utiliza el comando proxy para ejecutar tu app en el número de teléfono del bot del Proxy de Gupshup (+917834811114) para probar la aplicación.
– Un usuario final da su consentimiento (Opt-in) para recibir notificaciones de un número de teléfono comercial.

{
   "app":"DemoApp",
   "timestamp":1580142086287,
   "version":2,
   "type":"user-event",
   "payload":{
      "phone":"callbackSetPhone"|"918x98xx21x4",
      "type":"sandbox-start"|"opted-in"|"opted-out"
   }
}

El objeto del payload

Clave Tipo Descripción Ejemplo
phone string Es el número de teléfono del cliente que ha enviado el mensaje en tu número API de WhatsApp Business. El número está en formato E.164. 918x98xx21x4
type string El tipo de evento de usuario recibido en tu webhook
debe ser uno de los siguientes: sandbox-start, opted-in, opted-out
Descrito brevemente a continuación

El tipo de usuario-evento

Tipo Descripción Ejemplo
sandbox-start Este evento se recibe cuando la app está en modo Sandbox y se ha establecido una URL de devolución de llamada. Content type: application/json

{«app»:»DemoApp»,»timestamp»:1580142086287,»version»:2,»type»:»user-event»,»payload»:{«phone»:»callbackSetPhone»,»type»:»sandbox-start»}}

sandbox-start Este evento se recibe cuando la App está en modo Sandbox, y has utilizado el bot proxy de Gupshup para invocar tu App utilizando el comando:Proxy {{App_Name}} Content type: application/json

{«app»:»DemoApp»,»timestamp»:1580227393386,»version»:2,»type»:»user-event»,»payload»:{«phone»:»918x98xx21x4″,»type»:»sandbox-start»}}

opted-in Este evento se recibe cuando un usuario final acepta recibir una notificación de una empresa. Content type: application/json

{«app»:»DemoApp»,»timestamp»:1584541505908,»version»:2,»type»:»user-event»,»payload»:{«phone»:918x98xx21x4,»type»:»opted-in»}}

opted-out Este evento se recibe cuando un usuario final opta por no recibir notificaciones de una empresa. Content type: application/json

{«app»:»DemoApp»,»timestamp»:1584541505908,»version»:2,»type»:»user-event»,»payload»:{«phone»:918x98xx21x4,»type»:»opted-out»}}

2.  eventos del sistema : Estos son generados por nuestra plataforma cuando ocurre algún evento. Puedes elegir recibir estos eventos en tu URL de devolución de llamada desde la configuración del panel de control de la app. Por ejemplo, los siguientes eventos del sistema se reciben cuando:
– Se recibe un evento del sistema de tipo plantilla cuando se actualiza el estado de la plantilla. Por ejemplo, una plantilla enviada ha sido aprobada o rechazada.
– Se recibe un evento del sistema de tipo cuenta. Por ejemplo, cuando se actualiza el estado del número de teléfono o del nombre para mostrar de un WABA.
Los eventos del sistema se clasifican en dos tipos:

{
«app»: «jeet20»,
«timestamp»: 1636986446609,
«version»: 2,
«type»: «template-event»,
«payload»:{ «id»: «4dacef15-6c04-12db-b393-6190ac567eff», «status»: «REJECTED/APPROVED/DELETED/DISABLED», «elementName»: «abcd», «languageCode»: «en_US», «rejectedReason»: «INAVLID_FORMAT» }
}

El objeto del payload

Clave Tipo Descripción Ejemplo
id string Es el identificador único de una template en la plataforma Gupshup. Puedes encontrar el template ID utilizando la API para obtener lista de plantillas 4dacef15-6c04-12db-b393-6190ac567eff
status string Actualización de estado de una plantilla. Los valores posibles son REJECTED|APPROVED|DELETED|DISABLED APPROVED
elementName string El nombre único de una plantilla establecido durante la creación de la misma. El elementoNombre de una plantilla es único dentro del espacio de nombre de una WABA order_update
languageCode string El idioma de la plantilla. Aquí puedes consultar el código de idioma y el idioma asociado. en_US
rejectedReason string El motivo del rechazo de la plantilla. INVALID_FORMAT
  • Eventos de cuenta
    Los eventos de cuenta se reciben cuando se produce un evento en una WABA específica. Por ejemplo, cuando una WABA incumple una política empresarial de WhatsApp, o si se actualiza el límite de nivel de mensajería de una WABA.

Los tipos de eventos de cuenta y sus objetos de payload son los siguientes:

Tipo Descripción Ejemplo
evento-revisión Este evento se recibe cuando la WABA enviada es aprobada o rechazada.
Valores posibles: APPROVED, REJECTED
{
"app": "jeet20",
"timestamp": 1636986446609,
"version": 2,
"type": "account-event",
"payload": {
"type": "review-event",
"payload": {
"status": "APPROVED",
"actionDate": "January 31,2021"
}
}
}
evento-estado Este evento se recibe cuando el estado de la WABA ha cambiado.
Valores posibles: ACCOUNT_VIOLATION: La WABA ha sido desactivada/suspendida debido a la violación de la política, además, también se recibe el motivo de la infracción. ACCOUNT_VERIFIED: Cuando la app de tipo de Embed se actualiza de Sanbox a Live.
Obtenga más información sobre la infracción de la política aquí.
{
"app": "jeet20",
"timestamp": 1636986446609,
"version": 2,
"type": "account-event",
"payload": {
"type": "status-event",
"payload": {
"status": "ACCOUNT_VIOLATION",
"violation_type": "GAMBLING"
}
}
}
evento-pndn Este evento se recibe cuando se actualiza el estado del número de teléfono/nombre de pantalla enviado.
Valores posibles: INVALID_FORMAT, NAME_END_CLIENT_VIOLATION, NAME_FORMAT_UNACCEPTABLE, NAME_NOT_CONSISTENT, NAME_INDIVIDUAL_ISSUE, and NAME_ENDCLIENT_NOTRELATED
{
"app": "jeet20",
"timestamp": 1636986446609,
"version": 2,
"type": "account-event",
"payload": {
"type": "pndn-event",
"payload": {
"status": "approved/rejected",
"rejectedReason": "INVALID_FORMAT"
}
}
}
evento de nivel/rango Este evento se recibe cuando se actualiza la calificación/estado de calidad de un número de teléfono.
Valores posibles para los eventos: ONBOARDING, UPGRADE, DOWNGRADE, UNFLAGGED, and FLAGGED.
El límite de nivel actual en el que se encuentra esta cuenta y el nuevo nivel si se ha actualizado. Los valores posibles son: TIER_1K, TIER_10K, y TIER_100K.
{
"app": "jeet20",
"timestamp": 1636986446609,
"version": 2,
"type": "account-event",
"payload": {
"type": "tier-event",
"payload": {
"event": "onboarding/upgrade/downgrade
/unflagged/flagged",
"oldLimit": "TIER_10K",
"currentLimit": "TIER_100K"
}
}
}

3.  Evento de mensaje : Estos eventos indican el estado del mensaje enviado mediante la API de envío de mensajes al cliente de la API de WhatsApp (que básicamente envía un mensaje al usuario). El cliente de la API de WhatsApp Business enviará notificaciones para informar el estado de los mensajes entre los usuarios y tu. Cuando un mensaje se envíe con éxito, recibirás una notificación de cuándo se ha enviado, entregado y leído. El orden de estas notificaciones en tu app puede no reflejar el momento real del estado del mensaje. Consulta la marca de tiempo para determinar el momento, si es necesario. Las notificaciones que podrías recibir son:

{
«app»:»DemoAPI»,
«timestamp»:1580546677791,
«version»:2,
«type»:»message-event»,
«payload»:{
«id»:»59f8db90-c37e-4408-90ab-cc54ef8246ad»(identificador de mensaje de Gupshup)|»gBEGkYaYVSEEAgnZxQ3JmKK6Wvg» (identificador de mensaje de WhatsApp)
«gsId»: «ee4a68a0-1203-4c85-8dc3-49d0b3226a35» (ID de mensaje de Gupshup: esta propiedad solo se aplica a eventos de DLR)
«type»:»enqueued»|»failed»|»sent»|»delivered»|»read»,
«destination»:»91XX985XX10X»,
«payload»: << Varia según el valor de la propiedad – «type» >>;
}
}

El objeto de payload

Clave Tipo Descripción Ejemplo
id string Identificador de mensaje de Gupshup para tipos de Evento de mensaje: enqueued and failed
Para los eventos de DLR(sent|delivered|read) siempre es la identificación del mensaje de WhatsApp
59f8db90-c37e-4408-90ab-cc54ef8246ad
OR
gBEGkYaYVSEEAgnZxQ3JmKK6Wvg
gsId string Este es el ID de mensaje de Gupshup y solo está presente para los tipos de evento de mensaje: eventos de DLR (sent|delivered|read) 59f8db90-c37e-4408-90ab-cc54ef8246ad
type string Los tipos de eventos de mensaje recibidos en tu Webhook:
debe ser uno de los siguientes: enqueued, failed, sent, delivered, read
Descrito brevemente a continuación
Tipo Descripción Ejemplo
Enqueued El mensaje se envía con éxito al cliente de la API de WhatsApp Business
Payload object:

Clave Tipo Descripción Ejemplo
whatsapp
MessageId
string Un identificador de mensaje de WhatsApp generado cuando se envía un mensaje a un usuario final en WhatsApp gBEGkYaYVSEEA
gkD7bRi9syGnBk
type string Indica el tipo de mensajería session
Content type: application/json

{«app»:»DemoAPI»,»timestamp»:1580546677791,»version»:2,»type»:»message-event»,»payload»:{«id»:»59f8db90-c37e-4408-90ab-cc54ef8246ad»,»type»:»enqueued»,»destination»:»91XX985XX10X»,»payload»:{«whatsappMessageId»:»gBEGkYaYVSEEAgkD7bRi9syGnBk»,»type»:»session»}}}

Failed Un mensaje que falla en su envío al usuario final. La devolución de la llamada incluye el motivo del fallo.
Payload object:

Clave Tipo Descripción Ejemplo
code string Código de error/excepción 1002
reason string Motivo del fallo del mensaje con respecto al código de error Number Does Not Exists On WhatsApp

Consulta los códigos de fallo de los mensajes y sus motivos en la siguiente tabla para obtener una descripción adicional del error.

Content type: application/json

{«app»:»DemoAPI»,»timestamp»:1580311136040,»version»:2,»type»:»message-event»,»payload»:{«id»:»ee4a68a0-1203-4c85-8dc3-49d0b3226a35″,»type»:»failed»,»destination»:»918x98xx21x4″,»payload»:{«code»:1008,»reason»:»User is not Opted in and Inactive»}}}

sent Este evento indica que el mensaje se envió al usuario final.
Payload object:

Clave Tipo Descripción Ejemplo
ts Number Marca de tiempo del evento 1585344475
id string ID único para una conversación. 532b57b5f6e63595ccd74c6010e5c5c7
expiresAt Number Marca de tiempo de expiración de la conversación en segundos 1518780636
type string El tipo de conversación. Posibles valores:

  • FEP (Punto de entrada libre)
  • UIC (Conversación iniciada por el usuario)
  • BIC (Conversación iniciada por la empresa)
UIC
policy string La política de precios aplicada para este mensaje. Posibles valores:

  • CBP (Precios basados en conversaciones)
  • PBN (Precios basados en notificaciones)
CBP
category string La categoría de la facturación. Posibles valores:

  • FEP
  • UIC
  • BIC
UIC
Content type: application/json

{«app»:»DemoAPI»,»timestamp»:1580546677791,»version»:2,»type»:»message-event»,»payload»:{«id»:»59f8db90-c37e-4408-90ab-cc54ef8246ad»,»gsId»:»ee4a68a0-1203-4c85-8dc3-49d0b3226a35″,»type»:»sent»,»destination»:»91XX985XX10X»,»payload»:{«ts»:1585344475},»conversation»:{«id»:»532b57b5f6e63595ccd74c6010e5c5c7″,»expiresAt»:1518780636,»type»:»FEP/UIC/BIC»},»pricing»:{«policy»:»CBP/NBP»,»category»:»FEP/UIC/BIC»}}}

Delivered El mensaje enviado se entrega al usuario final.
Payload object:

Clave Tipo Descripción Ejemplo
ts Number La marca de tiempo del evento 1585344476
Content type: application/json

{«app»:»DemoAPI»,»timestamp»:1585344476683,»version»:2,»type»:»message-event»,»payload»:{«id»:»gBEGkYaYVSEEAgnZxQ3JmKK6Wvg»,»gsId»: «ee4a68a0-1203-4c85-8dc3-49d0b3226a35″,»type»:»delivered»,»destination»:»918x98xx21x4″,»payload»:{«ts»:1585344476}}}

Read El mensaje enviado es leído por el usuario final. Las notificaciones de ‘leído’ sólo estarán disponibles para aquellos usuarios que tengan habilitada la confirmación de lectura. Para los que no, sólo recibirán la notificación de ‘entregado’.

Para que el estado sea «leído» debe haber sido entregado. En algunos escenarios, como cuando un usuario está en la pantalla de chat, y llega un mensaje, el mensaje es entregado y leído simultáneamente. En este u otros escenarios similares, la notificación de ‘entregado’ no se enviará, ya que se infiere que el mensaje ha sido entregado si ha sido leído.
Payload object:

Clave Tipo Descripción Ejemplo
ts Number La marca de tiempo del evento 1585344602
Content type: application/json

{«app»:»DemoAPI»,»timestamp»:1585344602933,»version»:2,»type»:»message-event»,»payload»:{«id»:»gBEGkYaYVSEEAgnZxQ3JmKK6Wvg»,»gsId»: «ee4a68a0-1203-4c85-8dc3-49d0b3226a35″,»type»:»read»,»destination»:»918x98xx21x4″,»payload»:{«ts»:1585344602}}}

4.  billing-event : evento de billing se activa solo cuando una conversación es facturable. Para conversaciones gratuitas, no recibirá un evento de billing.

{
«app»: «DemoAPI»,
«timestamp»:1580546677791,
«version»:2,
«type»: «billing-event»,
«payload»:{
«deductions»:{
«type»: «FEP/UIC/BIC»,
«model»: «NBP/CBP»,
«source»: «whatsapp»
},
«references»:{
«id»:»59f8db90c37e-4408-90ab-cc54ef8246ad»,
«gsId»:»ee4a68a0-1203-4c85-8dc3-49d0b3226a35″,
«conversationId»:»532b57b5f6e63595ccd74c6010e5c5c7″,
«destination»:»91XX985XX10X»
}
}
}

Descripción del objeto de las deduction

Llave Escribe Descripción Ejemplo
type string El tipo de conversación. Valores posibles:

  • FEP (Punto de entrada libre)
  • UIC (conversación iniciada por el usuario)
  • BIC (conversación iniciada por la empresa)
BIC
model string El modelo de política de precios aplicado para este mensaje. Valores posibles:

  • CBP (Precio basado en conversaciones)
  • NBP (Precio basado en notificaciones)
CBP
source string Origen fuente de la conversación whatsapp

References objeto descripción

Llave Escribe Descripción Ejemplo
id string Identificador único de WhatsApp para un mensaje 59f8db90c37e-4408-90ab-cc54ef8246ad
gsId string Identificador único de Gupshup para un mensaje ee4a68a0-1203-4c85-8dc3-49d0b3226a35
conversationId string Identificador único para una conversación 532b57b5f6e63595ccd74c6010e5c5c7
destination string Número de teléfono del usuario involucrado en la conversación.
El número de teléfono estará en formato E.164.
91XX985XX10X

Motivo del fallo del mensaje con respecto al código de error:

Código de error Motivos
1001 Last Mapped Bot Details And Sender Details Mismatch
1002 Number Does Not Exists On WhatsApp
1003 Unable To Send Message | Check your wallet balance
1004 Message sending failed as user is inactive for session message and template messaging is disabled
1005 Message sending failed as user is inactive for session message and template did not match
1006 Message sending failed as user is inactive for session message and not opted in for template message
1007 Message sending failed as user is inactive for session message, not opted in for template message and template did not match
1008 User is not Opted in and Inactive
1010 Invalid Media Url
1011 Invalid Media Size

Para saber más sobre los códigos de error del cliente de la API de WhatsApp Business, haz clic aquí

Mensaje entrante


En esta sección, entenderemos el evento: los mensajes que recibes en la URL de devolución de llamada. Este evento indica el tipo de payload del mensaje recibido en tu URL de devolución de llamada cuando un cliente envía un mensaje al número de teléfono registrado en la API de WhatsApp Business.

Headers

Parámetros/propiedades comunes a todos los mensajes entrantes

{
«app»: «DemoApp»,
«timestamp»: 1580227766370,
«version»: 2,
«type»: «message»,
«payload»: {
«id»: «ABEGkYaYVSEEAhAL3SLAWwHKeKrt6s3FKB0c»,
«source»: «918x98xx21x4»,
«type»: «text»|»image»|»file»|»audio»|»video»|»contact»|»location»|»button_reply»|»list_reply»,
«payload»: {
//Varía según el tipo de payload
},
«sender»: {
«phone»: «918x98xx21x4»,
«name»: «Smit»,
«country_code»: «91»,
«dial_code»: «8x98xx21x4»
},
«context»: {
«id»: «gBEGkYaYVSEEAgnPFrOLcjkFjL8»,
«gsId»: «9b71295f-f7af-4c1f-b2b4-31b4a4867bad»
}
}
}

Clave Tipo Descripción Ejemplo
app string El nombre de la app de Gupshup a la que el cliente ha enviado un mensaje. DemoAPI
timestamp string La hora es una marca de tiempo UNIX de cuando el mensaje fue enviado por el cliente y recibido por Gupshup. 1584898839530
version string Versión de la payload de la devolución de llamada 2
type string Inbound events
user-event|message-event|message
message
payload object Contiene los detalles del mensaje entrante:
1. Identificador de mensaje de WhatsApp,
2. El número de teléfono del remitente con el código de país,
3. El tipo de mensaje enviado por el usuario final/cliente,
4. Contenido del mensaje enviado por el usuario final/cliente.
Ver el objeto del payload para más información.
sender object Contiene los datos del remitente/usuario final/cliente del mensaje:
1. Número de teléfono
2. Nombre del remitente
Ver objeto remitente para más información.
context object Opcional.
Este objeto sólo se incluirá cuando alguien responda a uno de tus mensajes. Contiene información sobre el contenido del mensaje original, como el ID de Gupshup y el ID de WhatsApp del mensaje.
Ver el objeto de contexto par más información.

El objeto del payload

Clave Tipo Descripción Ejemplo
id string El identificador único del mensaje de WhatsApp para un mensaje entrante ABEGkYaYVSEEAhAt2MgAKjL1qGe88OKyMQfM
source string Es el número de teléfono del cliente que ha enviado el mensaje en tu número API de WhatsApp Business. El número está en formato E.164. 918x98xx21x4
type string El tipo de mensaje recibido del usuario final. Dependiendo del «tipo», el objeto de mensaje relevante se recibe como parte del payload.

Debe ser uno de los siguientes: text, image, file, audio, video, contact, location.

text
payload object The payload object contains the inbound message content sent by the customer Ver los tipos de mensajes entrantes en la siguiente documentación

El objeto de remitente

Clave Tipo Descripción Ejemplo
phone string Es el número de teléfono del cliente que ha enviado el mensaje en tu número API de WhatsApp Business. El número está en formato E.164. 918x98xx21x4
name string Nombre del usuario final que ha enviado el mensaje Smit
country_code string El código de país del remitente 91
dial_code string El código de marcado del remitente 8x98xx21x4

El objeto de contexto

Clave Tipo Descripción Ejemplo
id string El identificador único del mensaje de WhatsApp para un mensaje entrante gBEGkYaYVSEEAgnPFrOLcjkFjL8
gsId string El identificador de mensaje único de Gupshup para el mensaje entrante 9b71295f-f7af-4c1f-b2b4-31b4a4867bad

Veamos uno por uno los tipos de mensajes entrantes recibidos en la URL de devolución de llamada:

Text

A continuación se muestra un ejemplo de payload cuando un cliente envía un mensaje de texto en WhatsApp al número de su empresa.

Headers Content type: application/json
El entrante cuerpo
{ 
  "app": "DemoApp", 
  "timestamp": 1580227766370,   
  "version": 2, 
  "type": "message",    
  "payload": {  
    "id": "ABEGkYaYVSEEAhAL3SLAWwHKeKrt6s3FKB0c",   
    "source": "918x98xx21x4",   
    "type": "text", 
    "payload": {    
      "text": "Hi"  
    },  
    "sender": { 
      "phone": "918x98xx21x4",  
      "name": "Smit",   
      "country_code": "91", 
      "dial_code": "8x98xx21x4" 
    }   
  } 
}
El payload de texto
Clave Tipo Descripción Ejemplo
text string Message text Hi
Un cliente responde a un mensaje comercial

Los usuarios pueden responder a un mensaje específico en WhatsApp. Para que la empresa comprenda el contexto de la respuesta de un mensaje, incluimos el objeto de contexto. Este objeto proporciona el identificador de mensaje de Gupshup(property: gsId) del mensaje al que el cliente ha respondido y el identificador de mensaje de WhatsApp(property: id) del mensaje original.

Headers Content type: application/json
El entrante cuerpo
{
  "app": "DemoApp",
  "timestamp": 1590854464792,
  "version": 2,
  "type": "message",
  "payload": {
    "id": "ABEGkYaYVSEEAgo-sMx1DoUoQJRW",
    "source": "918x98xx21x4",
    "type": "text",
    "payload": {
      "text": "hi"
    },
    "sender": {
      "phone": "918x98xx21x4",
      "name": "Smit",
      "country_code": "91",
      "dial_code": "8x98xx21x4"
    },
    "context": {
      "id": "gBEGkYaYVSEEAgnPFrOLcjkFjL8",
      "gsId": "9b71295f-f7af-4c1f-b2b4-31b4a4867bad"
    }
  }
}
El payload de texto
Clave Tipo Descripción Ejemplo
text string mensaje de texto Hi
El cliente hizo click en el botón de mensaje de una plantilla de respuesta rápida

Cuando un cliente selecciona un botón de mensaje de respuesta rápida, se recibe el siguiente ejemplo de payload.
Para que la empresa comprenda el contexto de la respuesta de un mensaje, incluimos el objeto de contexto. Este objeto proporciona el identificador de mensaje de Gupshup(property: gsId) del mensaje al que el cliente ha respondido y el identificador de mensaje de WhatsApp(property: id) del mensaje original. Además, el objeto de payload proporciona el texto del botón que el usuario ha pulsado.

Headers Content type: application/json
El entrante cuerpo
{
  "app": "DemoApp",
  "timestamp": 1590854464792,
  "version": 2,
  "type": "message",
  "payload": {
    "id": "ABEGkYaYVSEEAgo-sMx1DoUoQJRW",
    "source": "918x98xx21x4",
    "type": "text",
    "payload": {
      "text": "View Account Balance",
      "type": "button"
    },
    "sender": {
      "phone": "918x98xx21x4",
      "name": "Smit",
      "country_code": "91",
      "dial_code": "8x98xx21x4"
    },
    "context": {
      "id": "gBEGkYaYVSEEAgnPFrOLcjkFjL8",
      "gsId": "9b71295f-f7af-4c1f-b2b4-31b4a4867bad"
    }
  }
}
El payload de texto
Clave Tipo Descripción Ejemplo
text string Título del botóne Ver el balance de la cuenta
type string El tipo de mensaje interactivo donde se hizo click Botón

Multimedia


Cuando se recibe un mensaje con multimedia (imagen | documento | audio | video | sticker), el cliente de la API de WhatsApp Business descargará el contenido. Una vez descargado, se envía una notificación a nuestra plataforma, es decir a tu Webhook. Este mensaje contiene información que identifica el objeto multimedia y te permite encontrar y descargar el objeto.

Payload de contenido multimedia

Clave Tipo Descripción Ejemplo
caption string Opcional. Sólo está presente si se especifica.
El título proporcionado a los contenidos multimedia.
Ver el balance de la cuenta
name string Nombre del archivo en el dispositivo del remitente. 152445128_APR-20.pdf
url string Enlace de descarga de contenido multimedia https://filemanager.gupshup.io/fm/wamedia/Jeet20/68f1e51b-ac53-4dfb-b970-7b9031ed1d3c
contentType string Tipo MIME de los contenidos multimedia application/pdf
urlExpiry string Vencimiento de la URL de descarga multimedia 1624957005482
Imagen

A continuación se muestra un ejemplo de payload recibido cuando un cliente envía una imagen junto con un título al número de la empresa. El título sólo está presente si se proporciona.

Headers Content type: application/json
El entrante cuerpo
{   
  "app": "DemoApp", 
  "timestamp": 1580227895991,   
  "version": 2, 
  "type": "message",    
  "payload": {  
    "id": "ABEGkYaYVSEEAhAE0dyndiP9cVlr4hC5xU64",   
    "source": "918x98xx21x4",   
    "type": "image",    
    "payload": {    
      "caption": "Sample image",    
      "url": "https://filemanager.gupshup.io/fm/wamedia/DemoApp/546af999-825e-485b-bf54-4a3323824cca",  
      "contentType": "image/jpeg",  
      "urlExpiry": 1624956794816    
    },  
    "sender": { 
      "phone": "918x98xx21x4",  
      "name": "John",   
      "country_code": "91", 
      "dial_code": "8x98xx21x4" 
    }   
  } 
}   
Audio

A continuación se muestra un ejemplo de payload recibido cuando un cliente envía un archivo de audio o un mensaje de voz al número de teléfono de la empresa. En el caso de los mensajes de voz, el tipo de contenido es siempre: audio/ogg; codecs=opus

Headers Content type: application/json
El entrante cuerpo
{   
  "app": "DemoApp", 
  "timestamp": 1580228104661,   
  "version": 2, 
  "type": "message",    
  "payload": {  
    "id": "ABEGkYaYVSEEAhC8Sqz6bdT95X8wgVH28wz8",   
    "source": "918x98xx21x4",   
    "type": "audio",    
    "payload": {    
      "url": "https://filemanager.gupshup.io/fm/wamedia/DemoApp/eae8a65a-b3ec-4085-94a6-3738338835fc",  
      "contentType": "audio/ogg; codecs=opus",  
      "urlExpiry": 1624956864635    
    },  
    "sender": { 
      "phone": "918x98xx21x4",  
      "name": "John",   
      "country_code": "91", 
      "dial_code": "8x98xx21x4" 
    }   
  } 
}   
Video

A continuación se muestra un ejemplo de payload recibido cuando un cliente envía un vídeo junto con un título al número de teléfono de la empresa.

Headers Content type: application/json
El entrante cuerpo
{   
  "app": "DemoApp", 
  "timestamp": 1580228336953,   
  "version": 2, 
  "type": "message",    
  "payload": {  
    "id": "ABEGkYaYVSEEAhDHMK-ctBQwqxyKoMbKcxES",   
    "source": "918x98xx21x4",   
    "type": "video",    
    "payload": {    
      "caption": "Sample video",    
      "url": "https://filemanager.gupshup.io/fm/wamedia/DemoApp/9f5ff20a-d14f-47ea-b336-754756a8b950",  
      "contentType": "video/mp4",   
      "urlExpiry": 1580833136954    
    },  
    "sender": { 
      "phone": "918x98xx21x4",  
      "name": "John",   
      "country_code": "91", 
      "dial_code": "8x98xx21x4" 
    }   
  } 
}   
Document

A continuación se muestra un ejemplo de payload recibido cuando un cliente envía un documento junto con un título al número de teléfono de la empresa. El título sólo está presente si se proporciona.

Headers Content type: application/json
El entrante cuerpo
{   
  "app": "DemoApp", 
  "timestamp": 1580228523976,   
  "version": 2, 
  "type": "message",    
  "payload": {  
    "id": "ABEGkYaYVSEEAhCzqobr15BdMPcRup1fIXAJ",   
    "source": "918x98xx21x4",   
    "type": "file", 
    "payload": {    
      "caption": "Document caption",    
      "name": "samplefile.pdf", 
      "url": "https://filemanager.gupshup.io/fm/wamedia/DemoApp/b6e4e360-be01-4ffa-8928-84b8f40dd2eb",  
      "contentType": "application/pdf", 
      "urlExpiry": 1624957181122    
    },  
    "sender": { 
      "phone": "918x98xx21x4",  
      "name": "Smit",   
      "country_code": "91", 
      "dial_code": "8x98xx21x4" 
    }   
  } 
}   
Sticker

A continuación se muestra un ejemplo de payload recibido cuando un cliente envía un sticker al número de teléfono de la empresa.

Headers Content type: application/json
El entrante cuerpo
{
  "app": "DemoApp",
  "timestamp": 1580228523976,
  "version": 2,
  "type": "message",
  "payload": {
    "id": "ABEGkYaYVSEEAhCzqobr15BdMPcRup1fIXAJ",
    "source": "918x98xx21x4",
    "type": "sticker",
    "payload": {
      "url": "https://filemanager.gupshup.io/fm/wamedia/DemoApp/32030cb2-68de-4c3c-a795-c4647fd4a9c7",
      "contentType": "image/webp",
      "urlExpiry": 1624957279044
    },
    "sender": {
      "phone": "918x98xx21x4",
      "name": "John",
      "country_code": "91",
      "dial_code": "8x98xx21x4"
    }
  }
}
Mensajes interactivos
El cliente ha respondido a un mensaje de Lista

A continuación se muestra un ejemplo de payload que se recibe cuando un cliente selecciona y envía un artículo de la lista de mensajes al número de teléfono de la empresa.

Headers Content type: application/json
El entrante cuerpo
{
  "app": "DemoApp",
  "timestamp": 1580228523976,
  "version": 2,
  "type": "message",
  "payload": {
    "id": "ABEGkYaYVSEEAhCzqobr15BdMPcRup1fIXAJ",
    "source": "918x98xx21x4",
    "type": "list_reply",
    "payload": {
            "title": "section 1 row 1",
            "id": "list1",
            "reply":"section 1 row 1 1",
            "postbackText":"section 1 row 1 postback payload",
            "description": "first row of first section description"
        },
    "sender": {
      "phone": "918x98xx21x4",
      "name": "John",
      "country_code": "91",
      "dial_code": "8x98xx21x4"
    },
    "context": {
        "id": "gBEGkYaYVSEEAgnPGGVYGg1uNU4",
        "gsId": "cbdafe39-1023-42a7-89d6-6c01a3388bb5"
    }
  }
}
La carga útil de la respuesta a un mensaje de lista
Clave Tipo Descripción Ejemplo
title String Devuelve el título de la sección section 1 row 1
id String Devuelve el id de mensaje definido por el desarrollador, es decir, el ID personalizado (alfanumérico) enviado al realizar la solicitud de la API para el mensaje de lista. list1
reply String Devuelve el título del item de línea presentado desde una sección junto con el índice del listado de items section 1 row 1 1
postbackText String Devuelve el payload de postback definido por el desarrollador para un item de línea concreto de la lista. section 1 row 1 postback payload
description String Devuelve la descripción del item de línea presentado first row of first section description
El cliente respondió a un botón de respuesta rápida

Cuando un cliente selecciona un botón de mensaje de respuesta rápida, se recibe el siguiente ejemplo de payload.

Headers Content type: application/json
El entrante cuerpo
{
  "app": "DemoApp",
  "timestamp": 1580228523976,
  "version": 2,
  "type": "message",
  "payload": {
    "id": "ABEGkYaYVSEEAhCzqobr15BdMPcRup1fIXAJ",
    "source": "918x98xx21x4",   
    "type": "button_reply", 
    "payload": {    
            "title": "First",   
            "id": "qr1",    
            "reply":"First 1"   
        },  
    "sender": { 
      "phone": "918x98xx21x4",  
      "name": "John",   
      "country_code": "91", 
      "dial_code": "8x98xx21x4" 
    },  
    "context": {    
        "id": "gBEGkYaYVSEEAgkvE0f1ZkfXX78",    
        "gsId": "123b0fb2-0620-493b-8f7e-5a1ceb6d8c58"  
    }   
  } 
}   
La carga útil de respuesta a un mensaje de respuesta rápida
Clave Tipo Descripción Ejemplo
title String Devuelve el título del botón First
id String Devuelve el identificador de mensaje definido por el desarrollador, es decir, el ID personalizado (alfanumérico) enviado al realizar la solicitud de la API para el mensaje de respuesta rápida. qr1
reply String Devuelve el título del botón pulsado junto con el índice del botón. First 1
Otros mensajes
Ubicación

A continuación se muestra un ejemplo de carga útil recibida cuando un cliente comparte su ubicación con el número de la empresa.

Por favor considera que la ubicación en vivo no es un tipo de mensaje compatible con WhatsApp Business por el momento.

Headers Content type: application/json
El entrante cuerpo
{   
  "app": "DemoApp", 
  "timestamp": 1580228767338,   
  "version": 2, 
  "type": "message",    
  "payload": {  
    "id": "ABEGkYaYVSEEAhCIxTq7KXQIqby1Uo-IO7_E",   
    "source": "918x98xx21x4",   
    "type": "location", 
    "payload": {    
      "longitude": "72.8552172",    
      "latitude": "19.1453658"  
    },  
    "sender": { 
      "phone": "918x98xx21x4",  
      "name": "Smit",   
      "country_code": "91", 
      "dial_code": "8x98xx21x4" 
    }   
  } 
}   
La carga útil de un mensaje de ubicación
Clave Tipo Descripción Ejemplo
latitude Número Latitud de la ubicación enviada 19.1453658
longitude Número Longitud de la ubicación enviada 72.8552172
Tarjeta de contacto

A continuación se muestra un ejemplo de payload recibido cuando un cliente comparte una tarjeta de contacto al número de la empresa.

Headers Content-type: application/json
El entrante cuerpo
{
  "app": "DemoApp",
  "timestamp": 1584898884710,
  "version": 2,
  "type": "message",
  "payload": {
    "id": "ABEGkYaYVSEEAhD9cTZVyPlOGYZJOnviI7OJ",
    "source": "918x98xx21x4",
    "type": "contact",
    "payload": {
      "contacts": [
        {
          "addresses": [
            {
              "city": "Menlo Park",
              "country": "United States",
              "countryCode": "us",
              "state": "CA",
              "street": "1 Hacker Way",
              "type": "HOME",
              "zip": "94025"
            },
            {
              "city": "Menlo Park",
              "country": "United States",
              "countryCode": "us",
              "state": "CA",
              "street": "200 Jefferson Dr",
              "type": "WORK",
              "zip": "94025"
            }
          ],
          "emails": [
            {
              "email": "test@fb.com",
              "type": "WORK"
            },
            {
              "email": "test@whatsapp.com",
              "type": "WORK"
            }
          ],
          "ims": [

          ],
          "name": {
            "first_name": "Dev",
            "formatted_name": "Dev Support",
            "last_name": "Support"
          },
          "org": {
            "company": "Dev Support"
          },
          "phones": [
            {
              "phone": "+91 77383 05433",
              "type": "Mobile"
            }
          ],
          "urls": [
            {
              "url": "https://www.facebook.com",
              "type": "WORK"
            }
          ]
        }
      ]
    },
    "sender": {
      "phone": "918x98xx21x4",
      "name": "Smit",
      "country_code": "91",
      "dial_code": "8x98xx21x4"
    }
  }
}
La carga útil de un mensaje de tarjeta de contacto
Clave Tipo Descripción Ejemplo
addresses Array Dirección de contacto completa. Este campo puede contener lo siguiente: street, city, state, zip, country, country_code, and type fields. { «city»: «Menlo Park», «country»: «United States», «countryCode»: «us», «state»: «CA», «street»: «1 Hacker Way», «type»: «HOME», «zip»: «94025» }
birthday YYYY-MM-DD secuencia formateada Contact’s birthday. 1990-07-21
emails Array Direcciones de correo electrónico de contacto. Este campo puede contener lo siguiente: email and type parameters { «email»: «test@fb.com», «type»: «WORK» }
ims Array Información de mensaje del contacto. Este campo puede contener lo siguiente: service and user_id parameters
name Array Nombre completo del contacto. Este campo puede contener lo siguiente: first_name, middle_name, last_name, formatted_name, name-prefix, and name_suffix parameters { «first_name»: «Dev», «formatted_name»: «Dev Support», «last_name»: «Support» }
org Array Información de contacto de la organización. TEste campo puede contener lo siguiente: company, department, and title parameters { «company»: «Dev Support» }
phones Array Número(s) de teléfono de contacto. Este campo puede contener lo siguiente: phone, wa_id, and type parameters [ { «phone»: «+91 77383 05433», «type»: «Mobile» } ]
urls Array URL de contacto. Este campo puede contener lo siguiente: url and type parameters [ { «url»: «https://www.facebook.com», «type»: «WORK» } ]
Referencia

Se incluye en las notificaciones cuando un usuario hace click en un anuncio que hace click en WhatsApp y envía un mensaje a la empresa. Este objeto tiene la información del anuncio.

Headers Content type: application/json
El entrante cuerpo
{
    "app": "DemoApp",
    "timestamp": 1624350395531,
    "version": 2,
    "type": "message",
    "payload": {
        "id": "ABEGkZlpNARoAgo6v1b-zBR7EnX3",
        "source": "918x98xx21x4",
        "type": "text",
        "payload": {
            "text": "I saw this on Facebook..."
        },
        "sender": {
            "phone": "918x98xx21x4",
            "name": "Smit",
            "country_code": "91",
            "dial_code": "8x98xx21x4"
        },
        "referral": {
                "body": "Test post payload",
                "headline": "Demo Gupshup ad",
                "image": {
                    "id": "6a35b528-429d-4fe3-953d-536ef0397ece"
                },
                "source_id": "951242428775548",
                "source_type": "post",
                "source_url": "https://fb.me/2oNXGTsjn"
        }
    }
}
La carga útil de una referencia
Clave Tipo Descripción Ejemplo
headline String Encabezado utilizado en el anuncio que generó el mensaje. Demo Gupshup ad
body String Cuerpo del anuncio que generó el mensaje. Test post payload
source_type String El tipo de fuente del anuncio. Actualmente, los valores soportados son ad y post. post
source_id String ID de Facebook para un anuncio o una publicación 951242428775548
source_url String La URL que lleva al anuncio. Al abrir esta URL se accede al anuncio visto por el usuario. https://fb.me/2oNXGTsjn
image and video Object Opcional
La imagen o el vídeo que el usuario vio y en el que hizo clic.
{ «id»: «6a35b528-429d-4fe3-953d-536ef0397ece» }

Mensaje de salida


Sesión de mensajería

Esta guía te enseña cómo enviar un mensaje de sesión a un cliente utilizando la API de envío de mensajes. Actualmente, este tipo de mensajería sólo puede realizarse dentro de las 24 horas siguientes al último mensaje enviado por el usuario. Si intentas enviar un mensaje fuera de la ventana de 24 horas, obtendrás un evento de fallo en tu Webhook. Para entender los estados del usuario en nuestra plataforma, por favor, consulta este artículo, esto te ayudará a utilizar la API de manera más eficaz.

Entendamos la especificación/firma de la API, es decir, el Endpoint de la API, los encabezados, el cuerpo de la solicitud y su respuesta en detalle:

API Endpoint

Para enviar un mensaje en WhatsApp, la solicitud de la API se hace al endpoint:

https://api.gupshup.io/sm/api/v1/msg

API Request

Solicitud de API de muestra

curl –location –request POST ‘https://api.gupshup.io/sm/api/v1/msg’ \
–header ‘Cache-Control: no-cache’ \
–header ‘Content-Type: application/x-www-form-urlencoded’ \
–header ‘apikey: 2xxc4x4xx2c94xxxc2f9xx9d43xxxx8a’ \
–data-urlencode ‘channel=whatsapp’ \
–data-urlencode ‘source=917834811114’ \
–data-urlencode ‘destination=918x98xx21x4’ \
–data-urlencode ‘message={«type»: «text»,»text»: «Hi John, how are you?»}’ \
–data-urlencode ‘src.name=DemoApp’ \
–data-urlencode ‘disablePreview=false’

Headers

Content-type application/x-www-form-urlencoded
apikey Your API key here

El cuerpo de la solicitud

Clave Tipo Descripción Ejemplo Requerido
channel string El canal en el que debe enviarse este mensaje. whatsapp Y
destination string El número de teléfono del destinatario al que se envía el mensaje. 918x98xx21x4 Y
source string El número de teléfono de WhatsApp Business desde el que se enviará el mensaje. Este número debe ser el número verificado que fue vinculado a tu aplicación Gupshup. 917834811114 Este es nuestro número proxy Y
message object Plantilla del mensaje de WhatsApp que quieres enviar a tus clientes Ver a continuación la documentación de los objetos de mensaje Y
src.name string El nombre de tu aplicación de WhatsApp DemoApp Y – para aplicaciones sandbox

N – para aplicaciones Live

disablePreview boolean Por defecto, la aplicación móvil de WhatsApp reconoce las URL y las hace seleccionables. Por defecto, la vista previa de la URL está activada en la plataforma, es decir, «disablePreview» es falso y para desactivar la vista previa, se debe establecer el parámetro «disablePreview» como verdadero en el cuerpo de la solicitud.

Asegúrate de que la URL comienza con http:// o https://. Se requiere un nombre de host, las direcciones IP no se comparan.

true N

Arámetros de objetos de mensaje comunes

Clave Tipo Descripción Ejemplo Requerido
type string El tipo de mensaje que se enviará al cliente. Dependiendo del «tipo», los parámetros relevantes deben ser enviados como parte del objeto del mensaje

Debe ser uno de: text, image, file, audio, video, location, contact, sticker, list, quick_reply

Text Y
url string La URL almacenada del archivo / audio / vídeo adjunto https://www.buildquickbots.com/whatsapp/media/sample/audio/sample01.mp3 Y
caption string Añadir un título a los mensajes multimedia, aplicable al tipo de contenido: image|video|file Texto de la leyenda de los medios N

Enviar texto

A continuación se muestra un ejemplo de carga útil al enviar un mensaje de texto en WhatsApp.

– Un mensaje de texto puede tener un máximo de 4096 caracteres.
– Para incluir una vista previa de la URL en el mensaje y asegurarse de que comience con http:// o https://.
– Una URL a previsualizar: se requiere el nombre de host, no se tendrán en cuenta las direcciones IP.
– Si un mensaje de texto tiene múltiples URL, la primera URL sólo se previsualizará.

API URL https://api.gupshup.io/sm/api/v1/msg
Request Headers Content-Type: application/x-www-form-urlencoded
apikey: {{Your API Key}}
Request Body «channel» : «whatsapp»,
«source» : «917384811114»,
«destination» : «918x98xx21x4»
«src.name»:»DemoApp»
«message» : {
«type»: «text»,
«text»: «Hi John, how are you?»
}
Descripción del objeto de mensaje de texto
Clave Tipo Descripción Ejemplo Número
text string El mensaje de texto que se enviará al cliente, en caso de type=text Hello World! Y
Opciones de formato

WhatsApp admite algunos formatos en los mensajes de texto. Para dar formato a todo o parte de un mensaje, utiliza estos símbolos de formato:

Formateo Symbol Example Cómo se muestran los mensajes en WhatsApp.
Bold Asterisk (*) Your total is *$10.50*. Your total is $10.50.
Italics Underscore (_) Welcome to _WhatsApp_! Welcome to WhatsApp!
Strike-through Tilde (~) This is ~better~ best! This is better best!
Code Three backticks («`) «`print ‘Hello World’;«` print 'Hello World';

También se admiten los emoji. La lista de emoji compatibles se encuentra en https://emojipedia.org/whatsapp/. Copia el símbolo emoji en el mensaje de texto cuando lo envíes a través de la API.


Multimedia


Enviar mensaje de imagen

A continuación se muestra un ejemplo de carga útil al enviar una imagen en WhatsApp.

– Tipos de contenido admitidos: image/jpeg, image/png
– maximum file size: 5 MB

API URL https://api.gupshup.io/sm/api/v1/msg
Request Headers Content-Type: application/x-www-form-urlencoded
apikey: {{Your API Key}}
Cuerpo de solicitud «channel» : «whatsapp»,
«source» : «917384811114»,
«destination» : «918x98xx21x4»
«src.name»:»DemoApp»
«message» : {
«type»: «image»,
«originalUrl»: «https://www.buildquickbots.com/whatsapp/media/sample/jpg/sample01.jpg»,
«previewUrl»: «https://www.buildquickbots.com/whatsapp/media/sample/jpg/sample01.jpg»,
«caption»:»Sample image»
}
Descripción del objeto de mensaje de imagen Las imágenes con una relación de tamaño superior a 1.91:1 se recortan verticalmente. Para comunicar el eje en este tipo de imágenes, planea presentar la información más importante en el centro de la imagen.

Clave Tipo Descripción Ejemplo Requerido
originalUrl string La URL pública de la imagen alojada. Sólo debe enviarse para el tipo = imagen https://www.buildquickbots.com/whatsapp/media/sample/jpg/sample01.jpg Y
previewUrl string La URL pública de la imagen miniatura alojada. Sólo debe enviarse para el tipo = imagen https://www.buildquickbots.com/whatsapp/media/sample/jpg/sample01.jpg Y

Enviar mensaje de documento / archivo

A continuación se muestra un ejemplo de carga útil al enviar un documento/archivo en WhatsApp.

– Tipos de contenido admitidos: Cualquier tipo MIME válido
– Tamaño máximo de archivo: 100 MB

API URL https://api.gupshup.io/sm/api/v1/msg
Request Headers Content-Type: application/x-www-form-urlencoded
apikey: {{Your API Key}}
Cuerpo de solicitud «channel» : «whatsapp»,
«source» : «917384811114»,
«destination» : «918x98xx21x4»
«src.name»:»DemoApp»
«message» : {
«type»: «file»,
«url»: «https://www.buildquickbots.com/whatsapp/media/sample/pdf/sample01.pdf»,
«filename»: «Sample funtional resume»
}
Descripción del objeto de mensaje de archivo
Clave Tipo Descripción Ejemplo Requerido
filename string Nombre del archivo Ejemplo de currículum funcional Y

Enviar mensaje de audio

A continuación se muestra un ejemplo de carga útil al enviar un archivo de audio en WhatsApp.

-Tipos de contenido admitidos: audio/aac, audio/mp4, audio/amr, audio/mpeg, audio/ogg; codecs=opus. Note: No se admite el tipo de audio / ogg base.
– Tamaño máximo de archivo: 16 MB

API URL https://api.gupshup.io/sm/api/v1/msg
Solicitar encabezados Content-Type: application/x-www-form-urlencoded
apikey: {{Your API Key}}
Cuerpo de solicitud «channel» : «whatsapp»,
«source» : «917384811114»,
«destination» : «918x98xx21x4»
«src.name»:»DemoApp»
«message» : {
«type»: «audio»,
«url»: «https://www.buildquickbots.com/whatsapp/media/sample/audio/sample01.mp3»
}

Enviar mensaje de video

A continuación se muestra un ejemplo de carga útil al enviar un vídeo en WhatsApp.

– Tipos de contenido admitidos: video/mp4, video/3gpp. Note: Solo se admiten el códec de video H.264 y el códec de audio AAC.
– Tamaño máximo de archivo: 16 MB

API URL https://api.gupshup.io/sm/api/v1/msg
Solicitar encabezados Content-Type: application/x-www-form-urlencoded
apikey: {{Your API Key}}
Cuerpo de solicitud «channel» : «whatsapp»,
«source» : «917384811114»,
«destination» : «918x98xx21x4»
«src.name»:»DemoApp»
«message» : {
«type»: «video»,
«url»:»https://www.buildquickbots.com/whatsapp/media/sample/video/sample01.mp4″,
«caption»:»Sample video»
}

Enviar Stickers

A continuación se muestra un ejemplo de carga útil al enviar un sticker en WhatsApp.

– Cada pegatina tiene un fondo transparente.
– Las pegatinas deben tener exactamente 512 x 512 píxeles.
– Cada pegatina debe tener menos de 100 KB.

API URL https://api.gupshup.io/sm/api/v1/msg
Solicitar encabezados Content-Type: application/x-www-form-urlencoded
apikey: {{Your API Key}}
Cuerpo de solicitud «channel» : «whatsapp»,
«source» : «917384811114»,
«destination» : «918x98xx21x4»
«src.name»:»DemoApp»
«message» : {
«type»: «sticker»,
«url»:»http://www.buildquickbots.com/whatsapp/stickers/SampleSticker01.webp»
}

Mensajes interactivos

Enviar mensajes de lista

Mensajes que incluyen un menú de hasta 10 opciones. Este tipo de mensaje ofrece una forma más sencilla y coherente para que los usuarios hagan una selección cuando interactúan con una empresa. A continuación se muestra un ejemplo de carga útil para enviar mensajes de lista al usuario final.

API URL https://api.gupshup.io/sm/api/v1/msg
Solicitar encabezados Content-Type: application/x-www-form-urlencoded
apikey: {{Your API Key}}
Cuerpo de solicitud «channel» : «whatsapp»,
«source» : «917384811114»,
«destination» : «918x98xx21x4»
«src.name»:»DemoApp»
«message» : {
«type»: «list», «title»: «title text», «body»: «body text», «msgid»: «list1», «globalButtons»: [ { «type»: «text», «title»: «Global button» } ], «items»: [ { «title»: «first Section», «subtitle»: «first Subtitle», «options»: [ { «type»: «text», «title»: «section 1 row 1», «description»: «first row of first section description», «postbackText»: «section 1 row 1 postback payload» }, { «type»: «text», «title»: «section 1 row 2», «description»: «second row of first section description», «postbackText»: «section 1 row 2 postback payload» }, { «type»: «text», «title»: «section 1 row 3», «description»: «third row of first section description», «postbackText»: «section 1 row 3 postback payload» } ] }, { «title»: «second section», «subtitle»: «second Subtitle», «options»: [ { «type»: «text», «title»: «section 2 row 1», «description»: «first row of second section description», «postbackText»: «section 1 row 3 postback payload» } ] } ]
}
Descripción del objeto del mensaje de la lista
Clave Tipo Descripción Ejemplo Requerido
title string Texto para el encabezado. Un máximo de 60 caracteres. El formato permite los emojis, pero no el markdown title text Y
body string Cuerpo del mensaje – El contenido del cuerpo del mensaje puede tener un máximo de 1024 caracteres. Se admiten emojis y markdown. Se admiten los enlaces. Cuerpo de texto Y
msgid string Es un id de mensaje definido por el desarrollador para un mensaje específico de la lista. Este id se recibirá con el evento-mensaje cuando el cliente responda a ese mensaje específico. Es una característica especial proporcionada por nuestra plataforma, esto ayuda al desarrollador a establecer el contexto de una respuesta para casos de uso como los chatbots. list1 N
globalButtons Array Aunque es una serie, sólo se puede añadir un botón global a la lista. [ { «type»: «text», «title»: «Global button» } ] Y
items Array Los elementos de esta serie son secciones de la lista. Hay un mínimo de 1 y un máximo de 10 elementos en la lista. [{ «title»: «first Section», «subtitle»: «first Subtitle», «options»: [ { «type»: «text», «title»: «section 1 row 1», «description»: «first row of first section description», «postbackText»: «section 1 row 1 postback payload» }, { «type»: «text», «title»: «section 1 row 2», «description»: «second row of first section description», «postbackText»: «section 1 row 2 postback payload» }, { «type»: «text», «title»: «section 1 row 3», «description»: «third row of first section description», «postbackText»: «section 1 row 3 postback payload» } ] }] Y
globalButtons array description
Clave Tipo Descripción Ejemplo Requerido
type string Solo se admite el tipo de texto text Y
title string El título del botón global. No puede ser una secuencia vacía y debe ser único dentro del mensaje. Tiene un máximo de 20 caracteres. No admite emojis ni markdown. Global button Y
La descripción de los elementos de la matriz.
Clave Tipo Descripción Ejemplo Requerido
title String Esta propiedad se utiliza para establecer el título de una sección en una lista. first Section Y
options Array Contiene una lista de elementos en una sección. Se puede crear un elemento utilizando los siguientes parámetros:
1. type : text (Es el único tipo soportado)
2. title : section 1 row 1 – (Es el título del elemento en la lista. Longitud máxima: 24 caracteres)
3. description : section 1 row 1 (Opcional.Es la descripción del elemento de la lista. Longitud máxima: 72 caracteres)
4. postbackText : section 1 row 1 – carga útil postback (Opcional. Es la carga útil personalizada que un desarrollador puede recibir cuando un elemento concreto de la lista es enviado por el cliente.)
[{ «type»: «text», «title»: «section 1 row 1», «description»: «first row of first section description», «postbackText»: «section 1 row 1 postback payload» }] Y
Envía respuestas rápidas

Este tipo de mensaje ofrece una forma más rápida de que los usuarios hagan una selección de un menú cuando interactúan con una empresa. Los botones de respuesta poseen la misma experiencia de usuario que las plantillas interactivas con botones.

A continuación se muestra un ejemplo de carga útil al enviar un mensaje de respuestas rápidas a los usuarios finales en WhatsApp.

API URL https://api.gupshup.io/sm/api/v1/msg
Solicitar encabezados Content-Type: application/x-www-form-urlencoded
apikey: {{Your API Key}}
Cuerpo de solicitud
Text Payload Media Payload por image | video | document
«channel=whatsapp»,
«source=917834811114»,
«destination=918X7X733X59»,
«src.name=app_name,
«message» : {
«type»:»quick_reply»,
«msgid»:»qr1″,
«content»:{ «type»:»text», «header»:»this is the header», «text»:»this is the body», «caption»:»this is the footer» },
«options»:[ { «type»:»text», «title»:»First» }, { «type»:»text», «title»:»Second» }, { «type»:»text», «title»:»Third» } ]}
«channel=whatsapp»,
«source=917834811114»,
«destination=918X7X733X59»,
«src.name=app_name,
«message» : {
«type»:»quick_reply»,
«msgid»:»qr1″,
«content»:{ «type»:»image», «url»:»https://www.buildquickbots.com/whatsapp/media/sample/jpg/sample01.jpg», «caption»:»this is the footer» },
«options»:[ { «type»:»text», «title»:»First» }, { «type»:»text», «title»:»Second» }, { «type»:»text», «title»:»Third» } ]}
Respuestas rápidas content La descripción del objeto Soporte para el cuerpo del mensaje de respuestas rápidas – «texto» | «imagen» | «video» | «documento». El objeto de contenido se utiliza para definir la carga útil del cuerpo del mensaje de Respuestas rápidas. Además de esto, tenemos la propiedad caption que es común en el objeto de contenido e indica el pie de página. El encabezado es una adición a los mensajes de respuesta rápida.
– Para el tipo: texto, el encabezado es obligatorio, se permite un máximo de caracteres: 20. Si no se proporciona el encabezado, el cuerpo se enviará como encabezado.
– El título, que es el pie de página, es opcional, se permite un máximo de caracteres: 60.

Clave Tipo Ejemplo
type text {«type»:»text», «header»:»this is the header», «text»: «this is body», «caption»: «this is footer»}
type image {«type»:»image»,»url»:»https://picsum.photos/200/300″,»caption»:»body text»}
type document {«type»: «file», «url»: «http://enterprise.smsgupshup.com/doc/GatewayAPIDoc.pdf»,»filename»: «Sample file»,»caption»:»Sample footer»}
type video {«type»: «video», «url»:»http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4″, «caption»:»Sample video»}
Descripción de la serie de options de respuesta rápida Un mensaje de respuesta rápida que incluye hasta 3 opciones

Clave Tipo Descripción Ejemplo Requerido
type string Describe el tipo de botón. El tipo que se admite actualmente es el postback de texto text Y
title string Título del botón. No puede ser una secuencia vacía y debe ser único dentro del mensaje. Máximo 20 caracteres. No admite emojis ni markdown. First Y

Otros mensajes
Enviar mensaje de ubicación

A continuación se muestra un ejemplo de carga útil para enviar la ubicación estática al usuario final.

API URL https://api.gupshup.io/sm/api/v1/msg
Solicitar encabezados Content-Type: application/x-www-form-urlencoded
apikey: {{Your API Key}}
Cuerpo de solicitud «channel» : «whatsapp»,
«source» : «917384811114»,
«destination» : «918x98xx21x4»
«src.name»:»DemoApp»
«message» : {
«type»: «location»,
«longitude»: 43.43,
«latitude»: 33.34,
«name»: «Name of the location»,
«address»: «Postal address»
}

Enviar tarjeta de contacto

A continuación se muestra un ejemplo de carga útil para compartir una tarjeta de contacto con el usuario final.

API URL https://api.gupshup.io/sm/api/v1/msg
Solicitar encabezados Content-Type: application/x-www-form-urlencoded
apikey: {{Your API Key}}
Cuerpo de solicitud «channel» : «whatsapp»,
«source» : «917384811114»,
«destination» : «918x98xx21x4»
«src.name»:»DemoApp»
«message» :{
«type»: «contact»,
«contact»: {
«addresses»: [
{
«city»: «Menlo Park»,
«country»: «United States»,
«countryCode»: «us»,
«state»: «CA»,
«street»: «1 Hacker Way»,
«type»: «HOME»,
«zip»: «94025»
},
{
«city»: «Menlo Park»,
«country»: «United States»,
«countryCode»: «us»,
«state»: «CA»,
«street»: «200 Jefferson Dr»,
«type»: «WORK»,
«zip»: «94025»
}
],
«birthday»: «2012-08-18»,
«emails»: [
{
«email»: «test@fb.com»,
«type»: «WORK» [
},
{
«email»: «test@whatsapp.com»,
«type»: «WORK»
],
«name»: {
«firstName»: «John»,
«formattedName»: «John Smith»,
«lastName»: «Smith»
},
«org»: {
«company»: «WhatsApp»,
«department»: «Design»,
«title»: «Manager»
},
«phones»: [
{
«phone»: «+1 (940) 555-1234»,
«type»: «HOME»
},
{
«phone»: «+1 (650) 555-1234»,
«type»: «WORK»,
«wa_id»: «16505551234»
}
},
«urls»: [
{
«url»: «https://www.facebook.com»,
«type»: «WORK»
}
]
}
}

Respuesta de la API

Las solicitudes de la API de envío de mensajes recibidas por nuestra plataforma se procesan de forma asíncrona, por lo que siempre obtendrás una respuesta HTTP_SUCCESS(200 to 299) si la solicitud de la API se realizó correctamente. La respuesta de la API incluye un objeto con un identificador de mensaje de Gupshup y un estado como enviado y el Webhook recibirá message-event que indica que el mensaje enviado al cliente de la API de WhatsApp (que realmente envía el mensaje al cliente) está en cola o ha fallado.

{"status":"submitted","messageId":"ee4a68a0-1203-4c85-8dc3-49d0b3226a35"}

El identificador de mensajes de Gupshup, es decir messageId en la respuesta de la API, ayudará a rastrear los mensajes a través de los eventos, es decir, “enqueued”|“failed”|“sent”|“delivered”|“read” recibidos en el Webhook.


Plantilla de mensaje


Las plantillas de mensaje permiten a una empresa enviar notificaciones a sus clientes fuera del periodo de 24 horas. WhatsApp exige que las notificaciones sólo se envíen a los usuarios que hayan dado su consentimiento para recibir mensajes. Manteniendo esto como un comportamiento por defecto en nuestra plataforma, las plantillas de mensaje sólo pueden ser enviadas a los usuarios que están marcados como opt-in. Para marcar a un usuario como opt-in utiliza Mark User Opt-in API

Hemos estado recibiendo consultas de los usuarios de nuestra plataforma que se enfrentan a problemas para enviar plantillas de mensaje a su usuario final. Al analizar estos problemas, descubrimos que la mayoría de ellos estaban relacionados con la falta de coincidencia del mensaje con el de la plantilla aprobada. Por lo tanto, se ha lanzado una nueva API de mensajería de plantillas para reducir estos errores.

Esto no indica que la API genérica para enviar tanto mensajes de sesión como de plantilla sea obsoleta, esta se puede seguir utilizando. A continuación se muestra la API de mensajería de plantillas tradicional:

API URL https://api.gupshup.io/sm/api/v1/msg
Solicitar encabezados Content-Type: application/x-www-form-urlencoded
apikey: {{Your API Key}}
Cuerpo de solicitud «channel» : «whatsapp»,
«source» : «917384811114»,
«destination» : «918x98xx21x4»
«src.name»:»DemoApp»
«message» : {
«isHSM»:»true», //It’s Optional. Template messaging has to be enabled from App settings
«type»: «text»,
«text»: «Hi John, your order is confirmed and will be delivered to you by 15 Feb»
}

Al contrario de la API anterior, en la que se requiere enviar el cuerpo del mensaje completo con marcadores de texto y de posición, la nueva API de plantillas de mensajes sólo toma un id de plantilla y el valor de los marcadores de posición.

Entendamos la especificación/firma de la API, es decir, el Endpoint de la API, Encabezados, el Cuerpo de la Solicitud y la Respuesta en detalle:

API Endpoint

Para enviar un mensaje en WhatsApp, la solicitud de la API es hecho al endpoint:

http://api.gupshup.io/sm/api/v1/template/msg

Solicitud de la API

Solicitud de API de muestra

curl --location --request POST 'http://api.gupshup.io/sm/api/v1/template/msg' \
--header 'apikey: 2xxc4x4xx2c94xxxc2f9xx9d43xxxx8a' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'source=917834811114' \
--data-urlencode 'destination=918x98xx21x4' \
--data-urlencode 'template={"id": "c6aecef6-bcb0-4fb1-8100-28c094e3bc6b","params": ["Agent","Local Address","Tracking code"]}'

Solicitar encabezados

Content-type application/x-www-form-urlencoded
apikey La clave API de su cuenta

Cuerpo de solicitud

Clave Tipo Descripción Ejemplo Requerido
source string El número de teléfono de la empresa (con código de país) registrado para la API de WhatsApp Business 917834811114 Este es nuestro número de Sandbox. Por favor utiliza tu número de empresa aprobado en su lugar. Y
destination string El número de teléfono de destino con código de país para quien debe ser enviada la plantilla del mensaje. 918x98xx21x4 Y
template Object TEste Objeto tiene 2 propiedades: 1. id => Es el Id de la plantilla aprobada. Se pueden obtener los ids de la plantilla desde la lista de la API dada al inferior de esta guía. https://www.gupshup.io/developer/docs/bot-platform/guide/whatsapp-api-documentation#templateListTemplate 2. params => Consiste en los marcadores de posición de las plantillas. Su plantilla aprobada es: ¡Buenas noticias! Tu pedido acaba de ser enviado y será entregado lo antes posible. {{1}} entregará tu paquete en la dirección {{2}}. Con este código Track & Trace, podrás seguir tu pedido hasta la puerta de tu casa {{3}}. Esperamos que disfrutes de tu nuevo producto!

El id de la plantilla es c6aecef6-bcb0-4fb1-8100-28c094e3bc6b

La carga útil es:

{«id»: «c6aecef6-bcb0-4fb1-8100-28c094e3bc6b»,»params»: [«Agente», «Dirección local», «Código de seguimiento»]}

Y
message object Esta propiedad se utiliza sólo si se desea enviar contenido multimedia – Imagen, Video, Documento (.pdf) y Ubicación. Image:
{
"type": "image",
"image":
{
"link": ""
}
}

Video:
{
"type": "video",
"video":
{
"link": ""
}
}

Document:
{
"type": "document",
"document":
{
"link": ""
}
}

Location:
{
"type": "location",
"location":
{
"longitude": "",
"latitude":""
}
}
N

Respuesta de la API

Las solicitudes de la API de envío de mensajes recibidas por nuestra plataforma se procesan de forma asíncrona, por lo que siempre obtendrás una respuesta HTTP_SUCCESS(200 to 299) si la solicitud se realizó correctamente. La respuesta de la API incluye un objeto con un identificador de mensaje de Gupshup y un estado como enviado y tu Webhook recibirá message-event que indica que el mensaje enviado al cliente de la API de WhatsApp (que realmente envía el mensaje al cliente) está en cola o ha fallado.

{
«messageId»: «bf70b8c4-a5b9-4acd-b108-512ce704f4dc»,
«status»: «submitted»
}

El identificador de mensajes de Gupshup, es decir, messageId en la respuesta de la API, ayudará a rastrear los mensajes a través de los eventos, es decir, “enqueued”|“failed”|“sent”|“delivered”|“read” recibidos en el Webhook.


Ejemplo de solicitud de API para cada tipo de mensaje. Estos ejemplos son sólo para fines ilustrativos y no pueden ser utilizados. Debes crear tus propios ejemplos y hacer que se aprueben para poder hacer pruebas.

Enviar texto

curl –location –request POST ‘http://api.gupshup.io/sm/api/v1/template/msg’ \
–header ‘apikey: 2xxc4x4xx2c94xxxc2f9xx9d43xxxx8a’ \
–header ‘Content-Type: application/x-www-form-urlencoded’ \
–data-urlencode ‘source=917834811114’ \
–data-urlencode ‘destination=918x98xx21x4’ \
–data-urlencode ‘template={«id»: «c6aecef6-bcb0-4fb1-8100-28c094e3bc6b»,»params»: [«Agent»,»Local Address»,»Tracking code»]}’

Multimedia
Enviar Imagen

curl –location –request POST ‘http://api.gupshup.io/sm/api/v1/template/msg’ \
–header ‘apikey: 2xxc4x4xx2c94xxxc2f9xx9d43xxxx8a’ \
–header ‘Content-Type: application/x-www-form-urlencoded’ \
–data-urlencode ‘source=917834811114’ \
–data-urlencode ‘destination=918x98xx21x4’ \
–data-urlencode ‘template={«id»: «c6aecef6-bcb0-4fb1-8100-28c094e3bc6b»,»params»: [«Agent»,»Local Address»,»Tracking code»]}’ \
–data-urlencode ‘message={«type»:»image»,»image»:{«link»:»https://images.pexels.com/photos/248797/pexels-photo-248797.jpeg»}}’

Enviar video

curl –location –request POST ‘http://api.gupshup.io/sm/api/v1/template/msg’ \
–header ‘apikey: 2xxc4x4xx2c94xxxc2f9xx9d43xxxx8a’ \
–header ‘Content-Type: application/x-www-form-urlencoded’ \
–data-urlencode ‘source=917834811114’ \
–data-urlencode ‘destination=918x98xx21x4’ \
–data-urlencode ‘template={«id»: «c6aecef6-bcb0-4fb1-8100-28c094e3bc6b»,»params»: [«Agent»,»Local Address»,»Tracking code»]}’ \
–data-urlencode ‘message={«type»:»video»,»video»:{«link»: «https://www.buildquickbots.com/whatsapp/media/sample/video/sample01.mp4»}}’

Enviar documento/archivo

curl –location –request POST ‘http://api.gupshup.io/sm/api/v1/template/msg’ \
–header ‘apikey: 2xxc4x4xx2c94xxxc2f9xx9d43xxxx8a’ \
–header ‘Content-Type: application/x-www-form-urlencoded’ \
–data-urlencode ‘source=917834811114’ \
–data-urlencode ‘destination=918x98xx21x4’ \
–data-urlencode ‘template={«id»: «c6aecef6-bcb0-4fb1-8100-28c094e3bc6b»,»params»: [«Agent»,»Local Address»,»Tracking code»]}’ \
–data-urlencode ‘message={«type»:»document»,»document»:{«link»:»https://www.buildquickbots.com/whatsapp/media/sample/pdf/sample01.pdf»,»filename»: «Sample funtional resume»}}’

Enviar ubicación

curl –location –request POST ‘http://api.gupshup.io/sm/api/v1/template/msg’ \
–header ‘apikey: 2xxc4x4xx2c94xxxc2f9xx9d43xxxx8a’ \
–header ‘Content-Type: application/x-www-form-urlencoded’ \
–data-urlencode ‘source=917834811114’ \
–data-urlencode ‘destination=918x98xx21x4’ \
–data-urlencode ‘template={«id»: «c6aecef6-bcb0-4fb1-8100-28c094e3bc6b»,»params»: [«Agent»,»Local Address»,»Tracking code»]}’ \
–data-urlencode ‘message={«type»:»location»,»location»:{«longitude»:»»,»latitude»:»»}}’

Mensajes interactivos
Llamada a la acción

Para una plantilla interactiva de medios aprobada como esta:
Hi {{1}}, Please find the attached bill. For more details please visit our website. | [Visit Website,https://www.gupshup.io/developer/{{1}}]

Donde tenemos un marcador de posición en el cuerpo del mensaje, así como en el botón de llamada a la acción, la solicitud de la API puede ser:

curl –location –request POST ‘http://api.gupshup.io/sm/api/v1/template/msg’ \
–header ‘apikey: 2xxc4x4xx2c94xxxc2f9xx9d43xxxx8a’ \
–header ‘Content-Type: application/x-www-form-urlencoded’ \
–data-urlencode ‘source=917834811114’ \
–data-urlencode ‘destination=918x98xx21x4’ \
–data-urlencode ‘template={«id»: «c49ee21d-4d39-452d-a6c1-25b7615e01e4″,»params»: [«John»,»docs/bot-platform/guide/whatsapp-api-documentation»]}’ \
–data-urlencode ‘message={«type»:»document»,»document»:{«link»:»https://www.buildquickbots.com/whatsapp/media/sample/pdf/sample01.pdf»,»filename»: «Sample funtional resume»}}’

Respuestas rápidas

Para una plantilla interactiva de medios aprobada como esta:
You can now view your Account Balance or Mini statement for
Account ending with {{1}} simply by selecting one of the options below. |
[View Account Balance] | [View Mini Statement]

Donde tenemos un marcador de posición en el cuerpo del mensaje y solo un botón de devolución de datos, la solicitud será:

curl –location –request POST ‘http://api.gupshup.io/sm/api/v1/template/msg’ \
–header ‘apikey: 2xxc4x4xx2c94xxxc2f9xx9d43xxxx8a’ \
–header ‘Content-Type: application/x-www-form-urlencoded’ \
–data-urlencode ‘source=917834811114’ \
–data-urlencode ‘destination=918x98xx21x4’ \
–data-urlencode ‘template={«id»: «c6aecef6-bcb0-4fb1-8100-28c094e3bc6b»,»params»: [«12323XXXX»]}’

Diversas APIs


API para obtener la lista de usuarios Opt-in

Esta API te ayudará a obtener una lista de todos los usuarios que han interactuado con el número telefónico de la empresa y su estado opt-in:
Curl request

Solicitud de la API

curl –location –request GET ‘https://api.gupshup.io/sm/api/v1/users/{{App_Name}}’ \
–header ‘apikey: {{La clave API de su cuenta}}’

Solicitud de la API

{
«status»: «success»,
«users»: [
{
«countryCode»: «91»,
«lastMessageTimeStamp»: 1585593959851,
«optinSource»: «URL»,
«optinStatus»: «OPT_IN»,
«optinTimeStamp»: 1585504095053,
«phoneCode»: «8x98xx21x4»
}
]
}

Marcar usuarios Opt-in

Las empresas están obligadas a obtener el opt-in antes de enviar notificaciones proactivas a los clientes. El opt-in se puede obtener de múltiples maneras, tanto dentro como fuera de WhatsApp. Esta API es realmente útil para obtener el Opt-in del usuario desde tu página web, flujos de respuesta de voz interactiva (IVR) o en un hilo de conversación de WhatsApp, etc.

Solicitud de la API

curl –location –request POST ‘https://api.gupshup.io/sm/api/v1/app/opt/in/{{App_Name}}’ \
–header ‘Content-Type: application/x-www-form-urlencoded’ \
–header ‘apikey: {{Gupshup_Account_APIKey}}’ \
–data-urlencode ‘user={{User_Mobile_Number}}’

Código de Respuesta de la API

202

Marcar usuaros Opt-out

Si un cliente desea cancelar la suscripción o dejar de recibir notifiaciones. La empresa puede utilizar esta API para hacer lo mismo.

Solicitud de la API

curl –location –request POST ‘https://api.gupshup.io/sm/api/v1/app/opt/out/{{App_Name}}’ \
–header ‘Content-Type: application/x-www-form-urlencoded’ \
–header ‘apikey: {{Gupshup_Account_APIKey}}’ \
–data-urlencode ‘user={{User_Mobile_Number}}’

El valor de Usuario_Móvil_Número es un número telefónico válido con código de país. Ejemplo: 918x98xx21x4

Código de Respuesta de la API

Obtener la lista de plantillas

Esta API se puede utilizar para varios propósitos, por ejemplo, si se ha enviado una plantilla para la revisión de WhatsApp, se puede programar el seguimiento del estado de la plantilla. También se puede utilizar para obtener el id de la plantilla generado por la plataforma para cada una de las enviadas a revisión de WhatsApp – el id de la plantilla es necesario para utilizar la API de mensajería de plantilla.

Entendamos esta API:

API Endpoint

https://api.gupshup.io/sm/api/v1/template/list/:AppName

Solicitar encabezados

apikey Your account apikey

 

Solicitud de la API

curl –location –request GET ‘https://api.gupshup.io/sm/api/v1/template/list/:AppName’ \
–header ‘apikey: 2xxc4x4xx2c94xxxc2f9xx9d43xxxx8a’

Respuesta de la API
HTTP response code: 200

{
«status»: «success»,
«templates»: [
{
«category»: «ACCOUNT_UPDATE»,
«createdOn»: 1580978917761,
«data»: «{{1}} debited with {{2}} on {{3}} for {{4}}.»,
«elementName»: «common_transaction_2»,
«id»: «05c82e91-05e5-4d35-b280-2d3d20feda38»,
«languageCode»: «en_US»,
«languagePolicy»: «deterministic»,
«master»: false,
«meta»: «{\»example\»:\»[Your Bank ac ending with 1245] debited with [Rs. 10000] on [11-Jan-2011] for [ATM cash withdrawal].\»}»,
«modifiedOn»: 1581966008618,
«status»: «APPROVED»,
«templateType»: «TEXT»,
«vertical»: «TRANSACTIONS»
},
{
«category»: «ISSUE_RESOLUTION»,
«createdOn»: 1593540550247,
«data»: «Hola! Soy {{1}} de Ofisí, recibimos una llamada suya, ¿en qué puedo ayudarle?»,
«elementName»: «recibimos_llamada»,
«id»: «072867eb-dd12-46f5-950d-2dd03a7677e5»,
«languageCode»: «es_MX»,
«languagePolicy»: «deterministic»,
«master»: true,
«meta»: «{\»example\»:\»Hola! Soy [Leon] de Ofisí, recibimos una llamada suya, ¿en qué puedo ayudarle?\»}»,
«modifiedOn»: 1593627001825,
«status»: «APPROVED»,
«templateType»: «TEXT»,
«vertical»: «ISSUE RESOLUTION»
}
]
}

La propiedad id es el ID de la plantilla.

Consultar el saldo de la billetera

Solicitud de la API

curl –location –request GET ‘https://api.gupshup.io/sm/api/v2/wallet/balance’ \
–header ‘apikey: {{Gupshup Account apikey}}’

Código de Respuesta de la API

200

Cuerpo de respuesta de API

{
«balance»: 1313.7675,
«status»: «success»
}