Pular para o conteúdo principal

API Campagnes SMS

L'API Campagnes SMS permet de gerer les campagnes de communication SMS vers les beneficiaires.

Vue d'ensemble

EndpointMethodeDescription
/api/sms-campaignsGETListe des campagnes
/api/sms-campaignsPOSTCreer une campagne
/api/sms-campaigns/{id}GETDetail d'une campagne
/api/sms-campaigns/{id}PUT/PATCHModifier une campagne
/api/sms-campaigns/{id}DELETESupprimer une campagne
/api/sms-campaigns/metadataGETMetadonnees
/api/sms-campaigns/statisticsGETStatistiques globales
/api/sms-campaigns/{id}/add-beneficiairesPOSTAjouter beneficiaires
/api/sms-campaigns/{id}/importPOSTImporter destinataires
/api/sms-campaigns/{id}/destinatairesGETListe destinataires
/api/sms-campaigns/{id}/destinataires/{destId}DELETESupprimer destinataire
/api/sms-campaigns/{id}/destinatairesDELETEVider destinataires
/api/sms-campaigns/{id}/mark-readyPOSTMarquer prete
/api/sms-campaigns/{id}/previewGETPrevisualiser messages
/api/sms-campaigns/{id}/exportGETExporter Excel
/api/sms-campaigns/{id}/reset-to-draftPOSTRemettre en brouillon
/api/sms-campaigns/{id}/generate-messagesPOSTGenerer messages
/api/sms-campaigns/import-templateGETTemplate d'import

Permissions requises

  • ROLE_USER : Tous les endpoints

Liste des campagnes

Endpoint

GET /api/sms-campaigns

Parametres de requete

ParametreTypeRequisDescription
pageintNonNumero de page (defaut: 1)
limitintNonElements par page (defaut: 20)
searchstringNonRecherche textuelle
statutstringNonFiltrer par statut
typestringNonFiltrer par type d'evenement

Reponse

{
"success": true,
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"nom": "Notification Paiement Janvier",
"typeEvenement": "notification_paiement",
"typeEvenementLabel": "Notification de paiement",
"statut": "brouillon",
"statutLabel": "Brouillon",
"nbDestinataires": 500,
"nbAvecTelephone": 480,
"description": "Notification pour le cycle janvier 2025",
"createdAt": "2025-01-15T10:00:00+00:00",
"updatedAt": "2025-01-15T14:30:00+00:00",
"dateExport": null,
"canExport": true,
"isEditable": true,
"createdBy": {
"id": "...",
"email": "agent@pch.gw"
}
}
],
"pagination": {
"total": 25,
"page": 1,
"limit": 20,
"pages": 2
}
}

Metadonnees

Endpoint

GET /api/sms-campaigns/metadata

Reponse

{
"success": true,
"data": {
"typesCampagne": {
"notification_paiement": "Notification de paiement",
"rappel_conditionnalite": "Rappel conditionnalité",
"information_generale": "Information générale",
"alerte_urgence": "Alerte urgence"
},
"statuts": {
"brouillon": "Brouillon",
"pret": "Prêt",
"exporte": "Exporté"
},
"langues": {
"pt": "Portugais",
"cr": "Créole",
"fr": "Français"
},
"sources": {
"selection": "Sélection",
"import": "Import"
}
}
}

Statistiques globales

Endpoint

GET /api/sms-campaigns/statistics

Reponse

{
"success": true,
"data": {
"totalCampagnes": 25,
"parStatut": {
"brouillon": 10,
"pret": 5,
"exporte": 10
},
"parType": {
"notification_paiement": 15,
"rappel_conditionnalite": 5,
"information_generale": 5
},
"totalDestinataires": 12500,
"totalAvecTelephone": 12000
}
}

Detail d'une campagne

Endpoint

GET /api/sms-campaigns/{id}

Reponse

{
"success": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"nom": "Notification Paiement Janvier",
"typeEvenement": "notification_paiement",
"typeEvenementLabel": "Notification de paiement",
"statut": "brouillon",
"statutLabel": "Brouillon",
"nbDestinataires": 500,
"nbAvecTelephone": 480,
"description": "Notification pour le cycle janvier 2025",
"createdAt": "2025-01-15T10:00:00+00:00",
"updatedAt": "2025-01-15T14:30:00+00:00",
"dateExport": null,
"canExport": true,
"isEditable": true,
"createdBy": {
"id": "...",
"email": "agent@pch.gw"
},
"stats": {
"bySource": {
"selection": 400,
"import": 100
},
"byLangue": {
"pt": 300,
"cr": 150,
"fr": 50
}
}
}
}

Creer une campagne

Endpoint

POST /api/sms-campaigns

Corps de la requete

{
"nom": "Notification Paiement Janvier",
"typeEvenement": "notification_paiement",
"description": "Notification pour le cycle janvier 2025"
}

