我正在将twilio amd与呼出电话一起使用。基本上使用callresource拨打一个号码来建立呼叫。现在,我想在通话过程中进行人为检测。电话被人接听了,然后我需要将呼叫转发给我的系统代理。因此,为此,我试图在“已答复”状态回叫中获取“ AnswerBy”值,但“ Answerby”始终为空。有人可以让我知道在通话过程中如何获取“ Answerby”,然后将其转接。下面是我正在使用的代码示例。
string accountSid = WebConfigurationManager.AppSettings["AccountSid"];
string authToken = WebConfigurationManager.AppSettings["AuthToken"];
TwilioClient.Init(accountSid, authToken);
var statusCallbackEvent = new List<string>();
statusCallbackEvent.Add("initiated");
statusCallbackEvent.Add("answered");
var call = CallResource.Create(
url: new Uri("http://demo.twilio.com/docs/voice.xml"),
to: new Twilio.Types.PhoneNumber("+1XXXXXXXXXXXXX"),
from: new Twilio.Types.PhoneNumber(WebConfigurationManager.AppSettings["FromNumber"]),
method: Twilio.Http.HttpMethod.Get,
machineDetection: "Enable",
statusCallbackEvent: statusCallbackEvent,
statusCallback: new Uri("https://68456c0d.ngrok.io/TwilioCallback/CallResponse"),
statusCallbackMethod: Twilio.Http.HttpMethod.Get
);
var response = call.Sid;
string accountSid = WebConfigurationManager.AppSettings["AccountSid"];
string authToken = WebConfigurationManager.AppSettings["AuthToken"]; ;
TwilioClient.Init(accountSid, authToken);
var response = new VoiceResponse();
var call = CallResource.Fetch(pathSid: obj.CallSid);
if (call.AnsweredBy?.ToLower() == "human")
{
//TO- DO
}
else
{
response.Say("hello world!", voice: "alice");
response.Play(new Uri("http://demo.twilio.com/docs/classic.mp3"));
}
答案 0 :(得分:0)
这里是Twilio开发人员的传播者。
如果您想在呼叫连接时做出响应,则不想在状态回调中进行响应。相反,您想使用在请求中设置的URL来创建呼叫。
当前,当您开始通话时,您仍在使用演示TwiML response:
var call = CallResource.Create(
url: new Uri("http://demo.twilio.com/docs/voice.xml"),
您需要更新url
以指向您的应用程序。然后,当呼叫接通时,Twilio将向您的应用程序发出请求。该请求将包括all the call parameters,包括response from the answering machine detection。因此,传入请求主体无需进行API调用来检索呼叫状态,而是拥有您需要的一切。然后,您可以使用这些参数来影响响应中的呼叫。例如:
public ActionResult Call(string AnsweredBy) {
if (AnsweredBy.ToLower() == "human")
{
// do something
}
else
{
// do something else
}
}
让我知道是否有帮助。