Forked from wvpv/sfmc-ampscript-one-click-unsubscribe.html
Created
September 14, 2018 16:47
-
-
Save katydorjee/6f0897da10b7810a19472c85b67f40fa to your computer and use it in GitHub Desktop.
One-Click Unsubscribe AMPscript
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%%[ | |
var @debug | |
var @jid | |
var @listid | |
var @batchid | |
var @email | |
var @skey | |
var @reason | |
var @unsubscribeAll | |
set @debug = 0 | |
set @jid = AttributeValue("jobid") | |
set @listid = AttributeValue("listid") | |
set @batchid = AttributeValue("_JobSubscriberBatchID") | |
set @email = AttributeValue("emailaddr") | |
set @skey = AttributeValue("_subscriberkey") | |
set @reason = "One-Click Unsubscribe" | |
set @unsubscribeAll = RequestParameter("ua") | |
/* if we know the subscriber */ | |
if not empty(@skey) then | |
var @lue | |
var @lue_prop | |
var @lue_statusCode | |
var @overallStatus | |
var @requestId | |
var @Response | |
var @Status | |
var @Error | |
/* if unsubscribing from all, then set the job, batch and listids to blank, effectively doing a global unsub */ | |
if @unsubscribeAll == "1" then | |
set @jid = "" | |
set @listid = "" | |
set @batchid = "" | |
endif | |
/* create a request to inject an unsub event into the LogUnsubEvent platform table */ | |
set @lue = CreateObject("ExecuteRequest") | |
SetObjectProperty(@lue,"Name","LogUnsubEvent") | |
/* | |
In order to invoke the request, we need to associate the following information with it to define the subscriber context and the job context: | |
1. Subscriber Key | |
2. JobId associated with the email send | |
3. ListID the email was sent to | |
4. BatchID the email was sent to | |
5. Reason for the unsub | |
*/ | |
/* 1. define and associate Subscriber Key to the request */ | |
set @lue_prop = CreateObject("APIProperty") | |
SetObjectProperty(@lue_prop, "Name", "SubscriberKey") | |
SetObjectProperty(@lue_prop, "Value", @skey) | |
AddObjectArrayItem(@lue, "Parameters", @lue_prop) | |
/* 2. define and associate JobID to the request */ | |
if not empty(@jid) then | |
set @lue_prop = CreateObject("APIProperty") | |
SetObjectProperty(@lue_prop, "Name", "JobID") | |
SetObjectProperty(@lue_prop, "Value", @jid) | |
AddObjectArrayItem(@lue, "Parameters", @lue_prop) | |
endif | |
/* 3. define and associate ListID to the request */ | |
if not empty(@listid) then | |
set @lue_prop = CreateObject("APIProperty") | |
SetObjectProperty(@lue_prop, "Name", "ListID") | |
SetObjectProperty(@lue_prop, "Value", @listid) | |
AddObjectArrayItem(@lue, "Parameters", @lue_prop) | |
endif | |
/* 4. define and associate BatchID to the request */ | |
if not empty(@batchid) then | |
set @lue_prop = CreateObject("APIProperty") | |
SetObjectProperty(@lue_prop, "Name", "BatchID") | |
SetObjectProperty(@lue_prop, "Value", @batchid) | |
AddObjectArrayItem(@lue, "Parameters", @lue_prop) | |
endif | |
/* 5. define and associate unsub reason to the request */ | |
set @lue_prop = CreateObject("APIProperty") | |
SetObjectProperty(@lue_prop, "Name", "Reason") | |
SetObjectProperty(@lue_prop, "Value", @reason) | |
AddObjectArrayItem(@lue, "Parameters", @lue_prop) | |
/* finally, you invoke the request */ | |
set @lue_statusCode = InvokeExecute(@lue, @overallStatus, @requestId) | |
/* extract messages from the response */ | |
set @Response = Row(@lue_statusCode, 1) | |
set @Status = Field(@Response,"StatusMessage") | |
set @Error = Field(@Response,"ErrorCode") | |
endif | |
if @debug == 1 then | |
output(concat("<br>jid: ", @jid)) | |
output(concat("<br>listid: ", @listid)) | |
output(concat("<br>batchid: ", @batchid)) | |
output(concat("<br>email: ", @email)) | |
output(concat("<br>skey: ", @skey)) | |
output(concat("<br>reason: ", @reason)) | |
output(concat("<br>unsubscribeAll: ", @unsubscribeAll)) | |
output(concat("<br>overallStatus: ", @overallStatus)) | |
output(concat("<br>requestId: ", @requestId)) | |
output(concat("<br>Response: ", @Response)) | |
output(concat("<br>Status: ", @Status)) | |
output(concat("<br>Error: ", @Error)) | |
endif | |
]%% |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment