SMS

Consentement (LCAP)

Chaque SMS, transactionnel ou commercial, exige un consentement enregistré (exprès ou tacite) pour le destinataire, et l’API refuse un envoi qui n’en a pas avec 451 NO_CONSENT. La LCAP elle-même exige le consentement pour les messages commerciaux ; HonkIO l’exige pour chaque texto.

Consentement LCAP (requis avant l'envoi)

Chaque SMS, transactionnel ou commercial, doit avoir un consentement enregistré (exprès ou tacite) pour le destinataire. L'API refuse un envoi qui n'en a pas avec HTTP 451 NO_CONSENT. La LCAP elle-même exige le consentement pour les messages commerciaux ; HonkIO l'exige pour chaque texto.

const { error } = await honkio.consents.create({
  phoneNumber: '+1613XXXXXXX',
  consentType: 'express',
  sourceDescription: 'Website opt-in form',
  sourceIp: '203.0.113.1',
})
if (error) throw new Error(error.message)

Consentement tacite pour un client existant, le délai courant à partir de sa dernière transaction :

const { data, error } = await honkio.consents.create({
  phoneNumber: '+1613XXXXXXX',
  consentType: 'implied',
  relationshipType: 'purchase',
  lastTransactionDate: '2025-11-04',
})
if (error) throw new Error(error.message)
console.log(data.expires_at) // '2027-11-04T00:00:00.000Z'

Le consentement exprès n'expire jamais. Le consentement tacite expire deux ans après un achat, une location, un contrat, un don, du bénévolat ou une adhésion, et six mois après une demande de renseignements ou une demande (LCAP, par. 10(10) et 10(13)); HonkIO le déduit de relationship_type, et un type qui ne nomme ni l'un ni l'autre donne six mois. Fournissez last_transaction_date pour que le délai coure à partir de la relation réelle plutôt que du jour de l'enregistrement, ou indiquez directement expires_at si vous avez déjà calculé l'expiration. La réponse renvoie expires_at pour que vous puissiez le vérifier.

Téléversement en lot

Dans le tableau de bord, ouvrez Conformité et choisissez Téléverser une liste de consentements. Choisissez un fichier CSV avec une colonne de téléphone, indiquez comment vous avez obtenu les contacts, et chaque numéro est enregistré avec ce consentement. Les autres colonnes sont ignorées : une exportation de CRM fonctionne telle quelle.

Depuis votre code, envoyez jusqu'à 5 000 lignes à la fois. Les valeurs par défaut s'appliquent à chaque ligne, et les champs propres à une ligne les remplacent. Chaque téléversement est conservé comme lot de consentements que vous pouvez consulter plus tard.

const { data, error } = await honkio.consents.recordBatch({
  defaults: { consentType: 'implied', relationshipType: 'volunteer', lastTransactionDate: '2026-05-01' },
  rows: [
    { phoneNumber: '+1613XXXXXXX' },
    { phoneNumber: '+1613XXXXXXX', consentType: 'express', sourceDescription: 'Petition form' },
  ],
  fileName: 'volunteers.csv',
})
if (error) throw new Error(error.message)
console.log(data.counts) // { rows: 2, recorded: 2, already_recorded: 0, opted_out: 0, ... }
  • recorded : le consentement est enregistré.
  • already_recorded : un consentement actif au moins aussi fort était déjà enregistré ; envoyer deux fois le même fichier n'enregistre rien en double.
  • opted_out : le numéro s'est désabonné. Un téléversement ne le réabonne jamais.
  • revoked_by_review : HonkIO a révoqué le consentement de ce numéro après examen d'un téléversement précédent. Aucun téléversement, ni aucun enregistrement individuel (409 CONSENT_REVOKED_BY_REVIEW), ne le rétablit à moins que HonkIO ne lève le blocage.
  • duplicate_in_file : le numéro figurait sur une ligne précédente.
  • invalid : le numéro n'a pas pu être lu, une date n'est pas une vraie date AAAA-MM-JJ, il manque à la ligne ce que son type de consentement exige, ou son consentement tacite est déjà échu (ses deux ans, ou six mois pour une demande de renseignements, se sont écoulés depuis sa date). La raison nomme le champ.

Dossiers de test et de production

Les consentements et les désabonnements sont tenus séparément pour chaque mode de clé. Un consentement enregistré avec une clé de test (mk_test_) laisse passer les envois de test, jamais un envoi en production ; les envois en production sont vérifiés d’après les consentements enregistrés par une clé de production. Les désabonnements et les révocations fonctionnent de la même façon : ceux faits avec une clé de test ne bloquent que les envois de test. Chaque clé liste, vérifie et téléverse les dossiers de son propre mode : une clé de test ne voit donc jamais vos consentements de production, et dans le tableau de bord, la page Conformité suit le sélecteur Production/Test. Un STOP envoyé par texto à l’un de vos numéros relève toujours de la production. Pour essayer un envoi en mode test, enregistrez d’abord un consentement pour le numéro avec votre clé de test.

L’effacement exige une clé de production et supprime les consentements du numéro dans les deux modes. Les désabonnements sont conservés dans les deux.