RCSZilla Version 1.0

API Messages Entrants

Lire les messages SMS, WhatsApp et Email reçus via l'API REST.

Vue d'ensemble

Ces endpoints vous permettent de récupérer les messages entrants reçus par RCSZilla — SMS et WhatsApp via appareils Android, et Email via vérification IMAP. Utilisez-les pour des lectures en masse, la synchronisation avec un CRM ou comme alternative aux webhooks.

EndpointMéthodeDescription
incoming_messagesGETLister les messages SMS et WhatsApp reçus.
incoming_emailsGETLister les emails reçus des boîtes IMAP.
*
Pour un polling efficace, utilisez after_id au lieu de plages de dates. Stockez le plus grand id de la dernière réponse et transmettez-le au prochain appel — vous n'obtiendrez que les nouveaux messages, sans doublons.

Lister les SMS / WhatsApp entrants

GET /?endpoint=incoming_messages

Retourne une liste paginée de messages SMS et WhatsApp reçus par vos appareils Android. Inclut les informations de contact et de l'appareil.

Paramètres de requête

ChampTypeDescription
sincestring optionnel Date-heure ISO 8601. Uniquement les messages reçus à ou après cette heure.
untilstring optionnel Date-heure ISO 8601. Uniquement les messages reçus à ou avant cette heure.
channelstring optionnel Filtrer par canal : sms ou whatsapp.
device_idint optionnel Filtrer par ID d'appareil.
from_phonestring optionnel Filtrer par numéro de téléphone de l'expéditeur (correspondance exacte).
after_idint optionnel Retourner uniquement les messages avec un ID supérieur à cette valeur. Idéal pour le polling incrémental.
limitint optionnel Résultats par page (1–100). Par défaut : 50.
offsetint optionnel Décalage de pagination. Par défaut : 0.

Exemple de requête

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"

Réponse

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"
      }
    }
  ]
}

Champs de réponse

ChampTypeDescription
idintID unique du message. Utilisez la valeur la plus élevée comme after_id pour le polling incrémental.
channelstringsms or whatsapp
from_phonestringNuméro de téléphone de l'expéditeur.
messagestringTexte du message.
received_atstringQuand le message a été reçu.
contactobject|nullContact correspondant (id, nom, téléphone) ou null si l'expéditeur est inconnu.
deviceobject|nullAppareil qui a reçu le message (id, nom).

Lister les emails entrants

GET /?endpoint=incoming_emails

Retourne une liste paginée d'emails reçus par les boîtes IMAP liées à vos serveurs SMTP. Inclut le corps en texte brut et HTML.

Paramètres de requête

ChampTypeDescription
sincestring optionnel Date-heure ISO 8601. Uniquement les messages reçus à ou après cette heure.
untilstring optionnel Date-heure ISO 8601. Uniquement les messages reçus à ou avant cette heure.
smtp_server_idint optionnel Filtrer par ID de serveur SMTP/IMAP.
from_emailstring optionnel Filtrer par adresse email de l'expéditeur (correspondance exacte).
searchstring optionnel Recherche dans le sujet, from_email et from_name (correspondance partielle).
after_idint optionnel Retourner uniquement les messages avec un ID supérieur à cette valeur. Idéal pour le polling incrémental.
limitint optionnel Résultats par page (1–100). Par défaut : 50.
offsetint optionnel Décalage de pagination. Par défaut : 0.

Exemple de requête

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"

Réponse

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"
      }
    }
  ]
}

Champs de réponse

ChampTypeDescription
idintID unique de l'email. Utilisez la valeur la plus élevée comme after_id pour le polling incrémental.
from_emailstringAdresse email de l'expéditeur.
from_namestringNom affiché de l'expéditeur.
to_emailstringAdresse du destinataire (votre boîte).
subjectstringLigne de sujet de l'email.
body_textstringCorps en texte brut.
body_htmlstringCorps HTML (peut être vide si l'email était en texte brut uniquement).
message_idstringEn-tête Message-ID de l'email (pour le threading / déduplication).
received_atstringQuand le message a été reçu.
serverobjectServeur SMTP/IMAP qui a reçu cet email (id, libellé).

Modèle de polling recommandé

Le moyen le plus efficace de lire les nouveaux messages est le modèle de curseur after_id. Voici un exemple complet :

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))
*
Pour une livraison en temps réel au lieu du polling, configurez un Webhook. Vous pouvez utiliser les deux : webhooks pour une notification instantanée et l'API pour les lectures en masse ou la récupération après une indisponibilité.