Programming the ExactTarget Marketing Cloud

63
Programming the ExactTarget Marketing Cloud Dale McCrory, ExactTarget, Principal Product Manager, Fuel Platform google.com/+DaleMcCrory

description

For over a decade, ExactTarget has offered a comprehensive set of APIs that enable our customers to automate their email campaigns and seamlessly integrate their marketing, analytics, and other business software. Join us as we introduce core Marketing Cloud concepts, including the importance of permission and the value of relevancy, as well as the core technologies that make up the ExactTarget platform, including lists, data extensions, and AMPscript.

Transcript of Programming the ExactTarget Marketing Cloud

Programming the ExactTarget Marketing Cloud

Dale McCrory, ExactTarget, Principal Product Manager, Fuel Platformgoogle.com/+DaleMcCrory

Safe harborSafe harbor statement under the Private Securities Litigation Reform Act of 1995: This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results expressed or implied by the forward-looking statements we make. All statements other than statements of historical fact could be deemed forward-looking, including any projections of product or service availability, subscriber growth, earnings, revenues, or other financial items and any statements regarding strategies or plans of management for future operations, statements of belief, any statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services. The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new functionality for our service, new products and services, our new business model, our past operating losses, possible fluctuations in our operating results and rate of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of any litigation, risks associated with completed and any possible mergers and acquisitions, the immature market in which we operate, our relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth, new releases of our service and successful customer deployment, our limited history reselling non-salesforce.com products, and utilization and selling to larger enterprise customers. Further information on potential factors that could affect the financial results of salesforce.com, inc. is included in our annual report on Form 10-K for the most recent fiscal year and in our quarterly report on Form 10-Q for the most recent fiscal quarter. These documents and others containing important disclosures are available on the SEC Filings section of the Investor Information section of our Web site. Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently available and may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions based upon features that are currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these forward-looking statements.

ExactTarget Marketing Cloud

As a customer, you can automate entire marketing campaigns, customize the ExactTarget application to your specific needs,or integrate ExactTarget with a variety of CRM, analytics, and other business software. As a partner, you can build or extend marketing applications and take those applications to market with ExactTarget via one of our platform-related partner programs. As a developer, the possibilities are endless.

ExactTarget Fuel as part of Salesforce1

• Send email, SMS and push messages.• Personalize messages using data and content scripting. • Measure interaction and engagement (email opens & clicks,

etc.). • Build apps that extend the Marketing Cloud.

The Marketing and Development Mindmeld

Customer touchpoints for developers

Principle #1Every email, every message, and every notification should be

thought of as a customer touchpoint -- an opportunity to influence your customers and prospects.

Customer touchpoints for developers

Principle #2Highly-targeted, relevant communication is as much a technology

problem as it is a marketer's dilemma.

Data drives relevancy

Customer events improve relevancy

Customer events improve relevancy

Permission, permission, permission

Customer touchpoint innovation

Key Fuel system objects for email sending

Marketing Cloud Fuel Objects mapped to Force.comMarketing Cloud Fuel Force.com

Lists CRM Campaigns or Reports

Data Extensions Objects

Contacts (Subscribers) CRM Contacts

List Subscription CRM CampaignMembers

Data Extension Fields / Subscriber Attributes

Object Fields

Data Extension Keys Relationships

Marketing Events CRM Contact Activities

A “Super” Example

Free pizza for guessing the coin toss

Free pizza for guessing the coin tossVisualization of saving a subscriber and a data extension

Enroll

CoinToss

RewardsMember

Vote

Demographic Data• Rewards Member ID• First Name• Last Name• Zip Code

Event Data• Rewards Member ID• TossVote

Data Extension

Marketing List

Enrolling a new Rewards Members

$subscriber = new ET_Subscriber();$subscriber->authStub = $myclient;

$subscriber->props = array("SubscriberKey" => "12332432", "EmailAddress" => "[email protected]", "Lists" => array("ID" => $listID));

