SMS API dla
programistów.
SMS-y, wiadomości głosowe i kody weryfikacyjne przez REST
LOX24 SMS API łączy Twoją aplikację z 880 sieciami komórkowymi na całym świecie. Przez interfejs REST z JSON wysyłasz SMS-y i wiadomości głosowe, odbierasz odpowiedzi przez webhook oraz wysyłasz kody weryfikacyjne – wszystko na serwerach działających wyłącznie w Europie.
- REST + JSON
- 99,9 % dostępności
- Webhooki
- Serwery w Europie
Czym jest SMS API?
Jakie funkcje oferuje SMS API?
Jak łatwa jest integracja SMS API?
Uwierzytelnianie i punkty końcowe LOX24 SMS API
Wszystkie żądania trafiają na https://api.lox24.eu i są uwierzytelniane za pomocą nagłówka X-LOX24-AUTH-TOKEN . Token składa się z Państwa identyfikatora użytkownika i klucza API (:), który tworzą Państwo w koncie klienta. Żądania i odpowiedzi mają format JSON. Po trzech nieudanych próbach logowania w ciągu minuty API blokuje adres IP wysyłający żądanie na dziesięć minut.
BAZOWY ADRES URLhttps://api.lox24.euNagłówek: X-LOX24-AUTH-TOKEN
POST/sms
POST/sms/dryrun
GET/sms
POST/bulks
GET/incomings
POST/verify_codes
/groups/phones/blocked_numbers
/campaigns/links
GET/me
Wszystkie punkty końcowe z przykładami znajdą Państwo w Dokumentacja API. Plik specyfikacji OpenAPI można wczytać bezpośrednio do Postmana, Insomnii lub generatora kodu.
Przykłady kodu dla curl, PHP, Python, Java, Go, C# i JavaScript
#!/usr/bin/env bash
curl -X POST https://api.lox24.eu/sms \
-H 'Content-Type: application/json' \
-H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx' \
-d '{
"sender_id": "My Sender",
"phone": "+49751234567",
"source": 111,
"service_code": "direct",
"text": "Test message",
"delivery_at": 1573724611,
"is_unicode": true,
"callback_data": "123456",
"voice_lang": "DE"
}''My Sender',
'text' => "First line\nSecond line",
'service_code' => 'direct',
'phone' => '+49751234567',
'delivery_at' => 1573724611,
'is_unicode' => true,
'callback_data' => '123456',
'voice_lang' => 'DE',
];
if(!$body = json_encode($body)) {
die('JSON encoding error!');
}
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_POST => true,
CURLOPT_URL => $uri,
CURLOPT_POSTFIELDS => $body,
CURLOPT_HTTPHEADER => [
"X-LOX24-AUTH-TOKEN: {$token}",
'Accept: application/json',
'Content-Type: application/json',
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 20,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
]);
$response = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
$data = json_decode($response, JSON_OBJECT_AS_ARRAY);
if(201 === $code) {
echo 'Success: response data = ' . var_export($data, true);
} else {
echo "Error: code = {$code}, data = " . var_export($data, true);
}package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
const Method = "POST"
const URL = "https://api.lox24.eu/sms"
const Token = "1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx"
payload := map[string]interface{}{
"sender_id": "My Sender",
"phone": "+49751234567",
"source": 111,
"service_code": "direct",
"text": "Test message",
"delivery_at": 1593724611,
"is_unicode": true,
"callback_data": "123456",
"voice_lang": "DE",
}
jsonPayload, _ := json.Marshal(payload)
client := &http.Client{}
req, err := http.NewRequest(Method, URL, bytes.NewBuffer(jsonPayload))
if err != nil {
log.Fatal(err)
}
req.Header.Add("X-LOX24-AUTH-TOKEN", Token)
req.Header.Add("Content-Type", "application/json")
res, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
log.Fatal(err)
}
switch res.StatusCode {
case 201:
fmt.Println((string(body)))
case 400:
fmt.Println("Error: code = 400 - Invalid input")
case 401:
fmt.Println("Error: code = 401 - Client ID or API key isn't active or invalid!")
case 403:
fmt.Println("Error: code = 403 - Account isn't activated. Please wait or contact to support!")
default:
fmt.Printf("Error: code = %d\n", res.StatusCode)
}
}using Newtonsoft.Json;
using System;
using System.IO;
using System.Net;
using System.Text;
namespace Lox24.Api
{
class client
{
static void Main()
{
string key = "1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx";
string url = "https://api.lox24.eu/sms";
var data = new {
sender_id = "My Sender",
text = "Test message",
service_code = "direct",
phone = "+49751234567",
delivery_at = 1573724611,
is_unicode = true,
callback_data = "123456",
voice_lang = "DE"
};
string postdata = JsonConvert.SerializeObject(data);
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/json; charset=utf-8";
httpWebRequest.Accept = "application/json";
httpWebRequest.Method = "POST";
httpWebRequest.Headers.Add("X-LOX24-AUTH-TOKEN", key);
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write(postdata);
}
using (HttpWebResponse resp = (HttpWebResponse)httpWebRequest.GetResponse())
{
if (resp.StatusCode == HttpStatusCode.Created)
Console.WriteLine("Success: sms resource created");
}
}
}
}import json
import requests
token = "1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx"
url = 'https://api.lox24.eu/sms'
data = {
'sender_id': "My Sender",
'text': "Test message",
'service_code': "direct",
'phone': "+49751234567",
'delivery_at': 1573724611,
'is_unicode': True,
'callback_data': '123456',
'voice_lang': 'DE'
}
headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-LOX24-AUTH-TOKEN': token,
}
try:
# limit czasu wynosi 100 sekund, payload jest automatycznie konwertowany na JSON
res = requests.post(url, headers=headers, json=data, timeout=100)
if res.status_code != 201: # Created
print("Błąd: Nieprawidłowy kod odpowiedzi podczas tworzenia SMS-a")
res.raise_for_status()
else:
print(f'Sukces: code = {res.status_code} - zasób SMS został utworzony')
print("Odpowiedź: ", json.dumps(res.json(), indent=4))
except requests.HTTPError:
if res.status_code == 400:
print("Błąd:400 Nieprawidłowe dane wejściowe")
elif res.status_code == 401:
print("Błąd: code = 401 - Client ID lub klucz API jest nieaktywny albo nieprawidłowy!")
elif res.status_code == 402:
print("Błąd:402 Na Twoim koncie brakuje wystarczających środków!")
elif res.status_code == 403:
print("Błąd: code = 403 - Konto nie zostało aktywowane!")package eu.lox24.doc.sms;
import org.json.JSONObject;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class PostSmsCollection {
public static void main(String[] args) {
var key = "1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx";
var url = "https://api.lox24.eu/sms";
var json = new JSONObject();
json.put("sender_id", "My Sender");
json.put("text", "Test message");
json.put("service_code", "direct");
json.put("phone", "+49751234567");
json.put("delivery_at", 1573724611);
json.put("is_unicode", true);
var httpRequest = HttpRequest.newBuilder(URI.create(url))
.timeout(Duration.ofMillis(100000))
.setHeader("Content-Type", "application/json; charset=utf-8")
.setHeader("Accept", "application/json")
.setHeader("X-LOX24-AUTH-TOKEN", key)
.POST(HttpRequest.BodyPublishers.ofString(json.toString()))
.build();
var client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.build();
try {
var httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
if (httpResponse.statusCode() == HttpURLConnection.HTTP_CREATED) {
System.out.println("Success: sms resource created");
System.out.println(httpResponse.body());
} else {
System.out.println("Error: wrong response code " + httpResponse.statusCode());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}/*
* Wysyłanie SMS-a (POST)
*/
const token = "1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx";
var postObj = {
sender_id: 'My Sender',
text: 'Test message',
service_code: 'direct',
phone: '+49751234567',
delivery_at: 1573724611,
is_unicode: true,
callback_data: "123456",
voice_lang: "DE"
};
var postdata = JSON.stringify(postObj);
const https = require('https');
const options = {
hostname: 'api.lox24.eu',
path: '/sms',
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Content-Length': postdata.length,
'X-LOX24-AUTH-TOKEN': token
}
}
const req = https.request(options, res => {
if (res.statusCode == 201) {
console.log("Success: code = 201 - sms resource created");
res.on('data', d => { process.stdout.write(d) })
}
else if (res.statusCode == 400) console.log("Error: code = 400 - Invalid input");
else if (res.statusCode == 401) console.log("Error: code = 401 - API key isn't active or invalid!");
else if (res.statusCode == 402) console.log("Error: code = 402 - Not enough funds on your account!");
})
req.on('error', error => { console.error(error) })
req.write(postdata);
req.end();PARAMETRY DLA POST /sms · JSON
phoneNumer odbiorcy w formacie międzynarodowym, np. +49151…
textTreść wiadomości. Dłuższe teksty są dzielone na kilka SMS-ów.
sender_idNadawca: tekst do 11 znaków lub numer telefonu do 15 cyfr.
service_codeRodzaj wysyłki, np. direct (domyślnie) lub text2speech dla wiadomości głosowych.
delivery_atCzas wysyłki jako uniksowy znacznik czasu, dla zaplanowanych SMS-ów.
is_unicodetrue dla emoji i znaków specjalnych (UCS-2), w przeciwnym razie zestaw znaków GSM.
callback_dataWłasny identyfikator, np. numer zamówienia. Wraca w raporcie doręczenia.
voice_langJęzyk wiadomości głosowej, np. DE. Jeśli go nie podasz, API rozpozna język automatycznie (20 języków).
Wszystkie parametry, pola wymagane i formaty odpowiedzi znajdziesz w Dokumentacja API.
SMS API także bez programisty
Chcesz skorzystać z zalet LOX24 SMS API w swojej firmie, ale nie masz programisty, który mógłby Ci pomóc? Nie ma problemu. Mamy dla Ciebie rozwiązanie. Dzięki naszej integracji z Zapier łatwo podłączysz swoje oprogramowanie do naszego API bez znajomości programowania. Nie potrzebujesz wsparcia swojego działu IT.
- Ponad 6745 aplikacjiDzięki naszemu rozwiązaniu SMS API możesz za pośrednictwem Zapier komunikować się z ponad 6745 aplikacjami, z których korzystasz w swojej firmie.
- Bramka SMS dla Twojej aplikacjiWiele aplikacji już domyślnie obsługuje wysyłkę SMS-ów z LOX24, na przykład Bitrix24, Theorg i Synology.
- Bez znajomości programowaniaNie potrzebujesz wsparcia swojego działu IT.
Co możesz zbudować z LOX24 SMS API
Jedno API, wiele zastosowań: od kodów logowania i informacji o wysyłce po kampanie ze śledzeniem kliknięć – wszystkie funkcje działają przez ten sam interfejs, ten sam klucz API i te same rozliczenia.
POST /verify_codesPOST /smsPOST /bulks · /campaignsGET /incomings · WebhookFraud-Check APISerwer MCPCo jeszcze oferuje LOX24 SMS API
Poza wysyłką LOX24 SMS API oferuje wszystko, czego potrzebuje integracja na co dzień: webhooki, tryb testowy, listy blokad oraz zapytania o ceny i konto.
Często zadawane pytania o LOX24 SMS API
Jak uwierzytelnić się w LOX24 SMS API?
W każdym żądaniu wysyłasz nagłówek X-LOX24-AUTH-TOKEN o wartości :. Klucz API można utworzyć w koncie klienta LOX24. Dodatkowo można ograniczyć dostęp do własnych serwerów za pomocą blokady IP.
Czy jest dostępna specyfikacja OpenAPI?
Tak. Pełna specyfikacja LOX24 API v2 jest dostępna pod adresem doc.lox24.eu/openapi-en.json. Można ją zaimportować do Postman lub Insomnia albo wygenerować na jej podstawie klienta w wybranym języku.
Czy mogę testować API bez wysyłania SMS-ów?
Tak, przez endpoint POST /sms/dryrun. Sprawdza on Twoje żądanie jak w trybie produkcyjnym i wywołuje symulowany delivery report, bez wysyłania SMS-a.
W jakim formacie podawać numery telefonów?
W formacie międzynarodowym z numerem kierunkowym kraju, na przykład +49151… dla niemieckiego numeru komórkowego.
Jak wysyłać wiadomości głosowe zamiast SMS-ów?
Ustawiasz service_code na text2speech. LOX24 dzwoni do odbiorcy i odczytuje tekst. Język określasz za pomocą voice_lang , albo API rozpoznaje go automatycznie na podstawie tekstu (20 języków).
Jak najskuteczniej wysyłać kody weryfikacyjne?
Przez endpoint /verify_codes. Tam ustalasz kolejność kanałów, na przykład najpierw Telegram, potem połączenie głosowe, na końcu SMS. Jeśli kod nie dotrze jednym kanałem, LOX24 automatycznie spróbuje kolejnego.
Czy są dostępne SDK lub biblioteki?
Pełna dokumentacja API
Utwórz klucz API i wyślij pierwszy SMS
Zarejestruj się za darmo, utwórz klucz API w panelu klienta i przetestuj integrację w trybie dryrun. Na pierwsze prawdziwe SMS-y otrzymasz 50 centów na start.
