Функция этого действия состоит в том, чтобы подключить 2 человека к одному вызову. Twilio позвонит по первому номеру и попросит нажать 1 для подтверждения соединения, а затем он должен продолжить набор номера «подключиться».
Это работает с абсолютным Uri, но не будет работать с относительным Uri. Ошибка, которую я получаю в отладчике Twilio: «/ api / voice / outboundconnect? Connect = 5555555555» не является допустимым URL-адресом.
UriKind.relative работает на моем главном коммутаторе. Похоже, что есть что-то другое в том, как Twilio обрабатывает инструкции TwiML в необработанном VoiceResponse и VoiceResponse, отправленном с помощью CallResource.
[HttpPost]
[HttpGet]
public IActionResult OutboundCall(string connect)
{
var to = new PhoneNumber("##########");
var from = new PhoneNumber("##########");
//respond by first asking if the user wants to connect
var response = new VoiceResponse();
var gather = new Gather(numDigits: 1, action: new Uri("/api/voice/outboundconnect?connect=" +connect, UriKind.Relative));
gather.Say("Press 1 to connect and we will connect you to the connect party");
response.Append(gather);
var call = CallResource.Create(
twiml: response.ToString(),
to: to,
from: from
);
return Ok(call.Sid);
}
Вот OutboundConnect для справки:
[HttpPost]
public IActionResult OutboundConnect(string digits, string connect)
{
VoiceResponse response = new VoiceResponse();
// If the user entered digits, process their request
if (!string.IsNullOrEmpty(digits))
{
switch (digits)
{
case "1":
response.Say("You are being connected.");
//response.Dial(connect);
break;
default:
response.Hangup();
break;
}
}
else
{
// If no input was sent, hang up
response.Hangup();
}
return TwiML(response);
}
}
Вот индекс, где принимаются звонки, и я использую аналогичный функционал
[HttpPost] //What happens when you receive a call?
public IActionResult Index()
{
var response = new VoiceResponse();
var gather = new Gather(numDigits: 1, action: new Uri("/api/voice/gather", UriKind.Relative));
gather.Say("To do one thing, press 1. To do another thing, press 2.", voice: "Polly.Nicole");
response.Append(gather);
// If the user doesn't enter input, loop
response.Redirect(new Uri("/api/voice", UriKind.Relative));
return TwiML(response);
}