Примеры использования
Для разработчиков

Примеры использования

Пример 1. Интеграция CRM → SupportHub

Когда менеджер в CRM создаёт обращение от клиента — автоматически создаём тикет в SupportHub, чтобы поддержка увидела его в общем интерфейсе.

crm_to_supporthub.py
import requests

def create_support_ticket(crm_user, text):
    requests.post(
        "https://api.support.forestsnet.com/api/v1/tickets",
        headers={"Authorization": "Bearer sk_xxx"},
        json={
            "subject": text[:80],
            "priority": "normal",
            "tags": ["from-crm"],
            "contact": {
                "email": crm_user.email,
                "name": crm_user.full_name,
            },
            "message": text,
        },
        timeout=10,
    ).raise_for_status()

Пример 2. Бот в мессенджере

Бот за NAT слушает обновления через long polling и автоматически отвечает на новые сообщения клиентов.

bot.py
import requests

API = "https://api.support.forestsnet.com/api/v1"
HEAD = {"Authorization": "Bearer sk_xxx"}
offset = 0

while True:
    r = requests.get(
        f"{API}/updates",
        headers=HEAD,
        params={"offset": offset, "timeout": 25, "types": "message.created"},
        timeout=35,
    ).json()
    for ev in r["updates"]:
        offset = max(offset, ev["id"])
        msg = ev["data"]
        if msg["sender_type"] != "contact":
            continue
        # Автоответ
        requests.post(
            f"{API}/tickets/{msg['ticket_id']}/messages",
            headers=HEAD,
            json={"content": "Спасибо, скоро ответим!"},
        )

Пример 3. Real-time дашборд

Свой Node.js сервис подписывается на события и пушит их во внутренний WebSocket корпоративного дашборда.

dashboard-bridge.mjs
const API = "https://api.support.forestsnet.com/api/v1";
const HEAD = { Authorization: "Bearer sk_xxx" };
let offset = 0;

setInterval(async () => {
  const url = new URL(API + "/updates");
  url.searchParams.set("offset", offset);
  url.searchParams.set("timeout", "25");
  const { updates } = await fetch(url, { headers: HEAD }).then((r) => r.json());
  for (const ev of updates) {
    if (ev.id > offset) offset = ev.id;
    if (ev.type === "ticket.created") notifyDashboard("new_ticket", ev.data.ticket);
    if (ev.type === "message.created") notifyDashboard("new_message", ev.data);
  }
}, 0);
Все примеры можно совмещать: одна часть системы шлёт сообщения через POST /messages, другая получает обновления через /updatesили webhooks. Workspace, API-ключ и rate-limit у них общие.
Была ли страница полезной?