NAV Navbar
cURL Ruby Python PHP Java

en es pt

Introduccion

Sean bienvenidos a nuestra documentación para desarrolladores. Aquí usted encontrara todo lo que necesita para integrar su empresa a nuestra plataforma de mensajes.

Es posible hacer la integración de las siguientes formas:

API HTTPS Permite el envió y recibimiento de mensajes y status a través del protocolo HTTPS utilizando los métodos GET o POST
API SMPP Protocolo especifico para intercambio de mensajes SMS, permite mantener una conexión activa constante con nuestro servidor SMPP. Es indicado para clientes con trafico superior a 5 millones de mensajes por mes.
API SFTP Protocolo utilizado para transferencia de archivos, es indicado para envíos de mensajes en masa (Lote). Los archivos son transferidos por el cliente para nuestros servidores y son inmediatamente procesados.
Websphere MQ Utilizado para transferencia de mensajes entre servidores Websphere MQ, es indicado para clientes con trafico superior a 30 millones de mensajes por mes. Principalmente para bancos financieros donde el cliente ya posee este sistema funcionando para mensajes internos. Esta opción de integración posee un valor de configuración y mantenimiento de ambiente fijado en R$50.000,00 y R$20.000,00 respectivamente.

Conozca también nuestro portal Web, por el su empresa puede administrar usuarios, proyectos y configuraciones. Enviar y recibir mensajes y obtener informes sin la necesidad de desarrollo o integracion

SMS API

Términos importantes

MT Mobile Terminated Es un termino utilizado para mensajes que poseen el usuario (Aparato) como destino. O sea, mensajes que fueron originados por su empresa con destino al usuario (Aparato).
Response Respuesta sincronica de Wavy Es una respuesta inmediata de una solicitud hecha en nuestra API, donde informamos si el mensaje fue aceptado o no por nuestra plataforma
Callback Sent status o Estatus de envió Es el primer status de envió que retornamos, en el informamos si fue posible, o no, hacer la entrega del mensaje. para la operadora.
DR ou DLR Delivery Receipt Es el segundo status de envió que retornamos, donde informamos si fue posible, o no, hacer la entrega para el aparato. Las operadoras envían para Wavy esta información y nosotros la entregamos al cliente. El tiempo de entrega es variable, por ejemplo si el aparato estaba apagado en el momento del envió y el usuario lo encendió 2 horas después este status DLR sera entregado al cliente con 2 horas de atraso.
Obs1: Esta confirmación de entrega en el aparato, existirá solamente para casos en que el mensaje fue entregado con éxito en la operadora. O sea, el primer status (Callback) fue de exito.
Obs2: Es muy importante resaltar que infelizmente las operadoras OI y Sercomtel no poseen esta funcionalidad, o sea, no nos retornan la información de entrega en el aparato. Los envíos realizados para números de estas operadoras tendrán solamente la informacion de entrega en la operadora (callback)
MO Mobile Originated Es el termino utilizado para mensajes que poseen su empresa como destino. O sea, mensajes que fueron originados por el usuario (Aparato). Y utilizado por ejemplo en flujos de preguntas y respuestas vía SMS, cuando es necesario una confirmación por parte del usuario.
LA Short Code Numero corto de 5 o 6 digitos, utilizados para envio y recibimiento de mensajes SMS. Son designados por las operadoras para integradores homologados (Wavy), y poseen reglas anti-fraude y anti-spam.

Flujo de Mensajes

Flujo simplificado - MT, Callback, DLR, e MO.

alt text

API HTTPS

Esta API permite que usted automatice las solicitudes de envíos de mensajes únicas o en lotes, y la recuperación de los estatus de envíos a travez de consultas. Ella utiliza el protocolo HTTP con TLS y acepta los métodos GET con parámetros query string o POST con parámetros en JSON.

Autenticacion

Para efectuar envíos y consultas en nuestra API es necesaria una autenticacion por medio de usuario o e-mail, en conjunto con un token.

Campo Detalles Data Type
UserName Su usuário o email String
AuthenticationToken Su token de autenticacion. Verifique aqui y lea las siguientes descripciones de usuarios. String
Tipo Detalles
Administrador Usuario administrador de su empresa, es utilizado para crear/editar/desactivar sub cuentas y otros usuarios y visualizar informes de toda la empresa.
Este usuario no hace envíos de mensajes ni por el portal ni vía integración API.
Usuario Usuario utilizado para envió de mensajes via API y portal, puede visualizar informes especificos de su sub cuenta.
Un usuario es siempre relacionado a una única sub cuenta.
Una sub cuenta puede contener multipes usuarios.
Cada sub cuenta es un centro de costo en nuestra plataforma, los mensajes son discriminados en informes y financieramente por sub cuenta y no por usuario.

Detalles de conexión

Hostname api-messaging.wavy.global
APIs Envíos individuales /v1/send-sms
Envíos en lote /v1/send-bulk-sms
Puerta 443 (https)
Protocolo HTTPS (encriptacion TLS)
Autenticacion username + token
Portal messaging.wavy.global

Codificación (encoding)

El estándar de codificación utilizado es UTF-8, todo el contenido de los mensajes deben seguir ese estándar.

Es posible escapar los caracteres caso desee codificar utilizando el formato HTTP

A seguir algunos ejemplos de codificación

“messageText”:“La combinación fue perfecta :)”

O usted puede escapar los caracteres en el caso que quiera:

“messageText”:“La combina\u00e7\u00e3o fue perfecta :)”

Envió de mensajes (MT)

Envio por método GET - Individual

require 'uri'
require 'net/http'

url = URI("https://api-messaging.wavy.global/v1/send-sms")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["username"] = '<username>'
request["authenticationtoken"] = '<authenticationtoken>'
request["content-type"] = 'application/json'
request.body = "{\"destination\": \"5511900000000\" ,  \"messageText\": \"linha\\nquebrada\"}"

response = http.request(request)
puts response.read_body
import requests

url = "https://api-messaging.wavy.global/v1/send-sms"

payload = "{\"destination\": \"5511900000000\" ,  \"messageText\": \"linha\\nquebrada\"}"
headers = {
    'username': "<username>",
    'authenticationtoken': "<authenticationtoken>",
    'content-type': "application/json"
    }

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)
curl -X POST \
  https://api-messaging.wavy.global/v1/send-sms \
  -H 'authenticationtoken: <authenticationtoken>' \
  -H 'username: <username>' \
  -H 'content-type: application/json' \
  -d '{"destination": "5511900000000" , "messageText": "linha\nquebrada"}'

Mod curl:
sudo apt-get/yum install php5-curl

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api-messaging.wavy.global/v1/send-sms",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\"destination\": \"5511900000000\" ,  \"messageText\": \"linha\\nquebrada\"}",
  CURLOPT_HTTPHEADER => array(
    "authenticationtoken: <authenticationtoken>",
    "username: <username>",
    "content-type: application/json"
  ),
));

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

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

public class SendSms {

    public static void main(String[] args) {
        String url = "https://api-messaging.wavy.global/v1/send-sms";

        String userName = "<username>";
        String authenticationToken = "<authenticationtoken>";

        String body = "{\"destination\": \"5511900000000\" ,  \"messageText\": \"linha\\nquebrada\"}";

        String response = doPost(url, body, userName, authenticationToken);
        System.out.println(response);
    }

    public static String doPost(String strUrl, String request, String userName, String authenticationToken) {
        HttpURLConnection conn = null;
        OutputStreamWriter wr = null;
        BufferedReader br = null;
        try {
            URL url = new URL(strUrl);

            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setInstanceFollowRedirects(true);
            conn.setConnectTimeout(30000);
            conn.setReadTimeout(30000);

            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("UserName", userName);
            conn.setRequestProperty("AuthenticationToken", authenticationToken);

            // write the request
            wr = new OutputStreamWriter(conn.getOutputStream());
            wr.write(request);
            wr.close();

            // read the response
            br = new BufferedReader(new InputStreamReader(conn.getInputStream()));

            StringBuilder resp = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                resp.append(line).append("\n");
            }
            return resp.toString();

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (wr != null) {
                    wr.close();
                }
                if (br != null) {
                    br.close();
                }
                if (conn != null) {
                    conn.disconnect();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

Al hacer el envió usted recibirá un JSON informando el id que fue generado para este mensaje (Response o Respuesta sincrona de Wavy):

[
  {
  "id":"9cb87d36-79af-11e5-89f3-1b0591cdf807",
  "correlationId":"myId"
  }
]

Vía método GET, es posible realizar el envió de un mensaje pasando todos los parámetros como query string

URL para envíos unitarios via GET

GET https://api-messaging.wavy.global/v1/send-sms?destination=..

Vía método POST, es posible realizar el envió de un mensaje pasando todos los parámetros como body

URL para envíos unitarios via POST

POST https://api-messaging.wavy.global/v1/send-sms - Content-Type: application/json

Parametros

* Campo obligatorio

Campo Detalles Tipo
destination* Teléfono para el cual sera enviado el mensaje (incluido código de país). Ejemplo: 5511900000000 String
messageText* Texto del mensaje que sera enviado (max 1280 chars). String
correlationId Un ID único definido por usted para coincidencia con los estatus de envió (Callback y DLR). Este parámetro es opcional y usted puede utilizar el ID generado por Wavy para coincidencia (max 64 chars). String
extraInfo Cualquier información extra que usted desee adicionar al mensaje (max 255 chars). String
timeWindow Mensajes serán enviados apenas en horarios específicos. Por ejemplo, si usted configura la ventana [11, 12, 18], los mensajes seran enviados entre 11:00 y 11:59, 12:00 y 12:59, 18:00 y 18:59, este parámetro se debe definir en la raíz del objeto JSON Integer[]
expiresAt Los mensajes no serán enviados después de esta fecha. El formato utilizado es Unix time . Obs: Los campos expiresAt, expiresInMinutes y expiresDate son mutuamente exclusivos (Use solamente uno de ellos) Long
expiresInMinutes El mensaje sera expirado después del tiempo informado en este campo. El tiempo pasa a ser contabilizado en el momento que el mensaje es recibido por Wavy. Obs: Los campos expiresAt, expiresInMinutes y expiresDate son mutuamente exclusivos (Use solamente uno de ellos) Long
expiresDate El mensaje no sera enviado después de esta fecha. El campo acepta el siguiente formato yyyy-MM-dd’T'HH:mm:ss. Obs: Los campos expiresAt, expiresInMinutes y expiresDate son mutuamente exclusivos (Use solamente uno de ellos) String
scheduledAt El mensaje no sera enviado después de esta fecha. ¡IMPORTANTE! Es posible realizar una agenda solo en un período superior a 30 minutos, un proceso por el cual fluxo diferenciado do envio sem agendamento. El formato utilizado es Unix time. Los campos expiresAt, expiresInMinutes y expiresDate son mutuamente exclusivos (Use solamente uno de ellos) Long
delayedInMinutes Minutos después que la solicitud es realizada el mensaje sea enviado. Los campos expiresAt, expiresInMinutes y expiresDate son mutuamente exclusivos (Use solamente uno de ellos) Long
scheduledDate El mensaje no sera enviado antes de este fecha. El campo soporta el siguiente formato yyyy-MM-dd’T'HH:mm:ss. Obs: Los campos expiresAt, expiresInMinutes y expiresDate son mutuamente exclusivos (Use solamente uno de ellos) String
timeZone Especifica el timezone que sera utilizado directamente en los campos: expiresDate, scheduledDate y timeWindow (que sera modificado en caso que sean utilizados timezones dinámicos como los horarios de verano). Si el timezone no estuviese presente en la solicitud el sistema verificara el timezone del usuario - si estuviera presente - o el timezone del país del usuario en el ultimo caso. Si ninguna de las opciones estuvieran presentes, el sistema utilizara el horario UTC String
campaignAlias Identificación de campaña creada previamente. Clique aqui para registar una nueva campaña, este parámetro se debe definir en la raíz del objeto JSON String
flashSMS Flash SMS,use esta opción para enviar un mensaje pop-up al teléfono del usuario. Para enviar un mensaje Flash pase el parámetro true. Boolean
flowId Identificador del flujo del bot. El mensaje de texto provendrá del flujo String
subAccount Referencia de subcuenta. Solo puede ser utilizado por Administradores. String
params Mapa de marcadores de posición que serán reemplazados en el mensaje. Si uno o más parámetros son incorrectos, el mensaje se marcará como no válido, pero el envío no se cancelará. Es necesario enviar el flowId para utilizar los parámetros Map

Envio por método POST - Individual o e lote

require 'uri'
require 'net/http'

url = URI("https://api-messaging.wavy.global/v1/send-bulk-sms")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["username"] = '<username>'
request["authenticationtoken"] = '<authenticationtoken>'
request["content-type"] = 'application/json'
request.body = '{ "messages":[{ "destination":"5519999999999", "messageText":"First message" }, { "destination":"5519999999999" }, { "destination":"5519999999999" }], "defaultValues":{"messageText":"Default message" }}'

response = http.request(request)
puts response.read_body
import requests

url = "https://api-messaging.wavy.global/v1/send-bulk-sms"

payload = '{ "messages":[{ "destination":"5519999999999", "messageText":"First message" }, { "destination":"5519999999999" }, { "destination":"5519999999999" }], "defaultValues":{"messageText":"Default message" }}'
headers = {
    'username': "<username>",
    'authenticationtoken': "<authenticationtoken>",
    'content-type': "application/json"
    }

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)
curl --request POST \
  --url https://api-messaging.wavy.global/v1/send-bulk-sms \
  --header 'authenticationtoken: <Token de autenticação>' \
  --header 'username:<Usuário Wavy Messaging>' \
  --header 'content-type: application/json' \
  --data "{ "messages":[{ "destination":"5519999999999", "messageText":"First message" }, { "destination":"5519999999999" }, { "destination":"5519999999999" }], "defaultValues":{"messageText":"Default message" }}"

Mod: curl

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api-messaging.wavy.global/v1/send-bulk-sms",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{ \"messages\":[{ \"destination\":\"5519999999999\", \"messageText\":\"First message\" }, { \"destination\":\"5519999999999\" }, { \"destination\":\"5519999999999\" }], \"defaultValues\":{\"messageText\":\"Default message\" }}",
  CURLOPT_HTTPHEADER => array(
    "authenticationtoken: <authenticationtoken>",
    "content-type: application/json",
    "username: <username>"
  ),
));

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

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

