发送网格:"batch id not found"



我正在试用v3 API,并尝试演示安排电子邮件然后取消电子邮件的概念。以下是我所做的:

  • 使用POST https://api.sendgrid.com/v3/mail/batch创建了一个批次,并为批次获取了批次ID
  • 是否使用POST https://api.sendgrid.com/v3/mail/send发送邮件,并将该批次ID作为batch_id参数并放入未来的send_at时间
  • 尝试将该批次ID传递到POST https://api.sendgrid.com/v3/user/scheduled_sends/:batch_id

但是后一个调用失败,因为404未找到"message": "batch id not found"。事实上,无论我创建了多少批ID,尝试更新它们似乎总是会产生这个未找到的消息。结果是,计划的发送无法取消,电子邮件将在指定时间发送。我应该补充一点,尝试GET /v3/mail/batch/{batch_id}会返回一个空数组[]

我在这里做错什么了吗??这可能是免费帐户的限制吗?

编辑:我将添加一些原始细节来显示我正在做的事情。我在Postman中做这些,但我将以cURL语法导出以进行演示。

首先我创建一个批次:

curl --location --request POST 'https://api.sendgrid.com/v3/mail/batch' 
--header 'Accept: application/json' 
--header 'Authorization: Bearer <token redacted>' 
--data-raw ''

响应:{"batch_id":"OWU0NzgxYzUtMjkzZS0xMWVkLTg5NDAtYWUyMDAwNjVjZGU0LTZiODk2MDliZA"}

所以现在我想尝试的下一件事是验证批次ID:

curl --location --request GET 'https://api.sendgrid.com/v3/user/scheduled_sends/OWU0NzgxYzUtMjkzZS0xMWVkLTg5NDAtYWUyMDAwNjVjZGU0LTZiODk2MDliZA' 
--header 'Accept: application/json' 
--header 'Authorization: Bearer <token redacted>'

奇怪的是,反应是一个只有[]200 OK,这似乎不对,是吗?我创建了一个批次,它有一个ID,为什么我不能验证它的存在?

此处的文档说明:https://docs.sendgrid.com/api-reference/cancel-scheduled-sends/validate-batch-id

将有效的batch_id传递到此端点时,它将返回一个200状态代码和批次ID本身。

如果将无效的batch_id传递给端点,则会收到400级状态代码和一条错误消息。

batch_id不需要分配给调度发送被认为是有效的。成功的响应仅意味着batch_id已创建,但并不表示已关联发送。

有趣的是,如果我在该URL中放入任意字符串而不是批处理ID,我也会得到一个空数组的200 OK。我甚至无法复制文档中关于收到无效ID的400错误的内容。

然而,如果我相信批次已经创建,我会继续尝试发送一封电子邮件:

curl --location --request POST 'https://api.sendgrid.com/v3/mail/send' 
--header 'Accept: application/json' 
--header 'Content-Type: application/json' 
--header 'Authorization: Bearer <token redacted>' 
--data-raw '{
"batch_id": "OWU0NzgxYzUtMjkzZS0xMWVkLTg5NDAtYWUyMDAwNjVjZGU0LTZiODk2MDliZA",
"send_at": 1661969713,
"personalizations": [{
"to": [{
"email": "thatemail@mycompany.com",
"name": "John Doe"
}
]
}],
"from": {
"email": "myemail@mycompany.com",
"name": "Jane Doe"
},
"reply_to": {
"email": "customer_service@example.com",
"name": "Example Customer Service Team"
},
"subject": "Example Email 6",
"content": [{
"type": "text/html",
"value": "<p>Test email!</p><p>%open-track%</p>"
}
],
"custom_args":{
"sf-id": "some-arbitrary-id6",
"sf-org-id": "some-arbitrary-org-id"
},
"mail_settings": {
"sandbox_mode": {
"enable": false
}
},
"tracking_settings": {
"click_tracking": {
"enable": true,
"enable_text": false
},
"open_tracking": {
"enable": true,
"substitution_tag": "%open-track%"
},
"subscription_tracking": {
"enable": false
}
}
}
'

在撰写本文时,时间戳为3小时,解析时间为美国东部时间8月31日下午2:15。我发了那个电话,得到了202 Accepted

然后,最后,我尝试暂停批处理。

curl --location --request PATCH 'https://api.sendgrid.com/v3/user/scheduled_sends/OWU0NzgxYzUtMjkzZS0xMWVkLTg5NDAtYWUyMDAwNjVjZGU0LTZiODk2MDliZA' 
--header 'Accept: application/json' 
--header 'Content-Type: application/json' 
--header 'Authorization: Bearer <token redacted>' 
--data-raw '{"status": "pause"}'

我的回复是404 NOT FOUND,带有:

{
"errors": [
{
"field": null,
"message": "batch id not found"
}
]
}

所以。。。这是怎么回事???

所以有几件事:

  • 原来我在这里少了一步。第一次我想暂停或取消批处理时,我实际上需要在请求体中使用batch_idPOST /v3/user/scheduled_sends/。我在试PATCH。这里的行为很奇怪,因为批次ID已经存在,但还可以
  • 在我第一次成功测试之后,GET /v3/mail/batch/{batch_id}API的整个行为对我来说都发生了变化。每个响应要么是具有批处理ID的成功响应,要么是失败响应

我不知道为什么这些行为会改变,但它们确实改变了。可能存在一些怪癖,从未暂停/取消过一批的新帐户根本没有功能";验证批次";呼叫现在我第一次成功地暂停了,GET /v3/mail/batch/{batch_id}的行为终于与文档匹配了。

最新更新