$subscriber->props['Attributes'] = array( array('Name' => 'First Name', 'Value' => 'John'), array('Name' => 'Last Name', 'Value' => 'Smith'), array('Name' => 'RegisteredDate', 'Value' => '12/01/2013 1:00pm’));

$postResponse = $subscriber->post();

SubscriberKey EmailAddress First Name Last Name RegisteredDate

Enrolling a new Rewards Members

$subscriber = new ET_Subscriber();$subscriber->authStub = $myclient;

$subscriber->props = array("SubscriberKey" => "12332432", "EmailAddress" => "[email protected]", "Lists" => array("ID" => $listID));

$subscriber->props['Attributes'] = array( array('Name' => 'First Name', 'Value' => 'John'), array('Name' => 'Last Name', 'Value' => 'Smith'), array('Name' => 'RegisteredDate', 'Value' => '12/01/2013 1:00pm’));

$postResponse = $subscriber->post();

SubscriberKey EmailAddress First Name Last Name RegisteredDate

Enrolling a new Rewards Members

$subscriber = new ET_Subscriber();$subscriber->authStub = $myclient;

$subscriber->props = array("SubscriberKey" => "12332432", "EmailAddress" => "[email protected]", "Lists" => array("ID" => $listID));

$subscriber->props['Attributes'] = array( array('Name' => 'First Name', 'Value' => 'John'), array('Name' => 'Last Name', 'Value' => 'Smith'), array('Name' => 'RegisteredDate', 'Value' => '12/01/2013 1:00pm’));

$postResponse = $subscriber->post();

SubscriberKey EmailAddress First Name Last Name RegisteredDate

Enrolling a new Rewards Members

$subscriber = new ET_Subscriber();$subscriber->authStub = $myclient;

$subscriber->props = array("SubscriberKey" => "12332432", "EmailAddress" => "[email protected]", "Lists" => array("ID" => $listID));

$subscriber->props['Attributes'] = array( array('Name' => 'First Name', 'Value' => 'John'), array('Name' => 'Last Name', 'Value' => 'Smith'), array('Name' => 'RegisteredDate', 'Value' => '12/01/2013 1:00pm’));

$postResponse = $subscriber->post();

SubscriberKey EmailAddress First Name Last Name RegisteredDate12332432 [email protected] John Smith 12/01/2013 1:00pm

Storing the Rewards Member Vote event

$postDRRow = new ET_DataExtension_Row();$postDRRow->authStub = $myclient;

$postDRRow->Name = "CoinToss";

$postDRRow->props = array(”memberId" => "12332432",

"tossVote" => "heads”);

$postResponse = $postDRRow->post();print_r($postResponse);

memberId tossVote

Storing the Rewards Member Vote event

$postDRRow = new ET_DataExtension_Row();$postDRRow->authStub = $myclient;

$postDRRow->Name = "CoinToss";

$postDRRow->props = array(”memberId" => "12332432",

"tossVote" => "heads”);

$postResponse = $postDRRow->post();print_r($postResponse);

memberId tossVote

Storing the Rewards Member Vote event

$postDRRow = new ET_DataExtension_Row();$postDRRow->authStub = $myclient;

$postDRRow->Name = "CoinToss";

$postDRRow->props = array(”memberId" => "12332432",

"tossVote" => "heads”);

$postResponse = $postDRRow->post();print_r($postResponse);

memberId tossVote

Storing the Rewards Member Vote event

$postDRRow = new ET_DataExtension_Row();$postDRRow->authStub = $myclient;

$postDRRow->Name = "CoinToss";

$postDRRow->props = array(”memberId" => "12332432",

"tossVote" => "heads”);

$postResponse = $postDRRow->post();print_r($postResponse);

memberId tossVote12332432 heads SubscriberKey memberId

Email code to myself

Event TriggeredSend Email

CodeRequest CoinToss RewardsMember

API Call

Send-Time Data ina Data Extension or Subscriber Attribute

Data Extension Subscriber Attributes

Email code to myself: Triggered send eventEvent: Trigger an email send and add personalization data

ET_TriggeredSend ts = new ET_TriggeredSend();ts.AuthStub = $myclient;

ts.CustomerKey = "PromoCode";

ts.Subscribers = new ET_Subscriber[] { new ET_Subscriber() { emailAddress = "[email protected]", subscriberKey = "12332432”, promoCode = "f02020ddE" } };

SendReturn results = ts.Send();

Email code to myself: Triggered send eventEvent: Trigger an email send and add personalization data

ET_TriggeredSend ts = new ET_TriggeredSend();ts.AuthStub = $myclient;

ts.CustomerKey = "PromoCode";

ts.Subscribers = new ET_Subscriber[] { new ET_Subscriber() { emailAddress = "[email protected]", subscriberKey = "12332432”, promoCode = "f02020ddE" } };

SendReturn results = ts.Send();

Email code to myself: Triggered send eventEvent: Trigger an email send and add personalization data

ET_TriggeredSend ts = new ET_TriggeredSend();ts.AuthStub = $myclient;

ts.CustomerKey = "PromoCode";

ts.Subscribers = new ET_Subscriber[] { new ET_Subscriber() { emailAddress = "[email protected]", subscriberKey = "12332432”, promoCode = "f02020ddE" } };

SendReturn results = ts.Send();

Email code to myself: Email personalization

Dear %%First Name%% %%Last Name%%,

Your promo code for free pizza is: %%PromoCode%%

Thanks for voting:%%=Lookup(“CoinToss”,”tossVote”,“memberId”,_subscriberKey)=%%

Substitution String and AMPScript in an Email Template

Rendered Email

Dear John Smith,

Your promo code for free pizza is: f02020ddE

Thanks for voting:Heads

Email code to myself: Email personalizationSubstitution String and AMPScript

in an Email TemplateRendered Email

Dear John Smith,

Your promo code for free pizza is: f02020ddE

Thanks for voting:Heads

Dear %%First Name%% %%Last Name%%,

Your promo code for free pizza is: %%PromoCode%%

Thanks for voting:%%=Lookup(“CoinToss”,”tossVote”,“memberId”,_subscriberKey)=%%

Email code to myself: Email personalizationSubstitution String and AMPScript

in an Email TemplateRendered Email

Data Source #1: Marketing List by Subscriber Key

Dear John Smith,

Your promo code for free pizza is: f02020ddE

Thanks for voting:Heads

Dear %%First Name%% %%Last Name%%,

Your promo code for free pizza is: %%PromoCode%%

Thanks for voting:%%=Lookup(“CoinToss”,”tossVote”,“memberId”,_subscriberKey)=%%

Email code to myself: Email personalizationSubstitution String and AMPScript

in an Email TemplateRendered Email

Data Source #1: Marketing List by Subscriber KeyData Source #2: Transactional Send Data

Dear John Smith,

Your promo code for free pizza is: f02020ddE

Thanks for voting:Heads

Dear %%First Name%% %%Last Name%%,

Your promo code for free pizza is: %%PromoCode%%

Thanks for voting:%%=Lookup(“CoinToss”,”tossVote”,“memberId”,_subscriberKey)=%%

Email code to myself: Email personalization

Dear John Smith,

Your promo code for free pizza is: f02020ddE

Thanks for voting:Heads

Substitution String and AMPScript in an Email Template

Rendered Email

Data Source #1: Marketing List by Subscriber KeyData Source #2: Transactional Send DataData Source #3: Voting Data by SubscriberKey

Dear %%First Name%% %%Last Name%%,

Your promo code for free pizza is: %%PromoCode%%

Thanks for voting:%%=Lookup(“CoinToss”,”tossVote”,“memberId”,_subscriberKey)=%%

Mobile Messaging with Push Notifications

Using push messaging as a customer touchpoint

Using push messaging as a customer touchpoint

POST https://www.exacttargetapis.com/push/v1/messageTag/OEl8ODow/sendAuthorization: Bearer exampletoken1Content-Type: application/json{ "InclusionTags": [ "Salesforce", "ExactTarget" ], "ExclusionTags": [ "Competitors" ], "Override": true, "MessageText": "Cloudy with a Chance of Customers - Now playing!", "Sound": "lightning.caf", "Badge": "+1", "OpenDirect": "OD01", "CustomPayload": "{ \"availableSeats\": \"2 billion\" }"}

Using push messaging as a customer touchpoint

POST https://www.exacttargetapis.com/push/v1/messageTag/OEl8ODow/sendAuthorization: Bearer exampletoken1Content-Type: application/json{ "InclusionTags": [ "Salesforce", "ExactTarget" ], "ExclusionTags": [ "Competitors" ], "Override": true, "MessageText": "Cloudy with a Chance of Customers - Now playing!", "Sound": "lightning.caf", "Badge": "+1", "OpenDirect": "OD01", "CustomPayload": "{ \"availableSeats\": \"2 billion\" }"}

Using push messaging as a customer touchpoint

POST https://www.exacttargetapis.com/push/v1/messageTag/OEl8ODow/sendAuthorization: Bearer exampletoken1Content-Type: application/json{ "InclusionTags": [ "Salesforce", "ExactTarget" ], "ExclusionTags": [ "Competitors" ], "Override": true, "MessageText": "Cloudy with a Chance of Customers - Now playing!", "Sound": "lightning.caf", "Badge": "+1", "OpenDirect": "OD01", "CustomPayload": "{ \"availableSeats\": \"2 billion\" }"}

Using push messaging as a customer touchpoint

POST https://www.exacttargetapis.com/push/v1/messageTag/OEl8ODow/sendAuthorization: Bearer exampletoken1Content-Type: application/json{ "InclusionTags": [ "Salesforce", "ExactTarget" ], "ExclusionTags": [ "Competitors" ], "Override": true, "MessageText": "Cloudy with a Chance of Customers - Now playing!", "Sound": "lightning.caf", "Badge": "+1", "OpenDirect": "OD01", "CustomPayload": "{ \"availableSeats\": \"2 billion\" }"}

Mobile Messaging with SMS

Using SMS messaging as a customer touchpoint

Using SMS messaging as a customer touchpoint

POST https://www.exacttargetapis.com/sms/v1/messageContact/MzA6Nzg6MA/sendAuthorization: Bearer exampletoken1Content-Type: application/json{ "mobileNumbers": [ "13175551212" ], "Subscribe": true, "keyword": "ALERTS", "messageText": "Text ALERTS to 12345 to receive new movie notifications via SMS.", "BlackoutWindow": { "UtcOffset": "-0500", "WindowStart": "1500", "WindowEnd": "2200" }, "SendTime": "2012-10-05 20:01"}

Using SMS messaging as a customer touchpoint

POST https://www.exacttargetapis.com/sms/v1/messageContact/MzA6Nzg6MA/sendAuthorization: Bearer exampletoken1Content-Type: application/json{ "mobileNumbers": [ "13175551212" ], "Subscribe": true, "keyword": "ALERTS", "messageText": "Text ALERTS to 12345 to receive new movie notifications via SMS.", "BlackoutWindow": { "UtcOffset": "-0500", "WindowStart": "1500", "WindowEnd": "2200" }, "SendTime": "2012-10-05 20:01"}

Using SMS messaging as a customer touchpoint

POST https://www.exacttargetapis.com/sms/v1/messageContact/MzA6Nzg6MA/sendAuthorization: Bearer exampletoken1Content-Type: application/json{ "mobileNumbers": [ "13175551212" ], "Subscribe": true, "keyword": "ALERTS", "messageText": "Text ALERTS to 12345 to receive new movie notifications via SMS.", "BlackoutWindow": { "UtcOffset": "-0500", "WindowStart": "1500", "WindowEnd": "2200" }, "SendTime": "2012-10-05 20:01"}

Using SMS messaging as a customer touchpoint

POST https://www.exacttargetapis.com/sms/v1/messageContact/MzA6Nzg6MA/sendAuthorization: Bearer exampletoken1Content-Type: application/json{ "mobileNumbers": [ "13175551212" ], "Subscribe": true, "keyword": "ALERTS", "messageText": "Text ALERTS to 12345 to receive new movie notifications via SMS.", "BlackoutWindow": { "UtcOffset": "-0500", "WindowStart": "1500", "WindowEnd": "2200" }, "SendTime": "2012-10-05 20:01"}

Using SMS messaging as a customer touchpoint

POST https://www.exacttargetapis.com/sms/v1/messageContact/MzA6Nzg6MA/sendAuthorization: Bearer exampletoken1Content-Type: application/json{ "mobileNumbers": [ "13175551212" ], "Subscribe": true, "keyword": "ALERTS", "messageText": "Text ALERTS to 12345 to receive new movie notifications via SMS.", "BlackoutWindow": { "UtcOffset": "-0500", "WindowStart": "1500", "WindowEnd": "2200" }, "SendTime": "2012-10-05 20:01"}

Learning More…

Developer Resources

code.exacttarget.com

Dreamforce Developer Edition

code.exacttarget.com

INNOVATE!!!

Dale McCrory

ExactTarget Principal Product Manager, Fuel Platform

google.com/+DaleMcCrory