Documentation

SDK TypeScript

Le paquet allomi : appels, questions, erreurs et idempotence.

Le paquet allomi est un petit client TypeScript de l'API REST. Il n'a aucune dépendance, utilise le fetch global (Node 22+, Bun, Deno, navigateurs, runtimes edge) et ses types viennent des mêmes contrats que l'API.

Installation

npm install allomi

Créer le client

import { Allomi } from "allomi";

const allomi = new Allomi({
  apiKey: process.env.ALLOMI_API_KEY, // par défaut : la variable ALLOMI_API_KEY
  // baseUrl: "http://localhost:3001", // par défaut : ALLOMI_BASE_URL, puis https://api.allomi.ai
});

Garde la clé côté serveur. Ne la livre jamais à un navigateur.

Appels

const call = await allomi.calls.create({
  to: "+33199000001", // ou contactId
  prompt: "Demande si le colis est arrivé, sinon quand il arrivera.",
  language: "fr",
  voice: "brise",
  maxMinutes: 5,
  webhookUrl: "https://example.com/hooks/allomi",
});

const same = await allomi.calls.get(call.id);
const page = await allomi.calls.list({ limit: 20 });
await allomi.calls.say(call.id, { text: "Demande aussi un numéro de suivi.", interrupt: false });
await allomi.calls.hangUp(call.id);

say donne une consigne à l'assistant pendant l'appel. hangUp y met fin.

Questions (asks)

Un « ask » appelle une personne, lui lit une question, recueille la réponse et te la renvoie. C'est ce qu'utilisent les agents pour obtenir une décision humaine.

const ask = await allomi.asks.create({
  target: "owner", // ou { target: "contact", contactId }
  question: "Je peux fusionner la branche de release maintenant ?",
  context: "La CI est verte.",
  expiresInMinutes: 30,
});
const answer = await allomi.asks.get(ask.id);

Erreurs

Une requête en échec lève une AllomiError avec le status HTTP, le type et le code de l'erreur, le param le cas échéant et le requestId.

import { Allomi, AllomiError } from "allomi";

try {
  await allomi.calls.create({ to: "+33199000001", prompt: "Bonjour" });
} catch (e) {
  if (e instanceof AllomiError && e.code === "quota_exceeded") {
    // le budget de minutes est épuisé : propose de changer d'offre
  } else throw e;
}

Idempotence

Passe une clé d'idempotence pour rendre une création rejouable sans risque :

await allomi.calls.create(body, { idempotencyKey: crypto.randomUUID() });

Autres endpoints

allomi.request(method, path, { body, query }) appelle n'importe quel endpoint de la référence de l'API, avec la même authentification et la même gestion d'erreurs.