Cada petición que se realice tendrá que incluir en la cabecera de la petición http la autenticación del cliente. Para ello se utiliza la autenticación de acceso básica de HTTP.
La cabecera de autorización se construye combinando la cadena usuario:apiPassword y codificándola en base64. A esta cadena se antepone la cadena Authorization: Basic
Por ejemplo, para el usuario username y el password apiPassword la cabecera resultante sería:
Authorization: Basic dXNlcm5hbWU6YXBpUGFzc3dvcmQ=
Campañas
SMS
Envío SMS
POST{{DASHBOARD_HOST}}/api/rest/sms
curl -X POST '{{DASHBOARD_HOST}}/api/rest/sms'\-H'Content-Type: application/json'\-H'Authorization: Basic YOUR_AUTH_TOKEN'\-d'{
"to": ["34666555444"],
"from": "TEST",
"message": "SMS text message"
}'
Texto del mensaje. Como máximo puede tener 160 caracteres si no se especifica que el mensaje sea multiparte (ver parámetro parts). El texto tiene que estar codificado en UTF-8.
to
array
Sí
Número de teléfono móvil destinatario del mensaje. Debe incluir el prefijo. Ejemplo: En España 34666666666. Este campo permite indicar multiples destinatarios.
from
string
Sí
Texto del Remitente, esta etiqueta se compondrá de 15 números o 11 caracteres alfanuméricos.
encoding
string
No
Los posibles valores son 'gsm', 'gsm-pt' y 'utf-16'. El valor gsm para envíos normales con codificación GSM7 y 160 caracteres por mensaje y el valor utf-16 para codificación UCS2 (UTF16) y 70 caracteres por mensaje. En caso de no especificarse, el valor por defecto es gsm.
scheduleDate
string
No
Fecha de envió del mensaje en formato UTC. Si se necesita enviar mensajes programados se puede especificar la fecha de envío indicando la fecha en formato YYYYmmddHHiiss. Ejemplo: 20130215142000 sería el 15 de febrero de 2013 a las 14:20:00. En caso de envío inmediato no se tiene que especificar este parámetro.
expirationDate
string
No
Fecha de expiración del mensaje en formato UTC. Formato YYYYmmddHHiiss. Ejemplo: 20130215142000 sería el 15 de febrero de 2013 a las 14:20:00.
parts
integer
No
Indica el número máximo de partes en que se dividirá el mensaje para su envío. Esta variable tiene valor 1 por defecto, por lo que si no se especifica y se envía un mensaje de más de 160 caracteres para codificación gsm, el mensaje fallará. Hay que tener en cuenta que los mensajes concatenados solo pueden tener 153 caracteres por parte en gsm y 67 caracteres por parte en utf-16 y que cada parte se tarifica como un envío. El servidor solo utilizará el mínimo de partes necesaria para realizar el envío del texto aunque el número de partes especificado sea superior al necesario. En caso de que el número de partes sea inferior al necesario para el envío del texto, el envío fallará con el error 105. El número máximo de partes permitido es de 15.
notificationUrl
string|array
No
URL en la que recibir las notificaciones de entrega.
trans
integer
No
Los valores posibles son 1 y 0. Con el valor 0 el servidor no modifica ningún carácter del mensaje, este es el valor por defecto. Con el valor 1 el servidor se encarga de modificar los caracteres comunes no validos en GSM7 a caracteres validos con la siguiente tabla de traducción: 'á' => 'a', 'í'=>'i', 'ó'=>'o', 'ú'=>'u', 'ç'=>'Ç', 'Á'=>'A', 'Í'=>'I', 'Ó'=>'O', 'Ú'=>'U', 'À'=>'A', 'È'=>'E', 'Ì'=>'I', 'Ò'=>'O', 'Ù'=>'U', 'º' => '', 'ª' => '', 'Õ' => 'O', 'õ' => 'o', 'â' => 'a', 'ê' => 'e', 'î'=>'i', 'ô'=>'o', 'û'=>'u', 'Â'=>'A', 'Ê'=>'E', 'Î'=>'I', 'Ô'=>'O', 'Û'=>'U', 'ã' => 'a', 'Ã' => 'A'.
campaignName
string
No
Nombre de campaña. Si se especifica se creará una campaña con el nombre indicado en el dashboard que contendrá las estadísticas del envío. Si una campaña con este nombre ya existe, las estadísticas de envío se añadirán a la campaña existente.
tags
array
No
campaignName es requerido si se especifica este parámetro. Listado de tags a añadir a la campaña. Los tags pueden ser utilizados para filtrar las estadísticas en el dashboard.
certified
boolean
No
Si se especifica como true el mensaje se enviará como certificado. * Los mensajes certificados tienen coste adicional
sub
array
No
array con variables de sustitución que se aplicarán al mensaje.
splitParts
boolean
No
Para mensajes que superen el tamaño máximo de SMS, el servidor dividirá el mensaje en múltiples SMS en lugar de utilizar SMS concatenados. El valor por defecto es false.
flash
boolean
No
Un SMS flash es un mensaje que aparece directamente en la pantalla del dispositivo. Dependiendo del modelo y del sistema operativo es posible almacenarlo en la bandeja de entrada y enviar mensajes concatenados.
availableTimes
array
No
Indica los horarios en los que se enviarán los SMS. Se definen objetos json de la forma:
[{"day": 1, "from": "09:00", "to": "12:00"}]
day: se indica un dia del rango entre los días lunes a domingo debe ser un número entre 1 y 7. Opcional: Si no se especifica, el rango se aplicará a todos los días de la semana. from: hora que define el inicio del rango de horario en formato UTC 24 horas, to: hora que define el fin del rango de horario en formato UTC 24 horas.
otpConfig
object
No
En el caso de añadir la variable {OTP_CODE} dentro del parámetro "message", se pueden especificar los parámetros del código OTP. Por ejemplo:
{"alpha": true, "length": 5}
alpha: indica si el código es alfanumérico o numérico. El valor por defecto es false. length: tamaño del código. El valor mínimo es 3 y el valor máximo es 10. El valor por defecto es 4. maxAttempts: número máximo de reintentos. El valor mínimo es 1 y el valor máximo es 10. El valor por defecto es 3. maxSecondsValidity: número máximo de segundos entre la generación y la validación del código. El valor mínimo es 30 y el valor máximo es 600. El valor por defecto es 60. appId: un mismo teléfono o email puede validarse a la vez siempre que sea con un appId distinto. El valor por defecto es "". rejectIfPendingCode: evita la generación de un nuevo código OTP si existe uno anterior en estado pendiente. El valor por defecto es false.
Variables de sustitución
Al utilizar el parámetro sub, el array ha de contener tantos elementos como destinatarios del envío.
Es posible indicar variables personalizadas en el cuerpo del mensaje que serán sustituidas por las variables personalizadas del contacto o por las variables indicadas en el parámetro sub.
Múltiples URLs de notificación
Al utilizar múltiples URLs de notificación, el array ha de contener tantos elementos como destinatarios del envío.
{"from":"TEST","to":["34666555444","34666555333"],"message":"SMS text message","notificationUrl":["https://example.com/first-notification-url","https://example.com/second-notification-url"]}
Es posible especificar una url de notificación distinta por destinatario.
Para esto hay que utilizar un array para el parámetro notificationUrl. El array ha de contener tantos elementos como destinatarios del envío.
Filtros de variables personalizadas
Es posible añadir los siguientes filtros a las variables personalizadas.
Filtro
Descripción
Ejemplo
Resultado
lower
Devuelve el texto en minúsculas.
{name|lower}
my name
upper
Devuelve el texto en mayúsculas.
{name|upper}
MY NAME
capitalize
Devuelve el texto con la primera letra de la primera palabra en mayúsculas.
{name|capitalize}
My name
capitalizeAll
Devuelve el texto con la primera letra de cada palabra en mayúsculas.
{name|capitalizeAll}
My Name
formatDotComma
Devuelve el número con punto como separador de miles y coma como separador de decimales.
{number|formatDotComma}
1.234,56
formatCommaDot
Devuelve el número con coma como separador de miles y punto como separador de decimales.
{number|formatCommaDot}
1,234.56
shorten
Devuelve una url acortada. Debe ser una url válida.
{url|shorten}
https://sms.tl/xxxxxx
Acuses de recibo
Si se desean recibir los acuses de recibo en tiempo real se deberá especificar la variable notificationUrl con la URL del cliente donde quiere que se notifique es estado del envío.
El funcionamiento consiste en especificar en cada petición http la URL donde se desea que realice una petición de nuestro servidor cuando se reciba una notificación por parte de la operadora. Para ello el cliente debe disponer de un servidor http capaz de recibir esas notificaciones.
Nuestro servidor enviará las variables por el método GET tal como el cliente quiera, para ello en la URL que nos envía tiene que poner el nombre de la variable seguido de un carácter de escape que contendrá el valor, los caracteres de escape tienen la forma del carácter % seguido de una letra. Este sería un ejemplo de URL:
%m mnc de la operadora (solo en países donde esté disponible).
%y fecha del DLR del mensaje con formato YYYY-MM-DD HH:MM, ejemplo: 2020-09-21 14:19.
%n número de parte (mensajes concatenados).
%C identificador de campaña.
%S identificador de envío.
Para explicar mejor el proceso, a continuación se da un ejemplo de cómo sería el envío de un sms y la recepción de su acuse de recibo.
En primer lugar enviamos el sms con la variable notificationUrl donde indicaremos la URL donde queremos recibir la notificación de entrega, añadiremos a esta URL nuestro identificador de envío para poder identificar inequívocamente cuando lo recibamos. La url final para la notificación sería:
{"data":[{"id":"XXXXXXXXXXXXX","from":"SAMPLE","to":"34666555444","message":"SMS text message","campaignId":123456,"sendingId":234567,"isDelivered":true,"isClicked":false,"events":[{"type":"sent","date":"2021-07-19T15:00:33+00:00","isMobile":false,"browser":"","os":""},{"type":"delivered","date":"2021-07-19T15:00:33+00:00","isMobile":false,"browser":"","os":""}],"customFields":{"email":"test@test.com","phone":"34666555444","name":"Name"},"links":{"self":"{{DASHBOARD_HOST}}/api/rest/sms/XXXXXXXXXXXXX"}}]}
Error response (HTTP 404)
{"error":{"code":404,"description":"Resource not found"}}
Parámetro
Tipo
Obligatorio
Descripción
id
string
Sí
Identificador del mensaje devuelto en la respuesta a la llamada a api/rest/sms en el campo id. Es posible especificar múltiples identificadores separados por comas.
Cuerpo del email en formato HTML y codificación UTF-8. Requerido sin templateId.
templateId
integer
No
ID de plantilla legacy para enviar como cuerpo del email. Requerido sin body. Este ID hace referencia a plantillas creadas desde la versión anterior ({{DASHBOARD_HOST}}) de la aplicación de {{NAME}}. Se recomienda utilizar el parámetro templateV2Id cuando sea posible.
templateV2Id
integer
No
ID de plantilla para enviar como cuerpo del email. Requerido sin body. Este ID hace referencia a la versión actual ({{HOST}}) de la aplicación de {{NAME}}.
to
array
Sí
Emails de los destinatarios del envío. Este campo permite indicar multiples destinatarios.
cc
array
No
Emails de los destinatarios en copia del envío. Este campo permite indicar multiples destinatarios.
bcc
array
No
Emails de los destinatarios en copia oculta del envío. Este campo permite indicar multiples destinatarios.
fromEmail
string
Sí
Email del remitente. La dirección de correo indicada debe estar validada en la plataforma de {{NAME}}.
subject
string
Sí
Breve resumen del tema del mensaje.
fromName
string
No
Nombre del remitente del envío.
replyTo
string
Sí
Dirección que debe utilizarse para responder al mensaje. La dirección de correo indicada debe estar validada en la plataforma de {{NAME}}.
scheduleDate
string
No
Fecha de envío del mensaje en formato UTC. Si se necesita enviar mensajes programados se puede especificar la fecha de envío indicando la fecha en formato YYYYmmddHHiiss. Ejemplo: 20130215142000 sería el 15 de febrero de 2013 a las 14:20:00. En caso de envío inmediato no se tiene que especificar este parámetro.
campaignName
string
No
Nombre de campaña. Si se especifica se creará una campaña con el nombre indicado en el dashboard que contendrá las estadísticas del envío. Si una campaña con este nombre ya existe, las estadísticas de envío se añadirán a la campaña existente.
tags
array
No
campaignName es requerido si se especifica este parámetro. Listado de tags a añadir a la campaña. Los tags pueden ser utilizados para filtrar las estadísticas en el dashboard.
certified
boolean
No
Si se especifica como true el mensaje se enviará como certificado. * Los mensajes certificados tienen coste adicional
sub
array
No
array con variables de sustitución que se aplicarán al mensaje.
attachments
array
No
Adjuntos del email. Se define un array de objetos de la siguiente forma:
name: nombre del archivo. content: contenido del archivo en base64. contentType: Content Type del archivo.
* Los archivos adjuntos tienen coste adicional
trackOpens
boolean
No
Añade un pixel para poder obtener estadísticas de apertura. El valor por defecto es true.
trackClicks
boolean
No
Trackea los enlaces para poder obtener estadísticas de clicks. El valor por defecto es true.
otpConfig
object
No
En el caso de añadir la variable {OTP_CODE} dentro del parámetro "body", se pueden especificar los parámetros del código OTP. Por ejemplo:
{"alpha": true, "length": 5}
alpha: indica si el código es alfanumérico o numérico. El valor por defecto es false. length: tamaño del código. El valor mínimo es 3 y el valor máximo es 10. El valor por defecto es 4. maxAttempts: número máximo de reintentos. El valor mínimo es 1 y el valor máximo es 10. El valor por defecto es 3. maxSecondsValidity: número máximo de segundos entre la generación y la validación del código. El valor mínimo es 30 y el valor máximo es 600. El valor por defecto es 60. appId: un mismo teléfono o email puede validarse a la vez siempre que sea con un appId distinto. El valor por defecto es "". rejectIfPendingCode: evita la generación de un nuevo código OTP si existe uno anterior en estado pendiente. El valor por defecto es false.
Variables de sustitución
Al utilizar el parámetro sub, el array ha de contener tantos elementos como destinatarios del envío.
Es posible indicar variables personalizadas en el cuerpo del mensaje que serán sustituidas por las variables personalizadas del contacto o por las variables indicadas en el parámetro sub.
Voz
Envío mensaje de Voz
POST{{DASHBOARD_HOST}}/api/rest/voice
curl -X POST '{{DASHBOARD_HOST}}/api/rest/voice'\-H'Content-Type: application/json'\-H'Authorization: Basic YOUR_AUTH_TOKEN'\-d'{
"to": ["34666666666"],
"message": "Esto es un test de mensaje de voz",
"gender": "F",
"language": "es_ES"
}'
<?php$curl=curl_init();curl_setopt_array($curl,array(CURLOPT_URL=>'{{DASHBOARD_HOST}}/api/rest/voice',CURLOPT_RETURNTRANSFER=>true,CURLOPT_CUSTOMREQUEST=>'POST',CURLOPT_POSTFIELDS=>'{
"to": ["34666666666"],
"message": "Esto es un test de mensaje de voz",
"gender": "F",
"language": "es_ES"
}',CURLOPT_HTTPHEADER=>array('Content-Type: application/json','Authorization: Basic YOUR_AUTH_TOKEN'),));$response=curl_exec($curl);curl_close($curl);echo$response;
importjava.io.DataOutputStream;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.URL;importjava.net.HttpsURLConnection;publicclassApp{publicstaticvoidmain(String[]args){try{URLurl=newURL("{{DASHBOARD_HOST}}/api/rest/voice");HttpsURLConnectionconnection=(HttpsURLConnection)url.openConnection();connection.setRequestMethod("POST");connection.setRequestProperty("Authorization","Basic YOUR_AUTH_TOKEN");connection.setRequestProperty("Accept","application/json");StringrequestBody="{ \"to\": [\"34666666666\"], \"message\": \"Esto es un test de mensaje de voz\", \"gender\": \"F\", \"language\": \"es_ES\" }";connection.setDoOutput(true);DataOutputStreamwr=newDataOutputStream(connection.getOutputStream());wr.writeBytes(requestBody);wr.flush();wr.close();BufferedReaderin=newBufferedReader(newInputStreamReader(connection.getInputStream()));StringinputLine;StringBufferresponse=newStringBuffer();while((inputLine=in.readLine())!=null){response.append(inputLine);}in.close();System.out.println(response.toString());}catch(Exceptione){// TODO: handle exception}}}
varaxios=require('axios');varconfig={method:'post',url:'{{DASHBOARD_HOST}}/api/rest/voice',headers:{'Content-Type':'application/json','Authorization':'Basic YOUR_AUTH_TOKEN'},data:'{ "to": ["34666666666"], "message": "Esto es un test de mensaje de voz", "gender": "F", "language": "es_ES" }'};axios(config).then(function(response){console.log(JSON.stringify(response.data));}).catch(function(error){console.log(error);});
importrequestsurl="{{DASHBOARD_HOST}}/api/rest/voice"payload="{ \"to\": [\"34666666666\"], \"message\": \"Esto es un test de mensaje de voz\", \"gender\": \"F\", \"language\": \"es_ES\" }"headers={'Content-Type':'application/json','Authorization':'Basic YOUR_AUTH_TOKEN'}response=requests.request("POST",url,headers=headers,data=payload)print(response.text)
require"uri"require"net/http"url=URI("{{DASHBOARD_HOST}}/api/rest/voice")https=Net::HTTP.new(url.host,url.port)https.use_ssl=truerequest=Net::HTTP::Post.new(url)request["Content-Type"]="application/json"request["Authorization"]="Basic YOUR_AUTH_TOKEN"request.body="{ \"to\": [\"34666666666\"], \"message\": \"Esto es un test de mensaje de voz\", \"gender\": \"F\", \"language\": \"es_ES\" }"response=https.request(request)putsresponse.read_body
usingSystem;usingRestSharp;namespaceHelloWorldApplication{classHelloWorld{staticvoidMain(string[]args){varclient=newRestClient("{{DASHBOARD_HOST}}/api/rest/voice");client.Timeout=-1;varrequest=newRestRequest(Method.POST);request.AddHeader("Authorization","Basic YOUR_AUTH_TOKEN");request.AddHeader("Content-Type","application/json");request.AddParameter("application/json","{ \"to\": [\"34666666666\"], \"message\": \"Esto es un test de mensaje de voz\", \"gender\": \"F\", \"language\": \"es_ES\" }",ParameterType.RequestBody);IRestResponseresponse=client.Execute(request);Console.WriteLine(response.Content);}}}
Texto del mensaje. Como máximo puede tener 500 caracteres. El texto tiene que estar codificado en UTF-8.
to
array
Sí
Número de teléfono móvil destinatario del mensaje. Debe incluir el prefijo. Ejemplo: En España 34666666666. Este campo permite indicar multiples destinatarios.
language
string
Sí
Idioma para convertir el texto, las opciones son:
'en_GB': Inglés - Reino Unido, 'en_US': Inglés - Estados Unidos, 'es_ES': Español - España, 'es_US': Español - Latino, 'pt_PT': Portugués - Portugal, 'pt_BR': Portugués - Brasil, 'cmn_CN': Chino mandarín - China *, 'arb': Árabe *, 'de_DE': Alemán - Alemania, 'fr_FR': Francés - Francia, 'it_IT': Italiano - Italia, 'hi_IN': Indi - India *.
* Disponible únicamente en género femenino.
gender
string
Sí
Género de la voz, los valores permitidos son 'F' para voz de mujer y 'M' para voz de hombre.
callers
object
No
Objecto con lista de remitentes personalizados por país a utilizar en la llamada. Si no se especifica el remitente para un país determinado se usará el remitente por defecto. Para configurar un remitente personalizado contactar con el departamento de soporte. Ejemplo:
{"ES": "6123456789", "PT": "6987654321"}
scheduleDate
string
No
Fecha de envió del mensaje en formato UTC. Si se necesita enviar mensajes programados se puede especificar la fecha de envío indicando la fecha en formato YYYYmmddHHiiss. Ejemplo: 20130215142000 sería el 15 de febrero de 2013 a las 14:20:00. En caso de envío inmediato no se tiene que especificar este parámetro.
retries
integer
No
Número máximo de reintentos. Máximo 5. Si no se especifica, no habrá reintentos.
expirationDate
string
No
Permite determinar la fecha máxima en la que la llamada se puede realizar. Transcurrida esta fecha límite, la llamada será cancelada. Especificando el periodo de validez se activará automáticamente los reintentos de llamada, que volverá a realizar la llamada si el destinatario no atiende la llamada. La fecha debe tener el formato YYYYmmddHHiiss. Ejemplo: 20130215142000 sería el 15 de febrero de 2013 a las 14:20.
campaignName
string
No
Nombre de campaña. Si se especifica se creará una campaña con el nombre indicado en el dashboard que contendrá las estadísticas del envío. Si una campaña con este nombre ya existe, las estadísticas de envío se añadirán a la campaña existente.
tags
array
No
campaignName es requerido si se especifica este parámetro. Listado de tags a añadir a la campaña. Los tags pueden ser utilizados para filtrar las estadísticas en el dashboard.
sub
array
No
array con variables de sustitución que se aplicarán al mensaje.
amd
boolean
No
Answer Machine Detection (AMD): Detecta si la llamada ha sido atendida por un contestador automático, si es así, finaliza automáticamente la llamada. El valor por defecto es false.
Variables de sustitución
Es posible indicar variables personalizadas en el cuerpo del mensaje que serán sustituidas por las variables personalizadas del contacto o por las variables indicadas en el parámetro sub.
Al utilizar el parámetro sub, el array ha de contener tantos elementos como destinatarios del envío.
Número de teléfono móvil destinatario del mensaje. Debe incluir el prefijo. Ejemplo: En España 34666666666. Este campo permite indicar multiples destinatarios.
audioUrl
string
Sí
URL del audio a enviar. Ejemplo: https://example.com/audio.mp3.
callers
object
No
Objecto con lista de remitentes personalizados por país a utilizar en la llamada. Si no se especifica el remitente para un país determinado se usará el remitente por defecto. Para configurar un remitente personalizado contactar con el departamento de soporte. Ejemplo:
{"ES": "6123456789", "PT": "6987654321"}
scheduleDate
string
No
Fecha de envió del mensaje en formato UTC. Si se necesita enviar mensajes programados se puede especificar la fecha de envío indicando la fecha en formato YYYYmmddHHiiss. Ejemplo: 20130215142000 sería el 15 de febrero de 2013 a las 14:20:00. En caso de envío inmediato no se tiene que especificar este parámetro.
retries
integer
No
Número máximo de reintentos. Máximo 5. Si no se especifica, no habrá reintentos.
expirationDate
string
No
Permite determinar la fecha máxima en la que la llamada se puede realizar. Transcurrida esta fecha límite, la llamada será cancelada. Especificando el periodo de validez se activará automáticamente los reintentos de llamada, que volverá a realizar la llamada si el destinatario no atiende la llamada. La fecha debe tener el formato YYYYmmddHHiiss. Ejemplo: 20130215142000 sería el 15 de febrero de 2013 a las 14:20.
campaignName
string
No
Nombre de campaña. Si se especifica se creará una campaña con el nombre indicado en el dashboard que contendrá las estadísticas del envío. Si una campaña con este nombre ya existe, las estadísticas de envío se añadirán a la campaña existente.
tags
array
No
campaignName es requerido si se especifica este parámetro. Listado de tags a añadir a la campaña. Los tags pueden ser utilizados para filtrar las estadísticas en el dashboard.
amd
boolean
No
Answer Machine Detection (AMD): Detecta si la llamada ha sido atendida por un contestador automático, si es así, finaliza automáticamente la llamada. El valor por defecto es false.
Política de reintentos
Si se expecifica en número máximo de reintentos en la variable opcional retries, el sistema reintentará automáticamente las llamadas no atendidas. Esta funcionalidad no genera costes añadidos, ya que solo se cobrarán las llamadas que sean atendidas por el destinatario.
Cuando el sistema detecta que la llamada no ha sido atendida, se encola nuevamente pasados 10 minutos. El tiempo transcurrido desde la llamada no atendida hasta el reintento será variable dependiendo de la cola existente, pero siempre superior a 10 minutos.
Texto del mensaje. Como máximo puede tener 160 caracteres si no se especifica que el mensaje sea multiparte (ver parámetro parts). El texto tiene que estar codificado en UTF-8. Es necesario incluir el patrón "{LAND_URL}" en el cuerpo del mensaje. Este patrón será sustituido por el enlace a la landing page.
to
array
Sí
Número de teléfono móvil destinatario del mensaje. Debe incluir el prefijo. Ejemplo: En España 34666666666. Este campo permite indicar multiples destinatarios.
from
string
Sí
Texto del Remitente, esta etiqueta se compondrá de 15 números o 11 caracteres alfanuméricos.
encoding
string
No
Los posibles valores son 'gsm', 'gsm-pt' y 'utf-16'. El valor gsm para envíos normales con codificación GSM7 y 160 caracteres por mensaje y el valor utf-16 para codificación UCS2 (UTF16) y 70 caracteres por mensaje. En caso de no especificarse, el valor por defecto es gsm.
scheduleDate
string
No
Fecha de envió del mensaje en formato UTC. Si se necesita enviar mensajes programados se puede especificar la fecha de envío indicando la fecha en formato YYYYmmddHHiiss. Ejemplo: 20130215142000 sería el 15 de febrero de 2013 a las 14:20:00. En caso de envío inmediato no se tiene que especificar este parámetro.
expirationDate
string
No
Fecha de expiración del mensaje en formato UTC. Formato YYYYmmddHHiiss. Ejemplo: 20130215142000 sería el 15 de febrero de 2013 a las 14:20:00.
parts
integer
No
Indica el número máximo de partes en que se dividirá el mensaje para su envío. Esta variable tiene valor 1 por defecto, por lo que si no se especifica y se envía un mensaje de más de 160 caracteres para codificación gsm, el mensaje fallará. Hay que tener en cuenta que los mensajes concatenados solo pueden tener 153 caracteres por parte en gsm y 67 caracteres por parte en utf-16 y que cada parte se tarifica como un envío. El servidor solo utilizará el mínimo de partes necesaria para realizar el envío del texto aunque el número de partes especificado sea superior al necesario. En caso de que el número de partes sea inferior al necesario para el envío del texto, el envío fallará con el error 105. El número máximo de partes permitido es de 8.
notificationUrl
string
No
URL en la que recibir las notificaciones de entrega.
trans
integer
No
Los valores posibles son 1 y 0. Con el valor 0 el servidor no modifica ningún carácter del mensaje, este es el valor por defecto. Con el valor 1 el servidor se encarga de modificar los caracteres comunes no validos en GSM7 a caracteres validos con la siguiente tabla de traducción: 'á' => 'a', 'í'=>'i', 'ó'=>'o', 'ú'=>'u', 'ç'=>'Ç', 'Á'=>'A', 'Í'=>'I', 'Ó'=>'O', 'Ú'=>'U', 'À'=>'A', 'È'=>'E', 'Ì'=>'I', 'Ò'=>'O', 'Ù'=>'U', 'º' => '', 'ª' => '', 'Õ' => 'O', 'õ' => 'o', 'â' => 'a', 'ê' => 'e', 'î'=>'i', 'ô'=>'o', 'û'=>'u', 'Â'=>'A', 'Ê'=>'E', 'Î'=>'I', 'Ô'=>'O', 'Û'=>'U', 'ã' => 'a', 'Ã' => 'A'.
campaignName
string
No
Nombre de campaña. Si se especifica se creará una campaña con el nombre indicado en el dashboard que contendrá las estadísticas del envío. Si una campaña con este nombre ya existe, las estadísticas de envío se añadirán a la campaña existente.
tags
array
No
campaignName es requerido si se especifica este parámetro. Listado de tags a añadir a la campaña. Los tags pueden ser utilizados para filtrar las estadísticas en el dashboard.
certified
boolean
No
Si se especifica como true el mensaje se enviará como certificado. * Los mensajes certificados tienen coste adicional
sub
array
No
array con variables de sustitución que se aplicarán al mensaje.
splitParts
boolean
No
Para mensajes que superen el tamaño máximo de SMS, el servidor dividirá el mensaje en múltiples SMS en lugar de utilizar SMS concatenados. El valor por defecto es false.
flash
boolean
No
Un SMS flash es un mensaje que aparece directamente en la pantalla del dispositivo. Dependiendo del modelo y del sistema operativo es posible almacenarlo en la bandeja de entrada y enviar mensajes concatenados.
templateBody
string
No
Contenido de la landing page en formato HTML y codificación UTF-8. Requerido sin templateId.
templateId
integer
No
ID de plantilla legacy para enviar como contenido de la landing page. Requerido sin templateBody. Este ID hace referencia a plantillas creadas desde la versión anterior ({{DASHBOARD_HOST}}) de la aplicación de {{NAME}}. Se recomienda utilizar el parámetro templateV2Id cuando sea posible.
templateV2Id
integer
No
ID de plantilla para enviar como contenido de la landing page. Requerido sin templateBody. Este ID hace referencia a la versión actual ({{HOST}}) de la aplicación de {{NAME}}.
Variables de sustitución
Al utilizar el parámetro sub, el array ha de contener tantos elementos como destinatarios del envío.
Es posible indicar variables personalizadas en el cuerpo del mensaje que serán sustituidas por las variables personalizadas del contacto o por las variables indicadas en el parámetro sub.
Filtros de variables personalizadas
Es posible añadir los siguientes filtros a las variables personalizadas.
Filtro
Descripción
Ejemplo
Resultado
lower
Devuelve el texto en minúsculas.
{name|lower}
my name
upper
Devuelve el texto en mayúsculas.
{name|upper}
MY NAME
capitalize
Devuelve el texto con la primera letra de la primera palabra en mayúsculas.
{name|capitalize}
My name
capitalizeAll
Devuelve el texto con la primera letra de cada palabra en mayúsculas.
{name|capitalizeAll}
My Name
formatDotComma
Devuelve el número con punto como separador de miles y coma como separador de decimales.
{number|formatDotComma}
1.234,56
formatCommaDot
Devuelve el número con coma como separador de miles y punto como separador de decimales.
{number|formatCommaDot}
1,234.56
shorten
Devuelve una url acortada. Debe ser una url válida.
{"campaignId":100000,"sendingId":100001,"result":[{"accepted":true,"to":"34666555444","id":"8b4e5d35-dc16-4e2e-8a9c-c222db81f5ba"},{"accepted":false,"to":"34","error":{"code":102,"description":"The messages.1.to field does not contain a valid phone number"}}]}
ID de plantilla de WhatsApp a enviar. La plantilla debe estar aprobada para envío desde la plataforma.
from
string
Sí
Remitente del mensaje. El remitente debe estar dado de alta en la plataforma.
messages
array
Sí
Array de mensajes a enviar.
messages.*.to
string
Sí
Número de teléfono móvil destinatario del mensaje. Debe incluir el prefijo internacional. Ejemplo: En España 34666666666.
messages.*.headerFields
array
No*
Array de variables de sustitución posicionales a aplicar a la cabecera. Requerido para plantillas con variables de cabecera.
messages.*.bodyFields
array
No*
Array de variables de sustitución posicionales a aplicar al cuerpo del mensaje. Requerido para plantillas con variables de mensaje.
messages.*.callToActionFields
array
No*
Array de variables de sustitución posicionales a aplicar a los botones de interacción. Requerido para plantillas con variables de acción.
messages.*.defaultAnswer
array
No
Respuesta por defecto al primer mensaje del usuario.
messages.*.buttonAnswers
array
No
Array de respuestas posicionales a los botones de respuesta rápida.
messages.*.location
object
No*
Información de ubicación. Requerido para plantillas que contengan ubicación.
messages.*.location.lat
string
No*
Latitud del punto geográfico. Requerido para plantillas que contengan ubicación.
messages.*.location.long
string
No*
Longitud del punto geográfico. Requerido para plantillas que contengan ubicación.
messages.*.location.name
string
No
Nombre de la ubicación.
messages.*.location.address
string
No
Dirección de la ubicación.
campaignName
string
No
Nombre de campaña. Si se especifica se creará una campaña con el nombre indicado en el dashboard que contendrá las estadísticas del envío. Si una campaña con este nombre ya existe, las estadísticas de envío se añadirán a la campaña existente.
tags
array
No
Listado de tags a añadir a la campaña. Los tags pueden ser utilizados para filtrar las estadísticas en el dashboard.
Ejemplos de envío
Ejemplos de envío de varios tipos de plantillas de WhatsApp.
Envío de plantilla con variables y auto respuestas.
{"result":{"guid":"100","type":"SMS","content":{"to":"34666555444","from":"SAMPLE","encoding":"gsm","message":"This is a test","campaignId":456,"sendingId":123},"created_at":"2017-09-18 10:49:12","updated_at":"2017-09-18 10:49:12","scheduled_at":"2017-11-11 10:10:10"},"total":1}
Lista todos los envíos programados. Puede filtrarse por tipo (SMS o MAILING) y puede
especificarse un GUID, varios GUID o ningún GUID (para listar todos).
El contenido del mensaje no se muestra en la lista, a no ser que se especifique un único GUID.
Parámetro
Tipo
Obligatorio
Descripción
guid
integer, array
No
Identificador del mensaje o mensajes. Se le puede pasar un identificador, un array de identificadores o ninguno para mostrarlos todos.
Actualiza la fecha de programación un envío, varios envíos o todos los envíos programados.
Puede filtrarse por GUID y/o tipo.
Parámetro
Tipo
Obligatorio
Descripción
guid
integer, array
No
Identificador del mensaje o mensajes. Se le puede pasar un identificador, un array de identificadores o ninguno para mostrarlos todos.
type
string
No
SMS o MAILING
scheduleDate
string
Sí
Fecha de envío del mensaje en formato UTC. Si se necesita enviar mensajes programados se puede especificar la fecha de envío indicando la fecha en formato YYYYmmddHHiiss. Ejemplo: 20130215142000 sería el 15 de febrero de 2013 a las 14:20:00. En caso de envío inmediato no se tiene que especificar este parámetro.
Mostrar los resultados anteriores a la fecha indicada. La fecha se debe especificar en formato ISO 8601. Ejemplo: ?beforeDate=2019-01-01T00%3A00%3A00%2B00%3A00.
afterDate
Mostrar los resultados posteriores a la fecha indicada. La fecha se debe especificar en formato ISO 8601. Ejemplo: ?afterDate=2019-01-01T00%3A00%3A00%2B00%3A00.
Los parámetros deben estar codificados correctamente (urlencode) respecto al estándar RFC 3986 para ser admitidos por el servidor.
Campos de la respuesta
Parámetro
Descripción
name
Nombre asignado a la campaña.
type
Tipo de campaña. Posibles valores: basic, automatic, trigger, testab.
sendings
Listado de envíos asociado a la campaña. Para campañas de tipo basic y automatic el número de envíos siempre será 1.
sendings.*.status
Estado del envío. Posibles valores: PENDING: Envío programado para una fecha futura. SAVED: Envío guardado. No se enviará hasta que se confirme la campaña desde la plataforma. SENDING: Envío en progreso. PAUSED: Envío pausado. FINISHED: Envío finalizado. CANCELLED: Envío cancelado. EDITING: El envío está siendo editado desde la plataforma. OPENED: Los envíos por API reportarán este estado. Indica que el envío puede aceptar más mensajes. AUTOMATED: Envío automatizado a la espera de que se cumplan las condiciones de automatización. WAITING: Envío trigger a la espera de que se cumplan las condiciones de envío.
sendings.*.channel
Canal del envío. Posibles valores: sms, mailing, landing, text2speech, voice-interactive.
sendings.*.total
Total de mensajes a ser enviados.
sendings.*.processed
Total de mensajes enviados.
sendings.*.totalSmsParts
Solo aplicable a envíos SMS. Se indicará el total de partes de sms enviadas para envíos concatenados.
sendings.*.cost
Coste del envío.
sendings.*.currency
Código de moneda para el coste.
sendings.*.tags
Etiquetas asignadas al envío.
sendings.*.scheduledAt
Fecha de programación de la campaña. No se enviará ningún mensaje antes de esta fecha.
sendings.*.expiresAt
Fecha de expiración de la campaña. Pasada esta fecha no se enviarán más mensajes.
sendings.*.events
Resumen de totales de eventos producidos en el envío. Eventos: delivered: El mensaje ha sido entregado al contacto. opened: El contacto ha abierto el mensaje. No aplicable a sms y voz. opened_unique: Total de aperturas únicas. No aplicable a sms y voz. clicked: El contacto ha hecho click en un enlace del mensaje. No aplicable a sms y voz. clicked_unique: Total de clicks únicos. No aplicable a sms y voz. unsubscribed: El contacto se ha dado de baja de la lista. hard_bounced: Total hard bounces generados por el envío. Solo aplicable a mailing. complaint: El contacto ha marcado el mensaje como no deseado. sent: El mensaje ha sido enviado al contacto. soft_bounced: Total soft bounces generados por el envío. Solo aplicable a mailing. undelivered: No ha sido posible entregar el mensaje al contacto. rejected: Se ha rechazado el intento de envío del mensaje. expired: El mensaje ha sido rechazado por cumplirse la fecha de expiración de la campaña. unsubscribed_landing: El contacto se ha dado de baja de la lista desde la landing page incluida en el mensaje.
Bases de datos
Contactos
Listado de contactos
GET{{DASHBOARD_HOST}}/api/rest/contacts
curl -X GET '{{DASHBOARD_HOST}}/api/rest/contacts?include=customFields,groups'\-H'Content-Type: application/json'\-H'Authorization: Basic YOUR_AUTH_TOKEN'
Total de contactos a mostrar en una única petición. Valor por defecto: 100. Máximo: 1000.
include
Incluir los subrecursos asociados en la respuesta. Es posible especificar varios valores separándolos por comas. Valores disponibles: customFields, groups.
email
Filtrar los contactos por el email especificado: Ejemplo: email=myemail@example.com.
phone
Filtrar los contactos por el teléfono especificado: Ejemplo: phone=34666666666.
landline
Filtrar los contactos por el teléfono fijo especificado: Ejemplo: landline=900222222.
countryIso
Filtrar los contactos por el país especificado: Ejemplo: countryIso=ES.
externalId
Filtrar los contactos por el externalId especificado: Ejemplo: externalId=EXT1.
Mostrar un contacto
GET{{DASHBOARD_HOST}}/api/rest/contacts/<ID>
curl -X GET '{{DASHBOARD_HOST}}/api/rest/contacts/1?include=customFields,groups'\-H'Content-Type: application/json'\-H'Authorization: Basic YOUR_AUTH_TOKEN'
Incluir los subrecursos asociados en la respuesta. Es posible especificar varios valores separándolos por comas. Valores disponibles: customFields, groups.
{"error":{"code":422,"description":"The email field is required."}}
Parámetros
Parámetro
Tipo
Obligatorio
Descripción
email
string
Obligatorio cuando no se especifica phone o landline
Email del nuevo contacto.
phone
string
Obligatorio cuando no se especifica email o landline
Número de teléfono móvil del contacto.
landline
string
Obligatorio cuando no se especifica email o phone
Número de teléfono fijo del contacto.
countryIso
string
Obligatorio cuando se especifica phone o landline
ISO code de 2 letras del país del contacto.
groupsIds
array
Obligatorio si no se especifica groupsNames
Lista de grupos en los que se añadirá el nuevo contacto. Para obtener las ids de grupos consultar la documentación para el endpoint correspondiente.
groupsNames
array
Obligatorio si no se especifica groupsIds
Alternativamente, si no se dispone del listado de IDs de grupos, se puede especificar un listado con los nombres de los grupos a los que añadir el contacto.
name
string
No
Nombre del contacto.
surname
string
No
Apellidos del contacto.
customFields[]key
string
No
Nombre del campo personalizado a añadir.
customFields[]type
string
No
Tipo del campo personalizado. Posibles valores: string, date, decimal. Para utilizar un campo fecha el valor debe estar en formato ISO8601. Valor por defecto: string.
{"error":{"code":422,"description":"The email field is required."}}
Parámetros
Parámetro
Tipo
Obligatorio
Descripción
email
string
Obligatorio cuando no se especifica phone o landline
Email del nuevo contacto.
phone
string
Obligatorio cuando no se especifica email o landline
Número de teléfono móvil del contacto.
landline
string
Obligatorio cuando no se especifica email o phone
Número de teléfono fijo del contacto.
countryIso
string
Obligatorio cuando se especifica phone o landline
ISO code de 2 letras del país del contacto.
groupsIds
array
Obligatorio si no se especifica groupsNames
Lista de grupos en los que se añadirá el nuevo contacto. Para obtener las ids de grupos consultar la documentación para el endpoint correspondiente.
groupsNames
array
Obligatorio si no se especifica groupsIds
Alternativamente, si no se dispone del listado de IDs de grupos, se puede especificar un listado con los nombres de los grupos a los que añadir el contacto.
name
string
No
Nombre del contacto.
surname
string
No
Apellidos del contacto.
customFields[]key
string
No
Nombre del campo personalizado a añadir.
customFields[]type
string
No
Tipo del campo personalizado. Posibles valores: string, date, decimal. Para utilizar un campo fecha el valor debe estar en formato ISO8601. Valor por defecto: string.
curl -X POST '{{DASHBOARD_HOST}}/api/rest/groups'\-H'Content-Type: application/json'\-H'Authorization: Basic YOUR_AUTH_TOKEN'\-d'{
"name": "My new contact list"
}'
<?php$curl=curl_init();curl_setopt_array($curl,array(CURLOPT_URL=>'{{DASHBOARD_HOST}}/api/rest/groups',CURLOPT_RETURNTRANSFER=>true,CURLOPT_CUSTOMREQUEST=>'POST',CURLOPT_POSTFIELDS=>'{
"name": "My new contact list"
}',CURLOPT_HTTPHEADER=>array('Content-Type: application/json','Authorization: Basic YOUR_AUTH_TOKEN'),));$response=curl_exec($curl);curl_close($curl);echo$response;
varaxios=require('axios');varconfig={method:'post',url:'{{DASHBOARD_HOST}}/api/rest/groups',headers:{'Content-Type':'application/json','Authorization':'Basic YOUR_AUTH_TOKEN'},data:'{ "name": "My new contact list" }'};axios(config).then(function(response){console.log(JSON.stringify(response.data));}).catch(function(error){console.log(error);});
importrequestsurl="{{DASHBOARD_HOST}}/api/rest/groups"payload="{ \"name\": \"My new contact list\" }"headers={'Content-Type':'application/json','Authorization':'Basic YOUR_AUTH_TOKEN'}response=requests.request("POST",url,headers=headers,data=payload)print(response.text)
require"uri"require"net/http"url=URI("{{DASHBOARD_HOST}}/api/rest/groups")https=Net::HTTP.new(url.host,url.port)https.use_ssl=truerequest=Net::HTTP::Post.new(url)request["Content-Type"]="application/json"request["Authorization"]="Basic YOUR_AUTH_TOKEN"request.body="{ \"name\": \"My new contact list\" }"response=https.request(request)putsresponse.read_body
usingSystem;usingRestSharp;namespaceHelloWorldApplication{classHelloWorld{staticvoidMain(string[]args){varclient=newRestClient("{{DASHBOARD_HOST}}/api/rest/groups");client.Timeout=-1;varrequest=newRestRequest(Method.POST);request.AddHeader("Authorization","Basic YOUR_AUTH_TOKEN");request.AddHeader("Content-Type","application/json");request.AddParameter("application/json","{ \"name\": \"My new contact list\" }",ParameterType.RequestBody);IRestResponseresponse=client.Execute(request);Console.WriteLine(response.Content);}}}
Response (HTTP 201)
{"data":{"id":1,"name":"My new contact list"}}
Error response
{"error":{"code":422,"description":"The name field is required."}}
Parámetros
Parámetro
Tipo
Obligatorio
Descripción
name
string
Sí
Nombre del nuevo grupo.
Actualizar un grupo
PUT{{DASHBOARD_HOST}}/api/rest/groups/<ID>
curl -X PUT '{{DASHBOARD_HOST}}/api/rest/groups'\-H'Content-Type: application/json'\-H'Authorization: Basic YOUR_AUTH_TOKEN'\-d'{
"name": "My new contact list"
}'
<?php$curl=curl_init();curl_setopt_array($curl,array(CURLOPT_URL=>'{{DASHBOARD_HOST}}/api/rest/groups',CURLOPT_RETURNTRANSFER=>true,CURLOPT_CUSTOMREQUEST=>'PUT',CURLOPT_POSTFIELDS=>'{
"name": "My new contact list"
}',CURLOPT_HTTPHEADER=>array('Content-Type: application/json','Authorization: Basic YOUR_AUTH_TOKEN'),));$response=curl_exec($curl);curl_close($curl);echo$response;
varaxios=require('axios');varconfig={method:'put',url:'{{DASHBOARD_HOST}}/api/rest/groups',headers:{'Content-Type':'application/json','Authorization':'Basic YOUR_AUTH_TOKEN'},data:'{ "name": "My new contact list" }'};axios(config).then(function(response){console.log(JSON.stringify(response.data));}).catch(function(error){console.log(error);});
importrequestsurl="{{DASHBOARD_HOST}}/api/rest/groups"payload="{ \"name\": \"My new contact list\" }"headers={'Content-Type':'application/json','Authorization':'Basic YOUR_AUTH_TOKEN'}response=requests.request("PUT",url,headers=headers,data=payload)print(response.text)
require"uri"require"net/http"url=URI("{{DASHBOARD_HOST}}/api/rest/groups")https=Net::HTTP.new(url.host,url.port)https.use_ssl=truerequest=Net::HTTP::Put.new(url)request["Content-Type"]="application/json"request["Authorization"]="Basic YOUR_AUTH_TOKEN"request.body="{ \"name\": \"My new contact list\" }"response=https.request(request)putsresponse.read_body
usingSystem;usingRestSharp;namespaceHelloWorldApplication{classHelloWorld{staticvoidMain(string[]args){varclient=newRestClient("{{DASHBOARD_HOST}}/api/rest/groups");client.Timeout=-1;varrequest=newRestRequest(Method.PUT);request.AddHeader("Authorization","Basic YOUR_AUTH_TOKEN");request.AddHeader("Content-Type","application/json");request.AddParameter("application/json","{ \"name\": \"My new contact list\" }",ParameterType.RequestBody);IRestResponseresponse=client.Execute(request);Console.WriteLine(response.Content);}}}
Response (HTTP 200)
{"data":{"id":1,"name":"My new contact list"}}
Error response
{"error":{"code":422,"description":"The name field is required."}}
La validación se realiza de la siguiente forma, se hace una petición indicando los IDs de grupo o los emails para validar uno o varios grupos o uno o varios emails.
Si todo va bien, la petición devolverá el estado "pending", que significa que está en cola para ser procesado.
Una vez empiece el proceso de validación notificará con un estado "started" y cuando acabe notificará con "finished" con los datos con el total de procesados y el total de válidos entre otros datos. Además en la notificación de "finished" se recibirá la url para poder obtener el detalle completo.
Parámetros
Parámetro
Tipo
Obligatorio
Descripción
groupsIds
array
No (siempre que haya emails)
Listado de grupos a validar (consultar endpoint grupos) dentro del API contactos.
emails
array
No (siempre que haya groupIds)
Listado de emails a validar.
force
boolean
No
En caso de ser true, se verificarán emails que ya han sido verificados anteriormente. Valor por defecto false.
allowRisky
boolean
No
Valor por defecto false. Si el valor es false, se añadirán los correos dudosos a la lista negra, impidiendo su envío. Si el valor es true, se permitirá el envío de estos correos.
notificationUrl
string
No
URL de callback en la que se recibirán las notificaciones de progreso (ver anexo de notificaciones).
{"data":{"id":2,"status":"failed","total":1,"processed":0,"valid":0,"estimatedCost":0.0035,"cost":0,"currency":"EUR","createdAt":"2018-09-20T10:03:22+00:00","updatedAt":"2018-09-20T10:03:22+00:00","finishedAt":null,"resultUrl":null,"error":"Failed to process email validation"}}
La respuesta contendrá una vista previa de la plantilla en formato HTML.
Variables personalizadas en plantillas
Es posible utilizar variables personalizadas en las plantillas, que serán sustituidas por los campos personalizados del contacto en el momento del envío, utilizando la sintaxis {variable}.
Por ejemplo, para incluir la variable personalizada "name" en una plantilla HTML:
La respuesta contendrá una vista previa de la plantilla en formato HTML.
Variables personalizadas en plantillas
Es posible utilizar variables personalizadas en las plantillas, que serán sustituidas por los campos personalizados del contacto en el momento del envío, utilizando la sintaxis {variable}.
Por ejemplo, para incluir la variable personalizada "name" en una plantilla HTML:
Las plantillas aceptan los siguientes patrones de sustitución para el link en los enlaces HTML.
Patrón
Descripción
[unsubscribe_link]
Enlace a la página de baja.
[form_{ID}]
Enlace al formulario con id {ID}
[show_link]
Enlace para ver la plantilla desde el navegador web. Útil para los envíos de tipo mailing.
[attachment_{ID}]
Enlace al archivo adjunto con id {ID}
Por ejemplo para incluir un enlace al formulario con id "12":
<ahref="[form_12]">Form link</a>
Formularios
Crear un formulario
POST{{DASHBOARD_HOST}}/api/rest/form
curl -X POST '{{DASHBOARD_HOST}}/api/rest/forms'\-H'Content-Type: application/json'\-H'Authorization: Basic YOUR_AUTH_TOKEN'\-d'{
"name": "My_form",
"rejectButton": true,
"backgroundUrl": "{{DASHBOARD_HOST}}/assets/login/img/wizard.jpg",
"logoUrl": "{{DASHBOARD_HOST}}/assets/img/logo.png",
"formFields": [
{"type": "h3", "label": "Your opinion is very important to us"},
{"type": "text", "label": "Name", "required": true, "description": "Insert your name", "placeholder": "Insert your name", "customField": "form_name"}
]
}'
<?php$curl=curl_init();curl_setopt_array($curl,array(CURLOPT_URL=>'{{DASHBOARD_HOST}}/api/rest/forms',CURLOPT_RETURNTRANSFER=>true,CURLOPT_CUSTOMREQUEST=>'POST',CURLOPT_POSTFIELDS=>'{
"name": "My_form",
"rejectButton": true,
"backgroundUrl": "{{DASHBOARD_HOST}}/assets/login/img/wizard.jpg",
"logoUrl": "{{DASHBOARD_HOST}}/assets/img/logo.png",
"formFields": [
{"type": "h3", "label": "Your opinion is very important to us"},
{"type": "text", "label": "Name", "required": true, "description": "Insert your name", "placeholder": "Insert your name", "customField": "form_name"}
]
}',CURLOPT_HTTPHEADER=>array('Content-Type: application/json','Authorization: Basic YOUR_AUTH_TOKEN'),));$response=curl_exec($curl);curl_close($curl);echo$response;
importjava.io.DataOutputStream;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.URL;importjava.net.HttpsURLConnection;publicclassApp{publicstaticvoidmain(String[]args){try{URLurl=newURL("{{DASHBOARD_HOST}}/api/rest/forms");HttpsURLConnectionconnection=(HttpsURLConnection)url.openConnection();connection.setRequestMethod("POST");connection.setRequestProperty("Authorization","Basic YOUR_AUTH_TOKEN");connection.setRequestProperty("Accept","application/json");StringrequestBody="{ \"name\": \"My_form\", \"rejectButton\": true, \"backgroundUrl\": \"{{DASHBOARD_HOST}}/assets/login/img/wizard.jpg\", \"logoUrl\": \"{{DASHBOARD_HOST}}/assets/img/logo.png\", \"formFields\": [ {\"type\": \"h3\", \"label\": \"Your opinion is very important to us\"}, {\"type\": \"text\", \"label\": \"Name\", \"required\": true, \"description\": \"Insert your name\", \"placeholder\": \"Insert your name\", \"customField\": \"form_name\"} ] }";connection.setDoOutput(true);DataOutputStreamwr=newDataOutputStream(connection.getOutputStream());wr.writeBytes(requestBody);wr.flush();wr.close();BufferedReaderin=newBufferedReader(newInputStreamReader(connection.getInputStream()));StringinputLine;StringBufferresponse=newStringBuffer();while((inputLine=in.readLine())!=null){response.append(inputLine);}in.close();System.out.println(response.toString());}catch(Exceptione){// TODO: handle exception}}}
varaxios=require('axios');varconfig={method:'post',url:'{{DASHBOARD_HOST}}/api/rest/forms',headers:{'Content-Type':'application/json','Authorization':'Basic YOUR_AUTH_TOKEN'},data:'{ "name": "My_form", "rejectButton": true, "backgroundUrl": "{{DASHBOARD_HOST}}/assets/login/img/wizard.jpg", "logoUrl": "{{DASHBOARD_HOST}}/assets/img/logo.png", "formFields": [ {"type": "h3", "label": "Your opinion is very important to us"}, {"type": "text", "label": "Name", "required": true, "description": "Insert your name", "placeholder": "Insert your name", "customField": "form_name"} ] }'};axios(config).then(function(response){console.log(JSON.stringify(response.data));}).catch(function(error){console.log(error);});
importrequestsurl="{{DASHBOARD_HOST}}/api/rest/forms"payload="{ \"name\": \"My_form\", \"rejectButton\": true, \"backgroundUrl\": \"{{DASHBOARD_HOST}}/assets/login/img/wizard.jpg\", \"logoUrl\": \"{{DASHBOARD_HOST}}/assets/img/logo.png\", \"formFields\": [ {\"type\": \"h3\", \"label\": \"Your opinion is very important to us\"}, {\"type\": \"text\", \"label\": \"Name\", \"required\": true, \"description\": \"Insert your name\", \"placeholder\": \"Insert your name\", \"customField\": \"form_name\"} ] }"headers={'Content-Type':'application/json','Authorization':'Basic YOUR_AUTH_TOKEN'}response=requests.request("POST",url,headers=headers,data=payload)print(response.text)
require"uri"require"net/http"url=URI("{{DASHBOARD_HOST}}/api/rest/forms")https=Net::HTTP.new(url.host,url.port)https.use_ssl=truerequest=Net::HTTP::Post.new(url)request["Content-Type"]="application/json"request["Authorization"]="Basic YOUR_AUTH_TOKEN"request.body="{ \"name\": \"My_form\", \"rejectButton\": true, \"backgroundUrl\": \"{{DASHBOARD_HOST}}/assets/login/img/wizard.jpg\", \"logoUrl\": \"{{DASHBOARD_HOST}}/assets/img/logo.png\", \"formFields\": [ {\"type\": \"h3\", \"label\": \"Your opinion is very important to us\"}, {\"type\": \"text\", \"label\": \"Name\", \"required\": true, \"description\": \"Insert your name\", \"placeholder\": \"Insert your name\", \"customField\": \"form_name\"} ] }"response=https.request(request)putsresponse.read_body
usingSystem;usingRestSharp;namespaceHelloWorldApplication{classHelloWorld{staticvoidMain(string[]args){varclient=newRestClient("{{DASHBOARD_HOST}}/api/rest/forms");client.Timeout=-1;varrequest=newRestRequest(Method.POST);request.AddHeader("Authorization","Basic YOUR_AUTH_TOKEN");request.AddHeader("Content-Type","application/json");request.AddParameter("application/json","{ \"name\": \"My_form\", \"rejectButton\": true, \"backgroundUrl\": \"{{DASHBOARD_HOST}}/assets/login/img/wizard.jpg\", \"logoUrl\": \"{{DASHBOARD_HOST}}/assets/img/logo.png\", \"formFields\": [ {\"type\": \"h3\", \"label\": \"Your opinion is very important to us\"}, {\"type\": \"text\", \"label\": \"Name\", \"required\": true, \"description\": \"Insert your name\", \"placeholder\": \"Insert your name\", \"customField\": \"form_name\"} ] }",ParameterType.RequestBody);IRestResponseresponse=client.Execute(request);Console.WriteLine(response.Content);}}}
Example Request
{"name":"My_form","rejectButton":true,"backgroundUrl":"{{DASHBOARD_HOST}}/assets/login/img/wizard.jpg","logoUrl":"{{DASHBOARD_HOST}}/assets/img/logo.png","formFields":[{"type":"h3","label":"Your opinion is very important to us"},{"type":"text","label":"Name","required":true,"description":"Insert your name","placeholder":"Insert your name","customField":"form_name"},{"type":"email","label":"Email","required":true,"description":"Insert your email","placeholder":"Insert your email","customField":"form_email"},{"type":"radio","label":"How satisfied are you with our platform?","required":true,"description":"Select your response depending on your satisfaction","customField":"form_satisfaction","options":[{"label":"Very satisfied","value":"10"},{"label":"Somewhat satisfied","value":"8"},{"label":"Neither satisfied nor dissatisfied","value":"6"},{"label":"Somewhat dissatisfied","value":"4"},{"label":"Very dissatisfied","value":"2"}]}]}
Parámetros
Parámetro
Tipo
Obligatorio
Descripción
name
string
Sí
Nombre único del formulario.
editable
boolean
No
'true': una vez enviado el cliente podrá volver a enviarlo. 'false': una vez enviado el cliente no podrá volver a enviarlo. Por defecto true.
rejectButton
boolean
No
'true': además del botón de Enviar aparecerá el botón de Rechazar. El botón de Rechazar no envía los datos. 'false': únicamente aparecerá el botón de Enviar. Por defecto false.
backgroundUrl
string
No
Url de imagen de fondo del formulario.
logoUrl
string
No
Url de imagen de logo del formulario.
formFields
array
Sí
Conjunto de elementos que tendrá el formulario. Ver anexo para ver todos los elementos.
Formulario de ejemplo:
Actualizar un formulario
PUT{{DASHBOARD_HOST}}/api/rest/forms/<ID>
curl -X PUT '{{DASHBOARD_HOST}}/api/rest/forms'\-H'Content-Type: application/json'\-H'Authorization: Basic YOUR_AUTH_TOKEN'\-d'{
"name": "My_form",
"rejectButton": true,
"backgroundUrl": "{{DASHBOARD_HOST}}/assets/login/img/wizard.jpg",
"logoUrl": "{{DASHBOARD_HOST}}/assets/img/logo.png",
"formFields": [
{"type": "h3", "label": "Your opinion is very important to us"},
{"type": "text", "label": "Name", "required": true, "description": "Insert your name", "placeholder": "Insert your name", "customField": "form_name"}
]
}'
<?php$curl=curl_init();curl_setopt_array($curl,array(CURLOPT_URL=>'{{DASHBOARD_HOST}}/api/rest/forms',CURLOPT_RETURNTRANSFER=>true,CURLOPT_CUSTOMREQUEST=>'PUT',CURLOPT_POSTFIELDS=>'{
"name": "My_form",
"rejectButton": true,
"backgroundUrl": "{{DASHBOARD_HOST}}/assets/login/img/wizard.jpg",
"logoUrl": "{{DASHBOARD_HOST}}/assets/img/logo.png",
"formFields": [
{"type": "h3", "label": "Your opinion is very important to us"},
{"type": "text", "label": "Name", "required": true, "description": "Insert your name", "placeholder": "Insert your name", "customField": "form_name"}
]
}',CURLOPT_HTTPHEADER=>array('Content-Type: application/json','Authorization: Basic YOUR_AUTH_TOKEN'),));$response=curl_exec($curl);curl_close($curl);echo$response;
importjava.io.DataOutputStream;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.URL;importjava.net.HttpsURLConnection;publicclassApp{publicstaticvoidmain(String[]args){try{URLurl=newURL("{{DASHBOARD_HOST}}/api/rest/forms");HttpsURLConnectionconnection=(HttpsURLConnection)url.openConnection();connection.setRequestMethod("PUT");connection.setRequestProperty("Authorization","Basic YOUR_AUTH_TOKEN");connection.setRequestProperty("Accept","application/json");StringrequestBody="{ \"name\": \"My_form\", \"rejectButton\": true, \"backgroundUrl\": \"{{DASHBOARD_HOST}}/assets/login/img/wizard.jpg\", \"logoUrl\": \"{{DASHBOARD_HOST}}/assets/img/logo.png\", \"formFields\": [ {\"type\": \"h3\", \"label\": \"Your opinion is very important to us\"}, {\"type\": \"text\", \"label\": \"Name\", \"required\": true, \"description\": \"Insert your name\", \"placeholder\": \"Insert your name\", \"customField\": \"form_name\"} ] }";connection.setDoOutput(true);DataOutputStreamwr=newDataOutputStream(connection.getOutputStream());wr.writeBytes(requestBody);wr.flush();wr.close();BufferedReaderin=newBufferedReader(newInputStreamReader(connection.getInputStream()));StringinputLine;StringBufferresponse=newStringBuffer();while((inputLine=in.readLine())!=null){response.append(inputLine);}in.close();System.out.println(response.toString());}catch(Exceptione){// TODO: handle exception}}}
varaxios=require('axios');varconfig={method:'put',url:'{{DASHBOARD_HOST}}/api/rest/forms',headers:{'Content-Type':'application/json','Authorization':'Basic YOUR_AUTH_TOKEN'},data:'{ "name": "My_form", "rejectButton": true, "backgroundUrl": "{{DASHBOARD_HOST}}/assets/login/img/wizard.jpg", "logoUrl": "{{DASHBOARD_HOST}}/assets/img/logo.png", "formFields": [ {"type": "h3", "label": "Your opinion is very important to us"}, {"type": "text", "label": "Name", "required": true, "description": "Insert your name", "placeholder": "Insert your name", "customField": "form_name"} ] }'};axios(config).then(function(response){console.log(JSON.stringify(response.data));}).catch(function(error){console.log(error);});
importrequestsurl="{{DASHBOARD_HOST}}/api/rest/forms"payload="{ \"name\": \"My_form\", \"rejectButton\": true, \"backgroundUrl\": \"{{DASHBOARD_HOST}}/assets/login/img/wizard.jpg\", \"logoUrl\": \"{{DASHBOARD_HOST}}/assets/img/logo.png\", \"formFields\": [ {\"type\": \"h3\", \"label\": \"Your opinion is very important to us\"}, {\"type\": \"text\", \"label\": \"Name\", \"required\": true, \"description\": \"Insert your name\", \"placeholder\": \"Insert your name\", \"customField\": \"form_name\"} ] }"headers={'Content-Type':'application/json','Authorization':'Basic YOUR_AUTH_TOKEN'}response=requests.request("PUT",url,headers=headers,data=payload)print(response.text)
require"uri"require"net/http"url=URI("{{DASHBOARD_HOST}}/api/rest/forms")https=Net::HTTP.new(url.host,url.port)https.use_ssl=truerequest=Net::HTTP::Put.new(url)request["Content-Type"]="application/json"request["Authorization"]="Basic YOUR_AUTH_TOKEN"request.body="{ \"name\": \"My_form\", \"rejectButton\": true, \"backgroundUrl\": \"{{DASHBOARD_HOST}}/assets/login/img/wizard.jpg\", \"logoUrl\": \"{{DASHBOARD_HOST}}/assets/img/logo.png\", \"formFields\": [ {\"type\": \"h3\", \"label\": \"Your opinion is very important to us\"}, {\"type\": \"text\", \"label\": \"Name\", \"required\": true, \"description\": \"Insert your name\", \"placeholder\": \"Insert your name\", \"customField\": \"form_name\"} ] }"response=https.request(request)putsresponse.read_body
usingSystem;usingRestSharp;namespaceHelloWorldApplication{classHelloWorld{staticvoidMain(string[]args){varclient=newRestClient("{{DASHBOARD_HOST}}/api/rest/forms");client.Timeout=-1;varrequest=newRestRequest(Method.PUT);request.AddHeader("Authorization","Basic YOUR_AUTH_TOKEN");request.AddHeader("Content-Type","application/json");request.AddParameter("application/json","{ \"name\": \"My_form\", \"rejectButton\": true, \"backgroundUrl\": \"{{DASHBOARD_HOST}}/assets/login/img/wizard.jpg\", \"logoUrl\": \"{{DASHBOARD_HOST}}/assets/img/logo.png\", \"formFields\": [ {\"type\": \"h3\", \"label\": \"Your opinion is very important to us\"}, {\"type\": \"text\", \"label\": \"Name\", \"required\": true, \"description\": \"Insert your name\", \"placeholder\": \"Insert your name\", \"customField\": \"form_name\"} ] }",ParameterType.RequestBody);IRestResponseresponse=client.Execute(request);Console.WriteLine(response.Content);}}}
Parámetros
Parámetro
Tipo
Obligatorio
Descripción
name
string
Sí
Nombre único del formulario.
editable
boolean
No
'true': una vez enviado el cliente podrá volver a enviarlo. 'false': una vez enviado el cliente no podrá volver a enviarlo. Por defecto true.
rejectButton
boolean
No
'true': además del botón de Enviar aparecerá el botón de Rechazar. El botón de Rechazar no envía los datos. 'false': únicamente aparecerá el botón de Enviar. Por defecto false.
backgroundUrl
string
No
Url de imagen de fondo del formulario.
logoUrl
string
No
Url de imagen de logo del formulario.
formFields
array
Sí
Conjunto de elementos que tendrá el formulario. Ver anexo para ver todos los elementos.
Listado de formularios
GET{{DASHBOARD_HOST}}/api/rest/forms
curl -X GET '{{DASHBOARD_HOST}}/api/rest/forms'\-H'Content-Type: application/json'\-H'Authorization: Basic YOUR_AUTH_TOKEN'
Identificador del mensaje devuelto en la respuesta a la llamada a api/rest/mailing en el campo id.
Eventos
Notificaciones de eventos
Introducción
El servicio de notificación de estados tiene como objetivo informar al servidor del cliente de los eventos que se generan en el servicio de 360nrs. Las notificaciones se realizarán para los envíos realizados por cualquier tipo de canal. De esta forma el cliente podrá trackear en tiempo real cada envío realizado.
Un solo envío puede provocar múltiples eventos, por lo que un envío masivo puede generar un número importante de notificaciones hacia el servidor cliente. Para evitar la saturación del servidor, los eventos a notificar se encolan en 360nrs, por lo que se pueden producir retrasos en la entrega de notificaciones si el servidor cliente es incapaz de gestionar el volumen de notificaciones generadas.
Para poder activar esta funcionalidad el cliente debe facilitar una URL donde se realizarán las peticiones HTTPPOST para notificar un evento.
Identificador alfanumérico que se entregó en el envío por API del mensaje. Si el mensaje se ha enviado por la web, no tendrá valor.
channel
string
Indica a qué canal pertenece el envío al que hace referencia la notificación. Los valores posibles son: sms, mailing, landing, text2speech.
contactId
integer
Identificador único del contacto.
campaignId
integer
Identificador de la campaña.
formId
integer
Identificador único de formulario. (Únicamente para eventos de formulario).
campaignName
string
Nombre de campaña.
event
string
Indica el evento que se ha producido. Los valores posibles son: delivered, opened, clicked, unsubscribed, hard_bounced, complaint, sent, soft_bounced, undelivered, rejected, expired, unsubscribed_landing, form_opened, form_submitted, form_rejected.
extra
string
Parámetro extra con información adicional del evento en formato JSON. El evento "form_submitted" contendrá los valores introducidos en el formulario por el usuario en el siguiente formato:
El evento "clicked" contendrá la url a la que se ha dado clic:
{"url":"url_encoded"}.
smtpResponse
string
Variable opcional que está definida para channel mailing y los eventos delivered, hard_bounced, soft_bounced. Se retorna la respuesta del servidor SMTP del mail destinatario.
eventDate
string
Fecha en la que ocurrió el evento.
Las notificaciones se reintentarán hasta en 5 ocasiones en caso de que el servidor del cliente responda con un código HTTP distinto a 200 OK.
El tiempo de espera entre notificaciones es progresivo, de manera que el primer reintento se realizará en 1 minuto, el segundo a los 2 minutos del reintento anterior, el tercero a los 3 minutos, etc.
Mostrar los resultados anteriores a la fecha indicada. La fecha se debe especificar en formato ISO 8601.
afterDate
Mostrar los resultados posteriores a la fecha indicada. La fecha se debe especificar en formato ISO 8601.
showCustomFields
Si se indica con valor 1 muestra los campos personalizado utilizados.
Los parámetros deben estar codificados correctamente (urlencode) respecto al estándar
RFC 3986 para ser admitidos por el servidor. Por ejemplo, para consultar el reporte de eventos entre las fechas 2019-01-01T00:00:00+00:00 y 2019-02-01T00:00:00+00:00:
Mostrar los resultados anteriores a la fecha indicada. La fecha se debe especificar en formato ISO 8601.
afterDate
Mostrar los resultados posteriores a la fecha indicada. La fecha se debe especificar en formato ISO 8601.
Los parámetros deben estar codificados correctamente (urlencode) respecto al estándar
RFC 3986 para ser admitidos por el servidor. Por ejemplo, para consultar el reporte de pulsaciones de tecla entre las fechas 2019-01-01T00:00:00+00:00 y 2019-02-01T00:00:00+00:00:
Obtener el reporte detallado de pulsaciones de tecla en un envío de voz interactiva. La respuesta será en formato text/csv y contendrá las siguientes columnas: phonenumber, key, message
OTP
Generar código
POST{{DASHBOARD_HOST}}/api/rest/otp/generate
curl -X POST '{{DASHBOARD_HOST}}/api/rest/otp/generate'\-H'Content-Type: application/json'\-H'Authorization: Basic YOUR_AUTH_TOKEN'\-d'{
"recipient": "34666555444"
}'
{"data":[{"countryIso":"AD","countryName":"Andorra","networkName":"Default","mcc":"213","mnc":null,"cost":0.065,"currencyCode":"EUR","currencySymbol":"€"},{"countryIso":"AD","countryName":"Andorra","networkName":"Servei De Tele. DAndorra","mcc":"213","mnc":"003","cost":0.065,"currencyCode":"EUR","currencySymbol":"€"},{"countryIso":"AE","countryName":"United Arab Emirates","networkName":"Default","mcc":"424","mnc":null,"cost":0.0868,"currencyCode":"EUR","currencySymbol":"€"}]}
Cobertura SMS por país
Devuelve la cobertura SMS agrupada por país indicando el coste mínimo y máximo de cada país.
{"data":[{"countryIso":"AD","countryName":"Andorra","networks":["Servei De Tele. DAndorra"],"minCost":0.065,"maxCost":0.065,"currencyCode":"EUR","currencySymbol":"€"},{"countryIso":"AE","countryName":"United Arab Emirates","networks":["DU","Etisalat"],"minCost":0.0868,"maxCost":0.0868,"currencyCode":"EUR","currencySymbol":"€"}]}
Errores
Error Code
HTTP Code
Description
0
202
Accepted for delivery
101
500
Internal Database error
102
400
No valid recipients
103
401
Username or password unknown
104
400
Text message missing
105
400
Text message too long
106
400
Sender missing
107
400
Sender too long
108
400
No valid Datetime for send
109
400
Notification URL incorrect
110
400
Exceeded maximum parts allowed or incorrect number of parts
111
402
Not enough credits
112
401
IP address not allowed
113
400
Invalid coding
114
400
Invalid subject
115
400
Sender is not verified
116
400
Invalid replyTo
117
400
ReplyTo is not verified
118
401
Email blocked for exceeding the hard-bounced limit allowed
119
400
Invalid expiration date
120
400
Invalid GUID
121
400
Invalid scheduled date
122
500
Update error
123
500
Delete error
125
400
Invalid JSON
126
400
Empty campaign name
130
400
Invalid voice language
131
400
Invalid voice gender
132
400
Invalid voice caller
133
400
Invalid audio URL
134
400
Unsupported audio format
140
400
Template missing
141
400
Missing landing placeholder
142
400
Can't split variable placeholders
150
400
Missing billing profile
151
400
Error retrieving TPV url
152
400
Invalid VAT
153
400
Invalid method
154
400
Invalid conversion rate
155
400
Max limit reached
156
400
Min limit reached
157
400
Error generating invoice
160
400
Invalid voice interactive language
161
400
Invalid voice interactive gender
162
400
Invalid voice interactive caller
163
400
Invalid voice interactive audio URL
164
400
Unsupported voice interactive audio format
165
400
Invalid voice interactive speech type
166
400
Ivalid voice interactive menu option type
167
400
Trying to save an existing campaign
168
400
Empty speech type
169
400
Empty menu
170
400
Empty phone key
171
400
Phone Key is not a number
172
400
Phone key out of range
173
400
Empty menu options for sub menu
174
400
Empty phone prefix for call transfer
175
400
Empty phone for call transfer
176
400
Call retries value is not an integer
177
400
Call retries value out of range
178
400
Cost limit value is not an integer
179
400
Speech retries value is not an integer
180
400
Speech retries value out of range
181
400
Speech timeout seconds value is not an integer
182
400
Speech timeout seconds value out of range
183
400
Available times value is not an array
184
400
Available times day is not an integer
185
400
Available times day out of range
186
400
Available times from hour format error
187
400
Available times to hour format error
188
400
Available times from hour is greater than to hour
189
400
Missing available time object property
190
400
Call Retries is specified but its value is empty
191
400
Cost limit is specified but its value is empty
192
400
Speech Retries is specified but its value is empty
193
400
Speech timeout seconds is specified but its value is empty
194
400
Available times is specified but its value is empty
195
400
No valid contacts external IDs
196
400
Available times range is too short
422
422
Input validation error
Anexos
Conjunto de caracteres GSM
Conjunto de caracteres GSM básicos
0x00
0x10
0x20
0x30
0x40
0x50
0x60
0x70
0x00
@
Δ
SP
0
¡
P
¿
p
0x01
£
_
!
1
A
Q
a
q
0x02
$
Φ
"
2
B
R
b
r
0x03
¥
Γ
#
3
C
S
c
s
0x04
è
Λ
¤
4
D
T
d
t
0x05
é
Ω
%
5
E
U
e
u
0x06
ù
Π
&
6
F
V
f
v
0x07
ì
Ψ
'
7
G
W
g
w
0x08
ò
Σ
(
8
H
X
h
x
0x09
Ç
Θ
)
9
I
Y
i
y
0x0A
LF
Ξ
*
:
J
Z
j
z
0x0B
Ø
ESC
+
;
K
Ä
k
ä
0x0C
ø
Æ
,
<
L
Ö
l
ö
0x0D
CR
æ
-
=
M
Ñ
m
ñ
0x0E
Å
ß
.
>
N
Ü
n
ü
0x0F
å
É
/
?
O
§
o
à
* Caracteres especiales
Conjunto de caracteres GSM extendidos
0x00
0x10
0x20
0x30
0x40
0x50
0x60
0x70
0x00
|
0x01
0x02
0x03
0x04
^
0x05
€
0x06
0x07
0x08
{
0x09
}
0x0A
FF
0x0B
SS2
0x0C
[
0x0D
CR2
~
0x0E
]
0x0F
\
* Caracteres especiales
Conjunto de caracteres GSM-PT
Conjunto de caracteres GSM-PT básicos
0x00
0x10
0x20
0x30
0x40
0x50
0x60
0x70
0x00
@
Δ
SP
0
Í
P
~
p
0x01
£
_
!
1
A
Q
a
q
0x02
$
ª
"
2
B
R
b
r
0x03
¥
Ç
#
3
C
S
c
s
0x04
ê
À
º
4
D
T
d
t
0x05
é
∞
%
5
E
U
e
u
0x06
ú
^
&
6
F
V
f
v
0x07
í
\
'
7
G
W
g
w
0x08
ó
€
(
8
H
X
h
x
0x09
ç
Ó
)
9
I
Y
i
y
0x0A
LF
|
*
:
J
Z
j
z
0x0B
Ô
ESC
+
;
K
Ã
k
ã
0x0C
ô
Â
,
<
L
Õ
l
õ
0x0D
CR
â
-
=
M
Ú
m
`
0x0E
Á
Ê
.
>
N
Ü
n
ü
0x0F
á
É
/
?
O
§
o
à
* Caracteres especiales** Caracteres distintos respecto a GSM
Conjunto de caracteres GSM-PT extendidos
0x00
0x10
0x20
0x30
0x40
0x50
0x60
0x70
0x00
|
0x01
À
Â
0x02
Φ
0x03
Γ
0x04
^
0x05
ê
Ω
Ú
€
ú
0x06
Π
0x07
Ψ
0x08
Σ
{
0x09
ç
Θ
}
Í
í
0x0A
FF
0x0B
Ô
SS2
Ã
ã
0x0C
ô
[
Õ
õ
0x0D
CR2
~
0x0E
Á
]
0x0F
á
Ê
\
Ó
ó
â
* Caracteres especiales** Caracteres distintos respecto a GSM
Restricciones de envío por país
En muchos países existen normativas diseñadas para proteger a los usuarios frente a comunicaciones no deseadas, tanto por SMS como por llamadas de voz. Para garantizar que tus campañas lleguen correctamente a su destino y evitar bloqueos o sanciones, es imprescindible ajustarse a estas reglas.
Cada país define sus propias condiciones y restricciones en materia de comunicaciones comerciales, por lo que es importante conocer y respetar las particularidades de cada uno. Es importante tener en cuenta que estas condiciones y restricciones están sujetas a la legislación vigente de cada país, y pueden experimentar modificaciones. 360nrs no se hace responsable del incumplimiento de las políticas, la responsabilidad recae sobre el cliente.
A continuación, encontrarás las restricciones de los principales países, para que puedas operar con seguridad y eficacia. En caso de tener alguna duda o que el país destinatario no forme parte de los listados a continuación, te recomendamos que contactes con nuestro equipo de atención al cliente.
Consideraciones previas
En todos los países es obligatorio contar con el consentimiento del cliente para recibir SMS o llamadas de voz.
En caso de tratarse de SMS promocional, es obligatorio incluir una opción para que el usuario pueda cancelar la suscripción en el contenido de su SMS.
🇫🇷 Francia
Los mensajes SMS con fines comerciales o promocionales enviados a Francia deben cumplir con determinadas normativas legales, que se describen a continuación. En cambio, los mensajes de tipo transaccional no están sujetos a estas restricciones.
Contenido prohibido
Está estrictamente prohibido el envío de mensajes relacionados con temas políticos, religiosos, juegos de azar o promociones no solicitadas.
Restricciones horarias
Los SMS de marketing solo pueden enviarse de lunes a sábado, entre las 08:00 y las 22:00 horas. Cualquier mensaje enviado fuera de este horario será automáticamente bloqueado y programado para su reenvío en la siguiente franja permitida. Es decir, si intentas enviar un SMS un domingo a las 14:00, no se enviará hasta el lunes a 8:00.
Condiciones del Remitente
Contacta con support@360nrs.com para obtener más información y validar tu remitente.
Baja del destinatario
Es obligatorio añadir la mención STOP au [STOP_CODE] como instrucción de cancelación de suscripción voluntaria al final de tus mensajes SMS de marketing para Francia.
🇪🇸 España
Los mensajes SMS enviados a España tienen ciertas condiciones legales. Cualquier SMS identificado como contenido de marketing estará sujeto a las condiciones enumeradas en las secciones a continuación.
Contenido prohibido
Está estrictamente prohibido el envío de mensajes relacionados con temas políticos, religiosos, juegos de azar o promociones no solicitadas.
🇬🇧 Reino Unido
Los mensajes SMS enviados al Reino Unido están limitados a ciertas condiciones regulatorias. Cualquier SMS identificado como contenido de marketing estará sujeto a las condiciones enumeradas a continuación.
Contenido prohibido
Está estrictamente prohibido el envío de mensajes relacionados con temas políticos, religiosos o promociones no solicitadas.
Si envía contenido para adultos o de juegos de azar, debe asegurarse de que la edad de su destinatario se haya verificado en cumplimiento con las Directrices de PSA y Ofcom.
🇺🇸 Estados Unidos
Los mensajes SMS con fines comerciales o promocionales enviados a Estados Unidos deben cumplir con determinadas normativas legales, que se describen a continuación. En cambio, los mensajes de tipo transaccional no están sujetos a estas restricciones.
Contenido restringido
No está permitido el uso de acortadores de URL públicos, como bit.ly o tinyurl. Sin embargo, se admite el uso de dominios personalizados dentro de estos servicios. Por lo que podrá usar el acortador de url propio de 360nrs.
Además, está estrictamente prohibido enviar mensajes que contengan contenido de carácter sexual o pornográfico, material abusivo o acosador, información relacionada con armas de fuego, incluidos fuegos artificiales, así como referencias a alcohol, tabaco o drogas ilegales. También se prohíbe el envío de mensajes sobre juegos de azar, oportunidades de inversión, envío o recepción repetitiva de códigos de acceso de un solo uso (OTP) en nombre de otros proveedores, actividades consideradas de alto riesgo financiero, préstamos o condonación de préstamos, servicios de reparación de crédito, cobro de deudas o asuntos relacionados con impuestos. Igualmente, no se permite contenido vinculado a criptomonedas, incluidas aquellas relacionadas con OTP, consultas inmobiliarias no solicitadas como las del tipo WeBuyHomes, ni promociones asociadas al marketing multinivel.
Condiciones del Remitente
Contacta con support@360nrs.com para obtener más información y validar tu remitente.
🇨🇴 Colombia
Restricciones horarias
Los SMS de marketing solo pueden enviarse de lunes a viernes, entre las 07:00 y las 19:00 horas, y los sábados de 8:00 a 15:00. Los domingos y festivos no está permitido enviar mensajes promocionales. Cualquier mensaje enviado fuera de este horario será automáticamente bloqueado y programado para su reenvío en la siguiente franja permitida. Es decir, si intentas envías un SMS un domingo a las 14:00, no se enviará hasta el lunes a 8:00.
Contenido restringido
El contenido de los mensajes SMS promocionales puede requerir, en algunos casos, un registro previo antes de su envío. Adicionalmente, la plataforma 360nrs podría añadir automáticamente el nombre del remitente al inicio del mensaje o incorporar una URL al final del mismo, según las condiciones del canal o del país de destino.
Contenido prohibido
Está estrictamente prohibido el envío de mensajes relacionados con temas políticos, religiosos, juegos de apuestas o promociones no solicitadas.
🇮🇪 Irlanda
Antes de enviar cualquier tráfico de marketing, se requiere el consentimiento expreso (opt-in) de los usuarios de dispositivos móviles.
Contenido restringido
Está estrictamente prohibido el envío de mensajes relacionados con temas políticos, religiosos, juegos de apuestas o promociones no solicitadas.
Condiciones del Remitente
Contacta con support@360nrs.com para obtener más información y validar tu remitente.