public class SendSms {

    public static void main(String[] args) {
        String url = "https://api-messaging.wavy.global/v1/send-bulk-sms";

        String userName = "<username>";
        String authenticationToken = "<authenticationtoken>";

        String body = "{ \"messages\":[{ \"destination\":\"5519999999999\", \"messageText\":\"First message\" }," +
                " { \"destination\":\"5519999999999\" }, { \"destination\":\"5519999999999\" }]," +
                " \"defaultValues\":{\"messageText\":\"Default message\" }}";

        String response = doPost(url, body, userName, authenticationToken);
        System.out.println(response);
    }

    public static String doPost(String strUrl, String request, String userName, String authenticationToken) {
        HttpURLConnection conn = null;
        OutputStreamWriter wr = null;
        BufferedReader br = null;
        try {
            URL url = new URL(strUrl);

            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setInstanceFollowRedirects(true);
            conn.setConnectTimeout(30000);
            conn.setReadTimeout(30000);

            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("UserName", userName);
            conn.setRequestProperty("AuthenticationToken", authenticationToken);

            // write the request
            wr = new OutputStreamWriter(conn.getOutputStream());
            wr.write(request);
            wr.close();

            // read the response
            br = new BufferedReader(new InputStreamReader(conn.getInputStream()));

            StringBuilder resp = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                resp.append(line).append("\n");
            }
            return resp.toString();

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (wr != null) {
                    wr.close();
                }
                if (br != null) {
                    br.close();
                }
                if (conn != null) {
                    conn.disconnect();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

Al hacer el envió, retornara un objeto JSON con un UUID del lote e de los mensajes individuales :


  {
  "id": "ce528d70-013b-11e7-98f2-e27c463c8809",
  "messages": [
    {
      "id": "ce528d71-013b-11e7-98f2-e27c463c8809"
    },
    {
      "id": "ce528d72-013b-11e7-98f2-e27c463c8809"
    }
  ]
}

Permite el envió de mensajes en lote o individuales pasando los parámetros de un objeto JSON

Solicitud HTTP Method POST

Ejemplo de JSON para envio em Lote:

Exemplo 1:

{
  "messages":[
    {
      "destination":"5519900001111",
      "messageText":"First message"
    },
    {
      "destination":"5519900002222"
    },
    {
      "destination":"5519900003333"
    }
  ],
  "defaultValues":{
    "messageText":"Default message"
  }
}

Exemplo 2:

{
  "messages":[
    {
      "destination":"5519900001111",
      "messageText":"First message"
    },
    {
      "destination":"5519900002222"
    }
  ],
  "timeZone":"America/Sao_Paulo",
  "scheduledDate": "2017-01-28T02:30:43",
  "timeWindow": [12, 15, 20],
  "defaultValues":{
    "messageText":"Default message"
  }
}

Exemplo 3:

`
{
  "messages":[
    {
      "destination":"5519900001111",
    },
    {
      "destination":"5519900002222"
    }
  ],
  "defaultValues":{
    "messageText":"Default message",
    "flashSMS":"true"
  }
}

Ejemplo 4, com flowId y params:

{
  "messages":[
    {
      "destination":"5519900001111",
      "params": {
        "param1": "other_value1",
        "param2": "other_value2"
      }
    },
    {
      "destination":"5519900002222"
    }
  ],
  "defaultValues":{
    "params": {
      "param1": "value1",
      "param2": "value2"
    }
  },
  "flowId": "14f8142d-e731-4971-8220-5a76a12c413f"
}

Observe que en los ejemplos de arriba, algunos campos “destination” no tienen un “messageText” atribuido directamente para ellos, en este caso, el texto del mensaje sera el “messageText” dentro de “defaultValues”. Esa función es útil cuando es necesario el envió del mismo mensaje para varios números diferentes.

POST https://api-messaging.wavy.global/v1/send-bulk-sms Content-Type: application/json

El cuerpo de la solicitud necesita contener el objeto JSON con las informaciones conforme los campos abajo:

* Campo obligatorio

Campo Detalles Tipo
destination* Teléfono para el cual sera enviado el mensaje (incluido código de país). Ejemplo: 5511900000000 String
messageText* Texto del mensaje que sera enviado (max 1280 chars). String
correlationId Un ID único definido por usted para coincidencia con los estatus de envió (Callback y DLR). Este parámetro es opcional y usted puede utilizar el ID generado por Wavy para coincidencia (max 64 chars). String
extraInfo Cualquier información extra que usted desee adicionar al mensaje (max 255 chars). String
timeWindow Mensajes serán enviados apenas en horarios específicos. Por ejemplo, si usted configura la ventana [11, 12, 18], los mensajes seran enviados entre 11:00 y 11:59, 12:00 y 12:59, 18:00 y 18:59 Integer[]
expiresAt Los mensajes no serán enviados después de esta fecha. El formato utilizado es Unix time . Obs: Los campos expiresAt, expiresInMinutes y expiresDate son mutuamente exclusivos (Use solamente uno de ellos) Long
expiresInMinutes El mensaje sera expirado después del tiempo informado en este campo. El tiempo pasa a ser contabilizado en el momento que el mensaje es recibido por Wavy. Obs: Los campos expiresAt, expiresInMinutes y expiresDate son mutuamente exclusivos (Use solamente uno de ellos) Long
expiresDate El mensaje no sera enviado después de esta fecha. El campo acepta el siguiente formato yyyy-MM-dd’T'HH:mm:ss. Obs: Los campos expiresAt, expiresInMinutes y expiresDate son mutuamente exclusivos (Use solamente uno de ellos) String
scheduledAt El mensaje no sera enviado después de esta fecha. El formato utilizado es Unix time. Los campos expiresAt, expiresInMinutes y expiresDate son mutuamente exclusivos (Use solamente uno de ellos) Long
delayedInMinutes Minutos después que la solicitud es realizada el mensaje sea enviado. Los campos expiresAt, expiresInMinutes y expiresDate son mutuamente exclusivos (Use solamente uno de ellos) Long
scheduledDate El mensaje no sera enviado antes de este fecha. El campo soporta el siguiente formato yyyy-MM-dd’T'HH:mm:ss. Obs: Los campos expiresAt, expiresInMinutes y expiresDate son mutuamente exclusivos (Use solamente uno de ellos) String
timeZone Especifica el timezone que sera utilizado directamente en los campos: expiresDate, scheduledDate y timeWindow (que sera modificado en caso que sean utilizados timezones dinámicos como los horarios de verano). Si el timezone no estuviese presente en la solicitud el sistema verificara el timezone del usuario - si estuviera presente - o el timezone del país del usuario en el ultimo caso. Si ninguna de las opciones estuvieran presentes, el sistema utilizara el horario UTC String
campaignAlias Identificación de campaña creada previamente. Clique aqui para registar una nueva campaña String
flashSMS Flash SMS,use esta opción para enviar un mensaje pop-up al teléfono del usuario. Para enviar un mensaje Flash pase el parámetro true. Boolean
flowId Identificador del flujo del bot. El mensaje de texto provendrá del flujo String
subAccount Referencia de subcuenta. Solo puede ser utilizado por Administradores. String
params Mapa de marcadores de posición que serán reemplazados en el mensaje. Si uno o más parámetros son incorrectos, el mensaje se marcará como no válido, pero el envío no se cancelará. Es necesario enviar el flowId para utilizar los parámetros Map

Respuestas de mensajes en lote

La respuesta de envíos en lote contendrá un archivo JSON con las informaciones necesarias para su rastreamiento, sera generado un id para todo el lote y un id y correlationid individual para cada mensaje:

Campo Detalles Tipo
id UUID generado para este lote String
messages Este campo es un array con las respuestas de los mensajes individuales del lote, contiene el id y el correlationid de cada mensaje enviado. SingleSMSResponse[]

Respuesta del código de estado HTTP

Código de estado de respuesta HTTP común:

Grupo Descripción
2xx El éxito
4xx Error del cliente
5xx Error del servidor
Código Descripción
200 El éxito
400 Mal pedido
401 No autorizado
403 Prohibido
404 No encontrado
500 Error interno del servidor
503 Servicio no disponible
504 Tiempo de espera

Estatus de envio (Callback e DLR)

Existen dos maneras de obtener los estatus de envíos de los mensajes, son ellas:

Cuando entregamos el mensaje en la operadora, o en el momento que la operadora nos informa que se entrego el mensaje en el aparato, la información es pasada instantáneamente para usted.

Los estatus quedan disponibles por 3 días, e pueden ser consultados por el UUID que Wavy retorno al recibir el mensaje de su empresa, o por el ID que su empresa paso al entregar el mensaje para Wavy.
La desventaja de esta opción de consulta al revés de webhook, es que usted hará solicitudes de consulta de un ID que puede todavía no haber sido entregado en la operadora o en el aparato, en este caso, una serie de solicitudes innecesarias serán realizadas. Por ejemplo, si un usuario estaba con el aparato apagado cuando envio un mensaje para el y lo encendió dos horas después, usted consultara este ID innumerables veces por dos horas. En el caso de la utilización de webhook, esta información seria enviada para usted en el momento que el mensaje fuese entregado en el aparato, sin solicitudes vaciás.

Estatus via webhook (entrega en su webservice)

Para configurar el envió de los Callbacks y DRs (dudas sobre los términos consulte la pestaña Términos Importantes) primeramente es necesario loguear en Wavy messaging las configuraciones de la API, en el formulario de configuración usted podrá proveer las URLs para donde serán enviados los estatus de envió (Callbacks) y los estatus de confirmación de entrega en el aparato (DRs)

Después de la inclusión de su webhook en el portal arriba, las configuraciones serán replicadas para nuestra plataforma en hasta 10 minutos, y llamaremos su URL cuando las siguientes acciones ocurran:

Accion Estatus de retorno enviado
Después que un mensaje fue entregado o no, en la operadora API de estatus de envió (callback)
Cuando un mensaje fue entregado o no, en el aparato del cliente API de Delivery Report (DRs)

Ejemplo JSON Estatus de Envio (callback - entrega en la operadora)

POST https://example.com/callback/
Content-Type: application/json

{
  "id":"f9c100ff-aed0-4456-898c-e57d754c439c",
  "correlationId":"client-id",
  "carrierId":1,
  "carrierName":"VIVO",
  "destination":"5511900009999",
  "sentStatusCode":2,
  "sentStatus":"SENT_SUCCESS",
  "sentAt":1266660300000,
  "sentDate":"2010-02-20T10:05:00Z",
  "campaignId":"64",
  "extraInfo":"",
}

Campos JSON respuesta Callbacks (sent status)

Campo Descripción
id UUID generado del mensaje
correlationId Su identificación de este mensaje
carrierId Identificador de la operadora
carrierName Nombre de la operadora
destination Número de telefone da mensagem enviada
sentStatusCode Códigos de estatus generado por Wavy para mensajes indicando el estatus de envió. Verifique en codigos de status para mas informaciones.
sentStatus descripción de estatus de envió. Verifique en códigos de estatus para mas informaciones.
sentAt Hora do envió, el formato utilizado es Unix_time.
sentDate Fecha que el mensaje fue enviado. Formato: yyyy-MM-dd’T'HH:mm:ssZ
campaignId Identificador de campaña en el caso que exista.
extraInfo Cualquier información extra adicionada por el cliente en el envió del mensaje

Campos JSON respuesta Delivery Reports (DRs)

Campo Descripción
id UUID generado del mensaje
correlationId Su identificación de este mensaje
carrierId Identificador de la operadora
carrierName Nombre de la operadora
destination Número de telefone da mensagem enviada
sentStatusCode Códigos de estatus generado por Wavy para mensajes indicando el estatus de envió. Verifique en codigos de status para mas informaciones.
sentStatus descripción de estatus de envió. Verifique en códigos de estatus para mas informaciones.
sentAt Hora do envió, el formato utilizado es Unix_time.
sentDate Fecha que el mensaje fue enviado. Formato: yyyy-MM-dd’T'HH:mm:ssZ
deliveredStatusCode Código de estatus generado por Wavy para un mensaje indicando el estatus de envió. Verifique en el código de estatus para mas informaciones
deliveredStatus descripción de estatus de envió. Verifique en código de estatus para mas informaciones.
deliveredAt Hora do envió, el formato utilizado es Unix_time.
deliveredDate Fecha que el mensaje fue enviado. Formato: yyyy-MM-dd’T'HH:mm:ssZ
campaignId Identificador de campaña en el caso que exista.
extraInfo Cualquier información extra adicionada por el cliente en el envió del mensaje

Consulta Estatus via solicitud HTTP

Para obtener una lista del estado aún no consultado, puede realizar una solicitud GET a la siguiente URL:

GET https://api-messaging.wavy.global/v1/sms/status/list

Observe que este endpoint solo devuelve los estados que aún no ha enviado.

Respuesta

Campos JSON de respuesta:

Campo Detalles Tipo
id UUID generado en la solicitud para el mensaje String
correlationId Mismo correlationId de la solicitud String
carrierId ID de la operadora, para mas informaciones consulte el código de error Long
carrierName Nombre da la operadora String
destination Número de telefono del mensaje enviado String
sentStatusCode sentStatusCode Códigos de estatus generado por Wavy para mensajes indicando el estatus de envió. Verifique en codigos de status para mas informaciones.
sentStatus Descripción de estatus de envió. Verifique en códigos de estatus para mas informaciones. String
sentStatusAt Cuando el mensaje fue enviado. Es un Epoch Date Long
sentStatusDate Cuando el mensaje fue enviado. Formato yyyy-MM-dd’T'HH:mm:ssZ. Formato de fecha con hora y zona horaria (ISO 8601) String
deliveredStatusCode Código de estatus indicando el estatus de envió. Verifique en el código de estatus para mas informaciones. Long
deliveredStatus Descripción de estatus de envió. Verifique en código de estatus para mas informaciones. String
deliveredAt Cuando el mensaje fue enviado. Es un Epoch Date Long
deliveredDate Cuando el mensaje fue enviado. Formato yyyy-MM-dd’T'HH:mm:ssZ. Formato de fecha con hora y zona horaria (ISO 8601) String
campaignId Identificador de campaña Long
extraInfo Cualquier información extra adicionada por el cliente en el envió del mensaje String

Ejemplo JSON Delivery Report (DR ou DLR - Entrega en el aparato del usuario)

{
  "id":"8f5af680-973e-11e4-ad43-4ee58e9a13a6",
  "correlationId":"myId",
  "carrierId":5,
  "carrierName":"TIM",
  "destination":"5519900001111",
  "sentStatusCode":2,
  "sentStatus":"SENT_SUCCESS",
  "sentStatusAt":1420732929252,
  "sentStatusDate":"2015-01-08T16:02:09Z",
  "deliveredStatusCode":4,
  "deliveredStatus":"DELIVERED_SUCCESS",
  "deliveredAt":1420732954000,
  "deliveredDate":"2015-01-08T16:02:34Z",
  "campaignId":1234
}

Respuesta del usuario (MO)

La API de MO permite la automatización del proceso de recuperación de respuestas enviadas por los clientes a los mensajes que usted le envió a ellos. Todas las solicitudes usan el método GET y las respuestas son enviadas en formato JSON

Es posible también la configuración para que los MOs sean encaminados conforme llegan, para una API del cliente. Esa es la forma mas eficiente ya que no es necesario realizar ninguna llamada, solo se tratan los envíos conforme van llegando. Para que esta configuración sea realizada es necesario abrir un ticket con nuestro equipo de soporte técnico a través de nuestro Service Center pasando la URL que recibirán los MOs.

Ejemplo JSON enviado a su API (método POST)

{
     "id": "25950050-7362-11e6-be62-001b7843e7d4",
     "subAccount": "iFoodMarketing",
     "campaignAlias": "iFoodPromo",
     "carrierId": 1,
     "carrierName": "VIVO",
     "source": "5516981562820",
     "shortCode": "28128",
     "messageText": "Eu quero pizza",
     "receivedAt": 1473088405588,
     "receivedDate": "2016-09-05T12:13:25Z",
     "mt": {
       "id": "8be584fd-2554-439b-9ba9-aab507278992",
       "correlationId": "1876",
       "username": "iFoodCS",
       "email": "customer.support@ifood.com"
     }
   }

Cada solicitud realizada retornara los MOs de los últimos 5 días, hasta un limite de 1.000 MOs. Para las fechas anteriores o cantidades mayores por favor entrar en contacto con nuestro equipo de soporte a través del nuestro Service Center.

El comportamiento de Query List MO sera diferente para cada usuario autenticado debido al nivel de permisos de cada usuario.

Recomendamos el metodo de envio de los MOs para la API, todo MO enviado será automaticamente enviada para la API ya que de esta forma las respuestas pueden ser tratadas inmediatamente despues de recibidas

Perfil Permisos
Regular Cada solicitud realizada en la MO API solo retornara los MOs correspondientes a la subcuenta a la que el usuario pertenece. No es posible para un usuario regular recuperar los MOs de otras subcuentas.
Administrador El comportamiento estándar para el usuario administrador es recuperar todos los MOs de todas las subcuentas. Si un admin desea recuperar los MOs de apenas una de las subcuentas es necesario especificar la subcuenta en el parámetro subAccount con el id de la subcuenta deseada.

Fomato de respuesta estandar de MO

Ejemplo JSON de respuesta:

{
  "total": 1,
  "start": "2016-09-04T11:12:41Z",
  "end": "2016-09-08T11:17:39.113Z",
  "messages": [
    {
      "id": "25950050-7362-11e6-be62-001b7843e7d4",
      "subAccount": "iFoodMarketing",
      "campaignAlias": "iFoodPromo",
      "carrierId": 1,
      "carrierName": "VIVO",
      "source": "5516981562820",
      "shortCode": "28128",
      "messageText": "Eu quero pizza",
      "receivedAt": 1473088405588,
      "receivedDate": "2016-09-05T12:13:25Z",
      "mt": {
        "id": "8be584fd-2554-439b-9ba9-aab507278992",
        "correlationId": "1876",
        "username": "iFoodCS",
        "email": "customer.support@ifood.com"
      }
    },
    {
      "id": "d3afc42a-1fd9-49ff-8b8b-34299c070ef3",
      "subAccount": "iFoodMarketing",
      "campaignAlias": "iFoodPromo",
      "carrierId": 5,
      "carrierName": "TIM",
      "source": "5519987565020",
      "shortCode": "28128",
      "messageText": "Meu hamburguer está chegando?",
      "receivedAt": 1473088405588,
      "receivedDate": "2016-09-05T12:13:25Z",
      "mt": {
        "id": "302db832-3527-4e3c-b57b-6a481644d88b",
        "correlationId": "1893",
        "username": "iFoodCS",
        "email": "customer.support@ifood.com"
      }
    }
  ]
}

Tanto las solicitudes de listado (list) como la funcion de busqueda (search) retornan un objeto JSON con los campos abajo:

Campo Detalles Tipo
total Numero total de MOs retornados por la solicitud Integer
start Limite minimo de la query String
end Limite máximo de la query String
messages Listado de los objetos List

Cada mensaje del campo messages posee la siguiente estructura:

Campo Detalles Tipo
id Id del mensaje String
subAccount subcuenta responsable por enviar el mensaje que genero la respuesta String
carrierId Id de la operadora Integer
carrierName Nombre de la operadora String
source Numero de telefono que envio el mensaje de respuesta String
shortCode O shortcode del mensaje que origino la respuesta y por el cual la respuesta fue enviada. String
messageText Texto del mensaje de respuesta. String
receivedAt hora de recebido Long
receivedDate Fecha y hora de recibimiento en formato UTC String
campaignAlias Alias da campaña que origino la respuesta String
mt MT original que genero la respuesta MT

MTs tienen la siguinte estructura

Campo Detalles Tipo
id Id del MT String
correlationId CorrelationID enviado en el MT String
username Username del usuário responsable por enviar el MT String
email Email del responsable por enviar el MT String

Solicitud listar MO (list)

El listado ira a retornar todos los MOs recibidos desde la ultima llamada de acuerdo con la respuesta estándar descripta encima. Una vez que esta llamada es realizada sera consumida y no retornara las llamadas siguientes.

Como un usuario regular, para recuperar todos los MOs de una subcuenta use:

GET https://api-messaging.wavy.global/v1/sms/receive/list

Como usuario administrador, para recuperar TODOS los MOs de TODAS las subcuentas use:

GET https://api-messaging.wavy.global/v1/sms/receive/list

Como usuario administrador. Para recuperar los MOs de una subcuenta con la referencia “referencia_subcuenta”, use:

GET https://api-messaging.wavy.global/v1/sms/receive/list?subAccount=referencia_subconta

Códigos de Estatus de Envió

Existen dos niveles de estatus, que son enviados independientemente.

1 - Primer estatus (sent_status - Estatus de envió = Callback)

Estatus de entrega en la operadora, este es el primer estatus que retornamos, y todas las operadoras poseen.

Código Mensaje Significado
2 SENT_SUCCESS Entregado en la operadora con éxito (Este es un estatus que debe ser considerado para efecto de cobro.)
101 EXPIRED Expirado antes de ser entregado al aparato.
102 CARRIER_COMMUNICATION_ERROR Error de comunicación con la operadora.
103 REJECTED_BY_CARRIER Operadora rechazo el mensaje.
202 INVALID_DESTINATION_NUMBER El numero de destino es invalido (No es un numero de celular valido).
203 BLACKLISTED El numero de destino esta en la lista bloqueada, y fue ingresado manualmente por su empresa.
204 DESTINATION_BLOCKED_BY_OPTOUT El numero de destino solicito opt-out, y no quiere recibir mas mensajes de esta sub cuenta. (Este estatus es especifico para cuentas de Mobile Marketing).
205 DESTINATION_MESSAGE_LIMIT_REACHED El numero de destino ya recibió la cantidad máxima de mensajes que una misma empresa puede enviar, dentro de un periodo de tiempo. (Este estatus es especifico para cuentas de Mobile Marketing, es esta una regla de las operadoras.
207 INVALID_MESSAGE_TEXT El texto del mensaje contiene palabras que no son aceptadas por las operadoras. Estas palabras pueden ser de mucha bajeza, o en caso que su cuenta sea de Mobile Marketing, pueden ser de grandes marcas.
301 INTERNAL_ERROR Ocurrio un error en la plataforma de Wavy.

2 - Segundo estatus (delivered_status - Delivery Report Callback)

Estatus de entrega en el aparato, este es el segundo estatus que retornamos y solo existe para los casos en que el primer estatus de arriba fue de éxito, o sea, el mensaje fue entregado en la operadora con éxito. En este estatus informamos si el mensaje fue o no entregado en el aparato. Algunas operadoras no poseen este segundo nivel de estatus, para estas operadoras, lo máximo de información que existe es el primer estatus o sea, si la operadora acepto el mensaje o no.

Código Mensaje Significado
4 DELIVERED_SUCCESS Entregado en el aparato con éxito.
104 NOT_DELIVERED La operadora acepto el mensaje, pero no consiguió entregarlo en el aparato. Posibles causas:
Aparato apagado o fuera del área de servicio por tiempo determinado (normalmente 24 horas, pero para algunas operadoras, este tiempo de tentativa es de 8 horas).
Número válido, pero inactivo (algunas operadoras retornan este tipo de error solamente en este segundo nivel de estatus).

API SMPP

Todos los servicios provistos por el Wavy deben obligatoriamente ser encriptados, y el protocolo SMPP no posee encriptacion nativa. En este caso disponibilizamos dos alternativas para integración

Opción 1 - SMPP over TLS + IP whitelist (Opción recomendada)

Esta es la opción que recomendamos. En el caso que su sistema no tenga esta funcionalidad, clique AQUI para obtener ayuda en la configuracion de un proxy TLS.

Mas allá de la encriptacion que será realizada por TLS, el acceso será autorizado solamente para la IP publica de su servidor. (Aceptamos múltiples IPs e rangos) Esta información debe ser enviada para el Service Center.

En el caso que sea necesaria la liberación de salida de trafico en su firewall, recomendamos que sea liberado cualquier IP de destino en la puerta 2444. Si esto no es posible, se deberán incluir las siguientes reglas de liberación:


200.219.220.8:2444
200.219.220.193:2444
45.236.179.18:2444
45.236.179.19:2444

Opcion 2 - SMPP over VPN

La encriptacion y la liberación de acceso sera realizada vía VPN.

En el caso que elija esta opción, configure las VPNs utilizando los siguientes peers y hosts con las propuestas de fase 1 y 2 que desea. Llene y envié el formulario de VPN de su empresa para nuestro Service Center.

peer 200.155.0.250
hosts 200.219.220.8 e 200.219.220.193
port 2443

peer 45.236.178.12
hosts 45.236.179.18 e 45.236.179.19
port 2443

Obs: Por razones de alta disponibilidad y balanceamiento de carga, es obligatorio el establecimiento de las 2 VPNs definidas arriba.

Detalles de conexión

Información Detalles
Hostname / IP Address smpp-messaging.wavy.global
Al configurar su sistema SMPP, es obligatorio utilizar el dominio como destino, y no las IPs.
Este dominio posee 4 proxys de entrada con round robin DNS y health check, y múltiples servidores backend. Basado en el volumen de mensajes que su empresa traficara, vamos a aumentar el numero de binds (conexiones) permitidas simultáneamente.
Puerta 2444 (SMPP over TLS) o 2443 (VPN)
Version SMPP 3.4
Numero de binds Mínimo 4. Establecer por lo menos 4 binds es mandatario para obtener alta-disponibilidad y balanceamiento de carga.
Codificación de los caracteres GSM7 - Default (data_coding = 0) (GSM3.38 extended table is not supported by carriers.)
LATIN1 (data_coding = 1)
UCS2 (data_coding=8).
Atención: Verifique AQUI detalles de caracteres y cobranzas.
Flash SMS Soporta
data_coding=0x10 para GSM7 y data_coding 0x18 para UCS2
Cuando recibamos un flashSMS de nuestro cliente, el mismo sera enviado a la operadora como flashSMS, en el caso que la operadora no acepte flashSMS, este será entregado como un SMS regular.
Enquire-link Minimo: 30 segundos / Máximo: 59 segundos.
Concatenación UDH de 8 bits y 16 bits son compatibles / UDH Headers
Default addr_ton 1
Default addr_npi 1
window size 10
System IDs SystemIDs can NOT contain the underscore _ character
Passwords De acuerdo con la especificación del protocolo versión 3.4, no puede contener mas que 8 caracteres.
2way Soportado
SMPP bind type Transceiver(Recomendado). Binds transmit/receiver separados también son aceptados.
SMPP system_type MovileSMSC
SMPP source addr (senderID) Cuando su servicio necesite respuestas de usuarios (MO), el source addres debe ser igual al system_id, o sea, el nombre de usuario. Cuando el servicio no necesita de MOs usted puede utilizar cualquier cosa en este campo.
Max flujo de MO 80 por bind
Max flujo de MT 80 por bind
Server Timezone UTC
Formato de ID UUID
Default validity_period 24 hours

Estatus de envio (Callback e DLR)

1 - Primer estatus (sent_status - Estatus de envio = Callback)

Estatus de entrega en la operadora, este es el primeir estatus que retornamos, y todas las operadoras poseen.

stat err TLV (0x1403) TLV (0x1404) Significado
ACCEPTD 000 2 SENT_SUCCESS Entregado en la operadora con éxito. (Este es un estatus que debe ser considerado para efecto de cobro.)
EXPIRED 101 101 EXPIRED Expirado antes de ser entregado al aparato.
REJECTD 102 102 CARRIER_COMMUNICATION_ERROR Error de comunicación con la operadora.
REJECTD 103 103 REJECTED_BY_CARRIER Operadora rechazo el mensaje.
REJECTD 202 202 INVALID_DESTINATION_NUMBER El numero de destino es invalido (No es un numero de celular valido).
REJECTD 203 203 BLACKLISTED El numero de destino esta en la lista bloqueada, y fue ingresado manualmente por su empresa.
REJECTD 204 204 DESTINATION_BLOCKED_BY_OPTOUT El numero de destino solicito opt-out, y no quiere recibir mas mensajes de esta sub cuenta. (Este estatus es especifico para cuentas de Mobile Marketing).
REJECTD 205 205 DESTINATION_MESSAGE_LIMIT_REACHED El numero de destino ya recibió la cantidad máxima de mensajes que una misma empresa puede enviar, dentro de un periodo de tiempo. (Este estatus es especifico para cuentas de Mobile Marketing, es esta una regla de las operadoras.
REJECTD 207 207 INVALID_MESSAGE_TEXT El texto del mensaje contiene palabras que no son aceptadas por las operadoras. Estas palabras pueden ser de mucha bajeza, o en caso que su cuenta sea de Mobile Marketing, pueden ser de grandes marcas.
REJECTD 301 301 INTERNAL_ERROR Ocurrio un error en la plataforma de Wavy.
UNKNOWN 301 301 INTERNAL_ERROR Ocurrio un error en la plataforma de Wavy.

2 - Segundo estatus (delivered_status - Delivery Report Callback)

Estatus de entrega en el aparato, este es el segundo estatus que retornamos y solo existe para los casos en que el primer estatus de arriba fue de éxito, o sea, el mensaje fue entregado en la operadora con éxito. En este estatus informamos si el mensaje fue o no entregado en el aparato. Algunas operadoras no poseen este segundo nivel de estatus, para estas operadoras, lo máximo de información que existe es el primer estatus o sea, si la operadora acepto el mensaje o no.

stat err TLV (0x1403) TLV (0x1404) TLV (0x1405) TLV (0x1406) Significado
DELIVRD 000 2 SENT_SUCCESS 4 DELIVERED_SUCCESS Entregado en el aparato con éxito.
UNDELIV 104 2 SENT_SUCCESS 104 NOT_DELIVERED La operadora acepto el mensaje, pero no consiguió entregarlo en el aparato. Posibles causas:
Aparato apagado o fuera del área de servicio por tiempo determinado (normalmente 24 horas, pero para algunas operadoras, este tiempo de tentativa es de 8 horas).
Número válido, pero inactivo (algunas operadoras retornan este tipo de error solamente en este segundo nivel de estatus).

Proxy TLS - Linux

El proxy es necesario en el caso que la conexión no sea vía VPN. Como fue explicado anteriormente, el protocolo SMPP no posee encriptacion TLS nativa, en este caso indicamos el siguiente proxy:

HAProxy

Configuración haproxy

global
    #    local2.*                       /var/log/haproxy.log
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    ssl-server-verify       none
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

resolvers dns
    nameserver google 8.8.8.8:53
    hold valid 1s

defaults
    log                     global
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend movile
  bind *:2444
  mode tcp
  option tcplog
  use_backend movile

backend movile
    mode tcp
    server smpp-messaging.wavy.global smpp-messaging.wavy.global:2444 ssl resolvers dns check inter 15000

$sudo yum install -y openssl-devel haproxy

$sudo apt-get install -y openssl-devel haproxy

IMPORTANTE: Configure su sistema (cliente SMPP) para utilizar como direccion de destino 127.0.0.1:2444

Proxy TLS - Windows

configuracion nginx

worker_processes  2;

events {
    worker_connections  1024;
}

stream {
  resolver 8.8.8.8 valid=1s;
  map $remote_addr $backend {
    default smpp-messaging.wavy.global;
  }
  server {
    listen 2444;
    proxy_pass $backend:2444;
    proxy_ssl  on;
  }
}

Es posible utilizar nginx como proxy TLS en servidores windows para realizar la encriptacion de los dados

Descargue la versión abajo (importante utilizar esta versión porque las versiones antiguas resuelven el nombre apenas en el primer request)

http://nginx.org/download/nginx-1.12.1.zip

Extraiga el archivo .zip en la carpeta deseada y sustituya el contenido del archivo conf/nginx.conf con los datos al lado.

API SFTP

Detalles de conexión

Hostname ftp-messaging.wavy.global
Puerta 2222
Protocolo SFTP (transferencia sobre ssh, usando criptografía entre cliente-servidor)
Autenticación username + senha (provisto por soporte)
Portal messaging.wavy.global

Envio de mensajes via SFTP

Para realizar el disparo de mensajes vía SFTP es necesario generar un archivo en formato TXT, el formato debe seguir el siguiente ejemplo:

numero;texto;correlationId(opcional);
5511900000000;mensaje 1;;
5519900000000;mensaje 2;;
5521900000000;mensaje 3;;
EOF

El nombre del archivo a ser enviado debe seguir el siguiente formato:

<ID_SUBCONTA>.<DATA(YYYYMMDD)>.<SEQUENCIA> ou <NOME_DE_REFERÊNCIA_SUBCONTA>.<DATA(YYYYMMDD)>.<SEQUENCIA>

Las sub cuentas (projectos) pueden ser creadas por el propio cliente en el portal. En el caso que no sea seguida la nomenclatura arriba, el envío será realizado por la sub cuenta default del cliente.

Ejemplo:

3486.20170101.01.txt ou PROJETO1.20170101.01.txt

Después deberá ser realizado el envió del archivo para el servidor sftp en el directorio upload. El archivo será movido para el directorio success después de procesado, en el caso que aparezca un error el archivo será movido para el directorio error.

API Validación de números

Esta API permite realizar consultas en lote de números retornando la operadora a la que esos números pertenecen y consecuentemente los números inválidos (si un número no pertenece a ninguna operadora por lo tanto es inválido). Ella utiliza el protocolo HTTP con TLS y el metodo POST con parámetros en JSON. La consulta permite saber si determinado número pertenece a la operadora pero no es posible verificar si este número se encuentra activo.

Autenticacion

Para efectuar envíos y consultas en nuestra API es necesaria la autenticacion por medio de usuario o e-mail, en conjunto con un token.

Campo Detalles Data Type
UserName Su usuario o email String
AuthenticationToken Su token de autenticacion. Verifique aqui y lea las descripciones de usuarios abajo. String

Detalles de conexión

Hostname api-messaging.wavy.global
APIs Consulta en lote /v1/carrier/lookup
Puerta 443 (https)
Protocolo HTTPS (encriptacion TLS)
Autenticacion username + token
Portal messaging.wavy.global

Requisicion HTTP Method POST

curl --request POST \
  --url https://api-messaging.wavy.global/v1/carrier/lookup \
  --header 'authenticationtoken: <authenticationtoken>' \
  --header 'username: <username>' \
  --header 'Content-Type: application/json' \
  --data '{
    "destinations": ["+55(19)997712322", "5519997712322", "2312312"]
}'

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api-messaging.wavy.global/v1/carrier/lookup",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\n\t\"destinations\": [\"+55(19)997712322\", \"5519997712322\", \"2312312\"]\n}",
  CURLOPT_HTTPHEADER => array(
    "Content-Type: application/json",
    "authenticationtoken: <authenticationtoken>",
    "username: <username>"
  ),
));

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

curl_close($curl);

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

require 'uri'
require 'net/http'

url = URI("https://api-messaging.wavy.global/v1/carrier/lookup")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Post.new(url)
request["authenticationtoken"] = '<authenticationtoken>'
request["username"] = '<username>'
request["Content-Type"] = 'application/json',
request.body = "{\n\t\"destinations\": [\"+55(19)997712322\", \"5519997712322\", \"2312312\"]\n}"

response = http.request(request)
puts response.read_body


import requests

url = "https://api-messaging.wavy.global/v1/carrier/lookup"

payload = "{\n\t\"destinations\": [\"+55(19)997712322\", \"5519997712322\", \"2312312\"]\n}"
headers = {
    'Content-Type: application/json',
    'authenticationtoken': "<authenticationtoken>",
    'username': "<username>"
    }

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)


POST https://api-messaging.wavy.global/v1/carrier/lookup Content-Type: application/json

Para realizar la consulta basta adicionar en el body de la requisicion un json con el array de números. Es posible hacer la consulta utilizando los formatos +55(19)999999999 y 5519999999999

Respuesta a la consulta

Respuesta a la llamada en formato JSON

{
    "id": "aadb5130-7dd7-11e7-baac-a6aabe61edb5",
    "destinations": [
        {
            "destination": "5519997712322",
            "active": true,
            "carrier": {
                "name": "VIVO",
                "countryCode": "BR"
            }
        },
        {
            "destination": "5519997712322",
            "active": true,
            "carrier": {
                "name": "VIVO",
                "countryCode": "BR"
            }
        },
        {
            "destination": "2312312",
            "active": false,
            "carrier": {
                "name": "UNKNOWN"
            }
        }
    ]
}

El ultimo numero de ejemplo se trata de un numero invalido para demostrar como la consulta retorna el JSON en este caso.

La respuesta de la consulta en lote contendrá un archivo JSON con las informaciones individuales sobre cada número consultado:

Campo Detalles Tipo
id UUID generado para este lote String
destinations Este campo es un array con las respuestas de las consultas individuales del lote, contiene el id y el correlationId de cada número consultado IndividualResponse[]
destination Número de telefono consultado Long
active status del numero en la operadora (actualmente verifica apenas si el número pertenece a la operadora, no activo / en uso) Boolean
carrier Operadora y país a la cual pertenece el número consultado array[]
name Nombre de la operadora String
countryCode Codigo de País String

Acentos y caracteres especiales

Mensajes que poseen solamente caracteres que están en la siguiente tabla, son cobrados cada 160 caracteres. En el caso que el mensaje tenga uno o mas caracteres que no están en la tabla el cobro sera realizado cada 70 caracteres, conforme la especificación del protocolo en la red de las operadoras.

Space ( 0 8 @ H P X ` h p x
! ) 1 9 A I Q Y a i q y
* 2 : B J R Z b j r z
# + 3 ; C K S { c k s ~
$ , 4 < D L T \ d l t
% - 5 = E M U } e m u
& . 6 > F N V ^ f n v
/ 7 ? G O W _ g o w

Observaciones:

1 - La habilitación del uso de acentos y caracteres especiales debe ser solicitada al suporte.

2 - En el caso que la operadora destino no acepte acentos y caracteres, nuestra plataforma realiza automáticamente para nuestros clientes, la substitución de los mismos, por ejemplo: á para a, é para e, etc.

Textos grandes (concatenación)

A pesar que el protocolo utilizado en la red de las operadoras tenga limite de 70 o 160 caracteres, para mensajes con o sin caracteres especiales respectivamente, es posible enviar mensajes grandes con la utilización de concatenación, donde los mensajes son reagrupados por los aparatos al recibirlos.

Clientes integrados vía HTTPS, SFTP, o MQ, no existe ningún indicador adicional para activar la concatenación, basta solo enviar el texto del mensaje grande entero de una sola vez.

Clientes integrados vía SMPP, deben utilizar la funcionalidad de concatenación con indicadores en el header (UDH), LINK

Es importante notar que, a pesar de aparecer en el aparato como un único mensaje grande, los mensajes continúan traficando en la red de operadora individualmente, en este caso, continúan siendo cobrados individualmente cada 70 o 160 (dependiendo de los caracteres utilizados). Recordando que al utilizar concatenación parte de los caracteres (70 o 160) son utilizados por el encabezado.

Observación: En los casos de operadoras que no soportan la funcionalidad de concatenación, Wavy enviá los mensajes separadamente, sin concatenar incluyendo automáticamente para nuestros clientes, indicadores de orden,

Ex:

Inicio do texto…. (½)

……fin do texto (2/2)


Wavy Messaging WhatsApp API

Esta documentación contiene información sobre cómo su aplicación podrá enviar los mensajes de Whatsapp vía API, utilizando la plataforma de Wavy Messaging.

También encontrará aquí información sobre los Webhooks, esto es, los retornos de llamada HTTP definidos por el usuario, los cuales son accionados por eventos específicos. Siempre que ocurre un evento de acción, ya sea, un mensaje enviado o recibido, la API de Wavy recibe los datos e inmediatamente envía una notificación (solicitud HTTP) a la URL indicada por el cliente, actualizando el estatus de los mensajes enviados o indicando cuando recibe un mensaje.

La API de Wavy Messaging permite el envío de mensajes únicos o en lotes. La API posee integración REST, utilizando el protocolo HTTP con TLS, soportando el método POST con los parámetros enviados en formato JSON.

Términos Importantes para WhatsApp

MT Mobile Terminated Es un termino utilizado para mensajes que poseen el usuario (Aparato) como destino. O sea, mensajes que fueron originados por su empresa con destino al usuario (Aparato).
Response Respuesta sincronica de Wavy Es una respuesta inmediata de una solicitud hecha en nuestra API, donde informamos si el mensaje fue aceptado o no por nuestra plataforma
Callback Sent status o Estatus de envió Es el primer status de envió que retornamos, en el informamos si fue posible, o no, hacer la entrega del mensaje. para lo WhatsApp.
MO Mobile Originated Es el termino utilizado para mensajes que poseen su empresa como destino. O sea, mensajes que fueron originados por el usuario (Aparato).

Flujo de mensajes WhatsApp

Flujo simplificado - MT, Callback e MO.

alt text

Pré Requisitos

