SSJS: Day 19 focused on Resource
Who said we don't have UI for Transactional API? Not for Newbies
Write SSJS to Create and Get List of Transactional APIs for Email
<script runat="server" language="javascript">
Platform.Load("core", "1");
//===================================================================//
// Retrieves up to 2500 rows of data in a data extension
//===================================================================//
function DataExtensionRowsRetrieve(dataExtensionProps)
{
var dataExtension = DataExtension.Init(dataExtensionProps.Init);
var dataSet = dataExtension.Rows.Retrieve(dataExtensionProps.filter);
return dataSet;
}
//=========================================================================//
// The SimpleOperators object contains operators to use when filtering data.
//=========================================================================//
function SimpleOperators(simpleOperatorsProps)
{
var filter = {
Property:simpleOperatorsProps.Property
,SimpleOperator:simpleOperatorsProps.SimpleOperator
,Value:simpleOperatorsProps.Value
};
return filter;
}
//=========================================================================//
// Defining the payload has a complex properties to remember
// So deciding to break the payload into modular objects
// Is a best step forward
//=========================================================================//
function CreateSendDefinitonPayLoad(definitionKey,status,name,description,classification,content,subscriptions,options)
{
var payLoad= {
"definitionKey": definitionKey,
"status": status,
"name": name,
"description": description,
"classification": classification,
"content": content,
"subscriptions": subscriptions,
"options":options
};
return payLoad;
}
//=========================================================================//
// Request token for a Marketing Cloud environment
//=========================================================================//
function AccessToken(dataExtensionPropsAPIConfig,dataExtensionPropsAPIMethod)
{
// Call DataExtensionRowsRetrieve function to retrieve for API Config
var APIConfiDE=DataExtensionRowsRetrieve(dataExtensionPropsAPIConfig);
// Call DataExtensionRowsRetrieve function to retrieve for APIMethod Config
var APIMethodDE=DataExtensionRowsRetrieve(dataExtensionPropsAPIMethod);
//Assign properties values for v2/Token
var memberID = Platform.Recipient.GetAttributeValue('memberid');
var clientId = APIConfiDE[0]["ClientID"];
var clientSecret= APIConfiDE[0]["ClientSecret"];
var grantType="client_credentials";
var authAPI=APIConfiDE[0]["AuthAPI"];
var contentType = "application/json";
var headers= {
"client_id":clientId
,"client_secret":clientSecret
,"grant_type":grantType
,"account_id": memberID
};
var httpProtocol = APIMethodDE[0]["HttpProtocol"];
var methodURL = APIMethodDE[0]["MethodURL"];
var accessTokenResult = HTTP.Post(authAPI+methodURL, ContentType, Stringify(headers));
return accessTokenResult;
}
//=========================================================================//
// Email - Create Send Definiton
//=========================================================================//
function CreateEmailSendDefinition(dataExtensionPropsAPIConfig,dataExtensionPropsAPIMethodToken,dataExtensionPropsAPIMethodSendDefinition,createSendDefinitionPayLoad)
{
// Call AccessToken function to retrieve for Access Token
var accessTokenResult=AccessToken(dataExtensionPropsAPIConfig,dataExtensionPropsAPIMethodToken);
var statusCode = accessTokenResult["StatusCode"];
var response = accessTokenResult["Response"][0];
var accessToken = Platform.Function.ParseJSON(response).access_token;
var tokenType = Platform.Function.ParseJSON(response).token_type;
//Write("Access Token :" + tokenType + " " +accessToken +"\n");
var httpHeadersName=["Authorization"];
var httpHeaderValues=[tokenType + " " +accessToken];
// Call DataExtensionRowsRetrieve function to retrieve for API Config
var APIConfiDE=DataExtensionRowsRetrieve(dataExtensionPropsAPIConfig);
var restAPI=APIConfiDE[0]["RestAPI"];
// Call DataExtensionRowsRetrieve function to retrieve for APIMethod Config
var APIMethodDE=DataExtensionRowsRetrieve(dataExtensionPropsAPIMethodSendDefinition);
var httpProtocol = APIMethodDE[0]["HttpProtocol"];
var methodURL = APIMethodDE[0]["MethodURL"];
var contentType = "application/json";
var httpResponse =HTTP.Post(restAPI+methodURL,contentType,Stringify(createSendDefinitionPayLoad),httpHeadersName,httpHeaderValues);
return httpResponse;
}
//=========================================================================//
// Email - Get Send Definiton
//=========================================================================//
function GetEmailSendDefinition(dataExtensionPropsAPIConfig,dataExtensionPropsAPIMethodToken,dataExtensionPropsAPIMethodSendDefinition)
{
// Call AccessToken function to retrieve for Access Token
var accessTokenResult=AccessToken(dataExtensionPropsAPIConfig,dataExtensionPropsAPIMethodToken);
var statusCode = accessTokenResult["StatusCode"];
var response = accessTokenResult["Response"][0];
var accessToken = Platform.Function.ParseJSON(response).access_token;
var tokenType = Platform.Function.ParseJSON(response).token_type;
//Write("Access Token :" + tokenType + " " +accessToken +"\n");
var httpHeadersName=["Authorization"];
var httpHeaderValues=[tokenType + " " +accessToken];
// Call DataExtensionRowsRetrieve function to retrieve for API Config
var APIConfiDE=DataExtensionRowsRetrieve(dataExtensionPropsAPIConfig);
var restAPI=APIConfiDE[0]["RestAPI"];
// Call DataExtensionRowsRetrieve function to retrieve for APIMethod Config
var APIMethodDE=DataExtensionRowsRetrieve(dataExtensionPropsAPIMethodSendDefinition);
var httpProtocol = APIMethodDE[0]["HttpProtocol"];
var methodURL = APIMethodDE[0]["MethodURL"];
var contentType = "application/json";
var httpResponse =HTTP.Get(restAPI+methodURL,httpHeadersName,httpHeaderValues);
return httpResponse;
}
try{
// Define the variable for SimpleOperator with properties for API Config
var simpleOperatorsPropsAPIConfig = {
"Property":"APIConfig"
,"SimpleOperator":"Equals"
,"Value" :"TransactionalAPI"
}
// Define the variable for dataExtension retrieve with properties for API Config
var dataExtensionPropsAPIConfig={
"Init":"InstallPackages"
,"filter":SimpleOperators(simpleOperatorsPropsAPIConfig)
}
// Define the variable for SimpleOperator with properties for APIMethod Config
var simpleOperatorsPropsAPIMethodToken = {
"Property":"MethodName"
,"SimpleOperator":"Equals"
,"Value" :"Request SFMC Token"
}
// Define the variable for SimpleOperator with properties for APIMethod Config
var simpleOperatorsPropsAPIMethodSendDefinition = {
"Property":"MethodName"
,"SimpleOperator":"Equals"
,"Value" :"Email - Create Send Definiton"
}
// Define the variable for dataExtension retrieve with properties for APIMethod Config
var dataExtensionPropsAPIMethodToken={
"Init":"APIMethods"
,"filter":SimpleOperators(simpleOperatorsPropsAPIMethodToken)
}
// Define the variable for dataExtension retrieve with properties for APIMethod Config
var dataExtensionPropsAPIMethodSendDefinition={
"Init":"APIMethods"
,"filter":SimpleOperators(simpleOperatorsPropsAPIMethodSendDefinition)
}
// Define the payload for create send definition properties from bottom to top
var trackLinks=true;
var options= {
"trackLinks":trackLinks
};
var lists = "All Subscribers - 1234";
var dataExtension="Campaign 1";
var autoAddSubscriber=true;
var updateSubscriber=false;
var subscriptions ={
"list":lists,
"dataExtension": dataExtension,
"autoAddSubscriber":autoAddSubscriber,
"updateSubscriber": updateSubscriber
};
var contentCustomerKey="Demo";
var content= {
"customerKey": contentCustomerKey
};
var classification= "Default Transactional";
var description="Created via RESTAPI Demo 2";
var name= "Shashi Demo Session Demo 2";
var status="Active";
var definitionKey= "Shashi Demo Session Demo 2";
// Call createSendDefinitionPayLoad function to define the payload for the send definition
var sendDefinitionPayLoad=CreateSendDefinitonPayLoad(definitionKey,status,name,description,classification,content,subscriptions,options);
//var result=CreateEmailSendDefinition(dataExtensionPropsAPIConfig,dataExtensionPropsAPIMethodToken,dataExtensionPropsAPIMethodSendDefinition,sendDefinitionPayLoad);
var result=GetEmailSendDefinition(dataExtensionPropsAPIConfig,dataExtensionPropsAPIMethodToken,dataExtensionPropsAPIMethodSendDefinition);
//var response=Platform.Function.ParseJSON(result.Response[0]);
//var status=Platform.Function.ParseJSON(resultStatusCode);
Write(Stringify(result));
}
catch(e)
{
Write(Stringify(e));
}
</script>