【问题标题】:MailChimp API v3.0 batch request responds with "total_operations": 0MailChimp API v3.0 批处理请求以“total_operations”响应:0
【发布时间】:2019-01-20 19:01:53
【问题描述】:

我很确定我做了一些愚蠢的事情,但我已经盯着这个看了好几个小时了,我需要比我更聪明的人。下面是 aws-lambda 函数中的 js 代码,该函数向 mailchimp 批处理 API 发出 POST 请求。目标是为列表的多个成员创建一批 DELETE 操作。它首先向 dynamoDb 发出请求以获取正确的列表 ID 和 API 密钥,并且顺利进行。当它对 MailChimp 进行 API 调用时,API 响应 200,但总共有 0 个操作。当我对批处理发出 GET 请求以检查状态时,它告诉我操作完成了 0 次操作,没有错误。我错过了什么?

import { success, failure } from "./libs/response-lib";
import * as dynamoDbLib from "./libs/dynamodb-lib";
import Mailchimp from "mailchimp-api-v3";

export async function main(event, context, callback) { 
 const parsedUserId = event.requestContext.identity.cognitoIdentityId.split(":")[1];
 const data = JSON.parse(event.body);

    const params = {
        TableName: "tr-users",
        Key: { userId: parsedUserId },
        ProjectionExpression: "mc_apiKey, listId"
    };

    try {
        //get the user's contact list ID and API key
        await dynamoDbLib.call("get", params)
            .then((result) => {

                //build operations array
                var reqData = {};
                reqData.operations = data.contacts.map(contact => {
                    var outputObject = {
                        method: "DELETE",
                        path: `lists/${result.Item.listId}/members/${contact}`
                    };
                    return outputObject;
                });

                //make batch post to mailchimp
                var mailchimp =  new Mailchimp(result.Item.mc_apiKey);
                mailchimp.request({
                    method: "post",
                    path: "/batches",
                    data: reqData
                }).then((response) => {
                    callback(null, success(response));
                });
            })
    } catch (e) {
            console.log(e);
            callback(null, failure({ status: false }));
    }
}

以下是该批次的 GET 请求的响应:

{"id":"0c25e7f089","status":"finished","total_operations":0,"finished_operations":0,"errored_operations":0,"submitted_at":"2018-08-14T01:20:28+00:00","completed_at":"2018-08-14T01:20:34+00:00","response_body_url":"","_links":[{"rel":"parent","href":"https://us18.api.mailchimp.com/3.0/batches","method":"GET","targetSchema":"https://us18.api.mailchimp.com/schema/3.0/Definitions/Batches/CollectionResponse.json","schema":"https://us18.api.mailchimp.com/schema/3.0/CollectionLinks/Batches.json"},{"rel":"self","href":"https://us18.api.mailchimp.com/3.0/batches/0c25e7f089","method":"GET","targetSchema":"https://us18.api.mailchimp.com/schema/3.0/Definitions/Batches/Response.json"},{"rel":"delete","href":"https://us18.api.mailchimp.com/3.0/batches/0c25e7f089","method":"DELETE"}]}

非常感谢任何见解!

【问题讨论】:

    标签: javascript aws-lambda mailchimp-api-v3.0


    【解决方案1】:

    以防像我这样愚蠢的人偶然发现这一点。我没有阅读 api 包装器 (mailchimp-api-v3) 上的说明。批处理具有不同的功能。工作代码:

    import { success, failure } from "./libs/response-lib";
    import * as dynamoDbLib from "./libs/dynamodb-lib";
    import Mailchimp from "mailchimp-api-v3";
    
    export async function main(event, context, callback) { 
     const parsedUserId = event.requestContext.identity.cognitoIdentityId.split(":")[1];
     const data = JSON.parse(event.body);
    
        const params = {
            TableName: "tr-users",
            Key: { userId: parsedUserId },
            ProjectionExpression: "mc_apiKey, listId"
        };
    
        try {
            //get the user's contact list ID and API key
            await dynamoDbLib.call("get", params)
                .then((result) => {
    
                    //build operations array
                    var reqData = {};
                    reqData["operations"] = data.contacts.map(contact => {
                        var outputObject = {
                            "method": "DELETE",
                            "path": `/lists/${result.Item.listId}/members/${contact}`
                        };
                        return outputObject;
                    });
                    console.log(JSON.stringify(reqData));
    
                    //make batch post to mailchimp
                    var mailchimp =  new Mailchimp(result.Item.mc_apiKey);
                    mailchimp.batch(reqData.operations, {wait: false})
                        .then((result) => {
                            callback(null, success(result));
                        })
    
                })
        } catch (e) {
                console.log(e);
                callback(null, failure({ status: false }));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-30
      • 2023-02-09
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 2021-12-02
      • 2016-05-02
      • 1970-01-01
      相关资源
      最近更新 更多