No se ha encontrado nada

SMS transaccional – ejemplos

Ejemplos de uso de Simple transactional. Simple API envía un único SMS en una única solicitud: los arrays de destinatarios y los canales alternativos solo están disponibles en la Advanced API.

Un destinatario

La solicitud más pequeña que envía una notificación. number es un único número de teléfono en formato internacional.

POST /api/1.0/simple/transactional HTTP/1.1 Host: portal.bulkgate.com Content-Type: application/json { "application_id": 451, "application_token": "NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj", "number": "420777777777", "text": "Your order 4517 has been shipped." }

Remitente propio y Unicode

gText envía el mensaje desde un remitente de texto registrado. Active unicode siempre que el texto contenga caracteres fuera del alfabeto de 7 bits: el mensaje se acorta a 268 caracteres por parte.

POST /api/1.0/simple/transactional HTTP/1.1 Host: portal.bulkgate.com Content-Type: application/json { "application_id": 451, "application_token": "NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj", "number": "420777777777", "text": "Vaše zásilka 4517 je na cestě.", "sender_id": "gText", "sender_id_value": "BulkGate", "unicode": true }

Número nacional y envío programado

country le permite indicar un número sin el prefijo internacional. schedule admite ISO 8601 o una marca de tiempo Unix; el valor now, o la omisión del parámetro, envía el mensaje de inmediato.

POST /api/1.0/simple/transactional HTTP/1.1 Host: portal.bulkgate.com Content-Type: application/json { "application_id": 451, "application_token": "NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj", "number": "777777777", "country": "cz", "text": "Your order 4517 arrives tomorrow.", "schedule": "2026-09-14T09:00:00+02:00" }

Protección contra duplicados y etiqueta

duplicates_check con el valor on descarta un mensaje con el mismo texto al mismo número en un plazo de cinco minutos; tag etiqueta el mensaje para poder recuperarlo más adelante.

POST /api/1.0/simple/transactional HTTP/1.1 Host: portal.bulkgate.com Content-Type: application/json { "application_id": 451, "application_token": "NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj", "number": "420777777777", "text": "Your order 4517 has been shipped.", "duplicates_check": "on", "tag": "orders" }

La respuesta se describe en la especificación.

Ejemplos de código

A continuación encontrará ejemplos de implementación de Simple API para enviar mensajes SMS transaccionales (notificaciones) con un ID de remitente de texto en distintos lenguajes de programación:

Para el significado de cada parámetro, consulte la especificación; para ver solo las solicitudes, sin código, consulte los métodos de la petición.

PHP

php.net

$context = stream_context_create(['http' => [ 'method' => 'POST', 'header' => 'Content-Type: application/json', 'content' => json_encode([ 'application_id' => 451, 'application_token' => 'NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj', 'number' => '420777777777', 'text' => 'Texto del mensaje', 'sender_id' => 'gText', 'sender_id_value' => 'BulkGate', ], JSON_THROW_ON_ERROR), 'timeout' => 30, 'ignore_errors' => true, ]]); $body = file_get_contents('https://portal.bulkgate.com/api/1.0/simple/transactional', false, $context); if ($body === false) { throw new RuntimeException('La API de BulkGate no ha respondido.'); } $response = json_decode($body, true, flags: JSON_THROW_ON_ERROR); if (isset($response['error'])) { throw new RuntimeException("BulkGate: {$response['error']} ({$response['type']})"); } echo "Enviado: {$response['data']['sms_id']}\n";

PHP cURL

php.net/curl

$curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => 'https://portal.bulkgate.com/api/1.0/simple/transactional', CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30, CURLOPT_HTTPHEADER => ['Content-Type: application/json'], CURLOPT_POSTFIELDS => json_encode([ 'application_id' => 451, 'application_token' => 'NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj', 'number' => '420777777777', 'text' => 'Texto del mensaje', 'sender_id' => 'gText', 'sender_id_value' => 'BulkGate', ], JSON_THROW_ON_ERROR), ]); $body = curl_exec($curl); $status = curl_getinfo($curl, CURLINFO_RESPONSE_CODE); if($body === false) { throw new RuntimeException('BulkGate: ' . curl_error($curl)); } $response = json_decode($body, true, flags: JSON_THROW_ON_ERROR); // Un error de la API se reconoce por el estado HTTP; el cuerpo contiene su descripción. if($status !== 200) { throw new RuntimeException("BulkGate: {$response['error']} ({$response['type']})"); } echo "Enviado: {$response['data']['sms_id']}\n";

PHP Guzzle

docs.guzzlephp.org

// composer require guzzlehttp/guzzle use GuzzleHttp\Client; use GuzzleHttp\Exception\GuzzleException; $client = new Client(['timeout' => 30, 'http_errors' => false]); try { $result = $client->post('https://portal.bulkgate.com/api/1.0/simple/transactional', ['json' => [ 'application_id' => 451, 'application_token' => 'NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj', 'number' => '420777777777', 'text' => 'Texto del mensaje', 'sender_id' => 'gText', 'sender_id_value' => 'BulkGate', ]]); } catch (GuzzleException $e) { throw new RuntimeException('BulkGate: ' . $e->getMessage(), previous: $e); } $response = json_decode((string) $result->getBody(), true, flags: JSON_THROW_ON_ERROR); // http_errors => false: un error de la API se reconoce por el código de estado, el cuerpo contiene su descripción. if ($result->getStatusCode() !== 200) { throw new RuntimeException("BulkGate: {$response['error']} ({$response['type']})"); } echo "Enviado: {$response['data']['sms_id']}\n";

Go

go.dev

package main import ( "fmt" "strings" "net/http" "io/ioutil" ) func main() { url := "https://portal.bulkgate.com/api/1.0/simple/transactional" payload := strings.NewReader("{\"application_id\": 451, \"application_token\": \"NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj\", \"number\": \"420777777777\", \"text\": \"Mensaje\", \"sender_id\": \"gText\", \"sender_id_value\": \"BulkGate\"}") req, _ := http.NewRequest("POST", url, payload) req.Header.Add("Content-Type", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := ioutil.ReadAll(res.Body) fmt.Println(string(body)) }

Python

python.org

# pip install requests import requests response = requests.post('https://portal.bulkgate.com/api/1.0/simple/transactional', json={ 'application_id': 451, 'application_token': 'NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj', 'number': '420777777777', 'text': 'Mensaje', 'sender_id': 'gText', 'sender_id_value': 'BulkGate', }, timeout=30) data = response.json() # Una respuesta de error tiene la forma {type, code, error, detail}; consulte la tabla de tipos de error. if 'error' in data: raise RuntimeError(f"BulkGate: {data['error']} ({data['type']})") print('Enviado:', data['data']['sms_id'])

Node.js

nodejs.org

// Node.js 18+ tiene fetch global. El await de nivel superior requiere ESM (.mjs o "type": "module"). const response = await fetch('https://portal.bulkgate.com/api/1.0/simple/transactional', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({ application_id: 451, application_token: 'NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj', number: '420777777777', text: 'Mensaje', sender_id: 'gText', sender_id_value: 'BulkGate', }), }); const data = await response.json(); // Una respuesta de error tiene la forma {type, code, error, detail}; consulte la tabla de tipos de error. if (!response.ok) { throw new Error(`BulkGate: ${data.error} (${data.type})`); } console.log('Enviado:', data.data.sms_id);

Java

java.net.http.HttpClient

import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://portal.bulkgate.com/api/1.0/simple/transactional")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(""" { "application_id": 451, "application_token": "NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj", "number": "420777777777", "text": "Mensaje", "sender_id": "gText", "sender_id_value": "BulkGate" }""")) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode() + " " + response.body());

Kotlin

kotlinlang.org

import java.net.URI import java.net.http.HttpClient import java.net.http.HttpRequest import java.net.http.HttpResponse val payload = """ { "application_id": 451, "application_token": "NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj", "number": "420777777777", "text": "Mensaje", "sender_id": "gText", "sender_id_value": "BulkGate" } """.trimIndent() val request = HttpRequest.newBuilder() .uri(URI.create("https://portal.bulkgate.com/api/1.0/simple/transactional")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(payload)) .build() val response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()) println("${response.statusCode()} ${response.body()}")

C# .NET

learn.microsoft.com

using System.Net.Http; using System.Text; var payload = """ { "application_id": 451, "application_token": "NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj", "number": "420777777777", "text": "Mensaje", "sender_id": "gText", "sender_id_value": "BulkGate" } """; using var client = new HttpClient(); var response = await client.PostAsync( "https://portal.bulkgate.com/api/1.0/simple/transactional", new StringContent(payload, Encoding.UTF8, "application/json")); Console.WriteLine($"{(int) response.StatusCode} {await response.Content.ReadAsStringAsync()}");

C++ libcurl

curl.se/libcurl

#include <curl/curl.h> #include <iostream> #include <string> static size_t collect(char *data, size_t size, size_t nmemb, std::string *out) { out->append(data, size * nmemb); return size * nmemb; } int main() { const std::string payload = R"json( { "application_id": 451, "application_token": "NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj", "number": "420777777777", "text": "Mensaje", "sender_id": "gText", "sender_id_value": "BulkGate" } )json"; CURL *curl = curl_easy_init(); if (curl == nullptr) { std::cerr << "curl_easy_init failed\n"; return 1; } curl_slist *headers = curl_slist_append(nullptr, "Content-Type: application/json"); std::string body; curl_easy_setopt(curl, CURLOPT_URL, "https://portal.bulkgate.com/api/1.0/simple/transactional"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload.c_str()); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, collect); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &body); const CURLcode result = curl_easy_perform(curl); long status = 0; curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &status); curl_slist_free_all(headers); curl_easy_cleanup(curl); if (result != CURLE_OK) { std::cerr << curl_easy_strerror(result) << "\n"; return 1; } std::cout << status << " " << body << "\n"; return 0; }

Ruby

ruby-lang.org

require 'json' require 'net/http' uri = URI('https://portal.bulkgate.com/api/1.0/simple/transactional') response = Net::HTTP.post(uri, { 'application_id' => 451, 'application_token' => 'NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj', 'number' => '420777777777', 'text' => 'Mensaje', 'sender_id' => 'gText', 'sender_id_value' => 'BulkGate' }.to_json, 'Content-Type' => 'application/json') puts "#{response.code} #{response.body}"

Bash cURL

curl.se

curl --request POST \ --url https://portal.bulkgate.com/api/1.0/simple/transactional \ --header 'Content-Type: application/json' \ --data '{"application_id": 451, "application_token": "NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj", "number": "420777777777", "text": "Mensaje", "sender_id": "gText", "sender_id_value": "BulkGate"}'
¿Le ha resultado útil esta página?