Contourner les limites des groupes Mailchimp

Toujours dans le cadre des limitions Mailchimp, comme le nombre de requêtes simultanés qui n’est dérangeant que quand on a un très grand trafic sur l’API, et qui peut se régler par une gestion interne et une tâche de cron qui va diffuser les mises à jour en batch depuis l’API.

J’aborderai dans ce sujet quelques solutions possibles concernant la limitation de groupes qu’impose Mailchimp.

L’origine de ce problème est que Mailchimp n’autorise dans chaque liste que 60 groupes, imaginez un site d’automobiles qui voudrait regrouper les fans de chaque modèle de voiture afin de leur envoyer la newsletter appropriée, il ne pourra donc envisager plus de 60 modèles.

Plusieurs solutions existent, comme l’envoi statique depuis l’API avec la base de données comme repère.

Mais le plus simple encore est de se baser sur les champs de texte à la place des groupes, l’inconvénient de cette solution est que Mailchimp se doit de tout limiter :-( , ce champ ne peut dépasser les 255 caractères.

 

Le champ modèle comportera donc cette taille là :

“Citroën C4;Citroën DS3;Citroën C3;Citroën C3 Picasso;Citroën C4 Picasso;Citroën Jumper;Citroën C5 Tourer;Mini Cooper;Ford Fiesta;Dacia Duster;Dacia Logan Wagon;Seat Leon;Kia Rio;Kia Ceed SW;Hyundai i30;Hyundai IX35;Volkswagen Golf Break;Volkswagen”

On peut les coder en numéro, bien que ça ne soit pas très clair dans l’interaction humaine (Elle peut conduire à une éventuelle ambiguïté pour l’humain lors de sa lecture/envoi). S’il y a 99 modèles codés en numéros et séparés par une virgule, nous aurons une moyenne de 255/3 = 85 modèles insérés par champ.

L’idée de les coder est intéressante, c’est on les hash du genre :

x =>  Citroën C4
6 => Citroën C3 Picasso
@ => Hyundai i30

On peut même arriver à faire de ces 255 caractères => 255 modèles (en supposant que chaque caractère est unique). Les compresser, ça devient exagéré. (666)

On peut aussi s’appuyer sur d’autres champs pour stocker les nouveaux modèles, une fois, un champ est déjà rempli (Le nombre de champs est limité à 30 donc à peu près si on réserve 10, on aura 255*10 = 2550 caractères).

 

Donc pour conclure, je dirai :

  •  Coder les noms des voitures + sur plusieurs champs de texte;
  •  Garder du texte lisible (les noms des voitures) + sur plusieurs champs de texte;

Le choix est donc relative à la quantité de données que doivent stocker ces champs, dans mon cas c’est le nombre de modèles qui est l’indicateur.

Après avoir rédiger la table de hachage qui relie chaque code à son text, il suffit d’aller sur mailchimp et de sélectionner un segment d’adresse auxquels on veut envoyer l’e-mail en recherchant à base de contenu like %code%, sachant que le code est unique et peutcontenir un séparateur.

MailChimpSegmentExemple1

Avant de commencer l’implémentation, Il est nécessaire de faire des sauvegardes des inscrits sur Mailchimp au cas où … Pour ceux qui veulent convertir leur vieux format à base de groupe en celui nouveau, ceci est un petit script (PHP/Maichimp API 1.3) de conversation sur lequel vous pourrez construire le votre, il est important de comprendre ce que vous faites.

La conversion des groupes :

1
2
3
4
5
6
Array(
 [id] => 10384
 [name] => Citroën
 [groups] => C4, DS3, C3, C3 Picasso, C4 Picasso, Jumper, C5 Tourer
)
//ainsi de suite pour Renault et les autres groupings

en champ de texte ‘MODEL’ composé de grouping + group et séparé par des point-virgules :

Citroën C4;Citroën DS3;Citroën C3;Citroën C3 Picasso;Citroën C4 Picasso;Citroën Jumper;Citroën C5 Tourer; …

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
require_once('mailchimp/MCAPI.class.php');
$api = new MCAPI('mailchimp_apikey'); // APIKEY
$list_id = 0; // L'id de la liste
 
$spc_grouping = array(10389, 10370, 10711); // les ID des groupes qu'on veut garder
 
// Pour vérifier le résultat il est préférable de travailler par échantillon de 0 à 4 ou à 1000 après par ex.
$start = 0;
$limit = 1;
$status='subscribed';
$since=NULL;
 
$text_field = "MODEL"; // Le nom du champ texte sur mailchimp
 
$batch = array(); 
 
$members_info = $api->listMembers($list_id, $status, $since, $start, $limit); // récupérer les informations des membres
//print_r($members_info); // Debug 1
 
foreach($members_info['data'] as $member_key => $member){        // Pour chaque membre :
 
    $member_info = $api->listMemberInfo($list_id,  "viking-of@hotmail.com"); // récupérer plus d'information sur le membre
    //print_r($member_info); // Debug 1
 
    $merge_vars = array(
        $text_field => "",
        'GROUPINGS' => array(),
    );
 
    if($member_info["success"]){
 
        $member_info = $member_info['data'][0];
 
        if($member_info["merges"][$text_field] != "")
            $merge_vars[$text_field] .= $member_info["merges"][$text_field].";";        //    Les modèles originaux + séparation ?
 
        foreach($member_info['merges']['GROUPINGS'] as $grouping_key => $grouping){    // Pour chaque grouping ex.: Peugeot, Renault ... 
 
            if(!in_array($grouping['id'], $spc_grouping)){        // Tant que ce groupe n'est pas une exception
                if($grouping['groups'] != ""){        // Si il y a des groupes dedans : 3008, 308, 508, clio ...
 
                    $mark = $grouping['name'];    // Peugeot
                    $models = explode(", ", $grouping['groups']);
                    $merge_vars['GROUPINGS'][$grouping_key]['groups'] = ""; // Vider les groupes
 
                    foreach($models as $model){
                        $merge_vars .= "".$mark." ".$model.";";
                    }
 
                }
            }
        }
 
        // On apporte les modification sur le batch et on accorde une pause pour la limitation
        array_push($batch, array(
            'email' =>  $member['email'],
            'merge_vars' =>  $merge_vars,
            )
        );
        //sleep(1000);
    }
}
 
print_r($batch); // Debug 2 : résultat
// Rediffuser ensuite en batch
//print_r($api->listBatchSubscribe($list_id, $batch, false, true, true));

Issu d’un échange avec un ancien client

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *