---
title: "ウォークスルー:連絡先と交流の作成"
slug: "walkthrough--creating-a-contact-and-an-interaction"
abstract: "Sitecore xConnectで連絡先とやり取りを作成する方法。"
---
# ウォークスルー:連絡先と交流の作成

このウォークスルーは「 [xConnectコレクションモデルの拡張」シリーズ](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/extending-the-xconnect-collection-model-walkthrough-series.html "Extending the xConnect collection model walkthrough series") の第1部であり、連絡先とインタラクションの作成方法を説明しています。

このウォークスルーを完了する前に、xConnectやxDBを含むSitecore Experience Platformのフルインストールが必要です。

このウォークスルーでは、以下の方法を説明します:

-   Sitecore.Documentationソリューションとコンソールアプリを作成する
-   Sitecore.DocumentationアプリとXConnectインスタンス間の連絡を確立してください
-   既知の識別子を持つ連絡先を作成する
-   単一のイベントでインタラクションを作成する

> !注Sitecore 9.1.0のSitecore.Xdb.Common.Web名前空間では:
> 
> -   Certificate\*\*WebRequest\*\*HandlerModifierOptionsCertificate\*\*HttpClient\*\*HandlerModifierOptionsになった。
>     
> -   Certificate\*\*WebRequest\*\*HandlerModifierCertificate\*\*HttpClient\*\*HandlerModifierになった。
>     

## Sitecoreを作成しましょう。ドキュメントソリューションとコンソールアプリ

Sitecore.Documentationソリューションとコンソールアプリを作成するには:

1.  管理者権限をVisual Studioして、.NETフレームワークプロジェクト用の新しいソリューションおよびコンソールアプリを作成し、Sitecore.Documentation:
    
    ![The Configure your new project dialogue box in Visual Studio.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/93/sitecore-experience-platform/images/xconn-tut1-new-proj.png)
    
2.  Solution Explorerで **「References** 」を右クリックし、「 **Add Reference**」をクリックします。
    
3.  **参照管理者**のウィンドウで「**Browse**」をクリックして、<xConnect instance>\\bin\\フォルダから以下の参照を追加してください:
    
    -   Sitecore.Framework.Conditions.dll
    -   Sitecore.XConnect.Core
    -   Sitecore.XConnect.dll
    -   Sitecore.XConnect.Client.dll
    -   Sitecore.XConnect.Collection.Model.dll
    -   Sitecore.XConnect.Search.dll
    -   Sitecore.Xdb.Common.Web.dll
4.  Solution Explorerで **「References** 」を右クリックし、「 **Manage NuGet Packages**」をクリックします。
    
5.  **NuGet**ウィンドウで「**ブラウズ**」をクリックし、以下の参照を追加してください:
    
    -   Microsoft.AspNet.WebApi.Client - バージョン:5.2.6
    -   Microsoft.Extensions.Configuration.Abstractions - バージョン:2.1.1
    -   System.Interactive.Async.Providers バージョン:3.1.1
    -   Newtonsoft.Json \- バージョン:11.0.2

## Sitecoreと連絡を取る。ドキュメントアプリとXConnectインスタンス

Sitecore.DocumentationアプリとxConnectインスタンス間の連絡を確立するには:

