Créer une activité en direct create-mobile-live

Sur cette page : créez une campagne déclenchée par API dans Journey Optimizer afin de démarrer, mettre à jour et terminer à distance des activités en direct pour des utilisateurs et utilisatrices ou des audiences spécifiques.

Après avoir effectué la configuration mobile et implémenté le SDK mobile Adobe Experience Platform, vous pouvez créer une activité en direct dans Journey Optimizer :

  1. Accédez au menu Campagnes, puis cliquez sur Créer une campagne.

  2. Sélectionnez le type de campagne Déclenchée par API.

    • Sélectionnez Marketing déclenché par API pour les campagnes basées sur les audiences.

    • Sélectionnez Transactionnelle déclenchée par API pour les campagnes individuelles.

    note important
    IMPORTANT
    Notez que pour Transactionnelle déclenchée par API, l’option Débit élevé ne doit pas être activée.

  3. Dans la section Propriétés, modifiez le Titre et la Description de votre campagne.

  4. Dans la section Actions, sélectionnez Activité en direct et sélectionnez ou créez une nouvelle configuration.

    Pour en savoir plus sur la configuration des activités en direct, consultez cette page.

  5. Cliquez sur Créer une expérience pour commencer à configurer votre expérience de contenu et créer des traitements afin de mesurer leurs performances et d’identifier la meilleure option pour votre audience cible. En savoir plus

  6. Dans l’onglet Audience, choisissez le Type d’identité En savoir plus.

    note
    NOTE
    Pour les campagnes marketing déclenchées par API, vous pouvez sélectionner une audience existante qui agit comme première segmentation avant de vérifier l’abonnement à l’identifiant de canal APNs à partir de la payload de l’API.
  7. Les campagnes sont conçues pour être exécutées à une date spécifique ou à une fréquence récurrente. Découvrez comment configurer le Planning de votre campagne dans cette section.

  8. Une fois la configuration effectuée, cliquez sur Réviser pour activer, puis sur Activer.

  9. Une fois la campagne activée, utilisez la requête cURL fournie comme modèle pour déclencher les événements de démarrage, de mise à jour ou d’arrêt de l’activité en direct. Modifiez l’exemple de payload en incluant vos données avant l’exécution.

    Veillez également à copier les identifiants ID de campagne à inclure dans votre payload.

    ➡️ Les exigences d’authentification, y compris les jetons OAuth et les clés d’API, sont disponibles dans la documentation sur les campagnes déclenchées par API.

Après avoir créé votre activité en direct, vous pouvez suivre son impact à l’aide des rapports intégrés.

TIP
Si votre activité en direct ne s’affiche pas ou ne se met pas à jour comme prévu, consultez Dépannage des activités en direct pour obtenir des instructions détaillées.

Exemples de payload payload

La structure de la payload dépend de la plateforme sur laquelle iOS utilise l’objet de aps Apple Push Notification Service (APNs) , tandis qu’Android utilise l’objet de fcm Firebase Cloud Messaging (FCM) . Utilisez les exemples ci-dessous pour votre plateforme et votre type de campagne.

Payload iOS

Pour iOS, placez les champs de personnalisation et de cycle de vie dans l’objet aps APNs . Assurez-vous que attributes-type correspond au nom de la structure de LiveActivityAttributes de votre application et que attributes correspond aux champs définis dans cette structure.

Cas d’utilisation unitaire (campagne transactionnelle déclenchée par une API)

Cet exemple de payload concerne les campagnes de type Transactionnelle déclenchée par API. Notez que la plupart des champs de l’exemple de payload suivant sont obligatoires, seuls requestId, dismissal-date et alert sont facultatifs.

Afficher un exemple de payload
code language-json
{
    "requestId": "your-request-id",
    "campaignId": "your-campaign-id",
    "recipients": [
        {
            "type": "aep",
            "userId": "testemail@gmail.com",
            "namespace": "email",
            "context": {
                "requestPayload": {
                    "aps": {
                        "content-available": 1,
                        "timestamp": 1756984054,              // current epoch time
                        "dismissal-date": 1756984084,         // optional – auto remove when event="end"
                        "event": "update",                    // start | update | end

                        // Fields from FoodDeliveryLiveActivityAttributes
                        "content-state": {
                            "orderStatus": "Delivered"
                        },

                        "attributes-type": "FoodDeliveryLiveActivityAttributes",
                        "attributes": {
                            "restaurantName": "Pizza",
                            "liveActivityData": {
                                "liveActivityID": "orderId1"       // customer reference ID
                            }
                        },

                        "alert": {
                            "title": "Order Delivered!",
                            "body": "Your pizza has arrived."
                        }
                    }
                }
            }
        }
    ]
}

