|
7 | 7 | using Microsoft.AspNetCore.Mvc; |
8 | 8 | using Twilio.Http; |
9 | 9 | using Task = System.Threading.Tasks.Task; |
| 10 | +using BotSharp.Abstraction.Infrastructures; |
10 | 11 |
|
11 | 12 | namespace BotSharp.Plugin.Twilio.Controllers; |
12 | 13 |
|
@@ -341,62 +342,46 @@ public async Task<TwiMLResult> TransferCall(ConversationalVoiceRequest request) |
341 | 342 | public async Task<ActionResult> PhoneCallStatus(ConversationalVoiceRequest request) |
342 | 343 | { |
343 | 344 | var twilio = _services.GetRequiredService<TwilioService>(); |
344 | | - if (request.CallStatus == "completed") |
345 | | - { |
346 | | - if (twilio.MachineDetected(request)) |
347 | | - { |
348 | | - // voicemail |
349 | | - await HookEmitter.Emit<ITwilioCallStatusHook>(_services, |
350 | | - async hook => |
351 | | - { |
352 | | - if (hook.IsMatch(request)) await hook.OnVoicemailLeft(request); |
353 | | - }); |
354 | | - } |
355 | | - else |
356 | | - { |
357 | | - // phone call completed |
358 | | - await HookEmitter.Emit<ITwilioCallStatusHook>(_services, |
359 | | - async hook => |
360 | | - { |
361 | | - if (hook.IsMatch(request)) await hook.OnUserDisconnected(request); |
362 | | - }); |
363 | | - } |
364 | | - } |
365 | | - else if (request.CallStatus == "busy") |
366 | | - { |
367 | | - await HookEmitter.Emit<ITwilioCallStatusHook>(_services, |
368 | | - async hook => |
369 | | - { |
370 | | - if (hook.IsMatch(request)) await hook.OnCallBusyStatus(request); |
371 | | - }); |
372 | | - } |
373 | | - else if (request.CallStatus == "no-answer") |
| 345 | + |
| 346 | + // Define the options with the predicate |
| 347 | + var emitOptions = new HookEmitOption<ITwilioCallStatusHook> |
374 | 348 | { |
375 | | - await HookEmitter.Emit<ITwilioCallStatusHook>(_services, |
376 | | - async hook => |
377 | | - { |
378 | | - if (hook.IsMatch(request)) await hook.OnCallNoAnswerStatus(request); |
379 | | - }); |
380 | | - } |
381 | | - else if (request.CallStatus == "canceled") |
| 349 | + ShouldExecute = hook => hook.IsMatch(request) |
| 350 | + }; |
| 351 | + |
| 352 | + switch (request.CallStatus) |
382 | 353 | { |
383 | | - await HookEmitter.Emit<ITwilioCallStatusHook>(_services, |
384 | | - async hook => |
| 354 | + case "completed": |
| 355 | + if (twilio.MachineDetected(request)) |
385 | 356 | { |
386 | | - if (hook.IsMatch(request)) await hook.OnCallCanceledStatus(request); |
387 | | - }); |
388 | | - } |
389 | | - else if (request.CallStatus == "failed") |
390 | | - { |
391 | | - await HookEmitter.Emit<ITwilioCallStatusHook>(_services, |
392 | | - async hook => |
| 357 | + // voicemail |
| 358 | + await HookEmitter.Emit<ITwilioCallStatusHook>(_services, hook => hook.OnVoicemailLeft(request), emitOptions); |
| 359 | + } |
| 360 | + else |
393 | 361 | { |
394 | | - if (hook.IsMatch(request)) await hook.OnCallFailedStatus(request); |
395 | | - }); |
396 | | - } |
397 | | - else |
398 | | - { |
399 | | - _logger.LogError($"Unknown call status: {request.CallStatus}, {request.CallSid}"); |
| 362 | + // phone call completed |
| 363 | + await HookEmitter.Emit<ITwilioCallStatusHook>(_services, hook => hook.OnUserDisconnected(request), emitOptions); |
| 364 | + } |
| 365 | + break; |
| 366 | + |
| 367 | + case "busy": |
| 368 | + await HookEmitter.Emit<ITwilioCallStatusHook>(_services, hook => hook.OnCallBusyStatus(request), emitOptions); |
| 369 | + break; |
| 370 | + |
| 371 | + case "no-answer": |
| 372 | + await HookEmitter.Emit<ITwilioCallStatusHook>(_services, hook => hook.OnCallNoAnswerStatus(request), emitOptions); |
| 373 | + break; |
| 374 | + |
| 375 | + case "canceled": |
| 376 | + await HookEmitter.Emit<ITwilioCallStatusHook>(_services, hook => hook.OnCallCanceledStatus(request), emitOptions); |
| 377 | + break; |
| 378 | + |
| 379 | + case "failed": |
| 380 | + await HookEmitter.Emit<ITwilioCallStatusHook>(_services, hook => hook.OnCallFailedStatus(request), emitOptions); |
| 381 | + break; |
| 382 | + default: |
| 383 | + _logger.LogError($"Unknown call status: {request.CallStatus}, {request.CallSid}"); |
| 384 | + break; |
400 | 385 | } |
401 | 386 |
|
402 | 387 | return Ok(); |
|
0 commit comments