1.  Solution Explorerでは、Program.csファイルをダブルクリックして、以下のコードに内容を置き換えます。
    
    using Sitecore.XConnect;
    using Sitecore.XConnect.Client;
    using Sitecore.XConnect.Client.WebApi;
    using Sitecore.XConnect.Collection.Model;
    using Sitecore.XConnect.Schema;
    using Sitecore.Xdb.Common.Web;
    using System;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    
    namespace Sitecore.Documentation
    {
     public class Program
     {
     // From <xConnect instance>\\App\_Config\\AppSettings.config
     const string CERTIFICATE\_OPTIONS =
     "StoreName=My;StoreLocation=LocalMachine;FindType=FindByThumbprint;FindValue=???";
    
     // From your installation
     const string XCONNECT\_URL = "https://???XConnect.local";
    
     private static void Main(string args)
     {
     MainAsync(args).ConfigureAwait(false).GetAwaiter().GetResult();
     System.Console.ForegroundColor = ConsoleColor.DarkGreen;
     System.Console.WriteLine("");
     Console.WriteLine("END OF PROGRAM.");
     Console.ReadKey();
     }
    
     private static async Task MainAsync(string args)
     {
     CertificateHttpClientHandlerModifierOptions options = CertificateHttpClientHandlerModifierOptions.Parse(CERTIFICATE\_OPTIONS);
    
     var certificateModifier = new CertificateHttpClientHandlerModifier(options);
    
     List<IHttpClientModifier> clientModifiers = new List<IHttpClientModifier>();
     var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20));
     clientModifiers.Add(timeoutClientModifier);
    
     var collectionClient = new CollectionWebApiClient(
     new Uri(XCONNECT\_URL + "/odata"),
     clientModifiers,
     new { certificateModifier }
     );
    
     var searchClient = new SearchWebApiClient(
     new Uri(XCONNECT\_URL + "/odata"),
     clientModifiers,
     new { certificateModifier }
     );
    
     var configurationClient = new ConfigurationWebApiClient(
     new Uri(XCONNECT\_URL + "/configuration"),
     clientModifiers,
     new { certificateModifier }
     );
    
     var cfg = new XConnectClientConfiguration(
     new XdbRuntimeModel(CollectionModel.Model),
     collectionClient,
     searchClient,
     configurationClient
     );
    
     try
     {
     await cfg.InitializeAsync();
    
     // Print xConnect if configuration is valid
     var arr = new
     {
     @" \_\_\_\_\_\_ \_\_ ",
     @" / \\ | \\ ",
     @" \_\_ \_\_ | $$$$$$\\ \_\_\_\_\_\_ \_\_\_\_\_\_\_ \_\_\_\_\_\_\_ \_\_\_\_\_\_ \_\_\_\_\_\_\_ \_| $$\_ ",
     @"| \\ / \\| $$ \\$$ / \\ | \\ | \\ / \\ / \\| $$ \\ ",
     @"\\$$\\/ $$| $$ | $$$$$$\\| $$$$$$$\\| $$$$$$$\\| $$$$$$\\| $$$$$$$ \\$$$$$$ ",
     @" >$$ $$ | $$ \_\_ | $$ | $$| $$ | $$| $$ | $$| $$ $$| $$ | $$ \_\_ ",
     @" / $$$$\\ | $$\_\_/ \\| $$\_\_/ $$| $$ | $$| $$ | $$| $$$$$$$$| $$\_\_\_\_\_ | $$| \\",
     @"| $$ \\$$\\ \\$$ $$ \\$$ $$| $$ | $$| $$ | $$ \\$$ \\ \\$$ \\ \\$$ $$",
     @" \\$$ \\$$ \\$$$$$$ \\$$$$$$ \\$$ \\$$ \\$$ \\$$ \\$$$$$$$ \\$$$$$$$ \\$$$$ "
     };
     Console.WindowWidth = 160;
     foreach (string line in arr)
     Console.WriteLine(line);
    
     }
     catch (XdbModelConflictException ce)
     {
     Console.WriteLine("ERROR:" + ce.Message);
     return;
     }
    
     // Initialize a client using the validated configuration
     using (var client = new XConnectClient(cfg))
     {
     try
     {
     // This is where we add content in later code samples
     }
     catch (XdbExecutionException ex)
     {
     // Deal with exception
     }
     }
     }
     }
    }
    
2.  CERTIFICATE\_THUMBPRINTとXCONNECT\_URL定数を編集してください。
    
3.  Program.csファイルを保存してください。
    
4.  **F5**を押してアプリを起動します。接続が確立されると、アプリはターミナルにEND OF PROGRAMを書き込みます:
    
    ![A terminal with END OF PROGRAM in the app output.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/93/sitecore-experience-platform/images/xconn-tut1-code1.png)
    

## 既知の識別子を持つ連絡先を作成する

既知の識別子を持つ連絡先を作成するには:

