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
{
"@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.
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ètre | description | exemple |
---|---|---|
implementation[startdate] | Date de début de l'abonnement | 2019-01-01 |
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ètre | description | exemple |
---|---|---|
repaymentSchedule[debitDay] | Jour de prélèvement | 1 |
repaymentSchedule[specificDay] | Jour spécifique de prélèvement | true |
repaymentSchedule[startDate] | Date du premier prélèvement | 2019-02-01 |
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
curl --location --globoff '/{clientToken}/allowed_debit_days?startDate=2019-01-01&isProrated=true&isWeeklyDebit=false'
paramètre | description | exemple |
---|---|---|
startDate | Date de début de l'abonnement | 2019-01-01 |
isProrated | Abonnement en prorata | true |
isWeeklyDebit | Prélèvement par semaine | false |
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ètre | description | exemple |
---|---|---|
repaymentSchedule[debitDay] | Jour de prélèvement | 1 |
repaymentSchedule[specificDay] | Jour spécifique de prélèvement | true |
repaymentSchedule[startDate] | DateDate du premier prélèvement | 2019-02-01 |
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
curl --location --globoff '/{clientToken}/allowed_debit_days?startDate=2019-01-01&isProrated=true&isWeeklyDebit=false'
paramètre | description | exemple |
---|---|---|
startDate | Date de début de l'abonnement | 2019-01-01 |
isProrated | Abonnement en prorata | true |
isWeeklyDebit | Prélèvement par semaine | false |
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
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
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ètre | description | exemple |
---|---|---|
implementation[number] | Numéro unique du badge | ABC123GEF |
Exemple
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ètre | description | exemple |
---|---|---|
implementation[startdate] | Date de début de validité du carnet | 2019-01-01 |
Exemple de requête
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
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ètre | description | exemple |
---|---|---|
implementations | Tableau des précisions de chaque comportement indexé par identifiant de comportement |
Exemple d'un package contenant un abonnement, une option et un badge :
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.*