【问题标题】:Add Subscriber to Mailchimp list via Google App Script通过 Google App Script 将订阅者添加到 Mailchimp 列表
【发布时间】:2020-12-24 17:42:28
【问题描述】:

我正在尝试使用连接到外部 mailchimp API 的 google doc 和 google app 脚本自动将订阅者添加到 mailchimp 邮件列表。每当我尝试测试我的脚本时,我都会从 StackDriver 日志中收到“错误值”异常。

var payload = {
    "email_address": email,
    "status_if_new": "subscribed",
    "merge_fields": {
      FNAME: first_name,
      LNAME: last_name
    },
  };

  var headers = {
    "contentType": "application/json",
    "Authorization": "apikey " + API_KEY,
  };

  var data = {
    "method": "PUT",
    "muteHttpExceptions": false,
    "headers": headers,
    "payload": payload,
  };

  var json = Utilities.jsonStringify(data);
  
  //DEBUG
  Logger.log(json);
  Logger.log(endpoint);

  // call the Mailchimp API
  try {
    var response = UrlFetchApp.fetch(endpoint, json);

    if (response.getResponseCode() === 200) {
      // all good!
      Logger.log("Success");
      Logger.log(response);
    } else {
      Logger.log("Issues");
      Logger.log(response);
    }
  } catch (err) {
    // handle the error here
    Logger.log("Error");
    Logger.log(err);
  }
Sep 5, 2020, 1:02:53 PM Info Exception: Bad value

在使用 curl 进一步调查后,我发现手动发送具有相同负载和标头的请求会给出此响应。

curl -X PUT 'https://{server}.api.mailchimp.com/3.0/lists/{my_list}/members/{member_hash}' 
         -H {"Authorization":"apikey {API_KEY}","contentType":"application/json"} 
         -d '{"email_address":"test@test.com","status_if_new":"subscribed","merge_fields":{"LNAME":"test","FNAME":"test"}},"muteHttpExceptions":false}' 

"errors":[{"field":"email_address","message":"This value should not be blank."}]

为什么 API 无法识别我提供的电子邮件?

【问题讨论】:

    标签: google-apps-script mailchimp-api-v3.0


    【解决方案1】:

    主要问题是您将 JSON 字符串作为 params 参数传递,而 UrlFetchApp.fetch(url, params) 中应该有一个对象。无需对所有data 进行字符串化,您只需对有效负载进行字符串化。 (请注意 Apps 脚本文档中链接的示例。)

    我怀疑您还会遇到Utilities.jsonStringify() 的问题,因为它是deprecated。请改用JSON.stringify()

    我还将 contentType 从 headers 移到 data 中,因为这是在 fetch() 方法中指定的方式,但它实际上对您的应用程序没有影响。

    var payload = {
      "email_address": email,
      "status_if_new": "subscribed",
      "merge_fields": {
        FNAME: first_name,
        LNAME: last_name
      },
    };
    
    var headers = {
      "Authorization": "apiKey " + API_KEY
    };
    
    var data = {
      "method": "PUT",
      "muteHttpExceptions": false,
      "headers": headers,
      "contentType": "application/json",
      "payload": JSON.stringify(payload) // The payload should be stringified
    };
    
    //DEBUG
    Logger.log(endpoint);
    
    // call the Mailchimp API
    try {
      var response = UrlFetchApp.fetch(endpoint, data); // pass in data, not json
    
      if (response.getResponseCode() === 200) {
        // all good!
        Logger.log("Success");
        Logger.log(response);
      } else {
        Logger.log("Issues");
        Logger.log(response);
      }
    } catch (err) {
      // handle the error here
      Logger.log("Error");
      Logger.log(err);
    }
    
    

    如果您只是要添加订阅者,那么我建议您使用add members to list 端点。它只是更简单一点,不需要您生成成员哈希。

    【讨论】:

      猜你喜欢
      • 2016-06-12
      • 2012-01-07
      • 2019-02-10
      • 1970-01-01
      • 2020-08-09
      • 2018-05-15
      • 2015-08-09
      • 2023-04-05
      相关资源
      最近更新 更多