Google App Script를 통해 Mailchimp 목록에 구독자 추가
외부 mailchimp API에 연결되는 google doc 및 google app 스크립트를 사용하여 mailchimp 메일 링 목록에 구독자를 추가하는 작업을 자동화하려고합니다. 스크립트를 테스트하려고 할 때마다 StackDriver Log에서 '잘못된 값'예외가 발생합니다.
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":"[email protected]","status_if_new":"subscribed","merge_fields":{"LNAME":"test","FNAME":"test"}},"muteHttpExceptions":false}'
"errors":[{"field":"email_address","message":"This value should not be blank."}]
API가 내가 제공하는 이메일을 인식하지 못하는 이유는 무엇입니까?
답변
주요 문제는 params객체가 .NET에서 예상되는 인수 로 JSON 문자열을 전달한다는 것 입니다 UrlFetchApp.fetch(url, params). 모든을 문자열 화하는 대신 data페이로드를 문자열 화하기 만하면됩니다. (Apps Script 문서에 링크 된 예를 참고하세요.)
더 이상 사용되지 않기Utilities.jsonStringify() 때문에 문제가 발생할 것이라고 생각합니다 . 대신 사용하십시오 .JSON.stringify()
나는 또한 contentType을 메소드 에서 지정하는 방식이므로 headers내부 및 외부로 이동 했지만 실제로는 응용 프로그램에 영향을 미치지 않습니다.datafetch()
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);
}
당신이하는 경우 에만 가입자를 추가 할 것, 나는 당신이 사용하는 것이 좋습니다 것 목록에 추가 회원을 엔드 포인트. 조금 더 간단하며 멤버 해시를 생성 할 필요가 없습니다.