Sendgrid-nodejs: 无法使用设置的自定义字段创建联系人

创建于 2019-07-10  ·  39评论  ·  资料来源: sendgrid/sendgrid-nodejs

问题摘要

无法创建具有使用新营销活动 PUT 设置的自定义字段的联系人
/营销/联系人API

重现步骤

  1. 创建自定义字段后,将以下有效负载发送到 PUT /marketing/contacts
{
  contacts: [
   {
    email: '[email protected]',
    custom_fields: {
      purchaseTime: -1,
      activations: 0,
      partner: 'none',
      userCreationTime: 1544997675,
      lastSigningTime: 1544997675,
      emailVerified: 1,
      disabled: 0,
      displayName: 'Rv',
      photoURL: 'https://lh6.googleusercontent.com/-,
      uid: 'uid'
    }
  }
  ]
}

观察
invalid custom field ids supplied - partner,emailVerified,photoURL,uid,purchaseTime,activations,userCreationTime,lastSigningTime,disabled,displayName

技术细节:

  • sendgrid-nodejs 版本:6.4.0
  • Node.js 版本 v12.1.0

最有用的评论

似乎当前的 API 需要 field_id 而不是名称。

如果您在加载https://mc.sendgrid.com/custom-fields页面时检查 SendGrid 内部的网络流量,您可以看到 /field_definitions 的响应,该响应返回 field_ids 以及名称。

SendGrid 要么需要在前端显示此 id 值,要么更新 API 以接受请求中的名称。

所有39条评论

+1

我今天遇到了同样的问题。 我通过聊天支持提出了它(参考这个问题)。 他们的回应:

“好吧,这最近一直在发生。你不是唯一一个。不幸的是,我们现在没有解决这个问题的方法。我们的高级工程师已经意识到这个问题。”

Screenshot 2019-07-12 at 15 54 56

这就是我在官方 API 网站上得到的

我在官方 API 上有同样的问题。 如果您使用 cURL 代码生成片段,它将起作用。

似乎当前的 API 需要 field_id 而不是名称。

如果您在加载https://mc.sendgrid.com/custom-fields页面时检查 SendGrid 内部的网络流量,您可以看到 /field_definitions 的响应,该响应返回 field_ids 以及名称。

SendGrid 要么需要在前端显示此 id 值,要么更新 API 以接受请求中的名称。

你也许是对的。 可悲的是,他们的支持可以帮助任何人。 而且,当然,使用 id 会使 api 更难使用。
您是否注意到自定义字段端点在创建新字段时是否返回 id,或者您需要获取它?

@AAverin不太确定,因为我在 GUI 中创建了自定义字段。 API 参考说它在 PUT/PATCH 请求的响应对象中返回 id。

支持人员告诉我可以通过直接在有效负载中传递自定义字段名称来使用它们,而无需额外的 custom_fields 对象。
它有效,但未设置字段值。
无论如何,只有细分需要自定义字段,新营销中没有细分。 所以也许只是完全跳过自定义字段?

所以只是为了结束这个问题。
正确的有效载荷是:

{
  contacts: [
   {
    email: '[email protected]',
    purchaseTime: -1,
      activations: 0,
      partner: 'none',
      userCreationTime: 1544997675,
      lastSigningTime: 1544997675,
      emailVerified: 1,
      disabled: 0,
      displayName: 'Rv',
      photoURL: 'https://lh6.googleusercontent.com/-,
      uid: 'uid'
  }
  ]
}

他们还承诺测试和更新 API 文档

这事有进一步更新吗?
当我在 custom_fields 中有字段名称时,我遇到了同样的错误。
当我在 custom_fields 或内部使用字段 id 时,我没有错误,但未保存联系人。

我也直接使用 curl,而不是这个模块,所以我认为问题出在 sendgrid 端。

@soramister
我从支持人员那里得到的最后一个答案是,现在我们应该在为自定义字段设置值时使用特殊 ID。
请参阅上面的@adanot答案。

尽管如此,目前自定义字段还是有点无用,因为无法构建自定义细分。 所以是的,您可以发送自定义字段,但您不能真正将它们用于任何事情。

@AAverin
我也尝试过使用字段 ID。 没有错误消息但联系人没有保存。

@soramister我还没有尝试过,因为由于缺少 Segments 和某些功能,我考虑改用 Mailerlite。
无论如何,根据支持,您应该能够使用GET https://api.sendgrid.com/v3/marketing/field_definitions调用获取您创建的自定义字段。

然后,您需要获取您有兴趣为其添加/更新值的自定义字段的 ID,并在您的通话中使用这些 ID 添加/更新联系人: PUT https://api.sendgrid.com/v3/marketing/contacts

这是给我的有效负载支持示例。 custom_fields字段的键是那些特殊的 id。

{

"contacts": [
    {
        "email": "[email protected]",
        "address_line_1": "123 main st",
        "custom_fields":
            {
                "e6_T": "5555555555",
                "e5_T": "Acme Group"
            }
    }]
}

我已经尝试过字段 ID。 当命令成功(没有返回错误)时,不会添加联系人。

@soramister
对我来说看起来不错。
能够为我的所有用户成功传递自定义字段数据

@soramister需要 Sendgrid 大约一分钟才能看到它。

自定义字段 ID 应该是什么才能使其工作? @AAverin ,请解释您的示例有效负载。

我已经尝试过字段 ID。 当命令成功(没有返回错误)时,不会添加联系人。

我也是。 我在响应中得到一个作业 ID,但数据似乎不在 sendgrid 中

所以对我来说,使用新联系人 API 的自定义字段肯定不起作用。 我试过使用自定义字段 ID 和不使用。 如果没有 ID,它会出现“提供的自定义字段 ID 无效”错误,ID 可以正常工作/我成功了,但它不会更新数据

{ "list_ids": [ "4fb6cca6-06dc-4aa2-b7cb-851a4e3be37e" ], "contacts": [ { "email": "[email protected]", "first_name": "Test", "custom_fields": { "e1_N": "100000", "e2_N": "100000" } } ] }

可能需要一段时间才能看到在sendgrid 上创建的联系人,是否已创建联系人?
不过你的对象看起来不错。

可能需要一段时间才能看到在sendgrid 上创建的联系人,是否已创建联系人?
不过你的对象看起来不错。

真的很奇怪,只有在我不包含自定义字段时才会创建联系人。 不知从何下手

@Lucania001有同样的问题! 对 Sendgrid 的 API 真的很不满意。 极脆且不透明。 对正在发生的事情的了解太少,解释端点及其行为的文档也太少。

即使使用字段 ID 而不是字段名称,我也无法更新联系人的自定义字段。 这需要尽快解决,否则客户就会流失。

如果没有自定义字段,我什至无法使用他们 API 的 SendGrid 的“试用”部分创建联系人。 我得到的只是这个:

{
“错误”:[
{
“场地”: ””,
“消息”:“无效的 JSON”
}
]
}

如果没有自定义字段,我什至无法使用他们 API 的 SendGrid 的“试用”部分创建联系人。 我得到的只是这个:

{
“错误”:[
{
“场地”: ””,
“消息”:“无效的 JSON”
}
]
}

是的,尝试一下根本行不通。 通过邮递员尝试。 不过,您可能会遇到与我们其他人相同的问题。

你好,

我已经回到这个问题,看看它是否已修复。 它不是。 问题仍然存在。

这是我尝试使用 curl 请求的内容:

curl --request PUT --url https://api.sendgrid.com/v3/marketing/contacts --header 'authorization: Bearer {{API_KEY}}}' --header "Content-Type: application/json" - -data '{"list_ids":["f85956da-5696-4d8b-826d-84ac6e27cb2f"],"contacts":[{"address_line_1":null,"city":null,"country":"UK","email ":" [email protected] ","first_name":"Test","last_name":"TEST","postal_code":null,"state_province_region":null,"custom_fields":{"e4_T":"EN" ,"e2_D":null,"e1_T":"自定义字段","e3_T":" http://google.com/ "}}]}'

