web-dev-qa-db-ja.com

APIを介してmailchimpサブスクライバーに「タグ」を追加する方法

API経由でメーリングリストメンバーに tags を追加しようとしています。しかし、 documentation でタグを渡す場所がわかりません。誰かがAPIを介してメンバーに関連付けられたタグを更新する方法の例を指摘できますか?

12
teamteama

タグは静的セグメントを置き換えました。そのため、タグの作成およびメンバーへのタグの追加と削除に使用されるエンドポイントは、以前にセグメントを管理するために使用されたエンドポイントと同じです。以下に、リクエストとレスポンスのボディパラメータとリクエストとレスポンスの例を含むAPIを介してタグを管理するために使用するエンドポイントに関するドキュメントを示します。

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

タグをメンバーに追加するには、「static_segment」配列パラメーターにメンバーのメールアドレスを含める必要があります。

それがお役に立てば幸いです。

10
Jelan

どうやらMailchimpの「タグ」は「セグメント」です。

メールアドレスでメンバー(つまり、サブスクライバー)に(IDではなく)名前でタグを追加できるようにする関数をいくつかコーディングしました。

/**
 * 
 * @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に感謝します。@ Jelanの答えは私を正しい道に導きました!

5
Ryan

これは、タグを追加する公式の方法です: https://developer.mailchimp.com/documentation/mailchimp/reference/lists/members/tags/ It動作しますが、私のテストでは、タグが追加されていても応答メッセージは空です。

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