web-dev-qa-db-fra.com

Comment ajouter des "Tags" à l'abonné mailchimp via l'API

Vous cherchez à ajouter tags à mes membres de la liste de diffusion via l'API. Mais je ne vois pas où passer les balises dans le documentation . Quelqu'un peut-il indiquer un exemple de mise à jour des balises associées à un membre via l'API?

12
teamteama

Les balises ont remplacé les segments statiques. Ainsi, les points de terminaison utilisés pour créer des balises et ajouter et supprimer des balises de membres sont les mêmes points de terminaison qui étaient précédemment utilisés pour gérer les segments. Voici la documentation sur les points de terminaison à utiliser pour gérer vos balises via l'API qui inclut les paramètres du corps de demande et de réponse ainsi que des exemples de demandes et de réponses:

http://developer.mailchimp.com/documentation/mailchimp/reference/lists/segments/

Pour ajouter des tags à vos membres, vous devez inclure leurs adresses e-mail dans le paramètre de tableau 'static_segment'.

J'espère que ça aide.

10
Jelan

Apparemment, les "balises" Mailchimp sont des "segments".

J'ai codé quelques fonctions qui me permettent d'ajouter des balises par nom (plutôt que par ID) à un membre (c'est-à-dire abonné) par adresse e-mail.

/**
 * 
 * @param string $emailAddress
 * @param array $tags
 * @return void
 */
public function addTagsToContact($emailAddress, $tags) {
    $list_id = $this->getDefaultListId();
    foreach ($tags as $tag) {
        $this->addMemberToSegment($emailAddress, $list_id, $tag);
    }
}

/**
 * Add a tag to a subscriber (tags replaced segments https://stackoverflow.com/a/52315577/470749)
 * 
 * @param string $emailAddress
 * @param string $list_id
 * @param string $segment_name
 * @return array
 */
public function addMemberToSegment($emailAddress, $list_id, $segment_name) {
    $api = Newsletter::getApi();
    $segmentsByName = $this->getSegments($list_id);
    $segment_id = $segmentsByName[$segment_name]['id'];
    $response = $api->post("lists/$list_id/segments/$segment_id", [
        'members_to_add' => [$emailAddress]
    ]); //https://developer.mailchimp.com/documentation/mailchimp/reference/lists/segments/#create-post_lists_list_id_segments_segment_id
    return $response;
}

/**
 * 
 * @param string $list_id
 * @return array
 */
public function getSegments($list_id) {//https://developer.mailchimp.com/documentation/mailchimp/reference/lists/segments/#%20
    $segmentsByName = [];
    $api = Newsletter::getApi();
    $count = 50; //default is 10
    $offset = 0;
    do {
        $url = "lists/$list_id/segments/?" . http_build_query(['count' => $count, 'offset' => $offset]);
        Log::debug($url);
        $response = $api->get($url);
        $total_items = $response['total_items'];
        foreach ($response['segments'] as $segment) {
            $segmentsByName[$segment['name']] = $segment;
        }
        $offset += $count;
    } while (count($segmentsByName) < $total_items);
    //Log::debug(json_encode($segmentsByName));
    return $segmentsByName;
}

/**
 * 
 * @return string
 */
public function getDefaultListId() {
    return config('newsletter.lists.subscribers.id');
}

Cela repose sur la bibliothèque https://github.com/spatie/laravel-newsletter .

P.S. Merci beaucoup à @Jelan, dont la réponse m'a mis sur la bonne voie!

5
Ryan

C'est la façon officielle d'ajouter des balises: https://developer.mailchimp.com/documentation/mailchimp/reference/lists/members/tags/ Cela fonctionne, sauf que dans mes tests, le message de réponse est vide, même si la balise est ajoutée.

Voici un exemple de code dans Google Apps Script:

payload = '{\
  "tags": [\
    {\
     "name":"' + tagName + '",\
     "status":"' + tagStatus + '"\
    }\
   ]\
}'
;

params = {
  "method": "POST",
  "headers":MC_headers,
  "payload": payload,
  "muteHttpExceptions": true
};
url = MC_url + 'lists/' + MC_IDs.listId + '/members/' + sub_hash + '/tags';
response = UrlFetchApp.fetch(url, params);
3
Boris