ZPK » APIS » ZPK SMS » Docs

ZPK SMS

API de ZPK para enviar SMS a dispositivos móviles. Soporte para 216 países y envíos programables.

Con la API SMS de ZPK Systems puede enviar mensajes de texto SMS a cualquier dispositivo móvil. Amplia red global de distribución, posibilidad de envío en franjas horarias, y un precio por SMS inmejorable.

Conectando a la API

Servidor y protocolos para la conexión

Conexión a la API
Servidor: https://zpk.systems
Esquema: HTTPS, solo conexiones seguras SSL.
Protocolo:
JSON recomendado

Enviando un JSON en el body del request, y especificando una cabecera Content-Type: application/json en el request

Si envia ficheros como imágenes o documentos, estos deberán estar codificados en base64.


Form-Data no recomendado

Formato usado en los formularios web, no recomendado. Al enviar una solicitud tipo form_data puede enviar todos los campos como parámetros POST separados. Sin embargo si la solicitud es muy grande recomendamos que envie el contenido de la peticion en un único campo de texto llamado _json (con un guión bajo).

Este parametro especial sera procesado por nuestro backend como si se tratase de una solicitud JSON habitual.

El servidor dónde enviar las solicitudes es https://zpk.systems mediante una conexión HTTPS segura.

El tipo de comunicación recomendado es JSON, en cuyo caso especificaremos en la conexión un Content-Type: application/json, y enviaremos el body de la solicitud como un string JSON válido.

Enviando un SMS

POST /api/sms/send
Parámetro Descripción
application_id

alfanumérico requerido

Una id de aplicación, puede obtener la id de una aplicación haciendo click en 'detalles' en su panel

api_key

alfanumérico requerido

La API KEY de la aplicación que efectúa la llamada a esta API, puede obtenerla en su panel, haciendo click en 'detalles' de una aplicación

messages

array requerido Max: 1000

Un array que contiene uno o mas mensajes SMS a enviar.

Estructura de messages
Prámetro Descripción
from

alfanumérico requerido

El nombre de remitente, aparecerá como origen del sms en el dispositivo de destino. La longitud máxima es de 15 caracteres, y los caracteres no-ascii que puedan ser sustítuidos se sustituirán a su caracter ascii.

Por ejemplo á » a

phone

alfanumérico teléfono válido requerido

Un número de teléfono de destino, este debe traer incluido el prefijo internacional

Algunos caracteres como espacios y retornos de línea, guiones de separación... serán eliminados directamente por la API.

message

alfanumérico requerido

El cuerpo del mensaje, con una longitud máxima de 160 caracteres, o de 496 caracteres si se activó la concatenación de SMS.

La longitud puede ser inferior a 160 caracteres si se usa un encoding diferente a GSM7, que es el encoding por defecto.

send_at

afanúmerico fecha opcional

Una fecha en formato YYYY-MM-DD HH:MM:SS, como por ejemplo 2023-04-02 12:30:40

Si establece una fecha en el futuro el el envío se pospondrá a esa fecha, permitiendo programar la fecha de entrega del SMS.

Fechas y zona horaria

Tenga en cuenta que todas las fechas deben enviarse en horario UTC (tiempo universal coordinado).

La fecha actual UTC es: 11/12/2024 19:18:29

reference

alfanumérico opcional

Una referencia que será devuelta por la API en la respuesta. Puede usar esta para gestionar que SMS se enviaron correctamente y cuales no.

concatenate

boleano opcional

Por defecto false. Si se establece los mensajes que superen la longitud de texto máxima se enviarán como varios SMS concatenados.

encoding

alfanumérico opcional

La codificación de caracteres del SMS. Por defecto se usará GSM7 , que permite un envío de 160 caracteres sin acentos ni caracteres especiales como emojis.

La otra opción disponible es UCS2, que disminuirá la longitud máxima de sms a 70 caracteres pero permite enviar caracteres especiales.

callback_url

alfanumérico URL opcional

Una URL de notificación, donde ZPK Systems informará del estado de entrega de los SMS

La URL de notificacion recibe una lista de hasta 1000 envíos, su servidor deberá responder con un código de respuesta 200.

Si su servidor no responde con un código 200 por problemas técnicos, nuestros servidores volverán a intentar notificar esta comunicación cada 30 minutos, durante un máximo de 72 horas.

Respuestas del servidor

El servidor retornará un JSON, con un boleano success si la solicitud de envío se procesó correctamente.

Adicionalmente en el JSON se retornará la lista de los SMS enviados, con un parámetro success indicando si ese mensaje en concreto pudo ser entregado o no.

Cada mensaje dispone además de un código sms_id que identifica ese SMS en concreto. Este código es usado posteriormente en los envíos de informes de estado.

Como en el resto de las peticiones a APIS de ZPK Systems, se dispone un parámetro cost indicando el coste total de la solicitud a la API.

Ejemplo de respuesta con envío correcto.

Respuesta OK
{
   "success": true,
   "messages": [
      {
         "from": "El sitio web",
         "phone": "+34 000000",
         "message": "El mensaje enviado",
         "success": true,
         "sms_id": "f205d6e838ec4110992a4a871a74d279"
      }
   ],
   "cost": 0.02485
}
				

Ejemplo de respuesta con algunos mensajes incorrectos.

Ejemplo con un envío correcto, que sin embargo contenía un número de destino incorrecto.

Respuesta Error
{
   "success": true,
   "messages": [
      {
         "from": "El sitio web",
         "phone": "+34 000000",
         "message": "El mensaje enviado",
         "success": true,
         "sms_id": "f205d6e838ec4110992a4a871a74d279"
      },
      {
         "from": "YourName",
         "phone": "+34 NotValidPhone :)",
         "message": "El mensaje a enviar...",
         "success": false,
         "sms_id": "",
         "error_id": "INVALID_DESTINATION",
         "error_msg": "SMS parameter 'to' must be a number in international format, between 7 and 15 digits."
      }
   ],
   "cost": 0.02485
}
				

Ejemplo de respuesta con error general

Ejemplo con un envío incorrecto que NO será procesado.

Respuesta Error
{
   "success": false,
   "errors": [
      {
         "id": "INVALID_PARAMETER",
         "message": "Messages array is empty.",
		 "on": "messages"
      }
	]
}
				

Consultar precios de envío actuales

Los precios de envío de un SMS pueden ser consultados en este endpoint.

Podemos opcionalmente filtrar los precios por código ISO2 de país, o por extensión de teléfono.

Endpoint de consulta

GET /api/sms/pricing
Parámetro Descripción
application_id

alfanumérico requerido

Una ID de aplicación, puede obtener la id de una aplicación haciendo click en 'detalles' en su panel

api_key

alfanumérico requerido

La API KEY de la aplicación que efectúa la llamada a esta API, puede obtenerla en su panel, haciendo click en 'detalles' de una aplicación

country_code

alfanumérico opcional

Si se facilita este parámetro opcional, se retornaran solo las tarifas cuyo país de destino coincida.

Debe ser un código ISO2, por ejemplo es para España, o us para Estados Unidos.

prefix

alfanumérico opcional

Si se facilita este parametro opcional, se retornarán solo las tarifas cuyo prefijo internacional coincida.

Consultar todas las tarifas

Si no se especifica country_code ni prefix se retornarán todas las tarifas disponibles.

Respuesta

Listado de precios
{
   "success": true,
   "prices": [
      {
         "country_code": "AB",
         "prefix": "7",
         "network_name": "Other",
         "price": 0.0652
      },
      {
         "country_code": "AB",
         "prefix": "7",
         "network_name": "Aquafon",
         "price": 0.0652
      },
      {
         "mas tarifas": "...."
      }
	],
   "cost": 0.02485

}

Callbacks de Notificación

Reciba informes con el estado de cada mensaje en su servidor

Solicitando notificación

Si al hacer una solicitud de envío se establece el parámetro callback_url ZPK notificará a su servidor el estado del envío de SMS cuando tenga una respuesta del operador.

Esta respuesta puede tardar entre unos pocos segundos, y hasta 48 horas, dependiendo del operador de destino.

El envío se realiza mediante una comunicación JSON.

SMS con URL de notificación
{
	"application_id": "app234234",
	"api_key": "DSFJnn3JLdfdfs",
	"callback_url": "https://miservidor.com/zpk_sms_callback",
	"messages":[
		{
			"from": "TEST",
			"phone": "600568046",
			"message": "Test de envío con callback"
		}
	]
}

Recibiendo notificaciones

Cuando el SMS sea entregado o rechazado por el operador, ZPK enviará una notificación JSON a su servidor con un array de resultados de envío.

