Исходящий звонок Twilio Tailor с использованием AMD - PullRequest
0 голосов
/ 21 декабря 2018

Я использую 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"));
        }

1 Ответ

0 голосов
/ 07 января 2019

Twanio developer evangelist здесь.

Если вы хотите отвечать при соединении вызова, вы не хотите делать это в обратном вызове состояния.Вместо этого вы хотите использовать URL-адрес, указанный в запросе, для создания вызова.

В настоящее время, когда вы начинаете вызов, вы все еще используете демонстрационный ответ TwiML :

    var call = CallResource.Create(
        url: new Uri("http://demo.twilio.com/docs/voice.xml"),

Вам необходимо обновить url, чтобы он указывал на ваше приложение.Затем при соединении звонка Twilio сделает запрос на ваше приложение.Этот запрос будет включать все параметры вызова , включая ответ от обнаружения автоответчика .Таким образом, вместо вызова API для получения статуса вызова в теле входящего запроса есть все, что вам нужно.Затем вы можете использовать эти параметры, чтобы повлиять на ваш звонок в вашем ответе.Например:

public ActionResult Call(string AnsweredBy) {
  if (AnsweredBy.ToLower() == "human")
  {
     // do something
  }
  else
  {
     // do something else
  }
}

Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...