Aller au contenu principal

API V2 Expériences Partenaires

Ce document décrit les points de terminaison pertinents nécessaires pour interagir avec les APIs de Rokt afin de récupérer le contenu des Expériences de Rokt. Le point de terminaison est conçu pour fournir des expériences alimentées par des offres directement aux partenaires. Les requêtes sont envoyées à ce point de terminaison, et la réponse est transmise à la bibliothèque UX Helper pour une gestion appropriée.

Points de terminaison

EnvironnementActionURL
ProductionPOSThttps://server-api.rokt.com/v2/partner/experiences
TestPOSThttps://server-api-demo.rokt.com/v2/partner/experiences

Meilleure Pratique de Test

Le point de terminaison de test https://server-api-demo.rokt.com/v2/partner/experiences est spécifiquement conçu pour les tests et doit être utilisé pour valider l'intégration sans affecter les données ou les performances de production. Assurez-vous que les en-têtes et les formats de requête appropriés sont utilisés comme spécifié dans la documentation API pour émuler efficacement des scénarios similaires à ceux de la production.

Requête

En-têtes d'autorisation

Veuillez travailler avec votre responsable de compte pour obtenir les identifiants nécessaires pour interagir avec ce point de terminaison

Clé-En-têteObligatoireDescriptionTypeNote
rokt-pub-idOuiContient l'identifiant public du client fournistringCeci sera fourni par Rokt.
rokt-secretOuiContient le secret public du client fourni qui doit correspondre à l'identifiant publicstringCeci sera fourni par Rokt.

En-têtes requis

Clé-En-têteObligatoireDescriptionTypeExemple
content-typeOuiType de médiastring“application/json”
acceptOuiType de média attendu de la réponsestring“application/json”
rokt-tag-idOuiIdentifiant de Tag Roktstring1234567890

Corps

Nom de la propriétéRequisType de donnéesDescription
sessionIdNonstringID de session de la session Rokt existante, si elle existe
pageIdentifierOuistringTexte utilisé pour différencier les vues
attributesOuiMap<string, string>Contient les données des attributs utilisateur à utiliser lors de la sélection d'une offre
integrationOuiIntegrationDonnées relatives à l'intégration effectuant la demande. Cela peut être obtenu à partir des bibliothèques UXHelper disponibles pour Android, iOS et web

Intégration

Nom de la propriétéObligatoireType de donnéesDescription
nameOuistringIndique le nom commun de l'intégration effectuant la demande
versionOuistringVersion de l'intégration effectuant la demande
frameworkOuistringFramework d'intégration utilisé (par exemple, Flutter, React Native)
platformOuistring/enumPlateforme partenaire demandant des offres (par exemple, Web, Mobile, iOS)
layoutSchemaVersionOuistringVersion de schéma compatible la plus élevée pour l'intégration
deviceLocaleOuistringParamètre régional de l'appareil de l'utilisateur
deviceModelOuistringModèle d'appareil pour iOS ou modèle de construction pour Android
deviceTypeOuistringType d'appareil/forme (par exemple, Téléphone, Tablette)
operatingSystemOuistringSystème d'exploitation de l'appareil de l'utilisateur
operatingSystemVersionOuistringVersion du système d'exploitation de l'appareil de l'utilisateur
packageNameOuistringNom du paquet ou identifiant du bundle de l'application hôte
packageVersionOuistringVersion du paquet ou version du bundle de l'application hôte
metadataNonMap<string, string>Données supplémentaires liées à l'intégration ou à l'appareil

Exemple de Demande

Corps/Payload de la Requête JSON

Cliquez pour afficher
{
"attributes": {
"email": "test@rokt.com",
"locale": "en-AU"
},
"pageIdentifier": "your_page_identifier",
"integration": {
"name": "UX Helper iOS",
"version": "1.0",
"framework": "Swift",
"platform": "iOS",
"layoutSchemaVersion": "2.1.0",
"packageVersion": "1.0.0",
"packageName": "com.partner",
"operatingSystem": "iOS",
"operatingSystemVersion": "18",
"deviceType": "Phone",
"deviceModel": "iPhone",
"metadata": {
"IsCharging": "true"
}
},
}

Réponse

Réponse de Succès (200)

En-têtes

Ces en-têtes seront renvoyés pour garantir la cohérence avec d'autres APIs Ecommerce, mais il n'est pas prévu qu'ils soient consommés par le partenaire ou la bibliothèque UX.

Clé de l'en-têteDescription
rokt-account-idID de compte pour lequel des offres ont été servies
rokt-session-idID de session Rokt associé
etagValeur etag Rokt pour l'utilisateur

Corps de Réussite

Racine