Notificación recibida
[
	{
		"sms_id":"537b7194d5804ad9b1afead36f3d5e16",
		"from":"YourName",
		"phone":"+34600000000",
		"message":"El mensaje a enviar...",
		"generated_at":"2023-07-16 06:59:49",
		"status":"delivered",
		"delivered_at":"2023-07-16 06:59:59"
	}
]
Posibles valores en status
sms_id Un identificador único del SMS envíado
from El origen que usted especificó al solicitar el envío.
phone El número de teléfono del destinatario
message El mensaje que solicitó enviar
generated_at La fecha en que se solicitó el envío
status El estado actual del mensaje, que puede ser:
not_sent
El mensaje no fue enviado aún por motivos desconocidos
delivered
El mensaje fue entregado al dispositivo destino
accepted
El mensaje fue aceptado por el operador, y debería ser entregado próximamente.
expired
El mensaje expiró sin haber podido ser entregado.
deleted
El mensaje fue eliminado por el operador por motivos desconocidos.
undelivered
El mensaje no fue entregado a discreción del SMSC, los motivos pueden incluir: red no disponible, problemas técnicos del operador, dispositivo fuera de alcance, o problemas de portabilidad temporales.
unknown
El mensaje se encuentra en un estado desconocido, el operador está intentando entregarlo. Este estado podría indicar que el dispositivo está apagado.
rejected
El operador según sus propios criterios, rechazó entregar este mensaje.
delivered_at La fecha en que el mensaje de texto fue entregado al dispositivo destino

Su servidor debe responder con un código HTTP/200, cualquier otro código se interpretará como un error temporal en su servidor, y ZPK reintentará la notificación cada 25 minutos durante un máximo de 56 horas.

Precios

Esta API se factura por demanda, y usted solo pagará según el número de SMS enviados. No hay descuentos por volumen porque nuestra API tiene el mejor precio desde el primer SMS.

