RCSZilla Version 1.0

API für eingehende Nachrichten

Empfangene SMS-, WhatsApp- und E-Mail-Nachrichten über die REST-API lesen.

Überblick

Diese Endpunkte ermöglichen es Ihnen, eingehende Nachrichten abzurufen, die RCSZilla empfangen hat — SMS und WhatsApp über Android-Geräte, und E-Mail über IMAP-Abfrage. Verwenden Sie sie für Batch-Lesevorgänge, CRM-Synchronisierung oder als Fallback neben Webhooks.

EndpointMethodeBeschreibung
incoming_messagesGETEmpfangene SMS- und WhatsApp-Nachrichten auflisten.
incoming_emailsGETEmpfangene E-Mails aus IMAP-Postfächern auflisten.
*
Für effizientes Polling verwenden Sie after_id statt Datumsbereiche. Speichern Sie die höchste id aus der letzten Antwort und übergeben Sie sie beim nächsten Aufruf — Sie erhalten nur neue Nachrichten, keine Duplikate.

Eingehende SMS / WhatsApp auflisten

GET /?endpoint=incoming_messages

Gibt eine paginierte Liste von SMS- und WhatsApp-Nachrichten zurück, die von Ihren Android-Geräten empfangen wurden. Enthält Kontakt- und Geräteinformationen.

Abfrageparameter

FeldTypBeschreibung
sincestring optional ISO 8601 Datum-Zeit. Nur Nachrichten, die zu oder nach diesem Zeitpunkt empfangen wurden.
untilstring optional ISO 8601 Datum-Zeit. Nur Nachrichten, die zu oder vor diesem Zeitpunkt empfangen wurden.
channelstring optional Nach Kanal filtern: sms oder whatsapp.
device_idint optional Nach Geräte-ID filtern.
from_phonestring optional Nach Absender-Telefonnummer filtern (exakte Übereinstimmung).
after_idint optional Nur Nachrichten mit einer ID größer als dieser Wert zurückgeben. Ideal für inkrementelles Polling.
limitint optional Ergebnisse pro Seite (1–100). Standard: 50.
offsetint optional Paginierungs-Offset. Standard: 0.

Beispielanfrage

curl "https://api.rcszilla.com/?endpoint=incoming_messages&after_id=208&limit=50" \
  -H "Authorization: Bearer YOUR-API-TOKEN"
curl "https://api.rcszilla.com/?endpoint=incoming_messages&since=2026-05-27T00:00:00Z&channel=sms&limit=20" \
  -H "Authorization: Bearer YOUR-API-TOKEN"
curl "https://api.rcszilla.com/?endpoint=incoming_messages&from_phone=%2B40712345678&limit=10" \
  -H "Authorization: Bearer YOUR-API-TOKEN"

Antwort

JSON
{
  "success": true,
  "total": 142,
  "limit": 50,
  "offset": 0,
  "messages": [
    {
      "id": 209,
      "channel": "sms",
      "from_phone": "+40712345678",
      "message": "Yes, I want to book an appointment for Monday",
      "received_at": "2026-05-27 14:30:05",
      "contact": {
        "id": 42,
        "name": "John Doe",
        "phone": "+40712345678"
      },
      "device": {
        "id": 6,
        "name": "Office Samsung"
      }
    },
    {
      "id": 208,
      "channel": "whatsapp",
      "from_phone": "+40798765432",
      "message": "Hello, do you have availability this week?",
      "received_at": "2026-05-27 14:25:12",
      "contact": null,
      "device": {
        "id": 6,
        "name": "Office Samsung"
      }
    }
  ]
}

Antwortfelder

FeldTypBeschreibung
idintEindeutige Nachrichten-ID. Verwenden Sie den höchsten Wert als after_id für inkrementelles Polling.
channelstringsms or whatsapp
from_phonestringTelefonnummer des Absenders.
messagestringNachrichtentext.
received_atstringWann die Nachricht empfangen wurde.
contactobject|nullZugeordneter Kontakt (id, name, phone) oder null wenn der Absender unbekannt ist.
deviceobject|nullGerät, das die Nachricht empfangen hat (id, name).

Eingehende E-Mails auflisten

GET /?endpoint=incoming_emails

Gibt eine paginierte Liste von E-Mails zurück, die von IMAP-Postfächern empfangen wurden, die mit Ihren SMTP-Servern verknüpft sind. Enthält sowohl Klartext- als auch HTML-Body.

Abfrageparameter

FeldTypBeschreibung
sincestring optional ISO 8601 Datum-Zeit. Nur Nachrichten, die zu oder nach diesem Zeitpunkt empfangen wurden.
untilstring optional ISO 8601 Datum-Zeit. Nur Nachrichten, die zu oder vor diesem Zeitpunkt empfangen wurden.
smtp_server_idint optional Nach SMTP/IMAP-Server-ID filtern.
from_emailstring optional Nach Absender-E-Mail-Adresse filtern (exakte Übereinstimmung).
searchstring optional Suche in Betreff, from_email und from_name (teilweise Übereinstimmung).
after_idint optional Nur Nachrichten mit einer ID größer als dieser Wert zurückgeben. Ideal für inkrementelles Polling.
limitint optional Ergebnisse pro Seite (1–100). Standard: 50.
offsetint optional Paginierungs-Offset. Standard: 0.

