如何使用云功能将新用户添加到 Mailchimp 活动中?

How to add a new user to Mailchimp campaign using cloud functions?

我正在尝试将新用户添加到 Mailchimp 活动中。我收到两个错误,第一个说:

Function returned undefined, expected Promise or value

第二个错误的日志是:

Error: The resource submitted could not be validated. For field-specific details, see the 'errors' array.
  type: 'http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/',
  title: 'Invalid Resource',
  status: 400,
  detail: 'The resource submitted could not be validated. For field-specific details, see the \'errors\' array.',
  instance: '549e8553-5ef1-4600-9271-07255f4673fe',
  errors: 
   [ { field: 'status',
       message: 'The value you selected is not a valid choice.' } ] }

这是我的功能

   exports.userCreated = functions.auth.user().onCreate((user) => {
    const email = user.email;
    // const displayName = user.name;

    // make Mailchimp API request to add a user
    Mailchimp
      .post('/lists/id/members', {
        email_address: email,
        status: 'Signed Up',
        // optional: requires additional setup
        merge_fields: {
          "EMAIL" : email
        }
      })
      .then(function(results) {
        console.log('Successfully added new Firebase user', email, 'to Mailchimp list',results);
      })
      .catch(function(err) {
        console.log(email);
        console.log('Mailchimp: Error while attempting to add registered subscriber —', err);
      });
  });

正如您检测到的,您的 Cloud Function 中有两个错误:

第一个是您必须 return 在后台触发 Cloud Function 的 Promise(或值),以向平台表明它已完成。请观看 Firebase video series 中有关 "JavaScript Promises" 的三个视频,了解有关此关键点的更多详细信息。

第二个问题是你的字段值status"is not a valid choice"。看看 Mailchimp doc,如果我没记错的话,正确的值是:

subscribedpendingunsubscribedcleaned.


因此,以下更改应该可以解决问题:

   exports.userCreated = functions.auth.user().onCreate((user) => {
    const email = user.email;
    // const displayName = user.name;

    // make Mailchimp API request to add user
    return mailchimp
      .post('/lists/id/members', {
        email_address: email,
        status: 'subscribed',   // For example, it's up to you to find the correct status
        // optional: requires additional setup
        merge_fields: {
          "EMAIL" : email
        }
      })
      .then(function(results) {
        console.log('Successfully added new Firebase user', email, 'to Mailchimp list',results);
        return null;
      })
      .catch(function(err) {
        console.log(email);
        console.log('Mailchimp: Error while attempting to add registered subscriber —', err);
        return null;
      });
  });