como adicionar contato à lista de opt-out programaticamente?
Estamos usando o Sitecore 9.1 (Update-1). Temos um sistema de gerenciamento de e-mail de terceiros. Um dos nossos requisitos é que se alguém cancelar a assinatura do sistema de e-mail de terceiros, devemos considerar o e-mail em nosso Sitecore EXM. Para cumprir isso, estamos criando um novo contato, uma nova faceta de contato e adicionando o contato em nossa lista de exclusão global comum e ele está sendo adicionado à lista com sucesso.
Mas enquanto estamos enviando um e-mail para o mesmo usuário, ele não está filtrando o contato. O contato está na lista global de exclusão, mas eles também estão recebendo o e-mail.
Para adicionar à lista, tentamos os seguintes códigos
var subscriptionService = (ISubscriptionService)ServiceLocator.ServiceProvider.GetService(typeof(ISubscriptionService));
subscriptionService.Subscribe(listId, Guid.Parse(existingContact.Id.ToString()));
Também tentamos o seguinte código, aqui cliente XConnectClient, Contact existingContact
ContactListSubscription subscription = new ContactListSubscription(added, isActive, listId);
subscriptions.Subscriptions.Add(subscription);
client.SetListSubscriptions(contact, subscriptions);
client.Submit();
Ambos estão sendo adicionados à lista de exclusão global comum, mas não estão sendo filtrados.
Por favor, ajude se alguém trabalhar em um problema semelhante, obrigado.
Respostas
ISubscriptionManager contém métodos para assinatura / cancelamento
public interface ISubscriptionManager
{
bool Subscribe(
ContactIdentifier contactIdentifier,
Guid messageId,
bool subscriptionConfirmation);
bool Unsubscribe(ContactIdentifier contactIdentifier, Guid messageId);
bool UnsubscribeFromAll(ContactIdentifier contactIdentifier, Guid managerRootId);
bool UnsubscribeFromAll(Contact contact, ManagerRoot managerRoot);
bool ConfirmSubscription(string cid);
string GetConfirmationKey(
Guid recipientListId,
ContactIdentifier contactIdentifier,
ManagerRoot managerRoot);
bool ConfirmSubscription(ShortID id);
bool AddToGlobalOptOutList(ContactIdentifier contactIdentifier, ManagerRoot managerRoot);
bool RemoveContactFromList(ContactIdentifier contactIdentifier, Guid listId);
bool RemoveContactFromList(Contact contact, Guid listId);
bool AddContactToList(ContactIdentifier contactIdentifier, Guid listId);
Guid GetSubscriptionListFromMessage(MessageItem messageItem);
}
Seu código terá a seguinte aparência:
(Factory.CreateObject("exm/subscriptionManager", true) as ISubscriptionManager).AddToGlobalOptOutList(new ContactIdentifier("ListManager", "youremailaddress", ContactIdentifierType.Known), yourmanagerroot);
Para obter o ManagerRoot, você pode usar o método público:
public static ManagerRoot FromItem(Item rootItem) => ManagerRoot.IsManagerRoot(rootItem) ? new ManagerRoot(rootItem) : (ManagerRoot) null;
da classe Sitecore.Modules.EmailCampaign.ManagerRoot
var subscribeOptions = new UpdateListSubscriptionMessage();
subscribeOptions.ListSubscribeOperation = ListSubscribeOperation.UnsubscribeFromAll;
subscribeOptions.ContactIdentifier = new ContactIdentifier(source, identifier, ContactIdentifierType.Known);
subscribeOptions.ManagerRootId = managerRoot;
var clientApiService = ServiceLocator.ServiceProvider.GetService<IClientApiService>();
clientApiService.UpdateListSubscription(subscribeOptions);