Skip to content

Les comportements

Comme toute API de vente, nous avons donc un catalogue composé de produits et un panier composé d'articles. Par dessus ces notions classiques se trouvent les comportements (behaviors). Ce sont eux qui sont responsables du métier du fitness et des incidences liées aux achats des divers produits (ajouter un abonnement, créditer des séances ...).

Parmi ces comportements, certains impliquent des précisions de la part de l'acheteur (par exemple, acheter un abonnement nécessite une date de début) et d'autres ne nécessitent aucune précision (par exemple, acheter une gourde ou une serviette ne souffre d'aucune interrogation).

Liste des différents comportements

Chaque produit peut avoir un ou plusieurs comportements parmi les suivants :

  • /{clientToken}/behaviors/subscription : Ajoute un abonnement au contact
  • /{clientToken}/behaviors/subscription_option : Ajoute une option au contact
  • /{clientToken}/behaviors/badge : Ajoute automatiquement un badge au contact
  • /{clientToken}/behaviors/counter_line : Ajoute automatiquement un carnet de ticket
  • /{clientToken}/behaviors/package : Ajoute automatiquement un ensemble de produits au panier
  • /{clientToken}/behaviors/contact_tag : Ajoute automatiquement un mot clé au contact
  • /{clientToken}/behaviors/countermark : Ajoute automatiquement une campagne de contremarque, avec un seul code

Ces comportements, hormis celui de package, se déclenchent dès qu'une vente est terminée, mais pour cela ils auront besoin de données.

Récupérer les comportements des produits

Aucun nouvel appel n'est nécessaire. L'appel au catalogue comporte la liste des produits ainsi que les comportements liés à chaque produit. Voir la section Récupérer le catalogue du contact

Réponse de l'appel du catalogue

json5
{  
   "@context":"\/clientToken\/contexts\/Product",
   "@id":"\/clientToken\/products",
   "@type":"hydra:Collection",
   "hydra:member":[  
      {  
         "@id":"\/clientToken\/products\/2278",
         "@type":"http:\/\/schema.org\/Product",
         "description":"",
         "name":"Mon produit",
         // ...
         "productBehaviors":[   // <-- Liste des comportements du produit
            {  
               "@id":"\/clientToken\/product_behaviors\/2387",
               "@type":"ProductBehavior",
               // Type de comportement
               "behavior":"\/clientToken\/behaviors\/subscription_option",
               // ...
            }
         ],
         // ...
      }
   ]
}

Produit sans comportement

Il s'agit typiquement des produits boutique. Pas de comportement donc aucune précision à apporter, il s'agit du cas d'ajout au panier le plus simple.

bash
curl --location --globoff '/{clientToken}/sales/1/articles' \
--header 'Content-Type: application/json' \
--data '{
    "offerId": "/{clientToken}/offers/1"
}'

Abonnement

/{clientToken}/behaviors/subscription

L'abonnement ne nécessite qu'une simple précision de date de démarrage de l'abonnement acheté.

paramètredescriptionexemple
implementation[startdate]Date de début de l'abonnement2019-01-01
bash
curl --location --globoff '/{clientToken}/sales/1/articles' \
--header 'Content-Type: application/json' \
--data '{
    "offerId": "/{clientToken}/offers/1",
    "implementation": {
        "startDate": "2019-01-01"
    }
}'

Dans le cas d'un abonnement par prélèvement, il est possible de passer des paramètres supplémentaires

paramètredescriptionexemple
repaymentSchedule[debitDay]Jour de prélèvement1
repaymentSchedule[specificDay]Jour spécifique de prélèvementtrue
repaymentSchedule[startDate]Date du premier prélèvement2019-02-01
bash
curl --location --globoff '/{clientToken}/sales/1/articles' \
--header 'Content-Type: application/json' \
--data '{
    "offerId": "/{clientToken}/offers/1",
    "implementation": {
        "startDate": "2019-01-01"
    },
    "repaymentSchedule": {
        "debitDay": 1,
        "specificDay": true,
        "startDate": "2019-02-01"
    }
}'

Pour récupérer la liste des dates de prélèvements configurés et disponibles, nous pouvons utiliser

bash
curl --location --globoff '/{clientToken}/allowed_debit_days?startDate=2019-01-01&isProrated=true&isWeeklyDebit=false'
paramètredescriptionexemple
startDateDate de début de l'abonnement2019-01-01
isProratedAbonnement en proratatrue
isWeeklyDebitPrélèvement par semainefalse

Cette route retourne la liste des jours de prélèvements (debitDay) ainsi que la date qui correspond au jour de prélèvement (date). Ces informations sont à passer dans les paramètres repaymentSchedule.debitDay et repaymentSchedule.startDate de la création de l'article.

Option d'abonnement

/{clientToken}/behaviors/subscription_option

L'option d'abonnement est similaire à l'abonnement à ceci prêt qu'elle est liée à un abonnement. Cet abonnement peut être en cours d'achat ou déjà acheté.

| paramètre | description | exemple | |parent| Identifiant de l'article parent dans le cas d'un achat d'abonnement et option concomitant | /{clientToken}/articles/1234 | |implementation[startdate]| Date de début de l'option d'abonnement | 2019-01-01 | |implementation[subscriptionId]| Identifiant de l'abonnement lié dans le cas d'un achat d'option seule sur abonnement présent | /{clientToken}/subscriptions/1432 | |implementation[subscriptionArticleId]| Identifiant de l'abonnement lié dans le cas d'un achat abonnement et option concomitant (valeur idem au paramètre parent) | /{clientToken}/articles/1234 |

