async function addCandidates(campaignId, candidates) {
try {
const response = await fetch(
`https://app.voicehire.io/api/v1/campaigns/${campaignId}/candidates`,
{
method: 'POST',
headers: {
'X-API-Key': API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({ candidates })
}
);
const data = await response.json();
if (!response.ok) {
// Traiter l'erreur selon le code
switch (data.error.code) {
case 'INSUFFICIENT_CREDITS':
alert('Crédits insuffisants. Veuillez recharger votre compte.');
break;
case 'VALIDATION_ERROR':
// Afficher les erreurs de validation
Object.entries(data.error.details).forEach(([field, message]) => {
console.error(`${field}: ${message}`);
});
break;
case 'RATE_LIMIT_EXCEEDED':
// Attendre et réessayer
const retryAfter = data.error.details.retry_after;
console.log(`Rate limited. Retrying in ${retryAfter} seconds...`);
setTimeout(() => addCandidates(campaignId, candidates), retryAfter * 1000);
return;
default:
throw new Error(data.error.message);
}
}
return data;
} catch (error) {
if (error instanceof TypeError) {
// Erreur réseau
console.error('Network error:', error.message);
} else {
// Autres erreurs
console.error('Error:', error.message);
}
throw error;
}
}