Для разработчиков
Примеры использования
Пример 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 у них общие.Была ли страница полезной?