Как добавить "Теги" к подписчику mailchimp через api

Глядя, чтобы добавить теги к моим членам списка рассылки через API. Но я не вижу, где передавать теги в документации. Может кто-нибудь указать на пример того, как обновить теги, связанные с членом через API?

Ответ 1

Теги заменяли статические сегменты. Таким образом, конечные точки, используемые для создания тегов и добавления и удаления тегов от членов, являются теми же конечными точками, которые ранее использовались для управления сегментами. Вот документация по конечным точкам, используемая для управления вашими тегами через API, который включает в себя параметры запроса и ответа, а также примеры запросов и ответов:

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

Чтобы добавить теги к своим членам, вам необходимо указать их адреса электронной почты в параметре массива "static_segment".

Надеюсь, это поможет.

Ответ 2

Очевидно, "теги" Mailchimp являются "сегментами".

Я кодировал пару функций, которые позволяют мне добавлять теги по имени (а не по идентификатору) члену (т.е. подписчику) по адресу электронной почты.

/**
 * 
 * @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');
}

Это зависит от https://github.com/spatie/laravel-newsletter библиотеки.

Постскриптум Большое спасибо @Jelan, чей ответ вывел меня на правильный путь!

Ответ 3

Это официальный способ добавления тегов: https://developer.mailchimp.com/documentation/mailchimp/reference/lists/members/tags/. Это работает, за исключением того, что в моем тестировании ответное сообщение пуст, даже если тег добавлен.

Здесь пример кода в 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);

Ответ 4

Таким образом, вам не нужно проходить аутентификацию здесь, чтобы сделать это?

т.е. программно вошел в MailChimp