Aucun résultat

SMS transactionnels – exemples

Exemples d'utilisation de Simple transactional. La Simple API envoie un seul SMS par requête - les tableaux de destinataires et les canaux alternatifs ne sont disponibles que dans l'Advanced API.

Un seul destinataire

La plus petite requête qui envoie une notification. number est un seul numéro de téléphone au format international.

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": "Votre commande 4517 a été expédiée." }

Expéditeur propre et Unicode

gText envoie le message depuis un expéditeur texte enregistré. Activez unicode dès que le texte contient des caractères hors de l'alphabet 7 bits - le message est alors limité à 268 caractères par partie.

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 }

Numéro national et envoi planifié

country vous permet d'indiquer un numéro sans préfixe international. schedule accepte ISO 8601 ou un timestamp Unix ; la valeur now, ou l'omission du paramètre, envoie le message immédiatement.

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": "Votre commande 4517 arrive demain.", "schedule": "2026-09-14T09:00:00+02:00" }

Protection contre les doublons et libellé

duplicates_check défini sur on supprime un message au texte identique envoyé au même numéro dans un délai de cinq minutes ; tag attribue au message un libellé pour le retrouver ultérieurement.

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": "Votre commande 4517 a été expédiée.", "duplicates_check": "on", "tag": "orders" }

La réponse est décrite dans la spécification.

Exemples de code

Voici des exemples d'implémentation de la Simple API pour l'envoi de messages SMS transactionnels (notifications) avec un expéditeur texte dans différents langages de programmation :

La signification de chaque paramètre est décrite dans la spécification ; les requêtes brutes figurent dans les méthodes de requête.

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' => 'Texte du message', '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('L’API BulkGate n’a pas répondu.'); } $response = json_decode($body, true, flags: JSON_THROW_ON_ERROR); if (isset($response['error'])) { throw new RuntimeException("BulkGate: {$response['error']} ({$response['type']})"); } echo "Envoyé : {$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' => 'Texte du message', '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); // Une erreur de l'API se reconnaît au statut HTTP ; le corps en contient la description. if($status !== 200) { throw new RuntimeException("BulkGate: {$response['error']} ({$response['type']})"); } echo "Envoyé : {$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' => 'Texte du message', '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 : une erreur de l'API se reconnaît au code de statut, le corps en contient la description. if ($result->getStatusCode() !== 200) { throw new RuntimeException("BulkGate: {$response['error']} ({$response['type']})"); } echo "Envoyé : {$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\": \"Message\", \"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': 'Message', 'sender_id': 'gText', 'sender_id_value': 'BulkGate', }, timeout=30) data = response.json() # Une réponse d'erreur a la forme {type, code, error, detail} — voir le tableau des types d'erreurs. if 'error' in data: raise RuntimeError(f"BulkGate: {data['error']} ({data['type']})") print('Envoyé :', data['data']['sms_id'])

Node.js

nodejs.org

// Node.js 18+ dispose de fetch en global. Le top-level await nécessite ESM (.mjs ou "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: 'Message', sender_id: 'gText', sender_id_value: 'BulkGate', }), }); const data = await response.json(); // Une réponse d'erreur a la forme {type, code, error, detail} — voir le tableau des types d'erreurs. if (!response.ok) { throw new Error(`BulkGate: ${data.error} (${data.type})`); } console.log('Envoyé :', 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": "Message", "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": "Message", "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": "Message", "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": "Message", "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' => 'Message', '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": "Message", "sender_id": "gText", "sender_id_value": "BulkGate"}'
Cette page vous a-t-elle été utile ?