  1. Para utilizar la API de Wavy Messaging, primero debe tener una cuenta activa en la plataforma de Wavy. Consulte la documentación de Cuenta y configuraciones para obtener más información sobre cómo realizar este procedimiento.
  2. Deberá tener un usuario y token válidos asociados a su cuenta. Puede agregar otros usuarios si así lo desea, aprenda a crear un usuario en nuestra guía Agregar usuarios.
  3. Con las credenciales mencionadas anteriormente, ahora puede comenzar a usar la API Wavy Messaging.

Detalles de la conexión

Hostname api-messaging.wavy.global
Porta 443 (https)
Protocolo HTTPS (TLS encryption)
Autenticação UserName e AuthenticationToken
Encoding UTF-8

Haciendo llamadas para la API de Wavy Messaging

Para realizar sus primeros envíos, recomendamos utilizar la aplicación Postman con requisitos de formato JSON en lugar de comenzar escribiendo código en otros lenguajes.

Nota: Para enviar mensajes de prueba, necesita tener un Template de mensaje aprobado en su cuenta de WhatsApp Business. Consulte nuestra documentación sobre Creación de Template de Whatsapp, para crear sus primeros modelos.

En el caso que no tenga algún template de mensaje aprobado, aún puede enviar mensajes de prueba, si el destinatario inicia la conversación enviando un mensaje (MO) al número de origen de la línea de Whatsapp. De esta forma, se abre una sesión hacia al cliente. Esto permite que pueda enviar cualquier tipo de mensaje en un lapso de 24 horas. Si el mensaje llega, significa que su solicitud a la API de Wavy Messaging fue exitosa. Caso contrario, verifique su Webhook en busca de notificaciones que puedan indicar algún problema.

Envío de mensajes

Las llamadas para la API de Wavy Messaging son enviadas a https://api-messaging.wavy.global/v1/whatsapp/send en formato POST independientemente del tipo de mensaje, pero el contenido del cuerpo del mensaje JSON puede variar para cada tipo de mensaje.

Los campos de autenticación en el header también seguirán el mismo formato independientemente del tipo de mensaje:

POST /v1/whatsapp/send HTTP/1.1
Host: api-messaging.wavy.global
UserName: user_name
AuthenticationToken: aaaaaa-bbbbbbbbbbbbbXXXXX12
Content-Type: application/json

El cuerpo de la solicitud debe contener un objeto JSON con los siguientes campos:

Campo Necesario Detalles Tipo
destinations Si Lista de destinatarios Destination
message Si Mensaje de texto que se enviará a la lista de destinatarios Message
flowId No Identificación del flujo de Bot String
defaultExtraInfo No Los datos adicionales que identifican el envío, se vincularán a todos los destinatarios que recibirán el mensaje String
campaignAlias No ID de campaña, está vinculado a todos los mensajes del envío String

Destino:

Campo Necesario Detalles Tipo
correlationId No Su id definido sera devuelto en un mensaje de confirmación (Callback). Esto será útil en casos en que se desea mantener el control del mensaje enviado, ya que es posible definir ids diferentes para mensajes distintos. String
destination Si Número de teléfono (código de país y estado deben estar presentes) o el WhatsApp group ID al que se enviará el mensaje. Ejemplos: 5411900001111, +5720900001111, +56 (56) 900001111. String
recipientType No Debe ser "individual" o "group", dependiendo de si el campo destination es un número de teléfono o un group ID. String

Mensaje:

Campo Necesario Detalles Tipo
messageText Si Campo utilizado en caso de que desee enviar un mensaje personalizado como respuesta a un mensaje recibido. text
image Si Campo utilizado en caso de que desee enviar un contenido de imagen. Image
audio Si Campo utilizado en caso de que desee enviar un contenido de audio. Audio
document Si Campo utilizado en caso de que desee enviar un archivo o documento. Document
contacts Si Campo utilizado en caso de que desee enviar contactos. Contact[]
previewFirstUrl No Controla la vista previa de la aplicación de la primera URL enviada Boolean
location Si Campo utilizado en caso de que desee enviar una ubicacion. Location

Ejemplo de envío de texto

