> For the complete documentation index, see [llms.txt](https://docs.thewalletcrew.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.thewalletcrew.io/connectors/fr/email-provider/adobe-marketing-cloud/marketo-engage-transactional-email-api.md).

# Marketo Engage (Transactional Email API)

Envoyez les e-mails transactionnels de The Wallet Crew via Marketo Engage à l’aide du fournisseur d’e-mails scripté.

Utilisez cette option lorsque l'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 que le modèle de fournisseur de scripts utilisé par The Wallet Crew est clair. 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 l’utiliser

Il s'agit souvent du modèle REST le plus simple, mais il suppose que le modèle d'e-mail est géré et approuvé dans Marketo.

### Configuration requise dans Marketo

Créez l'asset d'e-mail à envoyer et faites-le approuver. Les règles d'approbation varient selon la configuration Marketo.

Ensuite, décidez comment la sortie de The Wallet Crew est mappée :

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

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

Les instances Marketo dépendent de la région. Le 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 en tant que secrets avant de tester :

* `marketo-baseUrl` (exemple : `https://123-ABC-456.mktorest.com`)
* `marketo-clientId`
* `marketo-clientSecret`
* `marketo-emailId` (l'identifiant de l'asset d'e-mail Marketo à envoyer)

{% hint style="info" %}
Les points de terminaison du jeton OAuth Marketo peuvent varier légèrement selon l'instance et la configuration. Lorsque 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 attache le jeton.
  const result = await fetch(sendUrl, {
    Method: "POST",
    Authentication: {
      mode: "OAuth2.0",
      grantType: "clientCredentials",
      sendCredentialsAsFormParams: true,
      accessTokenUrl: `${baseUrl}/identity/oauth/token`,
      clientId,
      clientSecret,
    },
    Headers: {
      "Content-Type": "application/json",
    },
    Body: 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 exige que l'asset d'e-mail existe (et souvent qu'il soit approuvé) avant de pouvoir être utilisé pour des envois.
{% endhint %}

### Ce qu'il faut valider

Déclenchez un véritable e-mail transactionnel, puis validez ces points :

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

### FAQ

<details>

<summary><strong>Le modèle d'e-mail doit-il être créé dans Marketo ?</strong></summary>

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

</details>

<details>

<summary><strong>The Wallet Crew peut-il toujours générer le HTML ?</strong></summary>

Oui. `buildEmail()` peut être appelé et `subject` et `body` transmis sous forme de variables. L'e-mail Marketo doit être construit pour injecter ces variables aux bons endroits.

</details>

<details>

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

Commencez par vérifier que l'asset est approuvé, puis examinez le corps de la réponse de l'API Marketo pour obtenir un code d'erreur précis. Si l'appel API réussit mais que l'e-mail s'affiche mal, vérifiez que le modèle Marketo attend les mêmes noms de variables que ceux envoyés.

</details>

<details>

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

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

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.thewalletcrew.io/connectors/fr/email-provider/adobe-marketing-cloud/marketo-engage-transactional-email-api.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
