Produkt

Kanaler og integrationer

Kunden skriver, hvor de vil, agenten svarer fra én skærm. Den oprindelige kanal bevares, så svaret går tilbage samme vej.

E-mail først

Det er den kanal, der bærer det meste af volumen, så den vi plejer mest: ren parsing, håndtering af bounces, DKIM på dine afsendelser.

Chat og WhatsApp

Widget-chatten opretter en sag, så snart ingen er tilgængelig. WhatsApp Business kører via et nummer, du angiver.

API til resten

Alt, hvad interfacet gør, er tilgængeligt via REST: sager, beskeder, kontakter, artikler, regler, eksporter.

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

Forbundne kanaler og webhook-leveringslog.

Funktioner i detaljer

En API, der kan det hele

Alt, hvad interfacet kan, er tilgængeligt under /api/v1: JSON-svar, cursor-paginering, 600 kald i minuttet — nok til at bygge uden at spørge om lov.

Nøgler, der kun åbner det nødvendige

Personlige tokens eller servicenøgler med læse- og skrivescopes pr. ressource: din integration får kun de rettigheder, den har brug for.

Webhooks, man kan stole på

HMAC SHA-256-signatur, fem nye forsøg med backoff, leveringslog i 7 dage: dit system ved altid, hvad der er sendt til det.

Dér, hvor dit team allerede taler sammen

Slack- og Teams-notifikationer pr. visning eller team, og svar direkte fra tråden på Team-planen og opefter.

Dine data kommer og går frit

Vi flytter din Zendesk-historik med dens numre og dens datoer. Og fordi kernen er under AGPL-3.0, kan du installere den hos dig selv og tilgå databasen direkte.

Hvert kald efterlader et spor

Alle API-kald vises i auditloggen med den anvendte nøgle: hvem der gjorde hvad, er aldrig et mysterium.

Verificer signaturen af en webhook

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