        {
            "destinations": [{
                "correlationId": "MyCorrelationId",
                "destination": "5519900001111"
            }],
            "message": {
                "messageText": "Mensaje de prueba"
            }
        }

Ejemplo de envío de imagen (URL)

        {
            "destinations": [{
                "correlationId": "MyCorrelationId",
                "destination": "5519900001111"
            }],
            "message": {
                "image": {
                    "type": "JPG",
                    "url": "http://...jpg",
                    "caption": "image description"
                }
            }
        }

Ejemplo de envío de imagen (Base64)

{
           "destinations": [{
               "correlationId": "MyCorrelationId",
               "destination": "5519900001111"
           }],
           "message": {
               "image": {
                   "type": "JPG",
                   "data": "ZmlsZQ=="
               }
           }
       }

Ejemplo de envío de audio (URL)

        {
            "destinations": [{
                "correlationId": "MyCorrelationId",
                "destination": "5519900001111"
            }],
            "message": {
                "audio": {
                    "type": "MP3",
                    "url": "http://...mp3"
                }
            }
        }

Ejemplo de envío de audio (Base64)

        {
            "destinations": [{
                "correlationId": "MyCorrelationId",
                "destination": "5519900001111"
            }],
            "message": {
                "audio": {
                    "type": "MP3",
                    "data": "ZmlsZQ=="
                }
            }
        }

Ejemplo de envío de documento (URL)

