Add interactions
Use the client.AddInteraction()
extension method to add a new interaction to a new or existing contact. Interactions must have at least one event, which can be a core collection model event or a custom event. Interactions have the following mandatory properties that must be passed in as constructor parameters:
-
The contact that the interaction belongs to
-
The initiator of the interaction, such as the user or the brand
-
The user agent of the application or service that is creating the interaction - such as ‘Chrome’
-
The ID of the channel that resulted in the interaction, such as a YouTube ad or affiliate referral
New interactions are not available in the contact’s Interactions
collection after the interaction has been submitted to xConnect. To see new interactions, you must request the contact again and use expand options to retrieve the contact’s interactions.
Add an interaction to a new contact
The following example demonstrates how to add a new interaction to a new contact. The interaction has a single PageViewEvent
.
If xConnect fails to create a new contact, the operation to add a new interaction will also fail.
using Sitecore.XConnect.Collection.Model;
using Sitecore.XConnect;
using Sitecore.XConnect.Operations;
using System;
using Sitecore.XConnect.Client;
namespace Documentation
{
public class AddInteraction
{
// Async example
public async void ExampleAsync()
{
using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
{
try
{
// New anonymous contact
var newContact = new Sitecore.XConnect.Contact();
client.AddContact(newContact);
Guid channelId = Guid.Parse("86c7467a-d019-460d-9fa9-85d6d5d77fc4"); // Replace with real channel ID GUID
string userAgent = "Sample User Agent";
// Interaction
var interaction = new Interaction(newContact, InteractionInitiator.Brand, channelId, userAgent);
var fakeItemID = Guid.Parse("5746c4f3-7e16-40d9-ba1d-14c70875724c"); // Replace with real item ID
Sitecore.XConnect.Collection.Model.PageViewEvent pageView = new PageViewEvent(DateTime.UtcNow, fakeItemID, 3, "en")
{
Duration = new TimeSpan(0, 0, 30),
Url = "/test/url/test/url?query=testing"
};
interaction.Events.Add(pageView);
client.AddInteraction(interaction);
await client.SubmitAsync();
}
catch (XdbExecutionException ex)
{
// Handle exception
}
}
}
// Sync example
public void ExampleSync()
{
using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
{
try
{
// New anonymous contact
var newContact = new Sitecore.XConnect.Contact();
client.AddContact(newContact);
Guid channelId = Guid.Parse("86c7467a-d019-460d-9fa9-85d6d5d77fc4"); // Replace with real channel ID GUID
string userAgent = "Sample User Agent";
// Interaction
var interaction = new Interaction(newContact, InteractionInitiator.Brand, channelId, userAgent);
var fakeItemID = Guid.Parse("5746c4f3-7e16-40d9-ba1d-14c70875724c"); // Replace with real item ID
Sitecore.XConnect.Collection.Model.PageViewEvent pageView = new PageViewEvent(DateTime.UtcNow, fakeItemID, 3, "en")
{
Duration = new TimeSpan(0, 0, 30),
Url = "/test/url/test/url?query=testing"
};
interaction.Events.Add(pageView);
client.AddInteraction(interaction);
client.Submit();
}
catch (XdbExecutionException ex)
{
// Handle exception
}
}
}
}
}
Add interaction to an existing contact
In the following example, the interaction is being added to an existing contact:
using Sitecore.XConnect;
using Sitecore.XConnect.Client;
using Sitecore.XConnect.Collection.Model;
using Sitecore.XConnect.Operations;
using System;
namespace Documentation
{
public class AddInteractionExistingContact
{
public async void ExampleAsync()
{
using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
{
try
{
var existingContactTask = client.GetAsync<Sitecore.XConnect.Contact>(new Sitecore.XConnect.IdentifiedContactReference("twitter", "myrtlesitecore"), new Sitecore.XConnect.ContactExpandOptions());
var existingContact = await existingContactTask;
if (existingContact != null)
{
Guid channelId = Guid.Parse("86c7467a-d019-460d-9fa9-85d6d5d77fc4"); // Replace with real channel ID GUID
string userAgent = "Sample User Agent";
// Interaction
var interaction = new Interaction(existingContact, InteractionInitiator.Brand, channelId, userAgent);
var fakeItemID = Guid.Parse("5746c4f3-7e16-40d9-ba1d-14c70875724c"); // Replace with real item ID
Sitecore.XConnect.Collection.Model.PageViewEvent pageView = new PageViewEvent(DateTime.UtcNow, fakeItemID, 3, "en")
{
Duration = new TimeSpan(0, 0, 30),
Url = "/test/url/test/url?query=testing"
};
interaction.Events.Add(pageView);
client.AddInteraction(interaction);
await client.SubmitAsync();
}
}
catch (XdbExecutionException ex)
{
// Handle exception
}
}
}
// Sync example
public void ExampleSync()
{
using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
{
try
{
var existingContact = client.Get<Sitecore.XConnect.Contact>(new Sitecore.XConnect.IdentifiedContactReference("twitter", "myrtlesitecore"), new Sitecore.XConnect.ContactExpandOptions());
if (existingContact != null)
{
Guid channelId = Guid.Parse("86c7467a-d019-460d-9fa9-85d6d5d77fc4"); // Replace with real channel ID GUID
string userAgent = "Sample User Agent";
// Interaction
var interaction = new Interaction(existingContact, InteractionInitiator.Brand, channelId, userAgent);
var fakeItemID = Guid.Parse("5746c4f3-7e16-40d9-ba1d-14c70875724c"); // Replace with real item ID
Sitecore.XConnect.Collection.Model.PageViewEvent pageView = new PageViewEvent(DateTime.UtcNow, fakeItemID, 3, "en")
{
Duration = new TimeSpan(0, 0, 30),
Url = "/test/url/test/url?query=testing"
};
interaction.Events.Add(pageView);
client.AddInteraction(interaction);
client.Submit();
}
}
catch (XdbExecutionException ex)
{
// Handle exception
}
}
}
}
}