Aller au contenu principal

API Campagnes SMS

Endpoints pour la gestion des campagnes SMS.

Endpoints

MethodeEndpointDescription
GET/api/sms-campaignsListe des campagnes
POST/api/sms-campaignsCreer une campagne
GET/api/sms-campaigns/{id}Detail d'une campagne
PUT/api/sms-campaigns/{id}Modifier une campagne
DELETE/api/sms-campaigns/{id}Supprimer une campagne
POST/api/sms-campaigns/{id}/add-beneficiairesAjouter des beneficiaires
POST/api/sms-campaigns/{id}/importImporter depuis fichier
GET/api/sms-campaigns/{id}/destinatairesListe des destinataires
POST/api/sms-campaigns/{id}/mark-readyMarquer comme pret
GET/api/sms-campaigns/{id}/previewPrevisualiser les messages
GET/api/sms-campaigns/{id}/exportExporter pour operateur
POST/api/sms-campaigns/{id}/generate-messagesGenerer les messages
GET/api/sms-campaigns/import-templateTelecharger le modele

Liste des campagnes

GET /api/sms-campaigns

Parametres de requete

ParametreTypeDescription
pageintNumero de page
itemsPerPageintElements par page (max 100)
statutstringFiltrer par statut
typestringFiltrer par type
searchstringRecherche textuelle

Exemple de requete

curl "https://sig.ucp-pch.org/api/sms-campaigns?statut=brouillon&page=1" \
-H "Authorization: Bearer TOKEN"

Reponse

{
"success": true,
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"nom": "Rappel Paiement Mars 2026",
"type": "rappel_general",
"statut": "brouillon",
"nbDestinataires": 150,
"nbMessagesGeneres": 0,
"createdAt": "2026-03-15T10:30:00+00:00",
"createdBy": {
"id": 1,
"nom": "Admin"
}
}
],
"pagination": {
"page": 1,
"itemsPerPage": 30,
"totalItems": 45
}
}

Creer une campagne

POST /api/sms-campaigns

Corps de requete

{
"nom": "Rappel Paiement Mars 2026",
"type": "rappel_general",
"description": "Rappel pour les paiements du mois de mars"
}

Champs

ChampTypeObligatoireDescription
nomstringOuiNom de la campagne
typestringOuiType de campagne
descriptionstringNonDescription interne

Types valides

  • rappel_general
  • information
  • sensibilisation
  • convocation
  • paiement_success
  • paiement_failed
  • paiement_pending
  • paiement_reminder

Reponse

{
"success": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"nom": "Rappel Paiement Mars 2026",
"type": "rappel_general",
"statut": "brouillon",
"createdAt": "2026-03-15T10:30:00+00:00"
}
}

Ajouter des beneficiaires

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

Corps de requete

{
"filters": {
"region": "550e8400-e29b-41d4-a716-446655440001",
"secteur": null,
"commune": null,
"statut": "actif",
"cycleId": "550e8400-e29b-41d4-a716-446655440002"
}
}

Filtres disponibles

FiltreTypeDescription
regionuuidID de la region
secteuruuidID du secteur
communeuuidID de la commune
statutstringStatut des beneficiaires
cycleIduuidLie a un cycle specifique

Reponse

{
"success": true,
"data": {
"added": 150,
"skipped": 5,
"errors": [
"3 beneficiaires sans telephone"
]
}
}

Importer depuis fichier

POST /api/sms-campaigns/{id}/import
Content-Type: multipart/form-data

Corps de requete

ChampTypeDescription
filefileFichier Excel ou CSV

Format du fichier

ColonneTypeObligatoire
telephonestringOui
nomstringOui
languestringNon (defaut: pt)

Reponse

{
"success": true,
"data": {
"imported": 100,
"skipped": 2,
"errors": [
{"ligne": 5, "erreur": "Numero de telephone invalide"},
{"ligne": 12, "erreur": "Langue non reconnue"}
]
}
}

Liste des destinataires

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

Parametres

ParametreTypeDescription
pageintNumero de page
itemsPerPageintElements par page
languestringFiltrer par langue
valideboolFiltrer par validite

Reponse

{
"success": true,
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440003",
"telephone": "+245955123456",
"nom": "Mamadou Diallo",
"langue": "cr",
"estValide": true,
"messageGenere": "Mamadou Diallo, lembra di kumpri bo paiementu na 15/03/2026."
}
],
"stats": {
"total": 150,
"valides": 147,
"invalides": 3,
"parLangue": {
"pt": 45,
"cr": 80,
"ff": 25
}
}
}

Previsualiser les messages

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

Parametres

ParametreTypeDescription
limiteintNombre d'exemples (max 10)
languestringFiltrer par langue

Reponse

{
"success": true,
"data": [
{
"destinataire": {
"nom": "Mamadou Diallo",
"telephone": "+245955123456",
"langue": "cr"
},
"message": "Mamadou Diallo, lembra di kumpri bo paiementu na 15/03/2026.",
"longueur": 62
}
]
}

Marquer comme pret

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

Pre-requis

  • La campagne doit etre en statut "brouillon"
  • Au moins un destinataire valide
  • Les messages doivent etre generes

Reponse

{
"success": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"statut": "pret",
"nbDestinatairesValides": 147,
"readyAt": "2026-03-15T11:00:00+00:00"
}
}

Erreurs possibles

CodeDescription
400Campagne deja prete ou exportee
422Aucun destinataire valide

Exporter pour operateur

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

Pre-requis

  • La campagne doit etre en statut "pret"

Reponse

Retourne un fichier Excel (.xlsx) avec les colonnes :

ColonneDescription
TelephoneNumero au format international
MessageMessage personnalise
LangueCode langue
NomNom du destinataire

Headers de reponse

Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Content-Disposition: attachment; filename="campagne-rappel-mars-2026.xlsx"

Generer les messages

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

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

Reponse

{
"success": true,
"data": {
"generes": 147,
"erreurs": [
{"destinataire": "Diallo", "erreur": "Template manquant pour langue 'bjg'"}
]
}
}

Telecharger le modele d'import

GET /api/sms-campaigns/import-template

Retourne un fichier Excel modele pour l'import de destinataires.

Reponse

Fichier Excel avec les colonnes :

  • telephone (exemple: +245955123456)
  • nom (exemple: Nom Complet)
  • langue (exemple: pt)

Codes d'erreur

CodeDescription
400Requete invalide
401Non authentifie
403Permission refusee
404Campagne non trouvee
422Erreur de validation
500Erreur serveur

Permissions

EndpointPermission
GET (lecture)sms.campaigns_view
POST/PUT/DELETEsms.campaigns_edit
Exportsms.campaigns_export