Beispielanfrage

curl "https://api.rcszilla.com/?endpoint=incoming_emails&after_id=309&limit=20" \
  -H "Authorization: Bearer YOUR-API-TOKEN"
curl "https://api.rcszilla.com/?endpoint=incoming_emails&search=order&since=2026-05-01T00:00:00Z" \
  -H "Authorization: Bearer YOUR-API-TOKEN"

Antwort

JSON
{
  "success": true,
  "total": 38,
  "limit": 20,
  "offset": 0,
  "emails": [
    {
      "id": 310,
      "from_email": "customer@example.com",
      "from_name": "John Doe",
      "to_email": "support@yourbusiness.com",
      "subject": "Re: Your order #1234",
      "body_text": "Hi, when will my order arrive?\n\nThanks,\nJohn",
      "body_html": "<p>Hi, when will my order arrive?</p>",
      "message_id": "<abc123@mail.example.com>",
      "received_at": "2026-05-27 14:28:00",
      "created_at": "2026-05-27 14:30:02",
      "server": {
        "id": 5,
        "label": "Support Mailbox"
      }
    }
  ]
}

Antwortfelder

FeldTypBeschreibung
idintEindeutige E-Mail-ID. Verwenden Sie den höchsten Wert als after_id für inkrementelles Polling.
from_emailstringE-Mail-Adresse des Absenders.
from_namestringAnzeigename des Absenders.
to_emailstringEmpfängeradresse (Ihr Postfach).
subjectstringE-Mail-Betreffzeile.
body_textstringKlartext-Body.
body_htmlstringHTML-Body (kann leer sein, wenn die E-Mail nur Klartext war).
message_idstringE-Mail Message-ID-Header (für Threading / Deduplizierung).
received_atstringWann die Nachricht empfangen wurde.
serverobjectSMTP/IMAP-Server, der diese E-Mail empfangen hat (id, label).

Empfohlenes Polling-Muster

Der effizienteste Weg, neue Nachrichten zu lesen, ist das after_id-Cursor-Muster. Hier ein vollständiges Beispiel:

PHP
<?php
$token   = 'YOUR_API_TOKEN';
$api     = 'https://api.rcszilla.com';
$last_id = (int) file_get_contents('/tmp/last_sms_id.txt') ?: 0;

$url  = "$api/?endpoint=incoming_messages&after_id=$last_id&limit=100";
$resp = json_decode(file_get_contents($url, false, stream_context_create([
    'http' => ['header' => "Authorization: Bearer $token"]
])), true);

foreach ($resp['messages'] as $msg) {
    echo "[{$msg['channel']}] {$msg['from_phone']}: {$msg['message']}\n";
    if ((int)$msg['id'] > $last_id) $last_id = (int)$msg['id'];
}

file_put_contents('/tmp/last_sms_id.txt', $last_id);
Node.js
const fs = require('fs');
const TOKEN = 'YOUR_API_TOKEN';
const API   = 'https://api.rcszilla.com';

let lastId = 0;
try { lastId = parseInt(fs.readFileSync('/tmp/last_sms_id.txt', 'utf8')) || 0; } catch {}

const url = `${API}/?endpoint=incoming_messages&after_id=${lastId}&limit=100`;
const resp = await fetch(url, { headers: { Authorization: `Bearer ${TOKEN}` } });
const data = await resp.json();

for (const msg of data.messages) {
  console.log(`[${msg.channel}] ${msg.from_phone}: ${msg.message}`);
  if (msg.id > lastId) lastId = msg.id;
}

fs.writeFileSync('/tmp/last_sms_id.txt', String(lastId));
Python
import requests, pathlib

TOKEN = 'YOUR_API_TOKEN'
API   = 'https://api.rcszilla.com'
STATE = pathlib.Path('/tmp/last_sms_id.txt')

last_id = int(STATE.read_text()) if STATE.exists() else 0
resp = requests.get(f'{API}/?endpoint=incoming_messages&after_id={last_id}&limit=100',
                    headers={'Authorization': f'Bearer {TOKEN}'}).json()

for msg in resp['messages']:
    print(f"[{msg['channel']}] {msg['from_phone']}: {msg['message']}")
    last_id = max(last_id, msg['id'])

STATE.write_text(str(last_id))
*
Für Echtzeit-Zustellung statt Polling konfigurieren Sie einen Webhook. Sie können beides verwenden: Webhooks für sofortige Benachrichtigung und die API für Batch-Lesevorgänge oder Wiederherstellung nach Ausfallzeiten.