Champs requis

  • nom : Nom de la campagne
  • typeEvenement : Type d'evenement

Reponse

{
"success": true,
"message": "Campagne creee avec succes",
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"nom": "Notification Paiement Janvier",
"typeEvenement": "notification_paiement",
"statut": "brouillon"
}
}

Ajouter des beneficiaires

Endpoint

POST /api/sms-campaigns/{id}/add-beneficiaires

Corps de la requete

{
"beneficiaireIds": [
"550e8400-e29b-41d4-a716-446655440001",
"550e8400-e29b-41d4-a716-446655440002"
],
"codeLangue": "pt"
}

Reponse

{
"success": true,
"message": "450 beneficiaire(s) ajoute(s), 50 deja present(s)",
"data": {
"added": 450,
"skipped": 50,
"campaign": {...}
}
}

Importer des destinataires

Endpoint

POST /api/sms-campaigns/{id}/import

Multipart form-data:

  • file : Fichier CSV/Excel

Reponse

{
"success": true,
"message": "200 destinataire(s) importe(s), 5 erreur(s)",
"data": {
"imported": 200,
"errors": 5,
"errorDetails": [
{"ligne": 12, "erreur": "Telephone invalide"},
{"ligne": 45, "erreur": "Nom manquant"}
],
"campaign": {...}
}
}

Liste des destinataires

Endpoint

GET /api/sms-campaigns/{id}/destinataires

Parametres

ParametreTypeRequisDescription
pageintNonNumero de page
limitintNonElements par page (defaut: 50)

Reponse

{
"success": true,
"data": [
{
"id": "...",
"nom": "Mamadou Diallo",
"telephone": "+245955123456",
"hasValidPhone": true,
"codeLangue": "pt",
"nomLangue": "Portugais",
"source": "selection",
"variables": {
"montant": "15000",
"cycle": "Janvier 2025"
},
"messageGenere": "Caro Mamadou Diallo, o seu pagamento de 15000 XOF...",
"createdAt": "2025-01-15T10:00:00+00:00",
"beneficiaire": {
"id": "...",
"code": "BEN-OIO-2025-000001"
}
}
],
"pagination": {
"total": 500,
"page": 1,
"limit": 50,
"pages": 10
},
"stats": {
"bySource": {"selection": 400, "import": 100},
"byLangue": {"pt": 300, "cr": 150, "fr": 50}
}
}

Previsualiser les messages

Endpoint

GET /api/sms-campaigns/{id}/preview

Parametres

ParametreTypeRequisDescription
limitintNonNombre de previews (defaut: 5)

Reponse

{
"success": true,
"data": {
"previews": [
{
"destinataire": {
"id": "...",
"nom": "Mamadou Diallo",
"telephone": "+245955123456",
"codeLangue": "pt"
},
"message": "Caro Mamadou Diallo, o seu pagamento de 15000 XOF para Janvier 2025 esta disponivel...",
"hasTemplate": true
},
{
"destinataire": {...},
"message": "[Aucun template pour Créole]",
"hasTemplate": false
}
],
"total": 480
}
}

Marquer comme prete

Endpoint

POST /api/sms-campaigns/{id}/mark-ready

Reponse

{
"success": true,
"message": "Campagne prete pour export",
"data": {
"id": "...",
"statut": "pret"
}
}

Erreur si aucun telephone valide

{
"success": false,
"error": "Aucun destinataire avec numero de telephone valide"
}

Exporter en Excel

Endpoint

GET /api/sms-campaigns/{id}/export

Retourne un fichier Excel avec les colonnes:

  • Nom
  • Telephone
  • Langue
  • Message

La campagne est automatiquement marquee comme "exportee".


Generer les messages

Endpoint

POST /api/sms-campaigns/{id}/generate-messages

Genere les messages personnalises pour tous les destinataires en utilisant les templates.

Reponse

{
"success": true,
"message": "475 message(s) genere(s), 5 sans template",
"data": {
"generated": 475,
"noTemplate": 5
}
}

Remettre en brouillon

Endpoint

POST /api/sms-campaigns/{id}/reset-to-draft

Reponse

{
"success": true,
"message": "Campagne remise en brouillon",
"data": {
"id": "...",
"statut": "brouillon"
}
}

Telecharger le template d'import

Endpoint

GET /api/sms-campaigns/import-template

Retourne un fichier Excel vide avec les colonnes requises pour l'import.


Types d'evenement

TypeDescription
notification_paiementNotification de paiement
rappel_conditionnaliteRappel de conditionnalite
information_generaleInformation generale
alerte_urgenceAlerte urgence

Statuts de campagne

StatutDescription
brouillonCampagne en cours de preparation
pretCampagne prete pour export
exporteCampagne exportee

Langues disponibles

CodeLangue
ptPortugais
crCreole
frFrancais

Sources de destinataires

SourceDescription
selectionSelection de beneficiaires
importImport depuis fichier