---
title: "マーケティングオートメーション運用API"
slug: "marketing-automation-operations-api"
abstract: "マーケティング自動化運用(Marketing Automation Operations)APIを使って、連絡先の登録、イベント登録、プランへのシードなど特定の操作を実行する方法。"
---
# マーケティングオートメーション運用API

マーケティングオートメーションオペレーションAPIは、マーケティングオートメーションエンジンの外部から特定の操作を実行することを可能にします。

## 自動化運用APIへのアクセス

サービスロケーターを使ってSitecoreコンテキストでIAutomationOperationsClientにアクセスしてください:

using Sitecore.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using System;
using Sitecore.Xdb.MarketingAutomation.OperationsClient;
using Sitecore.Xdb.MarketingAutomation.Core.Requests;
using Sitecore.Xdb.MarketingAutomation.Core.Results;
using System.Collections.Generic;

namespace Documentation
{
 public class EnrollContact
 {
 public async void Example()
 {
 try
 {
 var operationsClient = ServiceLocator.ServiceProvider.GetService<IAutomationOperationsClient>();
 }
 }
 }
}

## 作戦結果

各操作はリクエストの集合を受け入れます。各操作呼び出しの結果はバッチ結果です。バッチ結果には、バッチ全体が成功したか、1つ以上のリクエストが失敗したかを示すプロパティが含まれています。また、各リクエストの個別の結果も保持しています:

BatchRequestResult
 Success : bool // Indicates whether the entire batch succeeded
 Results : IReadOnlyCollection<TRequestResult> // The results of the request

結果の種類は演算によって決まります。

各個別の操作結果には、最低でもその要求に対して実行された操作が成功したかどうかと元の要求を示すプロパティが含まれています。元の要求を提供することで、結果をクライアントからの要求と連携させることができます。

RequestResult
 Success : bool // Indicates whether the result is success
 Request : TRequest // The request the result is for

## 作戦優先順位

リクエストオブジェクトのPriorityプロパティは、リクエストをワークプールにログアップする操作の処理優先度を決定します。

> !注RegisterLiveEvent操作はプールをバイパスする唯一の操作です。この操作では優先度は無視されます。

## 運用

### プランに連絡を取り入れてください

提供された連絡先を直接プランに登録し、オプションでプラン内のアクティビティにも直接登録します。オペレーションクライアント上のすべての操作は非同期かつバッチリクエストであり、たとえ1つの一括りであっても可能です。

> !注リクエストにアクティビティが欠けている場合、その連絡先はプランのエントリーアクティビティに入力されます。

#### シングルプランへの連絡先登録

以下の例は、連絡先を単一のプランに登録する方法を示しています。

using Sitecore.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using System;
using Sitecore.Xdb.MarketingAutomation.OperationsClient;
using Sitecore.Xdb.MarketingAutomation.Core.Requests;
using Sitecore.Xdb.MarketingAutomation.Core.Results;

namespace Documentation
{
 public class EnrollContact
 {
 public async void Example()
 {
 try
 {
 var operationsClient = ServiceLocator.ServiceProvider.GetService<IAutomationOperationsClient>();

 var contactXconnectId = Guid.Parse("{E7B756A1-3769-46F1-AE17-7B3A198F9290}");
 var planId = Guid.Parse("{19FDD3A5-DBC2-4947-BEB4-69732ADEB0D8}");
 var request = new EnrollmentRequest(contactXconnectId, planId); // Contact ID, Plan ID

 request.Priority = 1; // Optional
 request.ActivityId = Guid.Parse("{C5B87651-EE70-4684-BDD9-0B464B79476D}"); // Optional
 request.CustomValues.Add("test", "test"); // Optional

 BatchEnrollmentRequestResult result = await operationsClient.EnrollInPlanDirectAsync(new
 {
 request
 });
 }
 catch (Exception ex)
 {

 }
 }
 }
}

#### 複数のプランに連絡先を登録すること

以下の例は、複数のプランに同時に連絡先を登録する方法を示しています。

using Sitecore.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using System;
using Sitecore.Xdb.MarketingAutomation.OperationsClient;
using Sitecore.Xdb.MarketingAutomation.Core.Requests;
using Sitecore.Xdb.MarketingAutomation.Core.Results;