Nom de la PropriétéTypeDescription
PageContextPageContextDonnées relatives à la page détectée
PluginsLayout[]Objet de plugin et polices
SessionIdstringID de Session Rokt. Pour le Web, cet ID de Session est consommé depuis l'en-tête
SuccessboolIndique si la requête a été réussie ou invalide
TokenstringJWT d'Intégrité des Données au niveau de la session
OptionsSdkOptionsCollection de configuration d'exécution à fournir aux SDKs Rokt consommateurs

SdkOptions

Nom de PropriétéTypeDescription
UseDiagnosticEventsboolIndique si le SDK Rokt doit produire des diagnostics

PageContext

Nom de PropriétéTypeDescription
IsPageDetectedboolIndique si la requête a abouti à correspondre à une page Partenaire
PageIdstringGUID représentant la configuration de la page OP correspondante
PageInstanceGuidstringGUID représentant une instance spécifique de la page sélectionnée
PageVariantNamestringNom de la Variante de Page sélectionnée
PartnerContentTemplatestringModèle utilisé pour les expériences de Paiement
RoktTagIdstringID Tag Partenaire/Annonceur
TokenstringJWT d'Intégrité des Données au niveau de la page

LayoutPlugin

Nom de la propriétéTypeDescription
FontsFont[]Tableau de polices à utiliser par les SDK pour l'offre
PluginPluginConfiguration du plugin

Plugin

Nom de la propriétéTypeDescription
ConfigPluginConfigDéfinit la configuration pour le rendu de la mise en page
IdstringID de mise en page / ID externe de transaction
NamestringNom du plugin à utiliser pour le rendu
TargetElementPositionstringAction pour le placement de la position basé sur targetElementSelector
TargetElementRelationstringRelation entre le placement et targetElementSelector
TargetElementSelectorstringPosition identifiée pour placer la mise en page dans la page
TargetSectionstringIdentifie différents types de ciblage, par ex., page de remerciement
UrlstringURL pour télécharger le plugin

PluginConfig

Nom de PropriétéTypeDescription
InstanceGuidstringGUID représentant une instance spécifique du plugin / layout
LayoutSchemaVersionstringVersion du schéma de layout utilisé pour le layout
OuterLayoutSchemastringSchéma JSON définissant l'interface utilisateur du Layout Extérieur
SlotsSlot []Collection de slots d'offre
TokenstringJWT d'Intégrité des Données au niveau Plugin / Layout

Slot

Nom de PropriétéTypeDescription
InstanceGuidstringGUID représentant une instance spécifique du Slot
LayoutVariantLayoutVariantDéfinition du LayoutVariant à utiliser pour le Slot / Offre
OfferOfferDéfinition de l'Offre à utiliser pour l'affichage à nos clients
TokenstringJWT d'Intégrité des Données au niveau Plugin / Layout

LayoutVariant

Nom de PropriétéTypeDescription
LayoutVariantIdstringID généré automatiquement
ModuleNamestringLe nom du Module Layout
FormatTypestringType de format pour afficher une offre
LayoutVariantSchemastringSchéma JSON définissant l'UI pour afficher les offres utilisant la variante

Offre

Nom de PropriétéTypeDescription
AccountIdlongL'ID de compte Rokt associé à l'offre
CampaignIdstringID de la campagne liée dans OP
CreativeCreativeCréation de l'offre définie dans OP
MetadatastringContient les métadonnées liées à l'offre

Créatif

Nom de la propriétéTypeDescription
ReferralCreativeIdstringID associé à la configuration créative
InstanceGuidstringGUID représentant une instance spécifique du Créatif
CopyMap<string, string>Contient le texte lié au contenu de l'offre
ResponseOptionsMapMap<string, ResponseOption>Configuration pour les boutons d'appel à l'action (CTA)
LinksMap<string, Link>Liens disponibles pour l'offre, référencés par le schéma de mise en page
ImagesMap<string, Image>Images disponibles pour l'offre, référencées par le schéma de mise en page
IconsMap<string, Icon>Icônes disponibles pour l'offre, référencées par le schéma de mise en page
TokenstringJWT d'intégrité des données au niveau créatif

Police

Nom de propriétéType de donnéesDescription
FontFamilychaîneSpécifie la famille de polices (par exemple, Arial, Helvetica).
FontStylechaîneSpécifie le style de police (par exemple, normal, italique).
FontWeightchaîneSpécifie le poids de la police (par exemple, normal, gras).
Srcchaîne[]Un tableau d'URL ou de chemins source pour les fichiers de police.

Option de réponse

