Proizvod

Kanali i integracije

Klijent piše gdje god želi, agent odgovara s jednog ekrana. Izvorna komunikacija se čuva kako bi odgovor krenuo istim putem.

E-mail na prvom mjestu

To je kanal koji nosi najveći volumen, stoga se o njemu najviše brinemo: čisto parsiranje, upravljanje odbijanjima, DKIM na vašim pošiljkama.

Chat i WhatsApp

Chat widget stvara ticket čim nitko nije dostupan. WhatsApp Business prolazi kroz broj koji vi navedete.

API za ostalo

Sve što sučelje radi dostupno je u REST-u: ticketi, poruke, kontakti, članci, pravila, izvozi.

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

Povezani kanali i dnevnik isporuke webhooks-a.

Detalji značajki

API koji radi sve

Sve što sučelje može dostupno je pod /api/v1: JSON odgovori, paginacija kursorom, 600 zahtjeva u minuti — dovoljno da gradite bez traženja dopuštenja.

Ključevi koji otvaraju samo nužno

Osobni tokeni ili servisni ključevi, s opsezima čitanja i pisanja po resursu: vaša integracija ima samo prava koja zaslužuje.

Webhookovi kojima se može vjerovati

HMAC SHA-256 potpis, pet ponovnih pokušaja uz backoff, dnevnik isporuka kroz 7 dana: vaš sustav uvijek zna što mu je poslano.

Tamo gdje vaš tim razgovara

Slack i Teams obavijesti po prikazu ili timu, a odgovaranje izravno iz niti u paketima Tim i višim.

Vaši podaci slobodno ulaze i izlaze

Vašu povijest iz Zendeska prenosimo s njezinim brojevima i datumima. A kako je jezgra pod AGPL-3.0, možete je instalirati kod sebe i pristupiti bazi izravno.

Svaki poziv ostavlja trag

Svi API pozivi vide se u dnevniku revizije s korištenim ključem: tko je što napravio nikad nije misterij.

Provjera potpisa webhooka

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));
}