Cas d’utilisation de diffusion (campagne marketing déclenchée par API)

Cet exemple de payload concerne les campagnes basées sur une audience de type Marketing déclenchée par API.

Afficher un exemple de payload
code language-json
{
    "requestId": "123400000",
    "campaignId": "d32e6f6c-56df-4a98-a2c0-6db6008f8f32",
    "audience": {
        "id": "508f9416-52d0-4898-ba47-08baaa22e9c7"
    },
    "context": {
        "requestPayload": {
            "aps": {
                "input-push-channel": "V+8UslywEfAAAOq9SbTrLg==",  //apns-channel-id
                "content-available": 1,
                "timestamp": 1770808339,
                "event": "update",   // start | update | end

                // Fields from GameScoreLiveActivityAttributes
                "content-state": {
                    "homeTeamScore": 33,
                    "awayTeamScore": 49,
                    "statusText": "Wingdom keeps scoring!"
                },
                "attributes-type": "GameScoreLiveActivityAttributes",
                "attributes": {
                    "liveActivityData": {
                        "channelID": "V+8UslywEfAAAOq9SbTrLg=="   //apns-channel-id, must match the "input-push-channel" value
                    }
                },
                "alert": {
                    "title": "This is the title for game",
                    "body": "This is the body for body"
                }
            }
        }
    }
}

Payload Android

Pour Android, placez les champs Activité dynamique dans l’objet fcm Firebase Cloud Messaging (FCM). Définissez des valeurs dynamiques dans content_state à l’aide des clés custom_key_* que le fournisseur de style de votre application est configuré pour gérer.

Cas d’utilisation unitaire (campagne transactionnelle déclenchée par une API)

IMPORTANT
L’objet fcm contient deux champs temporels, tous deux exprimés en secondes epoch :
  • timestampcontrôle l’ordre des messages. Chaque événement de début, de mise à jour et de fin doit utiliser une valeur supérieure à l’événement précédent pour la même notification_id (ou topic_name pour les diffusions). Les mises à jour ne s’affichent que si leur horodatage est plus récent que la dernière valeur traitée. Les dates et heures antérieures ou égales sont ignorées.
  • whencontrôle l’heure d’affichage de la notification. Ce champ facultatif correspond à la méthode setWhen d’Android et n’affecte pas l’ordre des messages. Conservez sa valeur à jour, car une valeur obsolète peut entraîner des problèmes d’affichage.
Voir Résolution des problèmes liés aux activités dynamiques pour plus d’informations.

Utilisez ces payloads pour des campagnes individuelles de type transactionnel déclenché par l’API.

Utilisez le même notification_id pour tous les événements de début, de mise à jour et de fin afin de vous assurer qu’ils ciblent la même instance d’activité active.

Exemple de payload d'événement de début
code language-json
{
    "requestId": "your-request-id",
    "campaignId": "your-campaign-id",
    "recipients": [
        {
            "type": "aep",
            "userId": "your-device-ECID",
            "namespace": "ECID",
            "context": {
                "requestPayload": {
                    "fcm": {
                        "notification_id": "flight-DL-321",
                        "timestamp": 1756984054,           // required - ordering key; must strictly increase on every event
                        "notification_channel_id": "live_updates_channel",
                        "priority": "PRIORITY_HIGH",
                        "when": 1756984054,              // optional - time shown on the notification (seconds)
                        "event_type": "start",             // start | update | end
                        "title": "Flight DL-321",
                        "body": "Boarding starts shortly",
                        "critical_text": "25 min",
                        "action_type": "DEEPLINK",
                        "action_uri": "myapp://flight/DL241",
                        "content_state": {                 // custom updating values specific to keys defined in every Live activity on the app
                            "custom_key_template_type": "progress",
                            "custom_key_journey_start": "DEL",
                            "custom_key_journey_progress": 10,
                            "custom_key_journey_end": "MUM"
                        }
                    }
                }
            }
        }
    ]
}
Mise à jour de l’exemple de payload d’événement

