From fd2b5d1b016b2e515f8109e4545caad333ff8f25 Mon Sep 17 00:00:00 2001 From: "nick.yi" Date: Tue, 29 Apr 2025 11:28:56 +0800 Subject: [PATCH] optimize ITwilioCallStatusHook --- .../Controllers/TwilioVoiceController.cs | 42 +++++++++++++------ .../Interfaces/ITwilioCallStatusHook.cs | 17 ++++---- 2 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/Plugins/BotSharp.Plugin.Twilio/Controllers/TwilioVoiceController.cs b/src/Plugins/BotSharp.Plugin.Twilio/Controllers/TwilioVoiceController.cs index 0ff8b90c..b5bbb6bc 100644 --- a/src/Plugins/BotSharp.Plugin.Twilio/Controllers/TwilioVoiceController.cs +++ b/src/Plugins/BotSharp.Plugin.Twilio/Controllers/TwilioVoiceController.cs @@ -346,35 +346,53 @@ public class TwilioVoiceController : TwilioController if (twilio.MachineDetected(request)) { // voicemail - await HookEmitter.Emit(_services, - async hook => await hook.OnVoicemailLeft(request)); + await HookEmitter.Emit(_services, + async hook => + { + if (hook.IsMatch(request)) await hook.OnVoicemailLeft(request); + }); } else { // phone call completed - await HookEmitter.Emit(_services, - async x => await x.OnUserDisconnected(request)); + await HookEmitter.Emit(_services, + async hook => + { + if (hook.IsMatch(request)) await hook.OnUserDisconnected(request); + }); } } else if (request.CallStatus == "busy") { - await HookEmitter.Emit(_services, - async x => await x.OnCallBusyStatus(request)); + await HookEmitter.Emit(_services, + async hook => + { + if (hook.IsMatch(request)) await hook.OnCallBusyStatus(request); + }); } else if (request.CallStatus == "no-answer") { - await HookEmitter.Emit(_services, - async x => await x.OnCallNoAnswerStatus(request)); + await HookEmitter.Emit(_services, + async hook => + { + if (hook.IsMatch(request)) await hook.OnCallNoAnswerStatus(request); + }); } else if (request.CallStatus == "canceled") { - await HookEmitter.Emit(_services, - async x => await x.OnCallCanceledStatus(request)); + await HookEmitter.Emit(_services, + async hook => + { + if (hook.IsMatch(request)) await hook.OnCallCanceledStatus(request); + }); } else if (request.CallStatus == "failed") { - await HookEmitter.Emit(_services, - async x => await x.OnCallFailedStatus(request)); + await HookEmitter.Emit(_services, + async hook => + { + if (hook.IsMatch(request)) await hook.OnCallFailedStatus(request); + }); } return Ok(); diff --git a/src/Plugins/BotSharp.Plugin.Twilio/Interfaces/ITwilioCallStatusHook.cs b/src/Plugins/BotSharp.Plugin.Twilio/Interfaces/ITwilioCallStatusHook.cs index e04d3ae7..ae461595 100644 --- a/src/Plugins/BotSharp.Plugin.Twilio/Interfaces/ITwilioCallStatusHook.cs +++ b/src/Plugins/BotSharp.Plugin.Twilio/Interfaces/ITwilioCallStatusHook.cs @@ -5,10 +5,11 @@ namespace BotSharp.Plugin.Twilio.Interfaces; public interface ITwilioCallStatusHook { - Task OnVoicemailLeft(ConversationalVoiceRequest request); - Task OnUserDisconnected(ConversationalVoiceRequest request); - Task OnRecordingCompleted(ConversationalVoiceRequest request); - Task OnVoicemailStarting(ConversationalVoiceRequest request); + bool IsMatch(ConversationalVoiceRequest request) => true; + Task OnVoicemailLeft(ConversationalVoiceRequest request) => Task.CompletedTask; + Task OnUserDisconnected(ConversationalVoiceRequest request) => Task.CompletedTask; + Task OnRecordingCompleted(ConversationalVoiceRequest request) => Task.CompletedTask; + Task OnVoicemailStarting(ConversationalVoiceRequest request)=> Task.CompletedTask; /// /// 1. The recipient's phone line is already engaged. @@ -17,11 +18,11 @@ public interface ITwilioCallStatusHook /// /// /// - Task OnCallBusyStatus(ConversationalVoiceRequest request); + Task OnCallBusyStatus(ConversationalVoiceRequest request)=> Task.CompletedTask; - Task OnCallNoAnswerStatus(ConversationalVoiceRequest request); + Task OnCallNoAnswerStatus(ConversationalVoiceRequest request) => Task.CompletedTask; - Task OnCallCanceledStatus(ConversationalVoiceRequest request); + Task OnCallCanceledStatus(ConversationalVoiceRequest request)=> Task.CompletedTask; - Task OnCallFailedStatus(ConversationalVoiceRequest request); + Task OnCallFailedStatus(ConversationalVoiceRequest request)=> Task.CompletedTask; }