当我删除 custom_fields 值时,它起作用了。 联系人已创建。 如果我添加回来,则不会添加联系人。
这两种情况都返回一个作业 ID,没有错误。

请让我知道该怎么做。

我认为 SendGrid 的任何人都不会关注这个线程或 github。
你唯一能做的就是直接写信给网站上的支持,通常他们会有所帮助。
我的一个解决方案是从 SendGrid 关闭到另一个服务,我已经在那里运行了所有东西,而 SendGrid 在创建联系人时仍然存在问题

感谢 AAverin,总结一下:要创建带有 custom_field 的联系人,只知道 id 不是您给他们的名称,sendgrid 应用它自己的 id,您可以通过 GET https://api.sendgrid.com/v3/marketing/field_definitions检索

感谢 AAverin,总结一下:要创建带有 custom_field 的联系人,只知道 id 不是您给他们的名称,sendgrid 应用它自己的 id,您可以通过 GET https://api.sendgrid.com/v3/marketing/field_definitions检索

如上所述即使我使用ID的sendgrid适用,它仍然不起作用

这是一个示例 curl,它适用于我使用自定义字段创建多个联系人:

curl -X PUT https://api.sendgrid.com/v3/marketing/contacts -H "Content-Type: application/json" -H 'authorization: Bearer API_KEY' --data '{ "contacts": [{ " email": " [email protected] ", "custom_fields": {"e2_N":1 }},{ "email": " [email protected] ", "first_name": "Joe", "last_name": " Dirte", "custom_fields": {"e2_N":2 } }] }'

@soramister我玩过你的 curl 请求。 如果您不为 custom_fields 包含空值,则您的请求有效。 空条目似乎适用于 reserved_fields 但不适用于 custom_fields。 动态构建您的请求,因此不包含空值的条目应该可以解决您的问题。

谢谢@adanot ,这对我

关于创建新联系人的自定义字段对象的元数据应该在文档中。 顺便说一句,谢谢@adanot@AAverin

他们还更改了自定义日期字段的格式,在旧版营销 API 中为"10/12/2019" ,现在为"2019-10-12T23:14:20Z" ,即 ISO 8601 Zulu Time。

尽管他们的 UI 仍然显示旧的日期格式,这仍然令人困惑。 好消息是,如果我能够使用自定义日期字段的时间来创建段,因为它之前只允许放置日期。

我今天遇到了这个问题。 添加包含自定义字段的联系人时,api 将返回job_id但永远不会添加联系人。

对我来说,问题是我将布尔值发送到“文本”自定义字段。 将这些布尔值作为字符串发送反而解决了我的问题。

Marketing API 和 custom_fields 真是一场噩梦。 文档告诉您在将新联系人放入营销列表时发送 custom_field ID。 然后,当您这样做时,它会发回“无效的 custom_field ID”消息。 我在文档中没有发现它说您看到发送了那些奇怪的“e1_T”样式的 custom_field id。 还有谁?

但是...当您发送 PUT 请求并使用“e1_T”样式的 custom_field ID 而不是您在 custom_fields 端点上执行 GET 请求时返回的 ID 时,添加新联系人非常有效。

我只是不明白。

它很脆弱而且通常不直观,Sendgrid 文档说“如果你想更新或删除自定义字段,你应该保存返回的 id 值。”,在我的情况下,返回的 id 值是那些奇怪的“e1_T”样式,并使用那些工作正常......只是很痛苦,为什么他们不只是设置为采用字段名称超出我的范围。

对于那些仍在寻找答案的人,以下示例有效负载:
contacts: [ { email: "
[email protected]", first_name: "test", last_name: "test", custom_fields: { e7_T: "TRUE" } } ]
所以 custom_fields 是一个对象,其中 key 是您的自定义字段 ID - 在我的情况下e7_T

真的很糟糕的api设计,imo

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

thinkingserious picture thinkingserious  ·  4评论

murphman300 picture murphman300  ·  4评论

wooyah picture wooyah  ·  4评论

danielflippance picture danielflippance  ·  4评论

thinkingserious picture thinkingserious  ·  4评论