diff --git a/src/activities/Elsa.Activities.Telnyx/Activities/CallRingGroup.cs b/src/activities/Elsa.Activities.Telnyx/Activities/CallRingGroup.cs index addc58700..3a6c07e27 100644 --- a/src/activities/Elsa.Activities.Telnyx/Activities/CallRingGroup.cs +++ b/src/activities/Elsa.Activities.Telnyx/Activities/CallRingGroup.cs @@ -87,15 +87,21 @@ namespace Elsa.Activities.Telnyx.Activities set => SetState(value); } + private IList DialedControlIds + { + get => GetState(() => new List()); + set => SetState(value); + } + private CallAnsweredPayload? CallAnsweredPayload { get => GetState(); set => SetState(value); } - private IList CollectedCallControlIds + private IList CollectedDialResponses { - get => GetState(() => new List()); + get => GetState(() => new List()); set => SetState(value); } @@ -114,14 +120,14 @@ namespace Elsa.Activities.Telnyx.Activities answeredCallControlId = callAnsweredPayload.CallControlId; // Hang up any pending calls. - var outgoingCalls = CollectedCallControlIds.Where(x => x != answeredCallControlId).ToList(); + var outgoingCalls = CollectedDialResponses.Where(x => x.CallControlId != answeredCallControlId).ToList(); var client = context.GetService(); foreach (var outgoingCall in outgoingCalls) { try { - await client.Calls.HangupCallAsync(outgoingCall, new HangupCallRequest(null, null), context.CancellationToken); + await client.Calls.HangupCallAsync(outgoingCall.CallControlId, new HangupCallRequest(null, null), context.CancellationToken); } catch (ApiException e) { @@ -170,7 +176,12 @@ namespace Elsa.Activities.Telnyx.Activities .ThenTypeNamed(CallAnsweredPayload.ActivityTypeName) .Then(context => CallAnsweredPayload = (CallAnsweredPayload) context.GetInput()!.Data.Payload) .Then(bridge => bridge - .WithCallControlIdA(() => DialedControlId) + .WithCallControlIdA(() => + { + var answeredPayload = CallAnsweredPayload!; + var dialedResponse = CollectedDialResponses.First(x => x.CallLegId == answeredPayload.CallLegId); + return dialedResponse.CallControlId; + }) .WithCallControlIdB(() => CallAnsweredPayload!.CallControlId)) .Then(finish => finish.WithOutcome("Connected").WithOutput(() => CallAnsweredPayload)); @@ -191,17 +202,15 @@ namespace Elsa.Activities.Telnyx.Activities .WithFromDisplayName(() => FromDisplayName) .WithClientState(context => new ClientStatePayload(context.CorrelationId!).ToBase64()) ) - // TODO: Store list of dial results so we can pick correct one from Call Answered Payload webhook. - //.Then(context => DialedControlId = context.GetInput()!.CallControlId) .Then(CollectCallControlIds)); }); private void CollectCallControlIds(ActivityExecutionContext context) { - var collection = CollectedCallControlIds; - var callControlId = context.GetInput()!.CallControlId; - collection.Add(callControlId); - CollectedCallControlIds = collection; + var collection = CollectedDialResponses; + var dialResponse = context.GetInput()!; + collection.Add(dialResponse); + CollectedDialResponses = collection; } object IActivityPropertyDefaultValueProvider.GetDefaultValue(PropertyInfo property) => Duration.FromSeconds(20); diff --git a/src/activities/Elsa.Activities.Telnyx/Activities/GatherUsingAudio.cs b/src/activities/Elsa.Activities.Telnyx/Activities/GatherUsingAudio.cs index d6c4ed7ee..eed0f4947 100644 --- a/src/activities/Elsa.Activities.Telnyx/Activities/GatherUsingAudio.cs +++ b/src/activities/Elsa.Activities.Telnyx/Activities/GatherUsingAudio.cs @@ -1,6 +1,4 @@ using System; -using System.Linq; -using System.Net.Http; using System.Threading.Tasks; using Elsa.Activities.Telnyx.Client.Models; using Elsa.Activities.Telnyx.Client.Services;