como adicionar contato à lista de opt-out programaticamente?

Oct 27 2020

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

VladIobagiu Oct 27 2020 at 14:13

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

ChrisAuer Oct 28 2020 at 23:29
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);