Pour mettre à jour une activité En direct , définissez event_type sur update et notification_id restez inchangé. Mettez à jour body, critical_text et les valeurs dans content_state selon les besoins pour refléter le dernier statut.

code language-json
"fcm": {
    "notification_id": "flight-DL-321",
    "timestamp": 1756984114,           // increased from the start event
    "notification_channel_id": "live_updates_channel",
    "priority": "PRIORITY_HIGH",
    "when": 1756984054,
    "event_type": "update",
    "title": "Flight DL-321",
    "body": "Boarding at Gate-D23",
    "critical_text": "Now",
    "action_type": "DEEPLINK",
    "action_uri": "myapp://flight/DL241",
    "content_state": {
        "custom_key_template_type": "progress",
        "custom_key_journey_start": "DEL",
        "custom_key_journey_progress": 50,
        "custom_key_journey_end": "MUM"
    }
}
Exemple de payload d'événement de fin

Pour mettre fin à une activité active, définissez event_type sur end. Vous pouvez éventuellement inclure des dismiss_after pour spécifier le délai, en secondes, avant que l’activité Live terminée ne soit ignorée.

code language-json
"fcm": {
    "notification_id": "flight-DL-321",
    "timestamp": 1756984174,           // increased again
    "notification_channel_id": "live_updates_channel",
    "priority": "PRIORITY_HIGH",
    "when": 1756984054,
    "event_type": "end",
    "title": "Flight DL-321",
    "body": "Welcome to Mumbai",
    "critical_text": "Landed",
    "action_type": "DEEPLINK",
    "action_uri": "myapp://flight/DL241",
    "content_state": {
        "custom_key_template_type": "progress",
        "custom_key_journey_start": "DEL",
        "custom_key_journey_progress": 100,
        "custom_key_journey_end": "MUM"
    },
    "dismiss_after": 10
}

Cas d’utilisation de diffusion (campagne marketing déclenchée par API)

Utilisez cette payload pour les campagnes basées sur une audience de type Marketing déclenché par l’API.

Définissez topic_name sur la rubrique FCM à laquelle les appareils des utilisateurs s’abonnent. Envoyez tous les événements de mise à jour et de fin à la même rubrique et conservez les notification_id inchangés pour cibler la même notification d’activité active.

Afficher un exemple de payload
code language-json
{
    "requestId": "your-request-id",
    "campaignId": "your-marketing-campaign-id",
    "audience": {
        "id": "your-audience-id"
    },
    "context": {
        "requestPayload": {
            "fcm": {
                "topic_name":"flight_DL321",        // fcm topic name
                "notification_id": "flight-DL-321",
                "timestamp": 1756984054,           // required - ordering key; must strictly increase on every event
                "notification_channel_id": "live_updates_channel",
                "priority": "PRIORITY_HIGH",
                "when": 1756984054,              // optional - time shown on the notification (seconds)
                "event_type": "start",             // start | update | end
                "title": "Flight DL-321",
                "body": "Boarding starts shortly",
                "critical_text": "25 min",
                "action_type": "DEEPLINK",
                "action_uri": "myapp://flight/DL241",
                "content_state": {                 // custom updating values specific to keys defined in every Live activity on the app
                    "custom_key_template_type": "progress",
                    "custom_key_journey_start": "DEL",
                    "custom_key_journey_progress": 10,
                    "custom_key_journey_end": "MUM"
                }
            }
        }
    }
}

Ajouter des données personnalisées avec des métadonnées d’exécution metadata

AVAILABILITY
executionMetadata n’est disponible que pour les campagnes transactionnelles déclenchées par API.

Joignez vos propres données personnalisées à un profil, tel qu’un identifiant de commande, un niveau de fidélité ou un code de région, à l’aide du champ facultatif executionMetadata. Journey Optimizer stocke ces données avec l’exécution afin que vous puissiez les récupérer ultérieurement à partir de votre jeu de données de retour sur l’activité en direct et faire correspondre les résultats de la diffusion aux enregistrements de votre propre entreprise.

Pour envoyer ces données via l’API, reportez-vous à la référence de l’API Messaging pour le champ executionMetadata. Pour relire les valeurs sur l’appareil, consultez le guide du SDK mobile sur la réception des métadonnées d’exécution à partir du déclencheur d’API.

