Last active
October 6, 2023 03:42
-
-
Save wvpv/5633d8a4d880101bb63916aefb4808f6 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 | |
]%% | |
<!-- output your "You've been unsubscribed" HTML content here --> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment