Я использую API SendGrid для управления контактами и связанными с ними списками контактов. Ссылаясь на документацию здесь, я изначально создал адрес электронной почты и присвоил его спискам контактов (XXXXX, YYYYY), используя следующий запрос:
curl -X PUT "https://api.sendgrid.com/v3/marketing/contacts" \
--header "Authorization: Bearer <<YOUR_API_KEY_HERE>>" \
--header "Content-Type: application/json" \
--data '{"list_ids":["057204d4-755b-4364-a0d1-XXXXXX", "057204d4-755b-4364-a0d1-YYYYY"], "contacts": [{"email": "[email protected]"}]}'
Теперь я хочу обновить связанный с контактом список контактов на другой (ZZZZZ), используя тот же запрос. Итак, я дал следующую команду:
curl -X PUT "https://api.sendgrid.com/v3/marketing/contacts" \
--header "Authorization: Bearer <<YOUR_API_KEY_HERE>>" \
--header "Content-Type: application/json" \
--data '{"list_ids":["057204d4-755b-4364-a0d1-ZZZZZ"], "contacts": [{"email": "[email protected]"}]}'
Однако при поиске адреса электронной почты по следующему запросу:
curl -X POST "https://api.sendgrid.com/v3/marketing/contacts/search/emails" \
--header "Authorization: Bearer <<YOUR_API_KEY_HERE>>" \
--header "Content-Type: application/json" \
--data '{"emails": ["[email protected]"]}'
Я заметил, что список контактов адреса электронной почты не был обновлен до ZZZZ; вместо этого все три списка все еще присутствуют:
{
"result": {
"[email protected]": {
"contact": {
...........
"email": "[email protected]",
"list_ids": [
"057204d4-755b-4364-a0d1-XXXXXX",
"057204d4-755b-4364-a0d1-YYYYYY",
"057204d4-755b-4364-a0d1-ZZZZZZ"
],
..........
}
}
}
}
Может ли кто-нибудь подсказать мне, как правильно обновить списки контактов, связанные с адресом электронной почты?






Я заметил, что список контактов адреса электронной почты не был обновлен до ZZZZ; вместо этого все три списка все еще присутствуют
Этого и следовало ожидать - https://docs.sendgrid.com/api-reference/contacts/add-or-update-a-contact#body говорит:
list_ids- array[string] — массив строк идентификатора списка, в который будет добавлен этот контакт.
Там не сказано, что контакт будет удален из других списков, в которых он уже есть.
Чтобы удалить контакт из списка, вам нужно пройти через конечную точку списков, а точнее /v3/marketing/lists/{id}/contacts. Вам необходимо сделать запрос DELETE и передать параметр contact_ids, содержащий разделенные запятыми идентификаторы контактов, которые вы хотите удалить из списка.
https://docs.sendgrid.com/api-reference/lists/remove-contacts-from-a-list
// Update SendGrid contact's list association
$apiKey = 'YOUR_API_KEY_HERE';
$url = 'https://api.sendgrid.com/v3/marketing/contacts';
$contactEmail = '[email protected]';
$newListIds = ['057204d4-755b-4364-a0d1-ZZZZZ'];
$data = [
'list_ids' => $newListIds,
'contacts' => [['email' => $contactEmail]]
];
$payload = json_encode($data);
$headers = [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
'Content-Length: ' . strlen($payload)
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Понимание управления контактами в SendGrid
Ваш ответ можно улучшить, добавив дополнительную вспомогательную информацию. Пожалуйста, отредактируйте , добавив дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
что если в следующий раз, когда я захочу заменить
list_idsна другой,057204d4-755b-4364-a0d1-ZZZZZбудет удален? его не удаляют, вот в чем проблема, с которой я столкнулся