1.  Visual Studio、Solution ExplorerではProgram.csファイルをダブルクリックし、内容を以下のコードに置き換えてください。
    
    using Sitecore.XConnect;
    using Sitecore.XConnect.Client;
    using Sitecore.XConnect.Client.WebApi;
    using Sitecore.XConnect.Collection.Model;
    using Sitecore.XConnect.Schema;
    using Sitecore.Xdb.Common.Web;
    using System;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    
    namespace Sitecore.Documentation
    {
     public class Program
     {
     // From <xConnect instance>\\App\_Config\\AppSettings.config
     const string CERTIFICATE\_OPTIONS =
     "StoreName=My;StoreLocation=LocalMachine;FindType=FindByThumbprint;FindValue=???";
    
     // From your installation
     const string XCONNECT\_URL = "https://???XConnect.local";
    
     private static void Main(string args)
     {
     MainAsync(args).ConfigureAwait(false).GetAwaiter().GetResult();
     System.Console.ForegroundColor = ConsoleColor.DarkGreen;
     System.Console.WriteLine("");
     Console.WriteLine("END OF PROGRAM.");
     Console.ReadKey();
     }
    
     private static async Task MainAsync(string args)
     {
     CertificateHttpClientHandlerModifierOptions options = CertificateHttpClientHandlerModifierOptions.Parse(CERTIFICATE\_OPTIONS);
    
     var certificateModifier = new CertificateHttpClientHandlerModifier(options);
    
     List<IHttpClientModifier> clientModifiers = new List<IHttpClientModifier>();
     var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20));
     clientModifiers.Add(timeoutClientModifier);
    
     var collectionClient = new CollectionWebApiClient(
     new Uri(XCONNECT\_URL + "/odata"),
     clientModifiers,
     new { certificateModifier }
     );
    
     var searchClient = new SearchWebApiClient(
     new Uri(XCONNECT\_URL + "/odata"),
     clientModifiers,
     new { certificateModifier }
     );
    
     var configurationClient = new ConfigurationWebApiClient(
     new Uri(XCONNECT\_URL + "/configuration"),
     clientModifiers,
     new { certificateModifier }
     );
    
     var cfg = new XConnectClientConfiguration(
     new XdbRuntimeModel(CollectionModel.Model),
     collectionClient,
     searchClient,
     configurationClient
     );
    
     try
     {
     await cfg.InitializeAsync();
    
     // Print xConnect if configuration is valid
     var arr = new
     {
     @" \_\_\_\_\_\_ \_\_ ",
     @" / \\ | \\ ",
     @" \_\_ \_\_ | $$$$$$\\ \_\_\_\_\_\_ \_\_\_\_\_\_\_ \_\_\_\_\_\_\_ \_\_\_\_\_\_ \_\_\_\_\_\_\_ \_| $$\_ ",
     @"| \\ / \\| $$ \\$$ / \\ | \\ | \\ / \\ / \\| $$ \\ ",
     @"\\$$\\/ $$| $$ | $$$$$$\\| $$$$$$$\\| $$$$$$$\\| $$$$$$\\| $$$$$$$ \\$$$$$$ ",
     @" >$$ $$ | $$ \_\_ | $$ | $$| $$ | $$| $$ | $$| $$ $$| $$ | $$ \_\_ ",
     @" / $$$$\\ | $$\_\_/ \\| $$\_\_/ $$| $$ | $$| $$ | $$| $$$$$$$$| $$\_\_\_\_\_ | $$| \\",
     @"| $$ \\$$\\ \\$$ $$ \\$$ $$| $$ | $$| $$ | $$ \\$$ \\ \\$$ \\ \\$$ $$",
     @" \\$$ \\$$ \\$$$$$$ \\$$$$$$ \\$$ \\$$ \\$$ \\$$ \\$$$$$$$ \\$$$$$$$ \\$$$$ "
     };
     Console.WindowWidth = 160;
     foreach (string line in arr)
     Console.WriteLine(line);
    
     }
     catch (XdbModelConflictException ce)
     {
     Console.WriteLine("ERROR:" + ce.Message);
     return;
     }
    
     // Initialize a client using the validated configuration
     using (var client = new XConnectClient(cfg))
     {
     try
     {
     // Identifier for a 'known' contact
     var identifier = new ContactIdentifier
     {
     new ContactIdentifier(
     "twitter",
     "myrtlesitecore" + Guid.NewGuid().ToString("N"),
     ContactIdentifierType.Known
     )
     };
    
     // Print out the identifier that is going to be used
     Console.WriteLine("Contact Identifier: " + identifier0.Identifier);
    
     // Create a new contact with the identifier
     Contact knownContact = new Contact(identifier);
    
     client.AddContact(knownContact);
    
     // Submit contact and interaction - a total of two operations
     await client.SubmitAsync();
    
     // Get the last batch that was executed
     var operations = client.LastBatch;
    
     // Loop through operations and check status
     foreach (var operation in operations)
     {
     Console.WriteLine(
     operation.OperationType
     + operation.Target.GetType().ToString()
     + " Operation: "
     + operation.Status
     );
     }
    
     Console.ReadLine();
     }
     catch (XdbExecutionException ex)
     {
     // Deal with exception
     }
     }
     }
     }
    }
    