        {
            "destinations": [{
                "correlationId": "MyCorrelationId",
                "destination": "5519900001111"
            }],
            "message": {
                "document": {
                    "type": "PDF",
                    "url": "http://...pdf",
                    "caption": "pdf description"
                }
            }
        }

Ejemplo de envío de documento (Base64)

        {
            "destinations": [{
                "correlationId": "MyCorrelationId",
                "destination": "5519900001111"
            }],
            "message": {
                "document": {
                    "type": "PDF",
                    "data": "ZmlsZQ=="
                }
            }
        }

Ejemplo de envío de ubicacion

        {
            "destinations": [{
                "correlationId": "MyCorrelationId",
                "destination": "5519900001111"
            }],
            "message": {
                "location": {
                    "geoPoint": "-22.894180,-47.047960",
                    "name": "Wavy",
                    "address": "Av. Cel. Silva Telles"
                }
            }
        }

Ejemplo de envio de contactos

        {  
           "destinations":[  
              {  
                 "correlationId":"MyCorrelationId",
                 "destination":"5519900001111"
              }
           ],
           "message":{  
              "contacts":[  
                 {  
                    "addresses":[  
                       {  
                          "city":"Menlo Park",
                          "country":"United States",
                          "country_code":"us",
                          "state":"CA",
                          "street":"1 Hacker Way",
                          "type":"HOME",
                          "zip":"94025"
                       },
                       {  
                          "city":"Menlo Park",
                          "country":"United States",
                          "country_code":"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":{  
                       "first_name":"John",
                       "formatted_name":"John Smith",
                       "last_name":"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.fb.com",
                          "type":"WORK"
                       }
                    ]
                 }
              ]
           }
        }

Solo se debe enviar un mensaje personalizado como respuesta a un mensaje recibido por el usuario siempre cuando la sesión se encuentre abierta. Si la sesión no está abierta o el usuario no envió un mensaje deberá utilizase el Template.

Texto:

Campo Obrigatório Detalhes Tipo
messageText Si Texto que se enviará al usuario.

Imagen:

Campo Necesario Detalles Tipo
type Si Tipo / extensión de la imagen que se enviará en el mensaje. Opciones disponibles: JPG, JPEG, PNG. String
caption No Texto que se mostrara al usuario debajo de la imagen en Whatsapp String
url Si URL donde se aloja el contenido que se enviará. String
data Si Base64 contenido codificado String

Audio:

Campo Necesario Detalles Tipo
type Si Tipo/Extensión de audio que se enviará en el mensaje. Opciones disponibles: AAC, MP4, AMR, MP3, OGG. String
url Si URL donde se aloja el contenido que se enviará. String
data Si Base64 contenido codificado String

Documento:

Campo Necesario Detalles Tipo
type Si Tipo/Extensión de documento que se enviará en el mensaje. Opciones disponibles: PDF. String
caption No Texto que se mostrara al usuario debajo del documento en Whatsapp String
url Si URL donde se aloja el contenido que se enviará. String
data Si Base64 contenido codificado String

Contact:

Campo Necesario Detalles Tipo
addresses No Direcciones de contacto completas. Address[]
birthday No Fecha de cumpleaños como cadena con formato YYYY-MM-DD. String
emails No Direcciones de correo electrónico de contacto. Email[]
name No Nombre completo de contacto. Name
org No Información de la organización de contacto. Org
phones No Teléfonos de contacto. Phone[]
urls No URLs de los contactos. Url[]

Address:

Campo Necesario Detalles Tipo
street No Número y nombre de la calle. String
city No Nombre de la ciudad. String
state No Abreviatura del estado. String
zip No Código postal. String
country No Nombre completo del país. String
country_code No Abreviatura de país de dos letras. String
type No Valores estándar: HOME, WORK. String

Email:

Campo Necesario Detalles Tipo
email No Correo electrónico. String
type No Valores estándar: HOME, WORK. String

Name:

Campo Necesario Detalles Tipo
first_name No Primer nombre. String
last_name No Apellido. String
middle_name No Segundo nombre. String
name_suffix No Sufijo del nombre. String
name_prefix No Prefijo del nombre. String
formatted_name No Nombre completo como aparece normalmente. String

Org:

Campo Necesario Detalles Tipo
company No Nombre de la empresa del contacto. String
department No Nombre del departamento de contacto. String
title No Título comercial de contacto. String

Phone:

Campo Necesario Detalles Tipo
phone No Número de teléfono formateado. String
type No Valores estándar: CELL, MAIN, IPHONE, HOME, WORK. String
wa_id No Identificador de WhatsApp. String

Url:

Campo Necesario Detalles Tipo
phone No URL del contacto. String
type No Valores estándar: HOME, WORK. String

Envío de Template

Ejemplo de solicitud template

{
  {
    "destinations": [{
            "correlationId": "MyCorrelationId",
            "destination": "5519900001111"      
  }],
    "message": {
        "template": {
            "namespace" : "aaaaaaaa_bbbb_cccc_dddd_eeeeeeeeeeee",
            "elementName" : "some_approved_image_hsm"
    },
    {  
            "languagePolicy": "DETERMINISTIC",
            "languageCode": "pt_BR"
      }
    }
    }
}

Ejemplo de solicitud template con Header y Parámetros

{
  {
    "destinations": [{
            "correlationId": "MyCorrelationId",
            "destination": "5519900001111"      
  }],
    "message": {
        "template": {
            "namespace" : "aaaaaaaa_bbbb_cccc_dddd_eeeeeeeeeeee",
            "elementName" : "some_approved_image_hsm",
            "header": {
                "parameters": [
                    "header_parameter_1"
                ]
            },
            "bodyParameters": [
                "https://upload.wikimedia.org/wikipedia/commons/c/c3/Arquivo.jpg"
            ],
            "languagePolicy": "DETERMINISTIC",
            "languageCode": "pt_BR"
        }
    }
}

Si aún no tiene una plantilla creada y aprobada para su uso, consulte la documentación en Template de WhatsApp para obtener más información sobre cómo hacerlo. El cuerpo de la solicitud debe contener un objeto JSON con los siguientes campos:

Field Required Details Type
destinations Si Detalles sobre los identificadores de envío y destino Destination[]
message Si Detalles sobre el objeto MENSAJE que se enviará message
defaultExtraInfo No Los datos adicionales que identifican el envío, se vincularán a todos los destinatarios que recibirán el mensaje String
campaignAlias No ID de campaña, está vinculado a todos los mensajes del envío String

destinations:

Field Required Details Type
correlationId No Id definido por el cliente que se devolverá en el estado del mensaje (devolución de llamada). Puede usar esta identificación para rastrear mensajes enviados de manera personalizada. String
destination Si Número de teléfono que recibirá el mensaje (el código de país y DDD son obligatorios). Ejemplos: 5519900001111, +5519900001111, +55 (19) 900001111. String

message:

Campo Obrigatório Detalhes Type
template Si Detalles sobre el objeto TEMPLATE que se enviará. Template

template:

Field Required Details Type
namespace Si ID del namespace que será usado. NOTA: Los parámetros namespace y element_name deben corresponder al Business Manager al cual el número de origen está asociado, o el mensaje tendrá una falla en el envío. String
elementName Si Nombre del Template registrado y aprobado. String
header Si, cuando el Template tiene un parámetro en el encabezado (header) Objetos del encabezado (header) con sus parámetros Header
bodyParameters Si (cuando el Template tiene parámetros) La suma de todos los caracteres en el cuerpo, considerando campos fijos y dinámicos, está limitada a 1024 caracteres si el modelo registrado solo tiene el cuerpo. Está limitado a 160 caracteres si tiene un encabezado o pie de página. Lista de strings
languageCode Sí, cuando hay más de un idioma registrado para la misma plantilla. Codes: pt_BR, en, es, en_US, en_GB, pt_PT, es_AR, es_ES, es_MX, it, fr String
Field Required Details Type
parameters Opcional Lista de parámetros que serán reemplazados en el texto del encabezado. Nota: En el caso de que esté presente el encabezado no debe tener título ni elemento alguno. String
title Opcional El título debe tener hasta 60 caracteres String
(element) Si Opciones: text (patrón), image, audio, document, video. Object

element:

Field Required Details Type
url Si URL del archivo multimedia. Usar únicamente con URLs HTTP/HTTPS. String
type Si Tipo de archivo multimedia (JPEG, MP3, PDF, etc) String

Webhooks

Ejemplo

{
  "total": 1,
  "data": [
    {
      "id": "8995c40f-1c3a-48d0-98ee-bbc603622a91",
      "correlationId": "...",
      "destination": "5411900000000",
      "origin": "5411900000000",
      "campaignId": 100,
      "campaignAlias": "...",
      "flowId": "...",
      "extraInfo": "...",
      "sent": true,
      "sentStatusCode": 1,
      "sentStatus": "sent status",
      "sentDate": "2017-12-18T17:09:31.891Z",
      "sentAt": 1513616971891,
      "delivered": true,
      "deliveredStatusCode": 1,
      "deliveredStatus": "delivered status",
      "deliveredDate": "2017-12-18T17:09:31.891Z",
      "deliveredAt": 1513616971891,
      "read": true,
      "readDate": "2017-12-18T17:09:31.891Z",
      "readAt": 1513616971891,
      "updatedDate": "2017-12-18T17:09:31.891Z",
      "updatedAt": 1513616971891,
      "type": "MESSAGE"
    }
  ],
  "clientInfo": {
      "customerId": 42,
      "subAccountId": 1291,
      "userId": 1
  }
}

Los Webhooks (o callbacks) son retornos de llamada de HTTP definidos por el usuario, que son accionados por eventos específicos. Siempre que ocurra un evento de acción, la API de Wavy recolectará los datos e inmediatamente enviará una notificación (solicitud HTTP) a la URL proporcionada por el cliente actualizando el estatus de los mensajes enviados o indicando cuándo recibirá un mensaje.

Cuando reciba un mensaje, la API de Wavy Messaging enviará una notificación de solicitud HTTP POST a la URL del Webhook con los detalles.

Es importante que su Webhook retorne una respuesta HTTPS 200 OK para las notificaciones (en un lapso de hasta 200 ms o de manera asíncrona). Caso contrario, la API de Wavy Messaging considerará esa notificación como una falla e intentará nuevamente.

Importante: Indicar el webhook donde recibirá los mensajes, para que nuestro equipo de soporte pueda asociarlo a su cuenta de Whatsapp

Campo Detalles Tipo
total Número de callbacks en la llamada. String
data Lista de callbacks. Data[]
clientInfo Información del cliente ClientInfo

data:

Campo Detalles Tipo
id ID del último mensaje String
correlationId Un ID único configurado por usted para coincidir con el estado del mensaje (callback y DLR). Este parámetro es opcional y puede usar el ID generado por Wavy Messaging para esta coincidencia. String
destination Teléfono al que se envió el mensaje (incluido el código de país). Ejemplo: 5411900000000. String
origin Teléfono que identifica la cuenta de WhatsApp (incluido el código de país). Ejemplo: 5411900000000. String
campaignId ID de campaña previamente definido. String
campaignAlias Alias de campaña previamente definido. String
extraInfo Información adicional enviada con el mensaje original. String
sent Indica si el mensaje fue enviado. Boolean
sentStatusCode Código de estado generado por Wavy Messaging para un mensaje que indica el estado de envío. Number
sentStatus Descripción del estado enviado. Boolean
sentDate Fecha en que se envió el mensaje. Formato: yyyy-MM-dd’T'HH:mm:ssZ. String
sentAt Hora en que se envió el mensaje, utilizando el formato Unix_time Number
delivered Indica si el mensaje fue entregado al destino. Boolean
deliveredStatusCode Código de estado generado por Wavy Messaging para indicar que el mensaje fue entregado. Number
deliveredStatus Descripción del estado de entrega String
deliveredDate Fecha en que se entregó el mensaje. Formato: yyyy-MM-dd’T'HH:mm:ssZ String
deliveredAt Hora en que se entregó el mensaje, utilizando el formato Unix_time Number
read Indica si el mensaje fue leído por el destinatario. Boolean
readDate Fecha en que se leyó el mensaje. Formato: yyyy-MM-dd’T'HH:mm:ssZ String
readAt Hora en que se leyó el mensaje, utilizando el formato Unix_time String
updatedDate Fecha en que se actualizó el estado del mensaje. Formato: yyyy-MM-dd’T'HH:mm:ssZ String
updatedAt Fecha en que se actualizó el estado del mensaje, utilizando el formato Unix_time String
type El tipo de entidad del que trata este objeto de estado. Actualmente, la única opción disponible es “mensaje”. String

clientInfo

Campo Detalles Tipo
customerId Identificación del cliente. Number
subAccountId Identificación de la subcuenta. Number
userId Identificación del usuario. Number

Status

Descripción del Status que nosotros podemos enviar en la devolución de llamada:

Status Descripción Equivalente en WhatsApp para dispositivos móveis
SENT_SUCCESS Mensaje recibido por servidor de WhatsApp Una marca de verificación
DELIVERED_SUCCESS Mensaje de entrega para el destinatario Dos marcas de verificación
READ_SUCCESS Mensaje leído por el destinatario Dos marcas de verificación azules

Otros Status

Estos son los códigos devueltos en los campos sentStatusCode y deliveryStatusCode.

Código de envio Código de entrega Status Significado
102 CARRIER COMMUNICATION ERROR Error al cargar multimedia para WhatsApp.
103 REJECTED_BY_CARRIER Se produjo un error en la base de datos.
2 101 EXPIRED Mensaje expirado.
2 104 NOT_DELIVERED Posibles Causas:Límite alcanzado: se han intentado demasiados mensajes enviados,o no envía un mensaje porque el número de teléfono de destino no existe,o la estructura de la plantilla no existe,o no pudo enviar un mensaje porque el número de destino está fuera del tiempo de sesión abierta de 24 horas para recibir mensajes libremente. o hubo un error de carga de medios (error desconocido), o no envía un mensaje porque su cuenta no es elegible en Facebook Business Manager,o hubo un error de carga temporal. Intentar nuevamente más tarde.
202 EXPIREDINVALID_DESTINATION_NUMBER Contacto de WhatsApp inválido.
204 DESTINATION_BLOCKED_BY_OPTOUT Destino bloqueado por Opt-Out.
207 INVALID_MESSAGE_TEXT El valor del parámetro no es válido.
209 INVALID_CONTENT Tipo de mensaje UNKNOWN inválido.
210 INVALID_SESSION La sesión no está abierta o ninguna plantilla de fallback está configurada.
301 INTERNAL_ERROR No es posible verificar contactos desde la API de WhatsApp.

Errores

HTTP Code Description
2xx Success
200 Success (OK)
201 Successfully created (For POST requests)
302 Found
4xx Client Errors
400 Request was invalid
401 Unauthorized
403 Forbidden
404 Not found
405 Method not allowed
412 Precondition failed
429 Too many requests
5xx Server Errors
500 Internal server error
504 Timeout

Mensajes (MO)

Ejemplo de mensaje de texto:

{
  "total": 1,
  "data": [
    {
      "id": "ce425ffe-bc62-421f-9261-e6819a5eab43",
      "source": "5519900000000",
      "origin": "5519900000000",
      "userProfile": {
        "name": "nome do usuário"
      },
      "campaignId": 100,
      "correlationId": "...",
      "campaignAlias": "...",
      "flowId": "....",
      "extraInfo": "...",
      "message": {
            "type": "TEXT",
"messageText": "Olá, essa é uma mensagem do usuário."
      },
      "receivedAt": 1513616971473,
      "receivedDate": "2017-12-18T17:09:31.473Z"
    }
  ]
}

Ejemplo de mensaje con respuesta de botón:

{
    "total":1,
    "data":[
      {
        "id":"ce425ffe-bc62-421f-9261-e6819a5eab43",
        "source":"5511900000000",
        "origin":"5511900000000",
        "userProfile":{
          "name":"username",
          "whatsAppId":"5511900000000"
          },
        "correlationId":"...",
        "messageId":"aae959ca-5944-405a-809a-75ff142bc234",
        "message":{
            "type":"BUTTON",
            "messageText":"Sim",
            "payload":"sim"
            },
        "receivedAt":1513616971473,
        "receivedDate":"2020-07-22T14:24:41Z",
        "session":{
            "id":"06deff90-cc27-11ea-b94f-0050569e62ca",
            "createdAt":1513616971473
              }
          }
      ],
        "clientInfo":{
            "customerId":10,
            "subAccountId":0,
            "userId":101010
            }
  }

Ejemplo de mensaje multimedia

{
  "total": 1,
  "data": [
    {
      "id": "ce425ffe-bc62-421f-9261-e6819a5eab43",
      "source": "5519900000000",
      "origin": "5519900000000",
      "userProfile": {
        "name": "nome do usuário"
      },
      "campaignId": 100,
      "correlationId": "...",
      "campaignAlias": "...",
      "flowId": "....",
      "extraInfo": "...",
      "message": {
            "type": "IMAGE",
           "mediaUrl": "https://...",
           "mimeType": "image/jpg",
           "caption": "..."
      },
      "receivedAt": 1513616971473,
      "receivedDate": "2017-12-18T17:09:31.473Z"
    }
  ]
}

Ejemplo de mensaje de ubicación:

{
  "total": 1,
  "data": [
    {
      "id": "ce425ffe-bc62-421f-9261-e6819a5eab43",
      "source": "5519900000000",
      "origin": "5519900000000",
      "userProfile": {
        "name": "nome do usuário"
      },
      "campaignId": 100,
      "correlationId": "...",
      "campaignAlias": "...",
      "flowId": "....",
      "extraInfo": "...",
      "message": {
           "location": {
               "geoPoint": "-22.894180,-47.047960",
               "name": "Wavy",
               "address": "Av. Cel. Silva Telles"
           }
      },
      "receivedAt": 1513616971473,
      "receivedDate": "2017-12-18T17:09:31.473Z"
    }
  ]
}

Ejemplo de mensaje de contacto:

{
  "total": 1,
  "data": [
    {
      "id": "ce425ffe-bc62-421f-9261-e6819a5eab43",
      "source": "5519900000000",
      "origin": "5519900000000",      
      "userProfile": {
        "name": "nome do usuário"
      },
      "campaignId": 100,
      "correlationId": "...",
      "campaignAlias": "...",
      "flowId": "....",
      "extraInfo": "...",
      "message": {
           "contacts":[  
                 {  
                    "addresses":[  
                       {  
                          "city":"Menlo Park",
                          "country":"United States",
                          "country_code":"us",
                          "state":"CA",
                          "street":"1 Hacker Way",
                          "type":"HOME",
                          "zip":"94025"
                       },
                       {  
                          "city":"Menlo Park",
                          "country":"United States",
                          "country_code":"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":{  
                       "first_name":"John",
                       "formatted_name":"John Smith",
                       "last_name":"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.fb.com",
                          "type":"WORK"
                       }
                    ]
                 }
              ]
      },
      "receivedAt": 1513616971473,
      "receivedDate": "2017-12-18T17:09:31.473Z"
    }
  ]
}

Ejemplo de Extra Info (SegmentationList):

{  
   "segmentation_list":[  
      {  
         "id":26,
         "customerId":42,
         "subAccountId":0,
         "name":"Wavy WhatsApp Segmentation List",
         "active":true
      },
      {  
         "id":27,
         "customerId":43,
         "subAccountId":0,
         "name":"Wavy WhatsApp Segmentation List 2",
         "active":true
      }
   ]
}

Ejemplo de mensaje de texto de referral:

{
  "total": 1,
  "data": [
    {
      "id": "ce425ffe-bc62-421f-9261-e6819a5eab43",
      "source": "5519900000000",
      "origin": "5519900000000",
      "userProfile": {
        "name": "name of the user"
      },
      "campaignId": 100,
      "correlationId": "...",
      "campaignAlias": "...",
      "flowId": "....",
      "extraInfo": "...",
      "referral": {
        "headLine": "...",
        "body": "...",
        "sourceType": "...",
        "sourceId": "...",
        "sourceUrl": "...",
        "mediaType": "...",
        "mediaUrl": "..."
      },
      "mtSentAt": 1513616971473,
      "message": {
        "type": "TEXT",
        "messageText": "Hi, this is a message from the user"
      },
      "receivedAt": 1513616971473,
      "receivedDate": "2017-12-18T17:09:31.473Z"
    }
  ]
}

Cuando el cliente le envíe un mensaje, Wavy Messaging API enviará una notificación de solicitud HTTP POST a la URL de Webhook con los detalles.

Es importante que su Webhook retorne una respuesta HTTPS 200 OK para las notificaciones (en un lapso de hasta 200 ms o de manera asíncrona). Caso contrario, la API de Wavy Messaging considerará esa notificación como una falla e intentará nuevamente.

Importante: Indicar el webhook donde recibirá los mensajes, para que nuestro equipo de soporte pueda asociarlo a su cuenta de Whatsapp

El formato de la respuesta será de acuerdo a la siguiente descripción:

Campo Detalles Tipo
total Número de callbacks en la llamada. String
data Lista de mensajes originados en dispositivos móviles. Data
Campo Detalles Tipo
id Última identificación del mensaje String
source Teléfono del remitente String
origin Teléfono que identifica la cuenta de WhatsApp (incluido el código de país). Ejemplo: 5411900000000. String
userProfile Perfil del usuario que envió el mensaje UserProfile
correlationId Un ID único configurado por usted para coincidir con el estado del mensaje (Callback y DLR). Este parámetro es opcional y puede usar el ID generado por Wavy Messaging para esta coincidencia. String
campaignId ID de campaña previamente definido. String
campaignAlias Alias de Campaña previamente definido. String
message Mensaje MO. Message
receivedAt Fecha en que se recibió el mensaje. Formato: yyyy-MM-dd’T'HH:mm:ssZ String
receivedDate Fecha en que se recibió el mensaje, utilizando el formato Unix_time String
extraInfo Información extra relacionada con el mensaje. Formato: Json String
referral Presente si el usuario inició el mensaje al hacer clic en una publicación o anuncio. Este campo es opcional (puede ser nulo). Referral
mtSentAt La marca de tiempo de la fecha/hora en que se envió el último MT a este destinatario. Long
session Información de la sesión. Session

Referral

Todos los campos de este objeto son opcionales (pueden ser nulos).

Campo Detalhes Tipo
headLine Titular del anuncio que generó el mensaje. String
body Cuerpo del anuncio. String
sourceType Tipo de anuncio. Puede ser “ad”, “post” o “unknown”. String
sourceId Identificación de anuncio o publicación en Facebook. String
sourceUrl URL del anuncio o publicación. String
mediaType Tipo de medio presente en el anuncio. Puede ser “image” o “video”. String
mediaUrl Url del medio presente en el anuncio. String

Session

Field Details Type
sessionId ID de sesión para este usuario. String
createdAt Marca de tiempo de creación de la sesión. Long

Mensaje:

Campo Detalles Tipo
type Tipo de mensaje enviado por el usuario final: TEXT - IMAGE - AUDIO - DOCUMENT String
messageText El mensaje de texto (MO) enviado por el usuario final. String
waGroupId El grupo al que se envió el mensaje. String
mediaUrl Url para descargar la multimedia enviada por el usuario final. String
mimeType Tipo de archivo enviado por el usuario final. String
caption Etiqueta de multimedia enviada por el usuario final. String
location Ubicación enviada por el usuario final. Location
contacts Contactos enviados por el usuario final. Contact[]

UserProfile:

Field Necesario Detalles Tipo
name No El nombre del perfil del usuario String

Location:

Field Details Type
name Nombre del sitio. String
address Dirección del sitio. String
geoPoint Geopoint enviada por el usuario final. Formato: “latitud, longitud” String

Contact:

Campo Necesario Detalles Tipo
addresses No Direcciones de contacto completas. Address[]
birthday No Fecha de cumpleaños como cadena con formato YYYY-MM-DD. String
emails No Direcciones de correo electrónico de contacto. Email[]
name No Nombre completo de contacto. Name
org No Información de la organización de contacto. Org
phones No Teléfonos de contacto. Phone[]
urls No URLs de los contactos. Url[]

Address:

Campo Necesario Detalles Tipo
street No Número y nombre de la calle. String
city No Nombre de la ciudad. String
state No Abreviatura del estado. String
zip No Código postal. String
country No Nombre completo del país. String
country_code No Abreviatura de país de dos letras. String
type No Valores estándar: HOME, WORK. String

Email:

Campo Necesario Detalles Tipo
email No Correo electrónico. String
type No Valores estándar: HOME, WORK. String

Name:

Campo Necesario Detalles Tipo
first_name No Primer nombre. String
last_name No Apellido. String
middle_name No Segundo nombre. String
name_suffix No Sufijo del nombre. String
name_prefix No Prefijo del nombre. String
formatted_name No Nombre completo como aparece normalmente. String

Org:

Campo Necesario Detalles Tipo
company No Nombre de la empresa del contacto. String
department No Nombre del departamento de contacto. String
title No Título comercial de contacto. String

Phone:

Campo Necesario Detalles Tipo
phone No Número de teléfono formateado. String
type No Valores estándar: CELL, MAIN, IPHONE, HOME, WORK. String
wa_id No Identificador de WhatsApp. String

Url:

Campo Necesario Detalles Tipo
url No URL del contacto. String
type No Valores estándar: HOME, WORK. String

extraInfo (Control de flujo de MO - Listas de segmentación)

El mensaje tendrá una lista de listas de segmentaciones en el campo Información adicional. Nuestros asociados lo utilizan para redirigir los mensajes a través de ciertos flujos. El nombre de la clave es segmentation_lists y contiene una lista de SegmentationList.

Campo Detalles Tipo
id Identificador de la lista de segmentación Integer
customerId Identificador de cliente Integer
subAccountId Identificador de subcuenta Integer
name Nombre de la lista de segmentación String
active Estado de la lista de segmentación Boolean

API SFTP WhatsApp

Detalle de Conexión

Hostname ftp-messaging.wavy.global
puerto 2222
Protocolo SFTP (transferencia sobre ssh, usando criptografía entre cliente-servidor)
Autenticación username + senha (provisto por soporte)

Envío de mensajes a través de SFTP

Mensaje Template a través de SFTP

Template con multimidia:

2020-01-21;16:00;16:00;TEMPLATE;chatclub_welcome;whatsapp:hsm:ecommerce:movile;pt_BR;DETERMINISTIC;nombre|empresa IMAGE;URL;https://upload.wikimedia.org/wikipedia/en/d/d2/Imagem_logo.png;PNG
phone;nombre;empresa
5519981560597;Nombre1;Wavy

1ª línea
Fecha de envío (para casos de programación)
Hora inicial de envío (para casos de programación)
Hora final de envío (para casos de programación)
Tipo de mensaje debe ser: TEMPLATE
Nombre (elementName) del Template
Namespace (namespace) del Template
Idioma (languageCode) de Template
Definicíon del idioma del Template (languagePolicy): DETERMINISTIC o FALLBACK
Nombre de los parámetros de Template

Observaciones para la primera línea:

1 - Los nombres de los parámetros deben coincidir con los nombres de las columnas o será considerado como valores constantes

2 - Las informaciones que no se utilicen se pueden dejar en blanco, pero deben mantener el punto y coma como separación. Ejemplo de un caso que no utilizamos programación (los campos iniciales quedan entre punto y coma y sin información dentro): ; ; ; TEMPLATE;chatclub_welcome;whatsapp:hsm:ecommerce:movile;pt_BR;DETERMINISTIC;nome|empresa

3 - Por defecto (predeterminado) la languagePolicy será DETERMINISTIC.

4 - Los nombres de los parámetros del Template deben ser separados por “|” y no por “;”

2ª línea Ejemplo
Tipo de Header soportado por template IMAGE, AUDIO, VIDEO o DOCUMENT
Tipo de fuente de medios URL o PATH (Directorio de medios del servidor FTP)
Medio Url o directorio del servidor FTP
Tipo de medio JPEG, PNG, JPG, PDF, DOC, MP4, MP3

Observaciones para la segunda línea:

1 - El tipo de medio debe ser un tipo aceptado por el WhatsApp

Medio Content-Types soportados
documento cualquier MIME-type valido
foto image/jpeg, image/png
audio audio/aac, audio/mp4, audio/amr, audio/mpeg, audio/ogg; codecs=opus
vídeo video/mp4, video/3gpp. Observação: Solamente H.264 vídeo codec e AAC audio codec es compatible.
3ª línea
Nombre de las columnas
4ª y demás líneas:
Destinatario y valores de los parámetros de Template

Templates personalizadas por destinatario:

Para mensajes personalizadas, como diferentes medios por destinatario, contacte a nuestro equipo de soporte técnico para realizar la configuración y obtener más detalles para el envío.

Consulta sesiones abiertas vía API

Solicitud

Para consultar sesiones abiertas a través de nuestra API, debe realizar una solicitud GET a la siguiente dirección:

GET http://api-messaging.wavy.global/v1/session?customerId={customerId}&subAccountId={subAccountId}

Pasar el parámetro customerId es obligatorio, mientras que subAccountId es opcional.

Atención: Tenga cuidado de reemplazar ‘{’ y ‘}’ también. Por ejemplo, “={customerId}” se convierte en “=42”.

También necesitará utilizar los siguientes headers:

Header Valor
Content-Type application/json
authenticationToken Token de Messaging1
userName Nombre de usuario de Messaging1

Respuesta

En el exito, si hay sesiones abiertas para el cliente especificado y subAccountId, la solicitud devuelve un JSON con el atributo:

Atributo Valor
file_url Link para descargar un archivo de tipo csv que contiene los campos “source” y “session_created_at” de todos los destinos encontrados

Si no hay datos asociados con customerId y subAccountId, el archivo devuelto estará vacío, sólo con el encabezado.

Ejemplo de respuesta:

{
    "file_url": "https://chatclub-cdn.wavy.global/2019/02/13/633e33fc-3a3f-4ca5-a8b0-4b747fb67137/5bd46e2b-5990-4681-9b29-98ab6598960e"
}

API de Campañas

Este documento proporciona la información necesaria para integrarse con la plataforma de Wavy Messaging para realizar la gestión de campañas. La API tiene integración REST, mediante el protocolo HTTP con TLS, que admite los métodos POST con los parámetros enviados en formato JSON.

Autenticación

Para utilizar con éxito nuestra API, debe proporcionar un nombre de usuario válido (correo electrónico) asociado con un token de autenticación. Debe agregar los siguientes encabezados a la solicitud:

Campo Detalles Tipo de datos
userName Correo electrónico válido suscrito en la plataforma Wavy Messaging String
authenticationToken Token de autenticación generado por nuestra plataforma. Encuéntrelo aquí o consulte nuestro soporte. String

Detalles de conexión

Hostname apigw.wavy.global
Port 443 (https)
Protocol HTTPS (TLS encryption)
Authorization username + token
Encoding UTF-8

Listado de campañas

Ejemplo de listado de campañas

curl -X GET \
 'https://apigw.wavy.global/api/v1/campaigns?name=MyCampaign&page=1&page_size=10' \
 -H 'Content-Type: application/json' \
 -H 'authenticationToken: <authentication_token>' \
 -H 'userName: <e-mail>'

Respuesta

HEADERS:
page-number: 1
per-page: 10
total: 2
total-pages: 1
{
    "status": {
        "error": false
    },
    "campaigns": [
        {
            "name": "My first campaign",
            "id": 1,
            "alias": "first"
        },
        {
            "name": "My second campaign",
            "id": 2,
            "alias": "second"
        }
    ]
}

Listado de campañas ya registradas en la plataforma. Puedes seleccionar la página de resultados o filtrar por nombre de campaña. GET https://apigw.wavy.global/api/v1/campaigns

Parámetros QueryString

* Campos Requeridos

Campo Detalles Tipo de Dato
name Nombre de la campaña para ser utilizado como filtro. String
page Página que se solicita Integer
page_size Cantidad de registros por página Integer

Solicitando una campaña específica

Ejemplo de solicitación de una campaña específica

curl -X GET \
  https://apigw.wavy.global/api/v1/campaigns/1234 \
  -H 'Content-Type: application/json' \
  -H 'authenticationToken: <authentication_token>' \
  -H 'userName: <e-mail>'

Respuesta

{
    "status": {
        "error": false
    },
    "campaign": {
        "name": "My Campaign",
        "id": 1234,
        "alias": "mycampaign"
    }
}

Solicitando una campaña específica por el ID

GET https://apigw.wavy.global/api/v1/campaign/{id}

Creando campañas

Ejemplo de creación de campaña:

curl -X POST \
  https://apigw.wavy.global/api/v1/campaigns \
  -H 'Content-Type: application/json' \
  -H 'authenticationToken: <authentication_token>' \
  -H 'userName: <e-mail>' \
  -d '{
        "campaign" : {
          "name": "My Campaign",
          "alias": "mycampaign"
        }
      }'

Respuesta

{
    "status": {
        "error": false
    },
    "campaign": {
        "name": "My Campaign",
        "id": 1234,
        "alias": "mycampaign"
    }
}

Creando una nueva campaña con nombre y alias . El alias de la campaña debe ser un nombre simple para que sea más fácil de usar con la API. Se recomienda ser corto y no usar caracteres especiales.

POST https://apigw.wavy.global/api/v1/campaigns

JSON Object

* Campos requeridos

Campo Detalles Tipo de dato
name* Nombre de la campaña String
alias Identificador de la campaña. String

Cambiando campañas

Ejemplo de cambio en campaña:

curl -X PUT \
  https://apigw.wavy.global/api/v1/campaigns/1234 \
  -H 'Content-Type: application/json' \
  -H 'authenticationToken: <authentication_token>' \
  -H 'userName: <e-mail>' \
  -d '{
        "campaign" : {
          "name": "My Campaign",
          "alias": "mycampaign"
        }
      }'

Respuesta

{
    "status": {
        "error": false
    },
    "campaign": {
        "name": "My Campaign",
        "id": 1234,
        "alias": "mycampaign"
    }
}

Cambiando una campaña por su nombre o alias.

PUT https://apigw.wavy.global/api/v1/campaigns/{id}

JSON Object

* Campos requeridos

Campo Detalles Tipo de dato
name* Nombre de la campaña String
alias Identificador de la campaña String

Borrando campañas

Ejemplo borrando campañas:

curl -X DELETE \
  https://apigw.wavy.global/api/v1/campaigns/1234 \
  -H 'Content-Type: application/json' \
  -H 'authenticationToken: <authentication_token>' \
  -H 'userName: <e-mail>'

Respuesta

{
    "status": {
        "error": false
    },
    "campaign": {
        "name": "My Campaign",
        "id": 1234,
        "alias": "mycampaign"
    }
}

Borrando una campaña por su ID

DELETE https://apigw.wavy.global/api/v1/campaigns/{id}

Soporte

Apertura de llamados Para abrir llamados visite nuestro Service Center
Telefono México +52 55 5985 9111
Telefono Colômbia +57 1 3814943
Telefono Perú (Toll Free) (0800) 78427