Call Monkey is a third party application which connects with the lead and creates business opportunities. When a new lead is created in NetSuite or in Call Monkey these leads will be updated in Call Monkey and NetSuite. A scheduled script which runs in every 15 minutes will search for new lead created in Call Monkey if there is any that will be updated in NetSuite. If a NetSuite lead record is created or updated this will also be reflected in Call Monkey. A default campaign ID is chosen for a lead update.
User Event
/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
* @NModuleScope SameAccount
*/
define(['N/http', 'N/https', 'N/format', 'N/record', 'N/search'],
function(http, https, format, record, search) {
var myArray;
//function to search in field array
function fieldSearch(nameKey, optionKey) {
try {
for (var i = 0; i < myArray.length; i++) {
if (myArray[i].fieldId === nameKey) {
return ((myArray[i].type === "PULL_DOWN" || myArray[i].type === "CHECK_BOX") ?
optionSearch(optionKey, myArray[i].options) : myArray[i].id);
}
}
} catch (e) {
log.debug({ title: "error in fieldSearch", details: e });
}
}
function optionSearch(optionKey, myArray1) {
try {
log.debug({ title: "optionKey", details: optionKey });
log.debug({ title: "myArray1", details: myArray1 });
for (var i = 0; i < myArray1.length; i++) {
if (myArray1[i].name === optionKey) {
return myArray1[i].id;
}
}
} catch (e) {
log.debug({ title: "error in optionSearch", details: e });
}
}
function getlistval(listid, val) {
try {
var list = record.load({
type: "customlist",
id: listid
});
var optionsCount = list.getLineCount({
sublistId: 'customvalue'
});
for (i = 0; i < optionsCount; i++) {
var id = list.getSublistValue({
sublistId: 'customvalue',
fieldId: 'valueid',
line: i
})
if (id == val)
return list.getSublistValue({
sublistId: 'customvalue',
fieldId: 'value',
line: i
})
}
} catch (e) {
log.debug("e", e);
}
}
function getemployee(id) {
try {
var employeeSearchObj = search.create({
type: "employee",
filters: [
["internalidnumber", "equalto", id]
],
columns: [
search.createColumn({
name: "entityid",
sort: search.Sort.ASC
})
]
});
var searchResultCount = employeeSearchObj.runPaged().count;
var ram;
employeeSearchObj.run().each(function(result) {
ram = result.getValue({ name: "entityid" })
});
return ram;
} catch (e) {
log.debug("e", e);
}
}
/**
* Function definition to be triggered before record is loaded.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {Record} scriptContext.oldRecord - Old record
* @param {string} scriptContext.type - Trigger type
* @Since 2015.2
*/
function afterSubmit(scriptContext) {
try {
if (scriptContext.type == "edit" || scriptContext.type == "create") {
var rec = scriptContext.newRecord;
/**start ,select all necessary fields from netsuite**/
var savetocall = rec.getValue({
fieldId: 'custentity_jj_save_tocall_monkey'
});
log.debug({ title: "savetocall", details: savetocall });
var calladdressid = rec.getValue({
fieldId: 'custentity_jj_callmonkey_address'
});
log.debug({ title: "calladdressid", details: calladdressid });
if (savetocall && (calladdressid == null || calladdressid == "")) {
try {
var naam = rec.getText({
fieldId: 'custentityll_naam'
});
} catch (e) {
var naamval = rec.getValue({
fieldId: 'custentityll_naam'
});
// log.debug({ title: "e naamval ", details: naamval });
var naam = getlistval(131, naamval);
// log.debug({ title: "e naam ", details: naam });
}
var dateLeadGathered = rec.getValue({ fieldId: 'custentity8' });
/* if (dateLeadGathered != null && dateLeadGathered != "")
dateLeadGathered = format.format({
value: dateLeadGathered,
type: format.Type.DATE
});
// var dateLeadGathered = "23-2-2018";
dateLeadGathered = dateLeadGathered.replace("/", "-").replace("/", "-");
*/
var timeLeadGathered = rec.getValue({
fieldId: 'custentitytijdleadopgehaald_ilse'
});
// timeLeadGathered = timeLeadGathered.replace("/", "-").replace("/", "-");
try {
var incentive = rec.getText({
fieldId: 'custentityregio'
});
} catch (e) {
var incentiveval = rec.getValue({
fieldId: 'custentityregio'
});
// log.debug({ title: "e incentiveval ", details: incentiveval });
var incentive = getlistval(154, incentiveval);
// log.debug({ title: "e incentive ", details: incentive });
}
try {
var door2door = rec.getText({
fieldId: 'custentity6'
});
} catch (e) {
var door2doorval = rec.getValue({
fieldId: 'custentity6'
});
// log.debug({ title: "e door2doorval ", details: door2doorval });
var door2door = getlistval(128, door2doorval);
// log.debug({ title: "e door2door ", details: door2door });
}
try {
var gender = rec.getValue({
fieldId: 'salutation'
});
} catch (e) {
var genderval = rec.getValue({
fieldId: 'salutation'
});
// log.debug({ title: "e genderval ", details: genderval });
var gender = getlistval(128, genderval);
// log.debug({ title: "e gender ", details: gender });
}
try {
var region = rec.getText({
fieldId: 'custentityregio'
});
} catch (e) {
var regionval = rec.getValue({
fieldId: 'custentityregio'
});
// log.debug({ title: "e regionval ", details: regionval });
var region = getlistval(154, regionval);
// log.debug({ title: "e region ", details: region });
}
try {
var adviseur = rec.getText({
fieldId: 'custentityadviseur_ilse'
});
} catch (e) {
var adviseurval = rec.getValue({
fieldId: 'custentityadviseur_ilse'
});
// log.debug({ title: "e adviseurval ", details: adviseurval });
var adviseur = getemployee(adviseurval);
// log.debug({ title: "e adviseur ", details: adviseur });
}
var salutation = rec.getValue({
fieldId: 'salutation'
});
var firstName = rec.getValue({
fieldId: 'firstname'
});
var lastname = rec.getValue({
fieldId: 'lastname'
});
var telephoneNumber = rec.getValue({
fieldId: 'phone'
}); //doubt
var homeTelephoneNumber = rec.getValue({
fieldId: 'mobilephone'
}); //doubt
var email = rec.getValue({
fieldId: 'email'
});
try {
var contactPreference = rec.getText({
fieldId: 'custentity7'
});
} catch (e) {
var contactPreferenceval = rec.getValue({
fieldId: 'custentity7'
});
// log.debug({ title: "e contactPreferenceval ", details: contactPreferenceval });
var contactPreference = getlistval(129, contactPreferenceval);
// log.debug({ title: "e contactPreference ", details: contactPreference });
}
var contactPreference = contactPreference.charAt(0).toUpperCase() + contactPreference.slice(1);
var remarksLead = rec.getValue({
fieldId: 'custentityopmerkingen_lead_ilse'
});
var durableEnergy = rec.getValue({
fieldId: 'custentityenergysource'
});
var energyPrice = rec.getValue({
fieldId: 'custentityenergyprice'
});
var noinvest = rec.getValue({
fieldId: 'custentitynoinvest'
});
var energyNota = rec.getValue({
fieldId: 'custentityenergynota'
});
var houseOwner = rec.getValue({
fieldId: 'custentityhouseowner'
});
var finances = rec.getValue({
fieldId: 'custentityfinances'
});
var relationaggrement = rec.getValue({
fieldId: 'custentitypartnerok'
});
var addressobj = findaddress(rec);
var address = addressobj.addr1;
var housenumber = addressobj.housenum;
var housenumber1 = addressobj.houseexten;
var zipcode = addressobj.zip;
var cityname = addressobj.city;
// log.debug({ title: "afar", details: address + " addr1 " + housenumber + " housenumber " + housenumber1 + " housenumber1 " + zipcode + " zipcode " + cityname + " cityname " })
var contactForAppointment = rec.getValue({
fieldId: 'custentityakkoord_telcon_afspraak_ilse'
});
/**End ,select all necessary fields from netsuite)**/
// log.debug({ title: "got datas", details: " naam=" + naam + " dateLeadGathered=" + dateLeadGathered + " timeLeadGathered=" + timeLeadGathered + " door2door=" + door2door + " region=" + region + " salesRep=" + adviseur + " salutation=" + salutation + " firstName=" + firstName + " telephoneNumber=" + telephoneNumber + " homeTelephoneNumber=" + homeTelephoneNumber + " email=" + email + " contactPreference=" + contactPreference + " remarksLead=" + remarksLead + " durableEnergy=" + durableEnergy + " energyPrice=" + energyPrice + " noinvest=" + noinvest + " energyNota=" + energyNota + " houseOwner=" + houseOwner + " finances=" + finances + " contactForAppointment=" + contactForAppointment });
var headerObj = { "Accept": "application/json" };
var callMonkeyResponse = https
.get({
url: 'https://backoffice.callmonkey.com/external-api/field/get-form-fields?apiKey=8a62db93-f096-464b-947f-c750f3a91780&scriptId=02197cc9-372c-40a4-ae6a-a91f85e1a427',
headers: headerObj
});
var data = callMonkeyResponse.body;
var data1 = JSON.parse(data);
myArray = data1.data;
var genderid = fieldSearch('CPGender', gender);
var door2doorId = fieldSearch('DOOR2DOORCAMPAGNEREGIO', door2door);
var contactPreferenceId = fieldSearch('BESCHIKBAARHEID', contactPreference);
//log.debug("contactPreferenceId", contactPreferenceId)
var headerObj = { "Accept": "application/json", "Content-Type": "application/json", "apiKey": "8a62db93-f096-464b-947f-c750f3a91780" };
var fieldarray = [];
var regionob = { "fieldId": "WELKESTIMULERINGSREGELINGISVANTOEPASSING", "value": region };
var gender = { "fieldId": "CPGender", "optionUuids": [genderid] };
var contactpref = { "fieldId": "BESCHIKBAARHEID", "optionUuids": [contactPreferenceId] };
var lastnameobj = { "fieldId": "CPLastname", "value": lastname };
var leadmaker = { "fieldId": "LEADMAKER", "value": naam };
var door = { "fieldId": "DOOR2DOORCAMPAGNEREGIO", "optionUuids": [door2doorId] };
var advisor = { "fieldId": "ADVISEUR", "value": adviseur };
var firstnme = { "fieldId": "CPFirstname", "value": firstName };
var addr1 = { "fieldId": "ORStreet", "value": address };
var leaddate = { "fieldId": "LEADDATUM", "value": dateLeadGathered };
var leadtime = { "fieldId": "LEADTIJD", "value": timeLeadGathered };
var housnum = { "fieldId": "ORHouseNumberAddition", "value": housenumber };
var zip = { "fieldId": "ORPostcode", "value": zipcode };
var city = { "fieldId": "ORCity", "value": cityname };
var phone = { "fieldId": "CPTelephone1", "value": telephoneNumber };
var aleternate = { "fieldId": "CPMobile", "value": homeTelephoneNumber };
var emailobj = { "fieldId": "CPEmail1", "value": email };
var content = { "fieldId": "OPMERKINGENKCC", "value": remarksLead };
var houesownrobj = { "fieldId": "ISDECONTACTPERSOONDANWELPARTNEREIGENAARVANDEWONING", "value": houseOwner };
var relationaggrementobj = { "fieldId": "ISDERELATIEAKKOORDDATERCONTACTWORDTOPGENOMENVOORHETMAKENVANEENAFSPRAAK", "value": relationaggrement };
var durableEnergyobj = { "fieldId": "WATISVOLGENSUDEMEESTDUURZAMEBRONVANENERGIE", "value": durableEnergy };
var energyPriceobj = { "fieldId": "VERWACHTINGENERGIEPRIJSENBIJKOMENDEKOSTEN", "value": energyPrice };
var noinvestIdobj = { "fieldId": "ALSUZONDERDATHETUMEERKOSTPMENZONDEREIGENINVESTERINGOVERKUNTGAANOPDUURZAMEZONNEENERGIEZOUUDATDANOVERWEGEN", "value": noinvest };
var financesdobj = { "fieldId": "BEHEERDECONTACTPERSOONZELFSTANDIGOFSAMENMETDEPARTNERHETFINANCIELEHUISHOUDEN", "value": finances };
// fieldarray.push(lastnameobj, leadmaker, leadtime, regionob, door, advisor, gender, firstnme, lastnme, addr1, housnum, housenum1, zip, city, phone, aleternate, emailobj, contactpref, content, houesownrobj, relationaggrementobj, durableEnergyobj, energyPriceobj, noinvestIdobj, financesdobj);
fieldarray.push(lastnameobj, leadmaker, regionob, advisor, firstnme, addr1, city, emailobj, content, houesownrobj, relationaggrementobj, durableEnergyobj, energyPriceobj, noinvestIdobj, financesdobj, phone, aleternate, leaddate, leadtime);
if (genderid != null) {
fieldarray.push(gender);
}
if (door2doorId != null) {
fieldarray.push(door);
}
if (contactPreferenceId != null) {
fieldarray.push(contactpref);
}
// log.debug({ title: "fieldarray", details: fieldarray });
var bodyObj = { "campaignId": "ae86d4a8-d135-45cd-a198-457fe24d576b", "fields": fieldarray };
var stringbody = JSON.stringify(bodyObj);
var addressResponse = https
.post({
url: 'https://backoffice.callmonkey.com/external-api/address/create?apiKey=8a62db93-f096-464b-947f-c750f3a91780',
body: stringbody,
headers: headerObj
});
//, { "fieldId": "CPEmail1", "value": email }
//{ "fieldId": "ADVISEUR", "optionUuids": [adviseurId] }
// var responseBody = JSON.parse(addressResponse);
statusCode = addressResponse.code;
// log.debug({ title: "addressResponse", details: addressResponse });
if (statusCode == 200) {
var responseBody = JSON.parse(addressResponse.body);
// log.debug({ title: "responseData", details: responseBody });
var addressId = responseBody.id;
log.debug({ title: "addressId", details: addressId });
internalid = scriptContext.newRecord.id;
log.debug({ title: "addressId", details: internalid });
//setting the custom field Trigger type in the sales order
var id = record.submitFields({
type: record.Type.LEAD,
id: scriptContext.newRecord.id,
values: {
custentity_jj_callmonkey_address: addressId
},
options: {
enableSourcing: true,
ignoreMandatoryFields: true,
ignoreFieldChange: false
}
});
log.debug({ title: "id", details: id });
}
}
}
} catch (e) {
log.debug({
title: 'error in main',
details: e
});
}
}
return {
afterSubmit: afterSubmit
};
function findaddress(resultrec) {
try {
var leadSearchObj = search.create({
type: "lead",
filters: [
["stage", "anyof", "LEAD"],
"AND", ["internalidnumber", "equalto", 5303]
],
columns: [
search.createColumn({
name: "custrecord_houesnumber",
join: "Address"
}),
search.createColumn({
name: "custrecord_housenumber_extension",
join: "Address"
}),
search.createColumn({
name: "city",
join: "Address"
}),
search.createColumn({
name: "zipcode",
join: "Address"
}),
search.createColumn({
name: "address1",
join: "Address"
}),
search.createColumn({
name: "statedisplayname",
join: "Address"
})
]
});
var results = leadSearchObj.run().getRange({
start: 0,
end: 1000
});
var customer = {};
var result = results[0];
customer.zip = result.getValue({
name: "zipcode",
join: "Address"
});
customer.city = result.getValue({
name: "city",
join: "Address"
});
customer.houseexten = result.getValue({
name: "custrecord_housenumber_extension",
join: "Address"
});
customer.housenum = result.getValue({
name: "custrecord_houesnumber",
join: "Address"
});
customer.addr1 = result.getValue({
name: "address1",
join: "Address"
});
// log.debug({ title: "customer", details: customer });
return customer;
} catch (e) {
log.debug({ title: "e in address ", details: e });
}
}
});
Schedule Script
/**
* @NApiVersion 2.x
* @NScriptType ScheduledScript
* @NModuleScope SameAccount
*/
define(['N/https', 'N/email', 'N/record', 'N/search', 'N/runtime', 'N/task', 'N/file'],
function(https, email, record, search, runtime, task, file) {
/**
* Definition of the Scheduled script trigger point.
*
* @param {Object} scriptContext
* @param {string} scriptContext.type - The context in which the script is executed. It is one of the values from the scriptContext.InvocationType enum.
* @Since 2015.2
*/
function execute(scriptContext) {
try {
var searchobj = createsearch();
log.debug({ details: searchobj, title: "searchobj" });
for (var i = 0; i < searchobj.length; i++) {
var response = sendrequest(searchobj[i].callmonkey_address, searchobj[i].internalid);
}
} catch (e) {
log.debug({ title: "e in main", details: e });
}
}
return {
execute: execute
};
//to get the update from netsuite
function sendrequest(address, internalid) {
try {
var queryurl = "https://backoffice.callmonkey.com/external-api/address/get/" + address
var headerobj = {
accept: "application/json",
apikey: "8a62db93-f096-464b-947f-c750f3a91780"
}
var response = https.get({
url: queryurl,
headers: headerobj
});
// var parsedresponse = JSON.parse(response.body);
//return response.body;
if (response.code == 200) {
var currentstatus = formatresponse(response.body);
var id = updatestatus(internalid, currentstatus);
}
log.debug({ details: id, title: "id" });
} catch (e) {
log.debug({ details: e, title: "e in sendrequest" });
}
}
//to get lead details
function createsearch() {
try {
var leadSearchObj = search.create({
type: "lead",
filters: [
["stage", "anyof", "LEAD"],
"AND", ["custentity_jj_save_tocall_monkey", "is", "T"],
"AND", ["custentity_jj_callmonkey_address", "isnotempty", ""]
],
columns: [
search.createColumn({
name: "entityid",
sort: search.Sort.ASC
}),
"altname",
"email",
"custentity_jj_save_tocall_monkey",
"custentity_jj_callmonkey_address",
"internalid",
"entitystatus"
]
});
var i = 0;
var leadarray = [];
var searchResultCount = leadSearchObj.runPaged().count;
var i = 0;
leadSearchObj.run().each(function(result) {
var leadobj = {};
leadobj.internalid = result.getValue({
name: 'internalid'
});
leadobj.callmonkey_address = result.getValue({
name: 'custentity_jj_callmonkey_address'
});
leadarray.push(leadobj);
return true
});
return leadarray;
} catch (e) {
log.debug({ details: e, title: "e in search" });
}
}
// to format response
function formatresponse(response) {
try {
log.debug({ details: response, title: "response" });
var response = JSON.parse(response);
var statusarray = response.dispositions;
var currentstatus = statusarray[statusarray.length - 1].type;
log.debug({ details: currentstatus, title: "currentstatus" });
return currentstatus;
} catch (e) {
log.debug({ details: e, title: "e in format" });
}
}
// to update status to lead record in netsuite
function updatestatus(internalid, status) {
var leadstatusobj = {
CALLBACK: "21",
QUALIFIED: "7",
NEGATIVE: "19",
DISCHARGE: "22",
CANCELLED: "23"
};
log.debug({ details: status, title: "status" });
log.debug({ details: leadstatusobj[status], title: "leadstatusobj.status" });
var id = record.submitFields({
type: record.Type.LEAD,
id: internalid,
values: {
entitystatus: leadstatusobj[status]
},
options: {
enableSourcing: false,
ignoreMandatoryFields: true
}
});
return id
}
});