Merge pull request #827 from wcao-lessen/improvement/twiliocallutility

enable answering machine detection
This commit is contained in:
Haiping 2025-01-14 10:48:29 -06:00 committed by GitHub
commit e04b513a50
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 16 additions and 2 deletions

View file

@ -1,5 +1,6 @@
using BotSharp.Abstraction.Files;
using BotSharp.Abstraction.Infrastructures;
using BotSharp.Abstraction.Repositories;
using BotSharp.Core.Infrastructures;
using BotSharp.Plugin.Twilio.Interfaces;
using BotSharp.Plugin.Twilio.Models;
@ -126,9 +127,11 @@ public class TwilioVoiceController : TwilioController
SeqNumber = request.SeqNum,
Content = messageContent,
Digits = request.Digits,
From = request.From,
From = string.Equals(request.Direction, "inbound") ? request.From : request.To,
States = ParseStates(request.States)
};
callerMessage.RequestHeaders = new KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>[Request.Headers.Count];
Request.Headers.CopyTo(callerMessage.RequestHeaders, 0);
await messageQueue.EnqueueAsync(callerMessage);
response = new VoiceResponse();
@ -387,6 +390,9 @@ public class TwilioVoiceController : TwilioController
$"twilio/voice/speeches/{conversationId}/intial.mp3"
}
};
string tag = $"AnsweredBy: {Request.Form["AnsweredBy"]}";
var db = _services.GetRequiredService<IBotSharpRepository>();
db.AppendConversationTags(conversationId, new List<string> { tag });
var twilio = _services.GetRequiredService<TwilioService>();
var response = twilio.ReturnNoninterruptedInstructions(instruction);
return TwiML(response);

View file

@ -1,3 +1,5 @@
using Microsoft.Extensions.Primitives;
namespace BotSharp.Plugin.Twilio.Models
{
public class CallerMessage
@ -8,6 +10,7 @@ namespace BotSharp.Plugin.Twilio.Models
public string Digits { get; set; }
public string From { get; set; }
public Dictionary<string, string> States { get; set; } = new();
public KeyValuePair<string, StringValues>[] RequestHeaders { get; set; }
public override string ToString()
{

View file

@ -92,7 +92,8 @@ namespace BotSharp.Plugin.Twilio.OutboundPhoneCallHandler.Functions
var call = await CallResource.CreateAsync(
url: new Uri($"{_twilioSetting.CallbackHost}/twilio/voice/init-call?conversationId={conversationId}"),
to: new PhoneNumber(args.PhoneNumber),
from: new PhoneNumber(_twilioSetting.PhoneNumber));
from: new PhoneNumber(_twilioSetting.PhoneNumber),
machineDetection: "DetectMessageEnd");
message.Content = $"The generated phone message: {args.InitialMessage}. \r\n[Conversation ID: {conversationId}]" ?? message.Content;
message.StopCompletion = true;

View file

@ -65,6 +65,10 @@ namespace BotSharp.Plugin.Twilio.Services
var httpContext = sp.GetRequiredService<IHttpContextAccessor>();
httpContext.HttpContext = new DefaultHttpContext();
httpContext.HttpContext.User = new ClaimsPrincipal(new ClaimsIdentity());
foreach (var header in message.RequestHeaders)
{
httpContext.HttpContext.Request.Headers[header.Key] = header.Value;
}
httpContext.HttpContext.Request.Headers["X-Twilio-BotSharp"] = "LOST";
AssistantMessage reply = null;