Pour ajouter des données personnalisées avec des métadonnées d’exécution :

  • Ajoutez executionMetadata à un profil, à côté de userId et namespace. Seules les clés de chaîne et les valeurs de chaîne sont acceptées. Convertissez toute valeur qui n’est pas de chaîne en chaîne avant de l’envoyer.

  • Les valeurs sont enregistrées exactement comme envoyées. executionMetadata ne prend pas en charge les expressions de personnalisation. Toute expression {{...}} est donc traitée comme du texte littéral plutôt que résolue. Vous devez toujours envoyer des valeurs finales et littérales.

  • Chaque profil peut transporter jusqu’à 50 paires clé/valeur, avec une limite de taille combinée de 2 Ko pour toutes les clés et valeurs. Les métadonnées qui dépassent cette limite sont ignorées, mais l’activité en direct est toujours diffusée. Limitez la payload aux informations requises à des fins de création de rapports.

Exemple JSON iOS

Dans cet exemple, orderId, tier, restaurant et region sont vos propres valeurs. Une fois l’activité en direct déclenchée, vous pouvez les relire à partir du jeu de données de retour pour lier la diffusion à votre enregistrement de commande.

code language-json
{
    "requestId": "your-request-id",
    "campaignId": "your-campaign-id",
    "recipients": [
        {
            "type": "aep",
            "userId": "testemail@gmail.com",
            "namespace": "email",
            "executionMetadata": {
                "orderId": "A-123",
                "tier": "gold",
                "restaurant": "PizzaPlace",
                "region": "EU"
            },
            "context": {
                "requestPayload": {
                    "aps": {
                        "content-available": 1,
                        "timestamp": 1756984054,
                        "dismissal-date": 1756984084,
                        "event": "update",
                        "content-state": {
                            "orderStatus": "Delivered"
                        },
                        "attributes-type": "FoodDeliveryLiveActivityAttributes",
                        "attributes": {
                            "restaurantName": "PizzaPlace",
                            "liveActivityData": {
                                "liveActivityID": "orderId1"
                            }
                        },
                        "alert": {
                            "title": "Order Delivered!",
                            "body": "Your pizza has arrived."
                        }
                    }
                }
            }
        }
    ]
}
Exemple JSON Android
note
NOTE
Récupérez les métadonnées d’exécution sur Android de la même manière que sur iOS : à partir des événements message.feedback dans le jeu de données Commentaires sur les messages AJO . Pour obtenir des exemples de requête, voir la section Avancé : débogage via des requêtes de jeu de données.
Android utilise l’extension de messagerie open-source Adobe Experience Platform (AEP) pour Mobile SDK.

Dans cet exemple, seat et type sont des champs de métadonnées personnalisés contenant les détails de votre réservation. Après avoir déclenché l’activité Live, récupérez ces valeurs du jeu de données de commentaires sur l’activité Live pour associer les résultats de diffusion à votre enregistrement de réservation.

code language-json
{
    "requestId": "your-request-id",
    "campaignId": "your-campaign-id",
    "recipients": [
        {
            "type": "aep",
            "userId": "your-device-ECID",
            "namespace": "ECID",
            "executionMetadata": {
                "seat": "A-3",
                "type": "economy"
            },
            "context": {
                "requestPayload": {
                    "fcm": {
                        "notification_id": "flight-DL-321",
                        "timestamp": 1756984054,           // required - ordering key; must strictly increase on every event
                        "notification_channel_id": "live_updates_channel",
                        "priority": "PRIORITY_HIGH",
                        "when": 1756984054,              // optional - time shown on the notification (seconds)
                        "event_type": "start",             // start | update | end
                        "title": "Flight DL-321",
                        "body": "Boarding starts shortly",
                        "critical_text": "25 min",
                        "action_type": "DEEPLINK",
                        "action_uri": "myapp://flight/DL241",
                        "content_state": {                 // custom updating values specific to keys defined in every Live activity on the app
                            "custom_key_template_type": "progress",
                            "custom_key_journey_start": "DEL",
                            "custom_key_journey_progress": 10,
                            "custom_key_journey_end": "MUM"
                        }
                    }
                }
            }
        }
    ]
}

Vidéo pratique

