RCSZilla Версія 1.0

API вхідних повідомлень

Читайте отримані SMS, WhatsApp та Email повідомлення через REST API.

Огляд

Ці ендпойнти дозволяють отримувати вхідні повідомлення, які отримав RCSZilla — SMS та WhatsApp через Android-пристрої, та Email через IMAP-опитування. Використовуйте їх для пакетного читання, синхронізації з CRM або як резерв поряд з вебхуками.

EndpointМетодОпис
incoming_messagesGETСписок отриманих SMS та WhatsApp повідомлень.
incoming_emailsGETСписок отриманих листів з IMAP-скриньок.
*
Для ефективного опитування використовуйте after_id замість діапазонів дат. Збережіть найбільший id з останньої відповіді та передайте його при наступному виклику — ви отримаєте лише нові повідомлення, без дублікатів.

Список вхідних SMS / WhatsApp

GET /?endpoint=incoming_messages

Повертає пагінований список SMS та WhatsApp повідомлень, отриманих вашими Android-пристроями. Включає інформацію про контакт та пристрій.

Параметри запиту

ПолеТипОпис
sincestring необов'язково Дата-час ISO 8601. Тільки повідомлення, отримані в або після цього часу.
untilstring необов'язково Дата-час ISO 8601. Тільки повідомлення, отримані в або до цього часу.
channelstring необов'язково Фільтр за каналом: sms або whatsapp.
device_idint необов'язково Фільтр за ID пристрою.
from_phonestring необов'язково Фільтр за номером телефону відправника (точний збіг).
after_idint необов'язково Повертати лише повідомлення з ID більшим за це значення. Ідеально для інкрементального опитування.
limitint необов'язково Результатів на сторінку (1–100). За замовчуванням: 50.
offsetint необов'язково Зміщення пагінації. За замовчуванням: 0.

Приклад запиту

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"

Відповідь

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

Поля відповіді

ПолеТипОпис
idintУнікальний ID повідомлення. Використовуйте найбільше значення як after_id для інкрементального опитування.
channelstringsms or whatsapp
from_phonestringНомер телефону відправника.
messagestringТекст повідомлення.
received_atstringКоли було отримано повідомлення.
contactobject|nullЗнайдений контакт (id, name, phone) або null якщо відправник невідомий.
deviceobject|nullПристрій, що отримав повідомлення (id, name).

Список вхідних листів

GET /?endpoint=incoming_emails

Повертає пагінований список листів, отриманих IMAP-скриньками, пов'язаними з вашими SMTP-серверами. Включає текстовий та HTML-вміст.

Параметри запиту

ПолеТипОпис
sincestring необов'язково Дата-час ISO 8601. Тільки повідомлення, отримані в або після цього часу.
untilstring необов'язково Дата-час ISO 8601. Тільки повідомлення, отримані в або до цього часу.
smtp_server_idint необов'язково Фільтр за ID SMTP/IMAP-сервера.
from_emailstring необов'язково Фільтр за email-адресою відправника (точний збіг).
searchstring необов'язково Пошук у темі, from_email та from_name (частковий збіг).
after_idint необов'язково Повертати лише повідомлення з ID більшим за це значення. Ідеально для інкрементального опитування.
limitint необов'язково Результатів на сторінку (1–100). За замовчуванням: 50.
offsetint необов'язково Зміщення пагінації. За замовчуванням: 0.

Приклад запиту

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"

Відповідь

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

Поля відповіді

ПолеТипОпис
idintУнікальний ID листа. Використовуйте найбільше значення як after_id для інкрементального опитування.
from_emailstringEmail-адреса відправника.
from_namestringІм'я відправника.
to_emailstringАдреса отримувача (ваша скринька).
subjectstringТема листа.
body_textstringТекстовий вміст.
body_htmlstringHTML-вміст (може бути порожнім, якщо лист був лише текстовим).
message_idstringЗаголовок Message-ID листа (для ланцюжків / дедуплікації).
received_atstringКоли було отримано повідомлення.
serverobjectSMTP/IMAP-сервер, що отримав цей лист (id, label).

Рекомендований шаблон опитування

Найефективніший спосіб читати нові повідомлення — шаблон курсора after_id. Ось повний приклад:

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))
*
Для доставки в реальному часі замість опитування налаштуйте Webhook. Можна використовувати обидва: вебхуки для миттєвих сповіщень та API для пакетного читання або відновлення після простою.