namespace Documentation
{
 public class EnrollContact
 {
 public async void Example()
 {
 try
 {
 var operationsClient = ServiceLocator.ServiceProvider.GetService<IAutomationOperationsClient>();

 var contactXconnectId = Guid.Parse("{E7B756A1-3769-46F1-AE17-7B3A198F9290}");
 var planId = Guid.Parse("{19FDD3A5-DBC2-4947-BEB4-69732ADEB0D8}");
 var request = new EnrollmentRequest(contactXconnectId, planId); // Contact ID, Plan ID

 request.Priority = 1;
 request.ActivityId = Guid.Parse("{C5B87651-EE70-4684-BDD9-0B464B79476D}"); // Optional
 request.CustomValues.Add("test", "test");

 var plan2Id = Guid.Parse("{8F5BCFED-606D-46BF-A5CD-6801AC07DC3F}");
 var secondRequest = new EnrollmentRequest(contactXconnectId, plan2Id); // Contact ID, Plan ID

 secondRequest.Priority = 9;
 secondRequest.ActivityId = Guid.Parse("{3DB8A71A-37D6-4BC7-9F48-980B176A2C43}");
 secondRequest.CustomValues.Add("test", "test");

 BatchEnrollmentRequestResult result = await operationsClient.EnrollInPlanDirectAsync(new
 {
 request,
 secondRequest
 });
 }
 catch (Exception ex)
 {

 }
 }
 }
}

#### 入学申請結果

以下の例は、登録申請の全体結果を取得する方法と、各個別の登録申請に関する追加情報を取得する方法を示しています。

using Sitecore.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using System;
using Sitecore.Xdb.MarketingAutomation.OperationsClient;
using Sitecore.Xdb.MarketingAutomation.Core.Requests;
using Sitecore.Xdb.MarketingAutomation.Core.Results;
using System.Collections.Generic;

namespace Documentation
{
 public class EnrollContactResult
 {
 public async void Example()
 {
 try
 {
 var operationsClient = ServiceLocator.ServiceProvider.GetService<IAutomationOperationsClient>();

 BatchEnrollmentRequestResult result = await operationsClient.EnrollInPlanDirectAsync(new
 {
 new EnrollmentRequest(Guid.NewGuid(), Guid.NewGuid())
 });

 IReadOnlyCollection<EnrollmentRequestResult> batchResults = result.Results;
 bool batchSucceeded = result.Success;

 foreach (EnrollmentRequestResult requestResult in result.Results)
 {
 bool requestSucceeded = requestResult.Success;
 EnrollmentRequest originalRequest = requestResult.Request;
 }
 }
 catch (Exception ex)
 {
 // Handle exception
 }

 }
 }
}

### ライブイベントに登録