Tabla de precios de SMS
País Precio por SMS
España 0,0495 €
Francia 0,0724 €
Estados Unidos 0,0220 €
Abkhazia 0,1300 €
Afganistán 0,1993 €
Albania 0,0594 €
Alemania 0,1078 €
Andorra 0,0997 €
Angola 0,0592 €
Anguilla 0,1495 €
Antigua y Barbuda 0,0997 €
Arabia Saudí 0,0997 €
Argelia 0,1495 €
Argentina 0,0682 €
Armenia 0,1495 €
Aruba 0,1132 €
Australia 0,1081 €
Austria 0,0869 €
Azerbaiyán 0,2492 €
Bahamas 0,0611 €
Bahrein 0,0440 €
Bangladesh 0,1993 €
Barbados 0,1495 €
Belice 0,1495 €
Benín 0,1495 €
Bermudas 0,1993 €
Bielorrusia 0,1993 €
Bolivia 0,0997 €
Bosnia y Herzegovina 0,0835 €
Botswana 0,0637 €
Brasil 0,0306 €
Brunei 0,0264 €
Bulgaria 0,1495 €
Burkina Faso 0,0997 €
Burundi 0,1495 €
Bután 0,2492 €
Bélgica 0,0748 €
Cabo Verde 0,0997 €
Camboya 0,1495 €
Camerún 0,1495 €
Canadá 0,0373 €
Catar 0,0549 €
Chad 0,2492 €
Chile 0,0151 €
China 0,0571 €
Chipre 0,0151 €
Colombia 0,0148 €
Comoras 0,1495 €
Congo 0,1495 €
Congo (Rep. Dem.) 0,1495 €
Corea del Sur 0,0693 €
Costa Rica 0,0395 €
Costa de Marfil 0,1993 €
Croacia 0,0666 €
Cuba 0,0861 €
Curaçao 0,0797 €
Dinamarca 0,0532 €
Dominica 0,1495 €
East Timor 0,1356 €
Ecuador 0,1933 €
Egipto 0,1495 €
El Salvador 0,2374 €
Emiratos Árabes Unidos 0,0997 €
Eritrea 0,0997 €
Eslovenia 0,0997 €
Estonia 0,0454 €
Etiopía 0,1993 €
Filipinas 0,0997 €
Finlandia 0,1165 €
Fiyi 0,1906 €
Gabón 0,1495 €
Gambia 0,1495 €
Georgia 0,1495 €
Ghana 0,0997 €
Gibraltar 0,1026 €
Grecia 0,0626 €
Grenada 0,1495 €
Groenlandia 0,0267 €
Guadalupe 0,1336 €
Guatemala 0,0997 €
Guinea 0,1495 €
Guinea Ecuatorial 0,1069 €
Guinea-Bisáu 0,1303 €
Guyana 0,0997 €
Haiti 0,1495 €
Honduras 0,0913 €
Hong Kong 0,0817 €
Hungría 0,1302 €
India 0,0879 €
Indonesia 0,2492 €
International Networks 0,0732 €
Irak 0,1495 €
Iran 0,1993 €
Irlanda 0,0596 €
Islandia 0,0859 €
Islas Caimán 0,1495 €
Islas Cook 0,0352 €
Islas Faroe 0,0616 €
Islas Malvinas 0,0209 €
Islas Marshall 0,1710 €
Islas Salomón 0,0342 €
Islas Turks y Caicos 0,1495 €
Islas Vírgenes del Reino Unido 0,1495 €
Israel 0,1495 €
Italia 0,0627 €
Jamaica 0,1495 €
Japón 0,0692 €
Jordania 0,1495 €
Kazajistán 0,1993 €
Kenia 0,1583 €
Kirguizistán 0,1993 €
Kiribati 0,1495 €
Kuwait 0,1495 €
Laos 0,0528 €
Lesotho 0,0706 €
Letonia 0,0390 €
Liberia 0,0997 €
Libia 0,2492 €
Liechtenstein 0,0277 €
Lituania 0,0523 €
Luxemburgo 0,0439 €
Líbano 0,0997 €
Macao 0,0937 €
Macedonia 0,0200 €
Madagascar 0,1495 €
Malasia 0,0826 €
Malawi 0,1495 €
Maldivas 0,0612 €
Mali 0,0997 €
Malta 0,0904 €
Marruecos 0,1993 €
Mauricio 0,0997 €
Mauritania 0,1495 €
Moldavia 0,1583 €
Mongolia 0,0462 €
Montenegro 0,0568 €
Montserrat 0,0265 €
Mozambique 0,0541 €
Myanmar 0,1993 €
México 0,0246 €
Mónaco 0,0719 €
Namibia 0,0549 €
Nauru 0,2053 €
Nepal 0,1495 €
Nicaragua 0,0859 €
Nigeria 0,1495 €
Noruega 0,0673 €
Nueva Caledonia 0,0987 €
Nueva Zelanda 0,1625 €
Níger 0,1495 €
Omán 0,0997 €
Pakistán 0,1993 €
Palau 0,1041 €
Palestina 0,2990 €
Panamá 0,0997 €
Papúa Nueva Guinea 0,1672 €
Paraguay 0,0297 €
Países Bajos 0,0989 €
Perú 0,0452 €
Polinesia Francesa 0,0997 €
Polonia 0,0223 €
Portugal 0,0242 €
Puerto Rico 0,0247 €
Reino Unido 0,0407 €
República Centroafricana 0,0391 €
República Checa 0,0598 €
República Dominicana 0,0512 €
República Eslovaca 0,0518 €
República de Sudáfrica 0,0125 €
Reunión 0,2022 €
Ruanda 0,1055 €
Rumania 0,1002 €
Rusia 0,3986 €
Samoa 0,0997 €
Samoa Americana 0,0761 €
San Cristóbal y Nieves 0,1495 €
San Marino 0,0840 €
San Pedro y Miquelón 0,1495 €
San Vicente y Granadinas 0,1495 €
Santa Lucía 0,1495 €
Santo Tomé y Príncipe 0,0989 €
Senegal 0,1236 €
Serbia 0,1859 €
Seychelles 0,0385 €
Sierra Leone 0,1568 €
Singapur 0,0505 €
Siria 0,1993 €
Somalia 0,1495 €
Sri Lanka 0,2492 €
Suazilandia 0,0982 €
Sudán 0,1993 €
Sudán del Sur 0,0586 €
Suecia 0,0615 €
Suiza 0,0333 €
Surinam 0,1514 €
Tailandia 0,0262 €
Taiwán 0,0664 €
Tanzania 0,1495 €
Tayikistán 0,1993 €
Togo 0,1447 €
Tonga 0,0616 €
Trinidad y Tobago 0,0997 €
Turkmenistán 0,1495 €
Turquía 0,0087 €
Túnez 0,0997 €
Ucrania 0,1993 €
Uganda 0,1495 €
Uruguay 0,1000 €
Uzbekistán 0,2492 €
Vanuatu 0,1495 €
Venezuela 0,0977 €
Vietnam 0,1495 €
Yemen 0,1993 €
Yibuti 0,1275 €
Zambia 0,1495 €
Zimbabue 0,1182 €

Integración con PHP

SDK en PHP para enviar mensajes de texto.

ZPK-PHP es una librería de código abierto instalable mediante composer que le permitirá integrar nuestras APIs en su proyecto PHP con un mínimo esfuerzo.

Documentación del SDK para PHP

Instalando ZPK-PHP con composer

Terminal
composer require zpksystems/phpzpk

Ejemplo de request para enviar SMS

Enviando SMS con PHP
<?php

$smsRequest = new zpkSMS( new zpkApplication('appid','key') );

// Add SMS
$sms = new ZpkSms('+34600000000');
$sms->setMessage("Test SMS message");

$smsRequest->addSMS($sms);


// Add SMS with custom reference

$sms = new ZpkSms('+34600000000');
$sms->setMessage("Test SMS message");
$sms->setReference('my-reference');

$smsRequest->addSMS($sms);

// Send
$smsRequest->send();

Regístrese para probar esta API


Regístrese para obtener crédito gratuito y probar esta y otras APIs de ZPK