A noter que lors d'un achat d'abonnement avec option, l'abonnement doit obligatoirement être ajouté au panier avant l'option.

Dans le cas d'une option par prélèvement, il est possible de passer des paramètres supplémentaires

paramètredescriptionexemple
repaymentSchedule[debitDay]Jour de prélèvement1
repaymentSchedule[specificDay]Jour spécifique de prélèvementtrue
repaymentSchedule[startDate]DateDate du premier prélèvement2019-02-01
bash
curl --location --globoff '/{clientToken}/sales/1/articles' \
--header 'Content-Type: application/json' \
--data '{
    "repaymentSchedule": {
        "debitDay": 1,
        "specificDay": true,
        "startDate": "2019-02-01"
    }
}'

Pour récupérer la liste des dates de prélèvements configurés et disponibles, nous pouvons utiliser

bash
curl --location --globoff '/{clientToken}/allowed_debit_days?startDate=2019-01-01&isProrated=true&isWeeklyDebit=false'
paramètredescriptionexemple
startDateDate de début de l'abonnement2019-01-01
isProratedAbonnement en proratatrue
isWeeklyDebitPrélèvement par semainefalse

Cette route retourne la liste des jours de prélèvements (debitDay) ainsi que la date qui correspond au jour de prélèvement (date). Ces informations sont à passer dans les paramètres repaymentSchedule.debitDay et repaymentSchedule.startDate de la création de l'article.

Exemple de requête d'achat d'option et abonnement concomitant

bash
curl --location --globoff '/{clientToken}/sales/1/articles' \
--header 'Content-Type: application/json' \
--data '{
    "offerId": "/{clientToken}/offers/2",
    "parent": "/{clientToken}/articles/1",                    
    "implementation": {
        "startDate": "2019-01-01",
        "subscriptionArticleId": "/{clientToken}/articles/1"  
    }
}'

Exemple de requête d'achat d'option sur abonnement existant

bash
curl --location --globoff '/{clientToken}/sales/1/articles' \
--header 'Content-Type: application/json' \
--data '{
    "offerId": "/{clientToken}/offers/2",
    "implementation": {
        "startDate": "2019-01-01",
        "subscriptionId": "/{clientToken}/subscriptions/1"
    }
}'

Badge

/{clientToken}/behaviors/badge

Le comportement de badge permet d'attribuer un badge à un contact lors d'une vente. Celui-ci nécessite donc le numéro du badge en question.

paramètredescriptionexemple
implementation[number]Numéro unique du badgeABC123GEF

Exemple

bash
curl --location --globoff '/{clientToken}/sales/1/articles' \
--header 'Content-Type: application/json' \
--data '{
    "offerId": "/{clientToken}/offers/3",
    "implementation": {
        "number": "ABC123GEF"
    }
}'

Carnet de séances

/{clientToken}/behaviors/counter_line

Tout comme les abonnements et options il nécessite la précision d'une date de début de validité.

paramètredescriptionexemple
implementation[startdate]Date de début de validité du carnet2019-01-01

Exemple de requête

bash
curl --location --globoff '/{clientToken}/sales/1/articles' \
--header 'Content-Type: application/json' \
--data '{
    "offerId": "/{clientToken}/offers/5",
    "implementation": {
        "startDate": "2019-01-01"
    }
}'

Contremarque

/{clientToken}/behaviors/countermark

Bien qu'ayant un comportement, aucune précision n'est attendue lors de la vente de la part du contact. La vente est donc la même qu'un produit sans comportement.

Exemple de requête

bash
curl --location --globoff '/{clientToken}/sales/1/articles' \
--header 'Content-Type: application/json' \
--data '{
    "offerId": "/{clientToken}/offers/5"
}'

Packages

/{clientToken}/behaviors/package

Les packages sont des produits composés d'autres produits. On peut ainsi packager un abonnement et ses options dans un seul produit avec des offres adéquates. De fait les précisions attendues lors de la vente du package dépendent de ce qu'il contient. Lors de la récupération des comportements liés au produit, il est fort probable qu'il référence plusieurs comportements.

Si, par exemple, il contient un abonnement et une option, il lui faudra l'implémentation de chacun des deux.

paramètredescriptionexemple
implementationsTableau des précisions de chaque comportement indexé par identifiant de comportement

Exemple d'un package contenant un abonnement, une option et un badge :

bash
curl --location --globoff '/{clientToken}/sales/1/articles' \
--header 'Content-Type: application/json' \
--data '{
    "offerId": "/{clientToken}/offers/7",
    "implementations": {
        "/{clientToken}/product_behaviors/1": { 
            "startDate": "2019-01-01"
        },
        "/{clientToken}/product_behaviors/2": { 
            "startDate": "2019-01-01"
        },
        "/{clientToken}/product_behaviors/3": { 
            "number": "ABC123DEF"
        }
    }
}'

NOTE

A noter qu'il n'est cette fois pas nécessaire de préciser l'abonnement lié à l'option et le parent qui seront automatiquement déterminés.*