2026-08-12 14:04:55 +03:00
|
|
|
using System.Threading;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using RudderSdk.Core.Models.Scenarios;
|
|
|
|
|
|
|
|
|
|
namespace RudderSdk.Core;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2026-09-04 14:03:41 +03:00
|
|
|
/// Scenario trigger. Execution lives on the server; resulting effects surface
|
|
|
|
|
/// through <see cref="RudderClient.Effects"/>.
|
2026-08-12 14:04:55 +03:00
|
|
|
/// </summary>
|
2026-09-04 14:03:41 +03:00
|
|
|
public sealed class ScenarioService
|
2026-08-12 14:04:55 +03:00
|
|
|
{
|
|
|
|
|
private readonly RudderClient _client;
|
|
|
|
|
|
|
|
|
|
internal ScenarioService(RudderClient client) => _client = client;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2026-09-04 14:03:41 +03:00
|
|
|
/// Triggers scenarios by event name. Returned pending effects are ingested
|
|
|
|
|
/// into <see cref="RudderClient.Effects"/>.
|
2026-08-12 14:04:55 +03:00
|
|
|
/// </summary>
|
2026-09-04 14:03:41 +03:00
|
|
|
public async Task TriggerAsync(string eventName, CancellationToken cancellationToken = default)
|
2026-08-12 14:04:55 +03:00
|
|
|
{
|
|
|
|
|
var response = await _client.SendAsync<TriggerScenarioRequest, TriggerScenarioResponse>(
|
|
|
|
|
"POST",
|
|
|
|
|
"/sdk/v1/scenarios/trigger",
|
|
|
|
|
new TriggerScenarioRequest { Event = eventName },
|
|
|
|
|
cancellationToken).ConfigureAwait(false);
|
|
|
|
|
|
2026-09-04 14:03:41 +03:00
|
|
|
_client.Effects.Ingest(response?.Effects);
|
2026-08-12 14:04:55 +03:00
|
|
|
}
|
|
|
|
|
}
|