# Cartes membres (contacts Secutix)

Le connecteur Secutix n’est pas limité aux billets d’événement. Il peut aussi synchroniser **les contacts Secutix**. Cela débloque un flux « carte de membre dans Wallet ». La carte représente le contact et reste synchronisée.

## Ce que vous pouvez construire

Vous pouvez émettre une carte Wallet qui se comporte comme une carte de membre :

* Une carte par membre (un contact Secutix).
* Code-barres / code QR pour l’identification sur le lieu.
* Mises à jour automatiques lorsque les données du contact changent.
* Retour facultatif sur l’installation/désinstallation réécrit dans Secutix.

{% hint style="info" %}
Secutix reste la source de vérité pour le profil du membre. Wallet Crew émet et distribue la carte.
{% endhint %}

<details>

<summary>Cas d'utilisation concrets</summary>

Les modèles qui fonctionnent bien en production :

* **Renouvellement de l’adhésion sur le lieu**: scanner un code QR, mettre à jour le contact, rafraîchir la carte.
* **Inscription en libre-service**: les membres s’inscrivent depuis une page d’atterrissage de campagne.
* **Inscription assistée par le personnel**: les équipes du front-office utilisent un formulaire au lieu de l’interface Secutix.
* **Collecte du consentement**: stocker les critères d’opt-in dans Secutix pendant l’inscription.
* **Messagerie segmentée**: utiliser le statut d’installation pour cibler uniquement les membres installés.

</details>

## Créer et mettre à jour des contacts depuis un formulaire d’inscription

Utiliser un formulaire d’inscription Wallet Crew **d’inscription** pour :

* Créer un nouveau contact Secutix.
* Mettre à jour un contact Secutix existant.
* Délivrer immédiatement la carte de membre vers Apple Wallet / Google Wallet.

Cela fonctionne bien lorsque vous ne voulez pas exposer l’interface Secutix au personnel. Cela convient aussi aux flux d’inscription en libre-service.

### Point d’entrée par code QR

Affichez un code QR qui ouvre le formulaire d’inscription sur un téléphone. C’est idéal pour l’acquisition sur site. Pensez au foyer, au guichet, ou aux stands partenaires.

### Mappage : compte Wallet Crew ↔ contact Secutix

Lorsque la synchronisation des contacts est activée, Wallet Crew mappe **les champs du compte** vers **les champs de contact Secutix**. Personnalisez le mappage lorsque vous devez lire/écrire des critères Secutix spécifiques. C’est courant pour les consentements, les indicateurs de segmentation ou les champs hérités.

Ajoutez votre script de mappage personnalisé dans l’onglet de configuration Secutix **Avancé** .

<p align="center"><a href="https://admin.thewalletcrew.io/tenant/~/integrations/secutix/settings" class="button secondary" data-icon="chevrons-right">Écran de configuration Secutix</a></p>

#### Point d’accroche de mappage avancé des contacts

Enregistrez `extensions.secutix.contact.mapper`.

* `MapToSecutix(account, request)` s’exécute **avant** avant d’appeler Secutix.
* `MapToNeostore(response, account)` s’exécute **après** la réponse de Secutix.

```javascript
/**
 * Applique un mappage enrichi des données du compte neostore vers une demande de contact Secutix.
 * Le mappage standard est déjà appliqué à l’objet de la requête avant l’appel de cette fonction.
 *
 * @param {Object} account - Données provenant de neostore.
 * @param {Object} request - Requête envoyée à Secutix avec le mappage par défaut déjà renseigné.
 */
function mapToSecutix(account, request){
  request.ExternalContactCriterionData = [{ CriterionIdCode : 'OPT_CO', Values : [account["consents_email"] ? 'true' : 'false'] }];
}

/**
 * Applique un mappage enrichi depuis une réponse de contact Secutix vers un compte neostore.
 * Le mappage standard est déjà appliqué à l’objet du compte avant l’appel de cette fonction.
 *
 * @param {Object} response - Réponse reçue de Secutix.
 * @param {Object} account - Données envoyées à neostore avec le mappage par défaut déjà renseigné.
 */
function mapToNeostore(response, account){
  response.ContactCriteria = response.ContactCriteria || [];
  account["consents_email"] = !!response.ContactCriteria.find(c => c.CriterionIdCode === 'OPT_CO' && c.Values != null && c.Values[0] === 'true');
}

export default function(context) {
  context.register('extensions.secutix.contact.mapper', {
    MapToSecutix : mapToSecutix,
    MapToNeostore: mapToNeostore
  });
}
```

#### Mise à jour du statut d’installation sur le contact

Ce hook vous permet de conserver dans Secutix les signaux d’installation/désinstallation de la carte dans les critères de contact. Utilisez-le pour piloter la segmentation ou le reporting opérationnel dans Secutix.

Implémentez `extensions.secutix.contact.passUpdater`:

```javascript
/**
 * Déclenché lorsque le statut d’installation de la carte de membre change.
 *
 * @param {Object} request - Secutix SaveIndividualContactRequest.
 * @param {boolean} isInstalled - `true` si la carte est installée, sinon `false`.
 * @param {number} device - Appareil sur lequel le statut d’installation a changé (0 = Apple, 2 = Google).
 * @returns {Promise<void>} Aucune valeur de retour ; modifie la requête sur place.
 */
async function onPassInstallationStatusChanged(request, isInstalled, device){
  request.ExternalContactCriterionData = [
    {
      CriterionIdCode : 'W_' + (device == 0 ? "APPLE" : "GOOGLE"),
      Values : [isInstalled ? 'Installé' : 'Désinstallé']
    }
  ];
}

export default function(context) {
  context.register('extensions.secutix.contact.passUpdater', {
    OnPassInstallationStatusChanged: onPassInstallationStatusChanged
  });
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.thewalletcrew.io/connectors/fr/ticketing/secutix/member-cards-secutix-contacts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
