Bonjour,
Je souhaite créer une série d’évènements personnalisés dans le cadre d’une boutique e-commerce à abonnements (géré par Woo Sub) pour faciliter le traitement des commandes et mettre à jour les fiches contacts dans Brevo.
J’ai donc suivi la documentation, réaliser plusieurs tests et je suis parvenu à créer un évènement de test avec comme retour de l’API le code 204 (Event has been tracked successfully) dans les logs Wordpress mais je n’ai absolument rien dans les logs Brevo.
Il se déclenche lorsqu’un abonnement devient actif dans la boutique, soit manuellement (lorsqu’il s’agit d’un virement) soit automatiquement à la commande.
Pourtant, j’ai le sentiment d’identifier correctement le visiteur et de remonter une structure de données qui correspond aux attentes de l’API. Avez-vous rencontré un problème similaire ?
Je vous partage mon code :
add_action('woocommerce_subscription_status_changed', 'check_subscription_status', 10, 3);
function check_subscription_status($subscription_id, $old_status, $new_status) {
if ($new_status === 'active') {
send_brevo_subscription_active_event($subscription_id);
}
}
function send_brevo_subscription_active_event( $subscription_id ) {
error_log("Subscription activated for ID: " . $subscription_id);
if (!function_exists('wcs_get_subscription') || !class_exists('WC_Customer')) {
error_log("WooCommerce Subscriptions or WooCommerce Core is not activated.");
return;
}
$subscription = wcs_get_subscription($subscription_id);
if (!$subscription) {
error_log("No subscription found for ID: " . $subscription_id);
return;
}
$customer_id = $subscription->get_customer_id();
$customer = new WC_Customer($customer_id);
$customer_email = $customer->get_email();
$product_name = 'N/A';
$items = $subscription->get_items();
if (!empty($items)) {
$item = reset($items);
$product = $item->get_product();
if ($product) {
$product_name = $product->get_name();
}
}
error_log("Customer email: " . $customer_email);
?>
<script type="text/javascript">
(function() {
window.sib = {
equeue: [],
client_key: 'XXX'
};
window.sendinblue = {};
for (var j = ['track', 'identify', 'trackLink', 'page'], i = 0; i < j.length; i++) {
(function(k) {
window.sendinblue[k] = function() {
var arg = Array.prototype.slice.call(arguments);
(window.sib[k] || function() {
var t = {};
t[k] = arg;
window.sib.equeue.push(t);
})(arg[0], arg[1], arg[2], arg[3]);
};
})(j[i]);
}
var n = document.createElement("script"),
i = document.getElementsByTagName("script")[0];
n.type = "text/javascript", n.id = "sendinblue-js", n.async = true,
n.src = "https://sibautomation.com/sa.js?key=" + window.sib.client_key;
i.parentNode.insertBefore(n, i);
window.sendinblue.identify({
'email': '<?php echo $customer_email; ?>',
'id': '<?php echo $customer_id; ?>'
});
window.sendinblue.track('subscription_activated', {
'SUBSCRIPTION_ID': '<?php echo $subscription_id; ?>',
'PLAN': '<?php echo $product_name; ?>',
'AMOUNT': '<?php echo $subscription->get_total(); ?>'
});
})();
</script>
<?php
$event_data = array(
'email' => $customer_email,
'event' => 'subscription_activated',
'eventdata' => array(
'data' => array(
'SUBSCRIPTION_ID' => $subscription_id,
'PLAN' => $product_name,
'AMOUNT' => $subscription->get_total()
)
)
);
$api_key = 'XXX';
$api_url = 'https://in-automate.brevo.com/api/v2/trackEvent';
$response = wp_remote_post($api_url, array(
'headers' => array(
'Content-Type' => 'application/json',
'ma-key' => $api_key
),
'body' => json_encode($event_data)
));
if (is_wp_error($response)) {
error_log("Error sending data to Brevo: " . $response->get_error_message());
} else {
$response_code = wp_remote_retrieve_response_code($response);
$response_body = wp_remote_retrieve_body($response);
error_log("Brevo API response: $response_code, $response_body");
}
}
Merci de votre aide.