Собирать данные об исходящем вызове Twilio с помощью относительного Uri - PullRequest
0 голосов
/ 08 мая 2020

Функция этого действия состоит в том, чтобы подключить 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);
        }
...