You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用TypeScript实现通过SendGrid API删除列表全部联系人

使用TypeScript通过SendGrid API删除指定联系人列表的所有联系人

问题原因说明

你遇到的403错误是因为调用的是Legacy Marketing Campaigns相关端点,这类端点已被SendGrid弃用或限制权限,现在需要使用最新的v3 Contacts API来操作联系人列表。

实现步骤与代码

1. 准备工作

  • 确保你的SendGrid API密钥拥有contact_list.read和contact_list.write权限
  • 安装HTTP请求库(比如axios):
npm install axios @types/axios

2. TypeScript实现代码

import axios from 'axios';

const SENDGRID_API_KEY = '你的SendGrid API密钥';
const SENDGRID_BASE_URL = 'https://api.sendgrid.com/v3';

/**
 * 获取指定联系人列表的所有联系人ID
 * @param listId 目标联系人列表ID
 * @returns 所有联系人ID数组
 */
async function getAllContactIdsInList(listId: string): Promise<string[]> {
  let allContactIds: string[] = [];
  let page = 1;
  const pageSize = 1000; // SendGrid API单次最大返回1000条

  while (true) {
    try {
      const response = await axios.get(`${SENDGRID_BASE_URL}/marketing/contacts/lists/${listId}/contacts`, {
        headers: {
          Authorization: `Bearer ${SENDGRID_API_KEY}`
        },
        params: {
          page_size: pageSize,
          page
        }
      });

      const contacts = response.data.result || [];
      const contactIds = contacts.map((contact: { id: string }) => contact.id);
      allContactIds = [...allContactIds, ...contactIds];

      // 检查是否还有下一页
      if (contacts.length < pageSize) {
        break;
      }
      page++;
    } catch (error) {
      console.error('获取联系人列表失败:', error);
      throw error;
    }
  }

  return allContactIds;
}

/**
 * 批量删除指定ID的联系人
 * @param contactIds 要删除的联系人ID数组
 */
async function deleteContacts(contactIds: string[]): Promise<void> {
  if (contactIds.length === 0) {
    console.log('没有需要删除的联系人');
    return;
  }

  // SendGrid API单次最多删除1000个联系人,所以分片处理
  const chunks = [];
  for (let i = 0; i < contactIds.length; i += 1000) {
    chunks.push(contactIds.slice(i, i + 1000));
  }

  try {
    await Promise.all(chunks.map(async (chunk) => {
      await axios.delete(`${SENDGRID_BASE_URL}/marketing/contacts`, {
        headers: {
          Authorization: `Bearer ${SENDGRID_API_KEY}`,
          'Content-Type': 'application/json'
        },
        data: {
          ids: chunk
        }
      });
    }));
    console.log(`成功删除${contactIds.length}个联系人`);
  } catch (error) {
    console.error('删除联系人失败:', error);
    throw error;
  }
}

/**
 * 主函数:删除指定联系人列表的所有联系人
 * @param listId 目标联系人列表ID
 */
async function deleteAllContactsInList(listId: string): Promise<void> {
  try {
    const contactIds = await getAllContactIdsInList(listId);
    await deleteContacts(contactIds);
  } catch (error) {
    console.error('删除列表所有联系人失败:', error);
  }
}

// 使用示例
// deleteAllContactsInList('你的联系人列表ID');

3. 关键说明

  • 分页处理:SendGrid的联系人列表接口单次最多返回1000条数据,所以需要循环分页获取所有联系人ID
  • 批量删除限制:删除接口单次最多接受1000个ID,需要将ID数组分片处理
  • 权限验证:确保API密钥的权限包含联系人列表的读写权限,否则会出现403错误

内容的提问来源于stack exchange,提问作者Qed Soku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:46:06