Operations APIは、イベントがxConnectに提出される前にマーケティングオートメーションエンジンにイベントを提出することを可能にします。この機能は、セッション終了前やイベントデータがxConnectに提出される前に、[トラッカー](https://doc.sitecore.com/xp/ja/developers/105/sitecore-experience-platform/web-tracking.html "Web tracking") がマーケティングオートメーションエンジンにイベントを送信するために使われます。

#### 単一のライブイベントに登録

以下の例は、単一のライブイベントを登録する方法を示しています:

using Sitecore.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using System;
using Sitecore.Xdb.MarketingAutomation.OperationsClient;
using Sitecore.Xdb.MarketingAutomation.Core.Requests;
using Sitecore.Xdb.MarketingAutomation.Core.Results;
using Sitecore.XConnect;
using Sitecore.Xdb.MarketingAutomation.Core.Collections;
using Sitecore.Xdb.MarketingAutomation.Core.Pool;
using Sitecore.XConnect.Collection.Model;

namespace Documentation
{
 public class LiveEvent
 {
 public async void Example()
 {
 try
 {
 var operationsClient = ServiceLocator.ServiceProvider.GetService<IAutomationOperationsClient>();

 // Sample contact and interaction
 var contact = new Contact();
 Guid channelId = Guid.Parse("{E99C8E17-3C9C-4B10-AC69-6B1BAFAE0711}");
 string userAgent = "Sample User Agent";
 var interaction = new Interaction(new ContactReference(contact.Id.Value), InteractionInitiator.Brand, channelId, userAgent);

 // Sample event
 interaction.Events.Add(new SearchEvent(DateTime.UtcNow) { Keywords = "sitecore" });

 // Automation custom values
 var customValues = new CustomValuesDictionary() { { "test", "test" } };

 var liveEvent = new LiveEventData(contact.Id.Value, interaction, customValues);
 var liveEventRequest = new LiveEventRequest(contact.Id.Value, liveEvent) { Priority = 200 };

 // Live event submitted BEFORE INTERACTION IS SUBMITTED
 // This means that the Automation Engine can respond to an event before it is available in xConnect
 BatchLiveEventRequestResult result = await operationsClient.RegisterLiveEventAsync(new
 {
 liveEventRequest
 });
 }
 catch (Exception ex)
 {
 // Handle exception
 }
 }
 }
}

#### ライブイベントリクエストの結果

BatchLiveEventRequestResultは、影響を受ける登録リストをUpdatedEnrollments物件を通じて提供しています。

var contact = new Contact();
Guid channelId = Guid.Parse("{E99C8E17-3C9C-4B10-AC69-6B1BAFAE0711}");
string userAgent = "Sample User Agent";
var interaction = new Interaction(new ContactReference(contact.Id.Value), InteractionInitiator.Brand, channelId, userAgent);
var customValues = new CustomValuesDictionary() { { "test", "tst" } };

var eventData = new EventData(contact, interaction, customValues);

var liveEventRequest = new LiveEventRequest(contact.Id.Value, eventData);

BatchLiveEventRequestResult result = await operationsClient.RegisterLiveEventAsync(new
{
 liveEventRequest
});

IReadOnlyCollection<LiveEventRequestResult> batchResults = result.Results;
bool batchSucceeded = result.Success;

foreach (LiveEventRequestResult requestResult in result.Results)
{
 bool requestSucceeded = requestResult.Success;
 LiveEventRequest originalRequest = requestResult.Request;

 // Get list of enrollments updated by event
 IEnumerable<ActivityEnrollment> enrollments = requestResult.UpdatedEnrollments;

 // Get first activity enrollment
 var firstEnrollment = enrollments.FirstOrDefault();

 // Activity enrollment properties
 var attemptsToEnroll = firstEnrollment.Attempts;
 var entryDate = firstEnrollment.EntryDate;
 var timeoutDate = firstEnrollment.TimeoutDate;
}

### 計画からの連絡を排除する

Operations APIを使って、特定のプランやすべてのプランから連絡先を削除することができます。

#### 特定のプランからの連絡を排除する

以下の例は、特定のプランから連絡先を消す方法を示しています:

using Sitecore.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using System;
using Sitecore.Xdb.MarketingAutomation.OperationsClient;
using Sitecore.Xdb.MarketingAutomation.Core.Requests;
using System.Collections.Generic;

namespace Documentation
{
 public class SinglePlanPurge
 {
 public async void Example()
 {
 try
 {
 var operationsClient = ServiceLocator.ServiceProvider.GetService<IAutomationOperationsClient>();

 var contactId = Guid.Parse("{B65CB77F-0338-49C1-B6AF-1360C9560A17}");
 var planId = Guid.Parse("{3F894AC4-926F-4B26-A001-BEAB955C40F8}");

 var purgeRequest = new List<PurgeFromPlanRequest> { new PurgeFromPlanRequest(contactId, planId) };

 var result = await operationsClient.PurgeFromPlanAsync(purgeRequest);
 }
 catch (Exception ex)
 {
 // Handle exception
 }
 }
 }
}

#### すべての計画から連絡を取り除け

以下の例は、すべてのプランから連絡先を消す方法を示しています:

> !警告現在プールにあるすべての作業項目も削除されます。

using Sitecore.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using System;
using Sitecore.Xdb.MarketingAutomation.OperationsClient;
using Sitecore.Xdb.MarketingAutomation.Core.Requests;
using System.Collections.Generic;

namespace Documentation
{
 public class AllPlanPurge
 {
 public async void Example()
 {
 try
 {
 var operationsClient = ServiceLocator.ServiceProvider.GetService<IAutomationOperationsClient>();

 var contactId = Guid.Parse("{B65CB77F-0338-49C1-B6AF-1360C9560A17}");
 var purgeRequest = new List<PurgeFromAllPlansRequest> { new PurgeFromAllPlansRequest(contactId) };

 var result = await operationsClient.PurgeFromAllPlansAsync(purgeRequest);
 }
 catch (Exception ex)
 {
 // Handle exception
 }
 }
 }
}