2.  CERTIFICATE\_THUMBPRINTとXCONNECT\_URL定数を編集してください。
    
3.  Program.csファイルを保存してください。
    
4.  **F5**を押してアプリを起動します。接続が確立されると、アプリはターミナルに次のように書き込みます:
    
    -   連絡先識別子。
    -   連絡先が追加されたということです。
    
    ![A terminal with the contact details in the app output.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/93/sitecore-experience-platform/images/xconn-tut1-code2.png)
    

## 単一のイベントでインタラクションを作成する

次のステップは、目標のような単一のイベントとの相互作用を作成することです。

> !警告このコードサンプルはデータベースを汚染します。理由は以下の通りです:
> 
> -   すべてのやり取りにはチャネルGUIDが必要です。これらはSitecoreで定義しますが、xConnectはランダムなチャネルGUIDを渡すことができます。
>     
> -   すべてのイベントはイベントGUIDを必要とします。これらはSitecoreで定義しますが、xConnectはランダムなイベントGUIDを渡すことができます。
>     
> 
> データベースをクリーンに保ちたい場合は、ここで作成されたインタラクションとイベントを手動で削除する必要があります。

例えば、単一のイベントとの相互作用を作成するには、目標を設けます:

1.  Visual Studio、Solution ExplorerではProgram.csファイルをダブルクリックし、内容を以下のコードに置き換えてください。
    
    using Sitecore.XConnect;
    using Sitecore.XConnect.Client;
    using Sitecore.XConnect.Client.WebApi;
    using Sitecore.XConnect.Collection.Model;
    using Sitecore.XConnect.Schema;
    using Sitecore.Xdb.Common.Web;
    using System;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    
    namespace Sitecore.Documentation
    {
     public class Program
     {
     // From <xConnect instance>\\App\_Config\\AppSettings.config
     const string CERTIFICATE\_OPTIONS =
     "StoreName=My;StoreLocation=LocalMachine;FindType=FindByThumbprint;FindValue=???";
    
     // From your installation
     const string XCONNECT\_URL = "https://???XConnect.local";
    
     private static void Main(string args)
     {
     MainAsync(args).ConfigureAwait(false).GetAwaiter().GetResult();
     System.Console.ForegroundColor = ConsoleColor.DarkGreen;
     System.Console.WriteLine("");
     Console.WriteLine("END OF PROGRAM.");
     Console.ReadKey();
     }
    
     private static async Task MainAsync(string args)
     {
     CertificateHttpClientHandlerModifierOptions options = CertificateHttpClientHandlerModifierOptions.Parse(CERTIFICATE\_OPTIONS);
    
     var certificateModifier = new CertificateHttpClientHandlerModifier(options);
    
     List<IHttpClientModifier> clientModifiers = new List<IHttpClientModifier>();
     var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20));
     clientModifiers.Add(timeoutClientModifier);
    
     var collectionClient = new CollectionWebApiClient(
     new Uri(XCONNECT\_URL + "/odata"),
     clientModifiers,
     new { certificateModifier }
     );
    
     var searchClient = new SearchWebApiClient(
     new Uri(XCONNECT\_URL + "/odata"),
     clientModifiers,
     new { certificateModifier }
     );
    
     var configurationClient = new ConfigurationWebApiClient(
     new Uri(XCONNECT\_URL + "/configuration"),
     clientModifiers,
     new { certificateModifier }
     );
    
     var cfg = new XConnectClientConfiguration(
     new XdbRuntimeModel(CollectionModel.Model),
     collectionClient,
     searchClient,
     configurationClient
     );
    
     try
     {
     await cfg.InitializeAsync();
    
     // Print xConnect if configuration is valid
     var arr = new
     {
     @" \_\_\_\_\_\_ \_\_ ",
     @" / \\ | \\ ",
     @" \_\_ \_\_ | $$$$$$\\ \_\_\_\_\_\_ \_\_\_\_\_\_\_ \_\_\_\_\_\_\_ \_\_\_\_\_\_ \_\_\_\_\_\_\_ \_| $$\_ ",
     @"| \\ / \\| $$ \\$$ / \\ | \\ | \\ / \\ / \\| $$ \\ ",
     @"\\$$\\/ $$| $$ | $$$$$$\\| $$$$$$$\\| $$$$$$$\\| $$$$$$\\| $$$$$$$ \\$$$$$$ ",
     @" >$$ $$ | $$ \_\_ | $$ | $$| $$ | $$| $$ | $$| $$ $$| $$ | $$ \_\_ ",
     @" / $$$$\\ | $$\_\_/ \\| $$\_\_/ $$| $$ | $$| $$ | $$| $$$$$$$$| $$\_\_\_\_\_ | $$| \\",
     @"| $$ \\$$\\ \\$$ $$ \\$$ $$| $$ | $$| $$ | $$ \\$$ \\ \\$$ \\ \\$$ $$",
     @" \\$$ \\$$ \\$$$$$$ \\$$$$$$ \\$$ \\$$ \\$$ \\$$ \\$$$$$$$ \\$$$$$$$ \\$$$$ "
     };
     Console.WindowWidth = 160;
     foreach (string line in arr)
     Console.WriteLine(line);
    
     }
     catch (XdbModelConflictException ce)
     {
     Console.WriteLine("ERROR:" + ce.Message);
     return;
     }
    
     // Initialize a client using the validated configuration
     using (var client = new XConnectClient(cfg))
     {
     try
     {
     var offlineGoal = Guid.Parse("ad8ab7fe-ab48-4ea9-a976-ae7a268ae2f0"); // "Watched demo" goal
     var channelId = Guid.Parse("110cbf07-6b1a-4743-a398-6749acfcd7aa"); // "Other event" channel
    
     // Identifier for a 'known' contact
     var identifier = new ContactIdentifier
     {
     new ContactIdentifier(
     "twitter",
     "myrtlesitecore" + Guid.NewGuid().ToString("N"),
     ContactIdentifierType.Known
     )
     };
    
     // Print out the identifier that is going to be used
     Console.WriteLine("Identifier: " + identifier0.Identifier);
    
     // Create a new contact with the identifier
     Contact knownContact = new Contact(identifier);
    
     client.AddContact(knownContact);
    
     // Create a new interaction for that contact
     Interaction interaction = new Interaction(knownContact, InteractionInitiator.Brand, channelId, "");
    
     // Add events - all interactions must have at least one event
     var xConnectEvent = new Goal(offlineGoal, DateTime.UtcNow);
     interaction.Events.Add(xConnectEvent);
    
     // Add the contact and interaction
     client.AddInteraction(interaction);
    
     // Submit contact and interaction - a total of two operations
     await client.SubmitAsync();
    
     // Get the last batch that was executed
     var operations = client.LastBatch;
    
     // Loop through operations and check status
     foreach (var operation in operations)
     {
     Console.WriteLine(
     operation.OperationType
     + operation.Target.GetType().ToString()
     + " Operation: "
     + operation.Status
     );
     }
    
     Console.ReadLine();
     }
     catch (XdbExecutionException ex)
     {
     // Deal with exception
     }
    
     }
     }
     }
    }
    
2.  CERTIFICATE\_THUMBPRINTとXCONNECT\_URL定数を編集してください。
    
3.  Program.csファイルを保存してください。
    
4.  **F5**を押してアプリを起動します。接続が確立されると、アプリはターミナルに次のように書き込みます:
    
    -   連絡先識別子。
    -   連絡先が追加されたということです。
    -   イベントとのインタラクションが追加されたのです。
    
    ![A terminal with the contact and interaction event details in the app output.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/93/sitecore-experience-platform/images/xconn-tut1-code3.png)
    

次のウォークスルーで [、接触やインタラクションの要素の設定](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/walkthrough--setting-contact-and-interaction-facets.html "Walkthrough: Setting contact and interaction facets")方法を学びましょう。