Produit

Canaux et intégrations

Le client écrit où il veut, l'agent répond depuis un seul écran. Le canal d'origine est conservé pour que la réponse reparte par le même chemin.

Email en premier

C'est le canal qui porte l'essentiel du volume, donc celui que nous soignons le plus : parsing propre, gestion des rebonds, DKIM sur vos envois.

Chat et WhatsApp

Le chat du widget crée un ticket dès que personne n'est disponible. WhatsApp Business passe par un numéro que vous fournissez.

API pour le reste

Tout ce que fait l'interface est accessible en REST : tickets, messages, contacts, articles, règles, exports.

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

Canaux connectés et journal de livraison des webhooks.

Dans le détail

Interfaces disponibles

API REST
Versionnée sous /api/v1, réponses JSON, pagination par curseur, 600 requêtes par minute.
Authentification
Jetons personnels ou clés de service, avec portées lecture et écriture par ressource.
Webhooks
Signature HMAC SHA-256, nouvelle tentative 5 fois en backoff, journal des livraisons sur 7 jours.
Slack et Teams
Notification par vue ou par équipe, réponse depuis le fil sur les offres Équipe et supérieures.
Import
Zendesk, Freshdesk, Front et CSV, avec correspondance des champs personnalisés.
Export
CSV et NDJSON à la demande, plus accès SQL en lecture seule sur l'offre Entreprise.
Journalisation
Chaque appel API apparaît dans le journal d'audit avec la clé utilisée.

Vérifier la signature d'un 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));
}