Пакетный запрос MailChimp API v3.0 отвечает «total_operations»: 0

1

Я совершенно уверен, что сделал что-то глупое, но я смотрел на это часами, и мне нужен кто-то умнее, чем я. Ниже приведен код js в aws-лямбда-функции, которая делает POST-запрос API-интерфейсов mailchimp. Целью является создание партии операций DELETE для нескольких членов списка. Сначала он запрашивает dynamoDb для получения правильного идентификатора списка и ключа API, и это происходит без заминки. Когда он вызывает вызов API MailChimp, API отвечает 200, но есть 0 total_operations. Когда я делаю запрос 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 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"}]}

Любое понимание очень ценится!

Теги:
aws-lambda
mailchimp-api-v3.0

1 ответ

0

В случае, если кто-то немой, как я натыкаюсь на это. Я не читал инструкции на обертке 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 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 }));
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню