使用非旧版模板获取 "Cannot use dynamic template data with a legacy template"

Getting "Cannot use dynamic template data with a legacy template" with non-legacy template

我正在尝试与 Sendgrid 集成,但玩得很开心。我创建了一个动态模板 - 一个新模板,而不是旧模板 - 其中有一个手柄 (first_name)。它有一个主题。但是我遇到了很多错误,需要一些帮助。

首先是代码:

public void sendEmail(String toEmail, String toName) throws IOException {
    String fromEmail = "validated-sendgrid-address@example.com";
    String fromName = "Blah blah";

    SendGrid sendGrid = new SendGrid("the_api_key");
    Request request = new Request();
    try {
        request.setMethod(Method.POST);
        request.setEndpoint("mail/send");
        String body = "see below...";

        request.setBody(body);
        Response response = sendGrid.api(request);
        System.out.println(response.getStatusCode());
        System.out.println(response.getBody());
        System.out.println(response.getHeaders());
    } catch (IOException ex) {
        throw ex;
    }
}

几乎完全取自 Java 示例代码。

JSON 主体,印刷漂亮...

{
  "from": {
    "email": "validated-sendgrid-address@example.com",
    "name": "Blah blah"
  },
  "personalizations": [
    {
      "to": [
        {
          "email": "stdunbar@example.com",
          "name": "Blah Blah"
        }
      ],
      "dynamic_template_data": {
        "first_name": "Babaloo"
      }
    }
  ],
  "template_id": "[d-lotsandlotsofcharacters]"
}

然后是一堆毫无意义的错误(所有这些 link 到 404):

  1. 不能使用具有旧模板 ID 的动态模板数据 - I'm not using a legacy template id according to the UI
  2. template_id 必须是有效的 GUID,您提供了 '[d-xxxxxxxxxxxxxx]' - I sent what I was given on the UI.
  3. 主题为必填项。如果您使用定义了主题的模板,或者如果每个个性化都定义了主题,则可以绕过此要求。 - My template has a subject
  4. 除非提供有效的 template_id,否则内容参数是必需的。必须至少有一个已定义的内容块。我们通常建议同时包含 text/plain 和 text/html 块,但只需要一个块。 - A valid template_id was provided

我猜第一个问题是 template_id 字段。奇怪的是 JSON 值中包含数组 open/close。将值作为文本放入其中会产生解析错误,因此 Sendgrid 必须直接接受它。

任何 定向帮助将不胜感激。文档相当具有挑战性

此处为 Twilio SendGrid 开发人员布道师。

在您的示例中,您将 template_id 显示为 "template_id": "[d-lotsandlotsofcharacters]"template_id 中不需要方括号,它应该只是 "template_id": "d-lotsandlotsofcharacters".

documentation for sending an email with a dynamic template 确实将 template_id 示例显示为 "template_id":"[template_id]",但应将整个 [template_id] 字符串替换为真实 ID。

我遇到了同样的错误。我未能正确复制模板 ID。单击 SendGrid 控制面板侧栏中的“电子邮件 API ➔ 动态模板”时会显示模板 ID。它与您从 /v3/designs 端点获得的 ID 不同,唉。

错误消息不明确。它说 "Cannot use dynamic template data with a legacy template ID",而实际上它应该说 "Template ID not found"。我误以为我的模板是旧版本,但事实并非如此。四个小时我再也回不来了。