# Marketo Engage (Transactional Email API)

Utilisez cette option lorsque votre organisation utilise **Marketo Engage** et souhaite que les envois transactionnels soient suivis dans les journaux d’activité Marketo.

Avant d’aller plus loin, assurez-vous de comprendre comment fonctionne le fournisseur de script dans la Wallet Crew. Commencez par [Adobe Marketing Cloud](/connectors/fr/email-provider/adobe-marketing-cloud.md) et le prérequis [extensibilité EmailSender](/connectors/fr/custom-connector/emailsender-extensibility.md).

### Quand utiliser ceci

Il s’agit souvent du modèle REST le plus simple, mais il suppose que vous gérez et approuvez le modèle d’e-mail dans Marketo.

### Configuration requise dans Marketo

Créez l’asset d’e-mail que vous souhaitez envoyer et faites-le approuver. Les règles d’approbation varient selon la configuration de Marketo.

Puis décidez comment vous mappez la sortie de Wallet Crew :

* Utilisez des jetons ou des variables Marketo pour injecter `Objet` et `Corps`.
* Ou conservez l’objet et le corps dans Marketo et ne Carte que les données contextuelles.

### Notes d’implémentation (jeton + envoi)

Les instances Marketo sont spécifiques à une région. Votre script demande généralement un jeton d’accès Marketo, puis appelle le point de terminaison d’envoi transactionnel pour l’asset d’e-mail choisi.

Stockez ces valeurs comme secrets avant de tester :

* `marketo-baseUrl` (exemple : `https://123-ABC-456.mktorest.com`)
* `marketo-clientId`
* `marketo-clientSecret`
* `marketo-emailId` (l’identifiant de l’asset e-mail Marketo que vous envoyez)

{% hint style="info" %}
Les points de terminaison du jeton OAuth de Marketo peuvent légèrement différer selon l’instance et la configuration. Si le point de terminaison du jeton Marketo nécessite des paramètres de requête ou une méthode HTTP spécifique, adaptez les paramètres d’authentification en conséquence.
{% endhint %}

{% code title="Exemple Marketo Engage (implémentation SendEmail)" %}

```javascript
import { getSecret } from "neo/secrets";

const CUSTOM_DOMAIN = "wallet.brand.com";
const TENANTID = "brand";

async function sendEmail(recipient, emailTemplate, data, cultures, buildEmail) {
  const email = recipient;
  const countryCode = data["country"] || "fr";
  const language = `${cultures[0]?.toLowerCase()?.substring(0, 2) || "fr"}_${countryCode.toLowerCase()}`;
  const customerId = data["id.customerId"];

  if (!customerId) {
    throw new Error('Champ "id.customerId" manquant dans les données de l’e-mail.');
  }

  const url = `https://${CUSTOM_DOMAIN}/${TENANTID}/Carte?id.customerId=${encodeURIComponent(customerId)}`;
  const rendered = await buildEmail(emailTemplate);

  const baseUrl = await getSecret("marketo-baseUrl");
  const clientId = await getSecret("marketo-clientId");
  const clientSecret = await getSecret("marketo-clientSecret");
  const marketoEmailId = await getSecret("marketo-emailId");

  const sendUrl = `${baseUrl}/rest/v1/email/${encodeURIComponent(marketoEmailId)}/send.json`;

  // Votre `fetch` d’exécution gère les identifiants client OAuth et ajoute le jeton.
  const result = await fetch(sendUrl, {
    Method: "POST",
    Authentication: {
      mode: "OAuth2.0",
      grantType: "clientCredentials",
      sendCredentialsAsFormParams: true,
      accessTokenUrl: `${baseUrl}/identity/oauth/token`,
      clientId,
      clientSecret,
    },
    En-têtes: {
      "Content-Type": "application/json",
    },
    Corps: JSON.stringify({
      input: [
        {
          email,
          variables: [
            { name: "url", value: url },
            { name: "language", value: language },
            { name: "subject", value: rendered.Subject },
            { name: "body", value: rendered.Body },
            { name: "customerId", value: customerId },
            { name: "template", value: emailTemplate },
          ],
        },
      ],
    }),
    ThrowOnError: false,
  });

  if (result.StatusCode < 200 || result.StatusCode >= 300) {
    throw new Error(`L'appel d'envoi Marketo a échoué (${result.StatusCode}) : ${result.ResponseText}`);
  }
}

export default function (context) {
  context.register("runtime.scriptable.emailEngine", {
    SendEmail: sendEmail,
  });
}
```

{% endcode %}

{% hint style="info" %}
Marketo nécessite que l’asset e-mail existe (et souvent qu’il soit approuvé) avant de pouvoir être utilisé pour les envois.
{% endhint %}

### Ce qu’il faut valider

Déclenchez un vrai e-mail transactionnel, puis vérifiez ces points :

* L’asset e-mail existe et est approuvé.
* Marketo accepte l’appel d’envoi.
* Les variables correspondent à ce qu’attend votre modèle Marketo.

### FAQ

<details>

<summary><strong>Faut-il créer le modèle d’e-mail dans Marketo ?</strong></summary>

Oui. Marketo nécessite un asset e-mail existant pour les envois transactionnels, et de nombreuses configurations exigent que l’asset soit approuvé. Votre script peut toujours transmettre des variables, mais Marketo a besoin de l’asset conteneur.

</details>

<details>

<summary><strong>The Wallet Crew peut-il toujours rendre le HTML ?</strong></summary>

Oui. Vous pouvez appeler `buildEmail()` et transmettre `subject` et `body` comme variables. Votre e-mail Marketo doit être conçu pour injecter ces variables aux bons endroits.

</details>

<details>

<summary><strong>Quelle est la façon la plus rapide de dépanner ?</strong></summary>

D’abord vérifiez que l’asset est approuvé, puis vérifiez le corps de réponse de l’API Marketo pour un code d’erreur spécifique. Si l’appel API réussit mais que l’e-mail s’affiche mal, vérifiez que votre modèle Marketo attend les mêmes noms de variables que ceux que vous envoyez.

</details>

<details>

<summary><strong>Peut-on utiliser différentes instances Marketo par environnement ?</strong></summary>

Oui. Configurez différents secrets et points de terminaison par tenant (staging vs production). Conservez une nomenclature cohérente des variables entre les environnements pour éviter une dérive du modèle.

</details>


---

# 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/email-provider/adobe-marketing-cloud-1/marketo-engage-transactional-email-api.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.