Nom de propriétéType de donnéesDescription
actionchaîneL'action de la réponse
responseOptionGuidchaîneUn GUID généré qui est unique à l'option de réponse et à envoyer dans le cadre des appels d'événements
signalTypechaîneLe EventType à utiliser lors de l'envoi de l'événement après interaction. Ce sera presque toujours SignalResponse
labelchaîneÉtiquette à afficher sur le bouton/lien
successTextchaîneTexte à afficher lors de l'interaction (non pertinent pour le pilote)
isPositivebooléenIndique si la réponse est un engagement positif ou négatif
urlchaîneURL sur laquelle effectuer l'action

Réponse d'erreur de requête (HTTP 4xx)

Racine/Corps

Nom de la propriétéTypeDescription
titlestringRaison principale de l'échec
statusnumberCode de statut HTTP
successbooleanIndique si la requête a réussi
errorsError[]Collection d'erreurs de validation qui se sont produites

Erreur

Nom de la propriétéTypeDescription
codestringCode d'erreur correspondant
messagestringMessage décrivant l'erreur
valuebooleanValeur fournie qui était invalide, le cas échéant

Corps de la réponse de succès

Réponse de succès

Cliquez pour développer
{
"sessionId": "b1fb003c-e904-4083-b7b9-03cde555a7a1",
"pageContext": {
"pageInstanceGuid": "b1fb003c-e905-4375-91bd-242e74b12277",
"pageId": "6b1214f0-43e1-447d-b0bb-cf493d361411",
"language": "fr",
"isPageDetected": true,
"pageVariantName": "iOSVaraint1",
"token": "<JWT token placeholder>"
},
"plugins": [
{
"plugin": {
"id": "3353172846080032866",
"name": "dcui",
"url": "https://wsdk.rokt.com/plugins/dcui/index.html",
"targetElementSelector": "#target_element",
"targetElementPosition": "append",
"targetElementRelation": "child",
"targetSection": "None",
"config": {
"slots": [
{
"instanceGuid": "8f492d28-83fb-4813-877e-26e752ea9474",
"offer": {
"campaignId": "2749386944931233793",
"accountId": "106",
"maxTotalItemsQtyInOffer": 1,
"creative": {
"referralCreativeId": "2760914349384466797",
"instanceGuid": "c9f37d78-731d-4a0e-b8bc-712bd8c46cc1",
"responseOptionsMap": {
"positive": {
"id": "2760914349384466794",
"action": "Url",
"instanceGuid": "1d47ded1-b483-44e6-abf8-1d1d5faa82bc",
"signalType": "SignalResponse",
"shortLabel": "Oui",
"longLabel": "Oui",
"shortSuccessLabel": "Email envoyé",
"isPositive": true,
"url": "http://example.com",
"ignoreBranch": false,
"urlBehavior": "newTab",
"token": "<JWT token placeholder>"
},
"negative": {
"id": "2760914349384466796",
"action": "CaptureOnly",
"instanceGuid": "24de5c75-ff04-41c5-b3f7-7d2ee129ecc6",
"signalType": "SignalResponse",
"shortLabel": "Non merci",
"longLabel": "Non merci",
"isPositive": false,
"ignoreBranch": false,
"urlBehavior": "newTab",
"token": "<JWT token placeholder>"
}
},
"links": {
"termsAndConditions": {
"url": "https://server-api.rokt.com/LegalTerms/TermsAndConditions/2760914349384466797",
"title": "Conditions Générales"
}
},
"images": {},
"icons": {},
"token": "<JWT token placeholder>",
"advertiser": {
"name": "000. Pour le Test du Widget",
"brand": "000. Pour le Test du Widget"
},
"copy": {
"creative.copy": "Nicholas Grasevski 2",
"creative.termsAndConditions.message": "Veuillez visiter [rokt.com](https://www.rokt.com) pour les C&CG",
"creative.termsAndConditions.close.copy": "Fermer",
"creative.termsAndConditions.title": "Conditions Générales",
"creative.tag": "Services B2B",
"creative.success.title": "Succès",
"creative.success.copy": "Nous avons envoyé une confirmation à test1593754986316@rokt.com.",
"creative.termsAndConditions.link": "https://server-api.rokt.com/LegalTerms/TermsAndConditions/2760914349384466797"
}
},
"metadata": {}
},
"layoutVariant": {
"layoutVariantId": "3353172846080032865",
"moduleName": "standard-marketing",
"formatType": "Text",
"layoutVariantSchema":"<JSON encoded schema>"
},
"token": "<JWT token placeholder>"
},
],
"instanceGuid": "ce5158a9-dc59-4a97-9006-a299901e4587",
"outerLayoutSchema": "<JSON encoded schema>",
"layoutSchemaVersion": "2.0",
"token": "<JWT token placeholder>"
}
},
"fonts": []
}
],
"options": {
"useDiagnosticEvents": true
},
"success": true
}

Réponse de Succès Vide

Il existe une occurrence rare où il n'y aura pas d'offres pertinentes pour un utilisateur particulier. Les chances que cela se produise peuvent être réduites en fournissant plus de données d'attributs lors de la demande. Dans ce cas, Rokt retournera une charge utile sans expériences :

{
"sessionId": "b2170028-cf39-4d23-849d-f1c38be50000",
"pageContext": {
"pageInstanceGuid": "b2170028-cf39-4ff4-8e7d-d88eb9e441e6",
"isPageDetected": true,
"token": "<JWT token placeholder>"
},
"plugins": [],
"options": {
"useDiagnosticEvents": false
},
"token": "<JWT token placeholder>",
"success": true,
}

Exemple : Erreur de Validation de Demande

Code de Réponse HTTP : 422

Cliquez pour développer
{
"title": "Échec de la validation",
"status": 422,
"success": false,
"errors": [
{
"code": "IntegrationNameNotProvided",
"message": "Integration.Name est requis"
},
{
"code": "IntegrationVersionNotProvided",
"message": "Integration.Version est requis"
},
{
"code": "IntegrationFrameworkNotProvided",
"message": "Integration.Framework est requis"
},
{
"code": "IntegrationPlatformInvalid",
"message": "Integration.Platform n'est pas valide"
},
{
"code": "IntegrationLayoutSchemaVersionNotProvided",
"message": "Integration.LayoutSchemaVersion est requis"
},
{
"code": "IntegrationDeviceLocaleNotProvided",
"message": "Integration.DeviceLocale est requis"
},
{
"code": "IntegrationDeviceModelNotProvided",
"message": "Integration.DeviceModel est requis"
},
{
"code": "IntegrationDeviceTypeNotProvided",
"message": "Integration.DeviceType est requis"
},
{
"code": "IntegrationOperatingSystemNotProvided",
"message": "Integration.OperatingSystem est requis"
},
{
"code": "IntegrationOperatingSystemVersionNotProvided",
"message": "Integration.OperatingSystemVersion est requis"
},
{
"code": "IntegrationPackageNameNotProvided",
"message": "Integration.PackageName est requis"
},
{
"code": "IntegrationPackageVersionNotProvided",
"message": "Integration.PackageVersion est requis"
},
{
"code": "PageIdentifierNotProvided",
"message": "PageIdentifier est requis"
},
{
"code": "PartnerIdNotProvided",
"message": "rokt-tag-id est manquant/incorrect"
}
]
}

Code de réponse HTTP : 400

{
"title": "BadRequest",
"status": 400,
"success": false,
"errors": [
{
"code": "InvalidRequestPayload",
"message": "Le format du corps de la requête n'est pas valide"
}
]
}

Erreurs du serveur interne (HTTP 5xx)

Dans de rares circonstances, le système peut être incapable de compléter une requête de manière inattendue; dans ce cas, nous retournerons une requête sans corps et un code de statut approprié conforme aux codes de réponse HTTP standard. Dans le cas où cette réponse se produit, nous recommandons que la requête soit réessayée après un bref délai (1-2 secondes). Si le problème persiste ou se produit de manière constante, veuillez contacter le support pour aider à identifier et corriger le problème.

Mise en cache des offres

Rendre les offres Rokt en temps opportun vous permet de maximiser les opportunités de revenus provenant de l'engagement des utilisateurs et des conversions. Cependant, une intégration serveur à serveur implique des appels réseaux supplémentaires entre les serveurs backend de Rokt et les vôtres, ce qui retarde la récupération des données nécessaires pour afficher les offres.

Pour aider à la performance, nous vous recommandons de récupérer le contenu des offres depuis le point d'accès API /v2/partner/experiences de Rokt à un point antérieur dans le parcours de transaction de l'utilisateur avant que nos offres ne soient censées être rendues. Il est préférable d'initier la récupération du contenu des offres après qu'un utilisateur ait démontré un intérêt significatif pour compléter la transaction afin d'éviter des appels réseaux inutiles.

Une fois reçues, les données peuvent être stockées dans un cache. Cela permettra une récupération plus rapide par le client pour une utilisation dans la même transaction.

Nous recommandons de mettre en cache en fonction d'une combinaison d'informations uniques et idéalement contextuelles telles que l'ID de transaction, l'ID utilisateur et le type d'appareil de l'utilisateur. Dans le cas d'un changement de contexte utilisateur (par exemple d'un appareil Android à un appareil iOS), le client doit récupérer de nouvelles expériences depuis le point d'accès /v2/partner/experiences en utilisant des attributs client mis à jour. Cela garantit que les offres affichées restent pertinentes pour le contexte présent du client.

Cet article vous a-t-il été utile ?