const API_KEY = "ADD_TARGET_ORG_API_KEY_HERE";
const FORM_ID = "ADD_SOURCE_GOOGLE_FORM_ID_HERE";
const PROCESS_ID = "ADD_NM_TARGET_PROCESS_ID_HERE";
const INSTANCES_URL = "https://core.nextmatter.com/api/instances/";
const fetchOptions = {
muteHttpExceptions: true,
method: "post",
contentType: "application/json",
headers: {
Authorization: `Api-Key ${API_KEY}`,
},
};
function submitForm(e) {
if (!e || !e.response) {
return;
}
let apiResponse = UrlFetchApp.fetch(INSTANCES_URL, {
...fetchOptions,
payload: JSON.stringify({
name: "Product form " + new Date().toUTCString(),
process: `https://core.nextmatter.com/api/processes/${PROCESS_ID}/`,
tags: [`form:${FORM_ID}`, `response:${e.response.getId()}`],
}),
});
let responseCode = apiResponse.getResponseCode();
if (!apiResponse || ![200, 201].includes(responseCode)) {
Logger.log("Next Matter API call failed");
if (apiResponse) {
Logger.log(apiResponse.getContentText());
}
return;
}
const instance = JSON.parse(apiResponse.getContentText());
const { id, active_step_ids } = instance;
Logger.log(`Instance ID: ${id}`);
const completeStepUrl = `${INSTANCES_URL}${id}/complete_step/`;
const responses = e.response.getItemResponses();
const responseCollectionItems = responses[5].getResponse();
const allCollectionItems = responses[5]
.getItem()
.asCheckboxItem()
.getChoices()
.map((choice) => ({
name: choice.getValue(),
checked: responseCollectionItems.includes(choice.getValue()),
}));
const actions = [
{
action_id: 19566,
input_object: {
inputValue: responses[0].getResponse(),
},
},
{
action_id: 19568,
input_object: {
inputValue: responses[1].getResponse(),
},
},
{
action_id: 19569,
input_object: {
date: new Date(responses[2].getResponse()).toISOString(),
},
},
{
action_id: 19572,
input_object: {
itemSelected: responses[3].getResponse(),
},
},
{
action_id: 19573,
input_object: {
radioItemSelected: responses[4].getResponse(),
},
},
{
action_id: 19574,
input_object: {
allItems: allCollectionItems,
itemsChecked: allCollectionItems
.filter((item) => item.checked == true)
.map((item) => item.name),
itemsNotChecked: allCollectionItems
.filter((item) => item.checked == false)
.map((item) => item.name),
numberOfItemsChecked: responseCollectionItems.length,
numberOfItemsNotChecked:
allCollectionItems.length - responseCollectionItems.length,
},
},
{
action_id: 19575,
input_object: {
inputValue: responses[6].getResponse(),
},
},
];
Logger.log(JSON.stringify(actions));
apiResponse = UrlFetchApp.fetch(completeStepUrl, {
...fetchOptions,
payload: JSON.stringify({
step_id: active_step_ids[0],
actions,
}),
});
responseCode = apiResponse.getResponseCode();
if (!apiResponse || ![200, 201].includes(responseCode)) {
Logger.log("Next Matter API call failed");
if (apiResponse) {
Logger.log(apiResponse.getContentText());
}
return;
}
Logger.log(apiResponse.getContentText());