Produkt

Kanály a integrace

Zákazník píše, kam chce, agent odpovídá z jedné obrazovky. Původní kanál je zachován, aby odpověď šla stejnou cestou.

E-mail na prvním místě

Je to kanál, který nese většinu objemu, proto o něj nejvíce pečujeme: čisté parsování, správa bounce zpráv, DKIM na vašich odesílaných zprávách.

Chat a WhatsApp

Chat widgetu vytvoří tiket, jakmile nikdo není k dispozici. WhatsApp Business prochází číslem, které poskytnete.

API pro zbytek

Vše, co dělá rozhraní, je přístupné přes REST: tikety, zprávy, kontakty, články, pravidla, exporty.

acme.open-helpdesk.com/app/settings/channels
Emailsupport@acme.fr · MX vérifié412 ce mois
Chatwidget web · 14 ko97 ce mois
WhatsApp+33 6 12 ** ** **58 ce mois
APIclé srv_live_… · lecture/écriture1 903 appels

POST /webhooks/acme · ticket.created

200 · 84 ms · signature vérifiée

200 · 91 ms · signature vérifiée

502 · nouvelle tentative dans 30 s

Připojené kanály a záznam doručení webhooků.

Detaily funkcí

API, které umí všechno

Vše, co zvládne rozhraní, je dostupné pod /api/v1: odpovědi v JSON, stránkování kurzorem, 600 požadavků za minutu — dost na to, abyste stavěli bez ptaní o svolení.

Klíče, které otevřou jen to nutné

Osobní tokeny nebo servisní klíče s rozsahy čtení a zápisu po jednotlivých zdrojích: vaše integrace má jen ta práva, která si zaslouží.

Webhooky, na které je spoleh

Podpis HMAC SHA-256, pět opakování s backoffem, log doručení za 7 dní: váš systém vždy ví, co mu bylo posláno.

Tam, kde si váš tým píše

Notifikace pro Slack a Teams podle pohledu nebo týmu, odpovídat lze přímo z vlákna v plánu Tým a vyšších.

Vaše data volně dovnitř i ven

Vaši historii ze Zendesku převedeme i s čísly a daty. A protože je jádro pod AGPL-3.0, můžete si ho nainstalovat k sobě a sáhnout přímo do databáze.

Každé volání zanechá stopu

Všechna volání API se objeví v auditním logu s použitým klíčem: kdo co udělal, není nikdy záhada.

Ověřit podpis webhooku

import { createHmac, timingSafeEqual } from "node:crypto";

export function verify(raw: string, header: string, secret: string) {
  const expected = createHmac("sha256", secret).update(raw).digest("hex");
  return timingSafeEqual(Buffer.from(header), Buffer.from(expected));
}