Set interaction facets

Use the client.SetFacet() extension method to set interaction facets. You cannot update an interaction’s facets. The following example demonstrates how to set the LocaleInfo facet on a new interaction:

using Sitecore.XConnect.Collection.Model;
using Sitecore.XConnect;
using System;
using System.Collections.ObjectModel;
using Sitecore.XConnect.Client;

namespace Documentation
{
    public class AddInteractionFacetData
    {
        // Async Example
        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 IdentifiedContactReference("twitter", "myrtlesitecore"), new Sitecore.XConnect.ContactExpandOptions());

                        var existingContact = await existingContactTask;

                        if (existingContact != null)
                        {
                            var channelId = Guid.Parse("5746c4f3-7e16-40d9-ba1d-14c70875724c");  // Replace with real channel ID
                            var userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1";

                            Interaction interaction = new Interaction(existingContact, InteractionInitiator.Brand, channelId, userAgent);
                            LocaleInfo localeInfo = new LocaleInfo() { GeoCoordinate = new GeoCoordinate(55.676097, 12.568337) };

                            client.SetFacet<LocaleInfo>(interaction, LocaleInfo.DefaultFacetKey, localeInfo);

                            client.AddInteraction(interaction);

                            await client.SubmitAsync();
                        }
                    }
                    catch (XdbExecutionException ex)
                    {
                        // Handle exception
                    }
                }
            }
        }

        // Sync example
        public async void ExampleSync()
        {
            using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
            {
                {
                    try
                    {
                        var existingContact = client.Get<Contact>(new IdentifiedContactReference("twitter", "myrtlesitecore"), new Sitecore.XConnect.ContactExpandOptions());

                        if (existingContact != null)
                        {
                            var channelId = Guid.Parse("5746c4f3-7e16-40d9-ba1d-14c70875724c");  // Replace with real channel ID
                            var userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1";

                            Interaction interaction = new Interaction(existingContact, InteractionInitiator.Brand, channelId, userAgent);
                            LocaleInfo localeInfo = new LocaleInfo() { GeoCoordinate = new GeoCoordinate(55.676097, 12.568337) };

                            client.SetFacet<LocaleInfo>(interaction, LocaleInfo.DefaultFacetKey, localeInfo);

                            client.AddInteraction(interaction);

                            client.Submit();
                        }
                    }
                    catch (XdbExecutionException ex)
                    {
                        // Handle exception
                    }
                }
            }
        }
    }
}