Sitecore EXM 3.2(ECM) 将目标分配给触发的消息

Sitecore EXM 3.2(ECM) Assign goal to the triggered message

我需要做一个简单的时事通讯表格。此表格应如下所示:

这个表格应该在 EXM 的帮助下工作

我已经在 EXM 中创建了触发消息,其中 link 用于订阅。 我为触发时事通讯目标的提交按钮编写了这段代码

    [HttpPost]
    public ActionResult NewsletterSubscribe(NewsletterViewBag model)
    {

        var goal = Context.Database.GetItem(newsletterGoal);

        if (goal == null)
        {
            continue;
        }

        var registerGoal = new Sitecore.Analytics.Data.Items.PageEventItem(goal);

        var eventData = Tracker.Current.CurrentPage.Register(registerGoal);

        eventData.Data = goal[DateTime.Now.ToString(CultureInfo.InvariantCulture)];

        Tracker.Submit();

    }

如何将触发消息分配给 newsletterGoal? 我也尝试用这种方式手动发送消息:

 MessageItem message = Sitecore.Modules.EmailCampaign.Factory.GetMessage(new ID(messageId));
   Sitecore.Modules.EmailCampaign.AsyncSendingManager manager = new AsyncSendingManager(message);
   var contactId = ClientApi.GetAnonymousIdFromEmail(email);
   var recipientId = (RecipientId) new XdbContactId(contactId);
   manager.SendStandardMessage(recipientId);

我在日志中看到错误:收件人 'xdb:857bbea1-1f18-4621-a798-178399cd0b54' 不存在。但是触发消息没有任何收件人列表

目标没有直接分配给消息。但是,您可以分配参与计划和活动。每条消息都有自己的参与计划来处理跟踪消息中的联系人操作。如果您创建一个触发目标的活动,您可以将其分配给消息,并且当他们收到消息时它将与联系人相关联。您还可以利用消息参与计划在联系人通过这些状态时触发事件。

此外,您在记录联系人数据时遗漏了一些细节。 查看 EXM 模块中包含的时事通讯注册控件。其中的重要部分是:

    protected virtual RecipientId RecipientId
    {
        get
        {
            RecipientId recipientId = null;

            var contactId = ContactId;

            if (contactId != (ID)null)
            {
                recipientId = new XdbContactId(contactId);
            }

            return recipientId;
        }
    }

    protected virtual ID ContactId
    {
        get
        {
            if (!Email.Visible || string.IsNullOrEmpty(Email.Text))
            {
                return new ID(Tracker.Current.Contact.ContactId);
            }

            var anonymousId = ClientApi.GetAnonymousIdFromEmail(Email.Text);

            return anonymousId.HasValue ? new ID(anonymousId.Value) : new ID(Tracker.Current.Contact.ContactId);
        }
    }

    protected virtual void UpdateEmailInXdb()
    {
        _recipientRepository.UpdateRecipientEmail(RecipientId, Email.Text);
    }

它会将电子邮件地址直接写入Mongo,而不是等待会话结束。在您的注册代码中包含此属性以及相关的 RecipientId 和 ContactId 属性。

他们注册后,您可以通过编程方式注册目标或将他们发送到可以注册目标的感谢页面(高级 - 跟踪),或发送消息并让其注册目标。或者为流程的每个步骤创建一个包含状态的参与计划(这是最好的方法)。

您还需要将收件人添加到新闻稿消息稍后可以使用的列表中。实际上,在我看来,示例订阅表单可以满足您的所有需求。