Découvrez comment configurer les activités en direct iOS avec Adobe Journey Optimizer pour afficher des mises à jour détaillées et en temps réel sur l’écran verrouillé et la Dynamic Island d’un iPhone.

AI Knowledge Reference

This section contains structured knowledge intended to support interpretation, retrieval, and question answering related to this topic.

For complete understanding, this information should be combined with the documentation on this page. Neither source is intended to stand alone; the page describes the feature, while this section provides additional context that helps disambiguate terminology, intent, applicability, and constraints.

  • TL;DR: This page explains how to build an API-triggered campaign in Journey Optimizer to remotely start, update, and end Live activities for individual users or audiences, and how to attach custom data to a profile using the optional executionMetadata field.

Intents:

  • Create an API-triggered campaign for Live activities, selecting API-triggered Marketing for audience-based campaigns or API-triggered Transactional for individual campaigns
  • Choose Live activity in the Actions section and select or create a configuration
  • Create a content experiment with treatments to measure performance
  • Activate the campaign and use the provided cURL request to trigger start, update, or end events
  • Attach custom data to a profile using the optional executionMetadata field for later retrieval from the Live activity feedback dataset

Glossary:

  • API-triggered Marketing: The campaign type used for audience-based campaigns (product-specific)
  • API-triggered Transactional: The campaign type used for individual campaigns (product-specific)
  • High Throughput: An option that should not be enabled for API-triggered Transactional Live activity campaigns (product-specific)
  • Live activity: The action chosen in the Actions section, tied to a selected or newly created configuration (product-specific)
  • executionMetadata: An optional field that attaches custom data to a profile, stored alongside the execution and retrievable from the Live activity feedback dataset (product-specific)
  • Live activity feedback dataset: The dataset from which stored executionMetadata values can be retrieved to match delivery results to your own records (product-specific)
  • event (iOS) / event_type (Android): The payload field whose values are start, update, or end

Guardrails:

  • For API-triggered Transactional campaigns, the High Throughput option should not be enabled.
  • executionMetadata is only available for API-triggered Transactional campaigns.
  • executionMetadata accepts only string keys and string values; convert any non-string value to a string before sending.
  • executionMetadata does not support personalization expressions, so any {{...}} expression is treated as literal text rather than resolved.
  • Each profile can carry up to 50 key/value pairs in executionMetadata (hard limit), with a combined size limit of 2 KB for all keys and values (hard limit). Metadata exceeding this limit is discarded, but the Live activity is still delivered.
  • In the iOS unitary payload example, most fields are mandatory; only requestId, dismissal-date, and alert are optional.

Terminology:

  • Canonical name: Live activity — Acronym: n/a — variants: Live activities
  • Synonyms: “Unitary use cases” = “individual campaigns (API-triggered Transactional)”
  • Synonyms: “Broadcast use cases” = “audience-based campaigns (API-triggered Marketing)”
  • Do not confuse: “API-triggered Marketing” (audience-based campaigns) ≠ “API-triggered Transactional” (individual campaigns)
  • Do not confuse: “start” ≠ “update” ≠ “end” (the values of the event field in iOS payloads and the event_type field in Android payloads)
  • Do not confuse: “dismissal-date” (optional; auto-removes the activity when event is end) ≠ “timestamp” (current epoch time)

FAQ:

  • Q: Which campaign type do I use for Live activities? — API-triggered Marketing for audience-based campaigns; API-triggered Transactional for individual campaigns.
  • Q: Should High Throughput be enabled for API-triggered Transactional? — No; for API-triggered Transactional, the High Throughput option should not be enabled.
  • Q: How do I trigger start, update, or end events after activation? — Use the provided cURL request as a template, update the sample payload with your specific data, and copy the Campaign ID into your payload.
  • Q: What is executionMetadata for? — Attaching your own custom data, such as an order ID, loyalty tier, or region code, to a profile; it is stored alongside the execution and retrievable from the Live activity feedback dataset. It is only available for API-triggered Transactional campaigns.
  • Q: What are the executionMetadata limits? — Up to 50 key/value pairs per profile with a combined 2 KB size limit; only string keys and values are accepted, and personalization expressions are not resolved. Metadata exceeding the limit is discarded, but the Live activity is still delivered.
recommendation-more-help
journey-optimizer-help