A2P SMS Provider aus Deutschland
Mit der LOX24 A2P SMS Schnittstelle können Sie automatisiert SMS aus Ihrer eigenen Anwendung heraus verschicken. Der Versand von A2P SMS über LOX24 ist schnell, zuverlässig und einfach zu handhaben.
Ihr weltweiter SMS Gateway
Unterschiede zwischen A2P, P2P und Enterprise SMS.
A2P SMS steht für “Application-to-Person” SMS, also den Versand von SMS einer Software an einen normalen Anwender. Normalerweise handelt es sich bei der Software um eine Anwendung, welche von einem Unternehmen betrieben wird. Diese Anwendung versendet SMS automatisiert an die Telefone der Endnutzer. Dies können Kunden aber auch Mitarbeiter des Unternehmens sein.
Beispiele:
- Benachrichtungen vom Kreditkartenunternehmen über Umsätze
- Buchungsbestätigungen
- Terminerinnerungen von Ärzten und Werkstätten
- Sicherheitscodes beim Login auf einer Website oder von der Bank vor dem tätigen einer Zahlung (2FA Zwei-Faktor-Authentifizierung)
Man kann A2P SMS also auch als Business-SMS bezeichnen, oder im englischsprachigen Raum gerne auch als Enterprise oder Professional SMS.
Im Gegensatz dazu stehen P2P SMS. Dabei wird die SMS nicht von einer Anwendung verschickt, sondern ganz klassisch von einem Telefon aus. Das sind z.B. private SMS oder auch nicht automatisierte Business-SMS, bei welchen z.B. die Arzthelferin Terminerinnerungen per Hand verschicken muss.
Ihre Vorteile
Warum A2P mit LOX24 verschicken?
Verschiedene Schnittstellen
Wir bieten Ihnen verschiedene API Schnittstellen wie http/mail/soap/kannel für den SMS-Versand und SMS-Empfang.
Höchste Verfügbarkeit
Durch mehrfache Redundanz garantieren wir eine Verfügbarkeit von 99,9% und einen Durchsatz von 10 SMS pro Sekunde.
Günstige Preise ohne Fixkosten
Der SMS Versand ist bereits ab einem Cent je nach Land möglich und wir berechnen keine Grund- oder Einrichtungsgebühr.
Deutscher Datenschutz
Unsere Server befinden sich alle in Deutschland und wir sind bei der Bundesnetzagentur lizensiertes Telekommunikationsunternehmen.
Statistiken & Zustellberichte
Sie erhalten Zustellberichte und haben jederzeit Zugriff auf Ihren Einzelverbindungsnachweis mit Daten zur Zustellquote.
Hohe Sicherheit
Der SMS Gateway ist "state of the art". Verschlüsselung und IP-Sperren sorgen dafür, dass unbefugte keinen Zugriff auf Ihre Daten haben.
Mit Hilfe von curl können Sie in PHP ganz einfach unsere HTTP Schnittstelle nutzen und SMS verschicken.
Mit Go werden io/ioutil und net/http importiert und schon können die Daten der SMS an die SMS-API übertragen werden.
Mit Python haben Sie eine Reihe von verschiedenen Möglichkeiten mit unserem SMS-Gateway zu interagieren. Sie könnenbeispielsweise urllib, Requests, Octopus oder HTTPie verwenden.
Die WebRequest.Create Methode übernimmt die Arbeit für Sie und überträgt die wichtigsten Daten Ihre SMS an unseren Gateway.
- curl
- php
- go
- c#
- python
- java
- 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', // or application/ld+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 Newtonsoft.Json.Linq;
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);
Console.WriteLine("Post data: {0}", postdata);
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ReadWriteTimeout = 100000;
httpWebRequest.ContentType = "application/json; charset=utf-8";
httpWebRequest.Accept = "application/json"; // or application/ld+json
httpWebRequest.Method = "POST";
httpWebRequest.KeepAlive = true;
httpWebRequest.Headers.Add("X-LOX24-AUTH-TOKEN", key);
httpWebRequest.Credentials = CredentialCache.DefaultNetworkCredentials;
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write(postdata);
streamWriter.Flush();
streamWriter.Close();
}
try
{
using (HttpWebResponse resp = (HttpWebResponse)httpWebRequest.GetResponse())
{
if(resp.StatusCode == HttpStatusCode.Created) {
Console.WriteLine("Success:{0} {1}", (int)resp.StatusCode, "sms resource created");
} else {
Console.WriteLine("Error: wrong response code {0} on create sms", (int)resp.StatusCode);
}
Stream respStream = resp.GetResponseStream();
using (StreamReader sr = new StreamReader(respStream, Encoding.UTF8))
{
string responseText = sr.ReadToEnd();
Console.WriteLine("responseText : {0}", responseText);
}
}
}
catch (System.Net.WebException ex)
{
var webResponse = ex.Response as System.Net.HttpWebResponse;
Console.WriteLine("Error:{0}", webResponse.StatusCode);
switch (webResponse.StatusCode)
{
case HttpStatusCode.BadRequest: // 400
Console.WriteLine("Error:400 Invalid input");
break;
case HttpStatusCode.Unauthorized: // 401
Console.WriteLine("Error:401 Client ID or API key isn't active or invalid!");
break;
case HttpStatusCode.PaymentRequired: // 402
Console.WriteLine("Error:402 There are not enough funds on your account!");
break;
case HttpStatusCode.Forbidden: // 403
Console.WriteLine("Error:403 Account isn't activated. Please wait or contact to support!");
break;
case HttpStatusCode.NotFound: // 404
Console.WriteLine("Error:404 Resource not found");
break;
case HttpStatusCode.InternalServerError: // 500
case HttpStatusCode.BadGateway: //502
case HttpStatusCode.ServiceUnavailable: // 503
case HttpStatusCode.GatewayTimeout: // 504
Console.WriteLine("System error! Please contact to LOX24 support!");
break;
}
}
}
}
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,
}
print("Post data : ", json.dumps(data, indent=4))
try:
# timeout is 100 seconds, the payload is automatically converted to json format
res = requests.post(url, headers=headers, json=data, timeout=100)
if res.status_code != 201: # Created
print("Error: Wrong response code on create sms")
res.raise_for_status()
else:
print(f'Success: code = {res.status_code} - sms resource created')
print("Response: ", json.dumps(res.json(), indent=4))
except requests.HTTPError:
if res.status_code == 400:
print("Error:400 Invalid input")
elif res.status_code == 401:
print("Error: code = 401 - Client ID or API key isn't active or invalid!")
elif res.status_code == 402:
print("Error:402 There are not enough funds on your account!")
elif res.status_code == 403:
print("Error: code = 403 - Account isn't activated. Please wait or contact to support!")
elif res.status_code == 404:
print("Error:404 Resource not found")
elif res.status_code in (500, 502, 503, 504):
print("System error! Please contact to LOX24 support!")
else:
print(f"Error: code {res.status_code}")
print(json.dumps(res.json(), indent=4))
package eu.lox24.doc.sms;
import org.json.JSONObject;
import java.io.IOException;
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);
json.put("callback_data", "123456");
json.put("voice_lang", "DE");
var postData = json.toString();
System.out.println("Post data: " + postData);
var httpRequest = HttpRequest.newBuilder(URI.create(url))
.timeout(Duration.ofMillis(100000))
.setHeader("Content-Type", "application/json; charset=utf-8")
.setHeader("Accept", "application/json") // or application/ld+json
.setHeader("X-LOX24-AUTH-TOKEN", key)
.POST(HttpRequest.BodyPublishers.ofString(postData))
.build();
var client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_1_1) // Http 1.1 clients are kept alive be default
.build();
try {
var httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
if (httpResponse.statusCode() == HttpURLConnection.HTTP_CREATED) {
System.out.println("Success:" + httpResponse.statusCode() + " " + "sms resource created");
System.out.println("Response text : \n" + httpResponse.body());
} else {
System.out.println("Error: wrong response code " + httpResponse.statusCode() + " on create sms");
switch (httpResponse.statusCode()) {
case HttpURLConnection.HTTP_BAD_REQUEST: // 400
System.out.println("Error:400 Invalid input");
break;
case HttpURLConnection.HTTP_UNAUTHORIZED: // 401
System.out.println("Error:401 Client ID or API key isn't active or invalid!");
break;
case HttpURLConnection.HTTP_PAYMENT_REQUIRED: // 402
System.out.println("Error:402 There are not enough funds on your account!");
break;
case HttpURLConnection.HTTP_FORBIDDEN: // 403
System.out.println("Error:403 Account isn't activated. Please wait or contact to support!");
break;
case HttpURLConnection.HTTP_INTERNAL_ERROR: // 500
case HttpURLConnection.HTTP_BAD_GATEWAY: //502
case HttpURLConnection.HTTP_UNAVAILABLE: // 503
case HttpURLConnection.HTTP_GATEWAY_TIMEOUT: // 504
System.out.println("System error! Please contact to LOX24 support!");
break;
}
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
/*
* Post sms
*/
const token = "7b7c6063bab885ce79814b5ff1ee6885";
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 - Client ID or API key isn't active or invalid!");
else if (res.statusCode == 402) console.log("Error: code = 402 - There are not enough funds on your account!");
else if (res.statusCode == 403) console.log("Error: code = 403 - Account isn't activated. Please wait or contact to support!");
})
req.on('error', error => {
console.error(error)
})
req.write(postdata);
req.end();
Wir haben die Lösung auf Ihre Fragen!
Sind die A2P SMS DSGVO konform?
Natürlich, als deutscher Anbieter unterliegen wir der DSGVO und dem deutschen Telekommunikationsgesetz.
Kann ich den Dienst testen?
Natürlich, Sie können sich ohne Verpflichtungen bei uns Anmelden und erhalten 50 Cent gratis Testguthaben für Ihre ersten SMS.
Funktionieren A2P SMS weltweit?
Ja, wir unterstützen mehr als 800 Netze weltweit. Der SMS Preis ist oft sogar etwas günstiger als für SMS nach Europa.
Wo befinden sich die Server?
Alle unsere Server befinden sich ausschließlich in Deutschland. Wir garantieren die Sicherheit Ihrer Daten.
Gibt es eine Vertragslaufzeit?
Nein, Sie können jederzeit ohne Einhaltung einer Frist kündigen. Wir sind aber sicher, dass Sie zufrieden mit uns sein werden.
Ähnliche Dienste
Mail2SMS
Senden Sie Ihre SMS einfach als normale E-Mail. Unser Mail Server übersetzt die Nachrichten in eine SMS und leitet Sie an Ihre Empfänger als Textnachricht weiter.
Einzel-SMS
Über unsere Website und auch über die API können Sie einzelne SMS verschicken. Dabei ist es natürlich möglich auch Vorlagen zu verwenden aber grundsätzlich ist der Inhalt und Absender der SMS individuell und wird bei jedem Versand von Ihnen festgelegt.
SMS-MO: Inbound SMS
Sie können mit uns nicht nur SMS versenden. Ihre Kunden können auf diese SMS auch antworten. Die Antworten können Sie per E-Mail empfangen oder einfach in Ihrem Web-Interface im Posteingang einsehen. Dadurch können Kunden direkt auf Ihre Massen-SMS reagieren und beispielsweise Termine bestätigen, Bestellungen aufgeben oder um einen Rückruf bitten. Treten Sie in einen Dialog mit Ihren Kunden und nutzen Sie die geringe Hemmschwelle des Kunden, eine SMS-Antwort zu schicken.
Jetzt SMS API Testen!
Integrieren Sie noch heute unsere SMS-API in Ihre Anwendung. Mit 50 Cent gratis Guthaben können Sie den SMS Gateway ohne Verpflichtungen testen.