Signature
dloopiq.completeTask(options: CompleteTaskOptions): Promise<CompleteTaskResult>
Options
interface CompleteTaskOptions {
/** ID de la tâche retourné par getNextTask */
taskId: string
/** Identifiant opaque de l'utilisateur dans votre app */
userId: string
/** Réponse choisie parmi task.options */
answer: string
/** Temps passé sur la tâche en millisecondes */
timeSpentMs: number
}
Résultat
interface CompleteTaskResult {
/** Statut de soumission */
status: 'accepted' | 'already_responded'
/** Centimes gagnés par le développeur pour cette réponse */
earnedCents: number
/** Indique si la tâche était une golden task */
isGolden: boolean
}
Exemple complet
const startTime = Date.now()
// ... l'utilisateur répond dans votre UI ...
const result = await dloopiq.completeTask({
taskId: task.taskId,
userId: 'user_abc123',
answer: 'Positif',
timeSpentMs: Date.now() - startTime
})
if (result.status === 'already_responded') {
console.log('Cet utilisateur a déjà répondu à cette tâche')
return
}
if (result.isGolden) {
// Ne pas afficher de gain — earnedCents vaut 0 pour les golden tasks
console.log('Merci pour votre réponse !')
} else {
console.log(`Vous avez gagné ${result.earnedCents}¢ !`)
}
Anti-doublon
Un utilisateur ne peut répondre qu’une seule fois à la même tâche. Si completeTask est appelé deux fois avec le même taskId + userId, la seconde réponse retourne :
{
"status": "already_responded",
"earnedCents": 0,
"isGolden": false
}
Comportement selon le type de tâche
Tâche standard
- La réponse est ajoutée au pool de réponses
- L’algorithme de consensus est déclenché si
validationsNeeded réponses sont collectées
earnedCents = part développeur (environ 6¢ par tâche)
Golden task
- La réponse est comparée à
goldenAnswer
- Si correcte : score réputation
+1
- Si incorrecte : score réputation
-3
earnedCents est toujours 0
isGolden est toujours true
L’utilisateur ne sait pas s’il répond à une golden task. Gardez le même affichage pour préserver l’effet de mesure.
Calcul des gains
earnedCents = floor(task.maxCents × 0.30)
Pour une tâche à maxCents: 20 → earnedCents: 6.
Les gains sont cumulés côté développeur et accessibles via getEarnings(). Un virement est possible dès 1 000¢ ($10) accumulés.
Gestion d’erreurs
try {
const result = await dloopiq.completeTask({
taskId: 'inexistant',
userId: 'user_123',
answer: 'Positif',
timeSpentMs: 2000
})
} catch (err) {
// TASK_NOT_FOUND → taskId invalide
// INVALID_ANSWER → answer non présent dans task.options
// RATE_LIMITED → trop de requêtes
console.error(err.message)
}