Skill Aureus SMS
Un skill donne à votre assistant de code une méthode complète pour une tâche précise. Créez le fichier ci-dessous dans votre projet :
- Claude Code :
.claude/skills/aureus-sms/SKILL.md - Codex :
.codex/skills/aureus-sms/SKILL.md(ou l'emplacement de skills de votre outil)
---
name: aureus-sms
description: Envoyer, planifier, annuler et suivre des SMS au Cameroun avec l'API SMS d'Aureus Desk. À utiliser dès que le code doit envoyer un code de connexion, une confirmation, un rappel ou une alerte par SMS.
---
# Envoyer des SMS avec Aureus Desk
## Avant d'écrire du code
1. Vérifier que la variable d'environnement `AUREUS_SMS_API_KEY` existe côté serveur (jamais côté client).
2. Réutiliser le module `aureusSms` du projet s'il existe ; sinon, le créer avec le code ci-dessous.
## Module à utiliser (TypeScript, Node 18 ou plus)
```ts
const BASE = "https://api.aureusprime.com/v1";
export type SmsStatus = "QUEUED" | "SENDING" | "SENT" | "DELIVERED" | "FAILED" | "CANCELLED";
export interface SmsMessage { id: string; status: SmsStatus; to: string; operator: string | null; senderId: string; errorCode: string | null; scheduledAt: string | null; createdAt: string; sentAt: string | null; deliveredAt: string | null }
export class AureusSmsError extends Error { constructor(readonly status: number, readonly code: string, message: string) { super(message); } }
async function call<T>(method: string, path: string, body?: unknown, idempotencyKey?: string): Promise<T> {
const response = await fetch(`${BASE}${path}`, {
method,
headers: {
Authorization: `Bearer ${process.env.AUREUS_SMS_API_KEY}`,
"Content-Type": "application/json",
...(idempotencyKey ? { "Idempotency-Key": idempotencyKey } : {}),
},
body: body === undefined ? undefined : JSON.stringify(body),
});
const json = await response.json().catch(() => null);
if (!response.ok) throw new AureusSmsError(response.status, json?.error?.code ?? "UNKNOWN", json?.error?.message ?? response.statusText);
return json as T;
}
/** Envoie un SMS. `idempotencyKey` stable (ex. `commande-4821`) : la réutiliser pour tout nouvel essai. */
export function sendSms(input: { to: string; text: string; idempotencyKey: string; sensitive?: boolean; scheduledAt?: string; senderId?: string }) {
const { idempotencyKey, ...body } = input;
return call<SmsMessage & { likelyUndelivered: boolean }>("POST", "/sms/messages", body, idempotencyKey);
}
export const getSms = (id: string) => call<SmsMessage>("GET", `/sms/messages/${id}`);
export const cancelSms = (id: string) => call<SmsMessage>("DELETE", `/sms/messages/${id}`);
export const getBalance = () => call<{ balance: number; low: boolean }>("GET", "/sms/balance");
```
## Règles
- 1 SMS = 160 caractères en alphabet GSM, 70 dès qu'un caractère en sort (ê, ô, ç, °, ’, emoji) : raccourcir ou refuser, jamais tronquer.
- Code à usage unique : `sensitive: true`, jamais `scheduledAt`.
- `scheduledAt` : ISO 8601 avec fuseau (`+01:00`), futur, 30 jours au plus ; `cancelSms` pour annuler.
- Gérer les erreurs par `AureusSmsError.code`. Ne pas réessayer un `4xx` ; réessayer un `5xx` avec la même clé d'idempotence.
- Stocker l'`id` renvoyé avec le destinataire : les numéros reviennent masqués.
- SMS transactionnels uniquement ; jamais de prospection.
Référence complète : https://docs.aureusprime.com/llms-full.txt