I'm looking to set up a one click unsubscribe page. Currently I have one set up for publication lists (pasted below). I'm trying to make this work for unsubscribing from all but inputting the all subscribers listid doesn't seem to do the trick. Am I missing something?
%%[ VAR @sid, @jid, @reason, @lue, @lue_prop, @lue_statusCode, @overallStatus, @requestId, @Response, @Status, @Error SET @sid = AttributeValue("_subscriberkey") SET @jid = AttributeValue("jobid") SET @listid = AttributeValue("listid") SET @batchid = AttributeValue("_JobSubscriberBatchID") SET @reason = "One Click Unsubscribe" IF NOT EMPTY(@sid) AND NOT EMPTY(@jid) AND NOT EMPTY(@listid) THEN SET @lue = CreateObject("ExecuteRequest") SetObjectProperty(@lue,"Name","LogUnsubEvent") SET @lue_prop = CreateObject("APIProperty") SetObjectProperty(@lue_prop, "Name", "SubscriberKey") SetObjectProperty(@lue_prop, "Value", @sid) AddObjectArrayItem(@lue, "Parameters", @lue_prop) SET @lue_prop = CreateObject("APIProperty") SetObjectProperty(@lue_prop, "Name", "JobID") SetObjectProperty(@lue_prop, "Value", @jid) AddObjectArrayItem(@lue, "Parameters", @lue_prop) SET @lue_prop = CreateObject("APIProperty") SetObjectProperty(@lue_prop, "Name", "ListID") SetObjectProperty(@lue_prop, "Value", @listid) AddObjectArrayItem(@lue, "Parameters", @lue_prop) SET @lue_prop = CreateObject("APIProperty") SetObjectProperty(@lue_prop, "Name", "BatchID") SetObjectProperty(@lue_prop, "Value", @batchid) AddObjectArrayItem(@lue, "Parameters", @lue_prop)SET @lue_prop = CreateObject("APIProperty") SetObjectProperty(@lue_prop, "Name", "Reason") SetObjectProperty(@lue_prop, "Value", @reason) AddObjectArrayItem(@lue, "Parameters", @lue_prop) SET @lue_statusCode = InvokeExecute(@lue, @overallStatus, @requestId) SET @Response = Row(@lue_statusCode, 1) SET @Status = Field(@Response,"StatusMessage") SET @Error = Field(@Response,"ErrorCode") ENDIF ]%%
Note that I've tried this code, but it doesn't capture the unsubscribe metric in the tracking section after it's been clicked:
%%[ 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("
jid: ", @jid)) output(concat("
listid: ", @listid)) output(concat("
batchid: ", @batchid)) output(concat("
email: ", @email)) output(concat("
skey: ", @skey)) output(concat("
reason: ", @reason)) output(concat("
unsubscribeAll: ", @unsubscribeAll)) output(concat("
overallStatus: ", @overallStatus)) output(concat("
requestId: ", @requestId)) output(concat("
Response: ", @Response)) output(concat("
Status: ", @Status)) output(concat("
Error: ", @Error)) endif ]%%