SSJS: Day 19 focused on Resource

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>        


To view or add a comment, sign in

Others also viewed

Explore topics