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:
- usuario-evento
- eventos-del sistema
- mensaje-evento
- billing-evento
- 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 eventosEvento 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 |
{ |
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í. |
{ |
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 |
{ |
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 . |
{ |
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:
|
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:
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:
|
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:
|
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.
|
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:
|
BIC |
model |
string | El modelo de política de precios aplicado para este mensaje. Valores posibles:
|
CBP |
source |
string | Origen fuente de la conversación |
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 eventsuser-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 |
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 |
|
||||||||
El payload de texto |
|
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 |
|
||||||||
El payload de texto |
|
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 |
|
||||||||||||
El payload de texto |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
||||||||||||||||||||||||
La carga útil de la respuesta a un mensaje de lista |
|
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 |
|
||||||||||||||||
La carga útil de respuesta a un mensaje de respuesta rápida |
|
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 |
|
||||||||||||
La carga útil de un mensaje de ubicación |
|
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 |
|
||||||||||||||||||||||||||||||||||||
La carga útil de un mensaje de tarjeta de contacto |
|
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 |
|
||||||||||||||||||||||||||||
La carga útil de una referencia |
|
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. | 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 |
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 |
|
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.
|
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 |
|
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 |
|
||||||||||||||||||||||||||||||
globalButtons array description |
|
||||||||||||||||||||||||||||||
La descripción de los elementos de la matriz. |
|
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 |
|
|||||||||||||||
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.
|
|||||||||||||||
Descripción de la serie de options de respuesta rápida |
Un mensaje de respuesta rápida que incluye hasta 3 opciones
|
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:
Video:
Document:
Location:
|
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»
}