Исходящий звонок Twilio Tailor с использованием AMD

Я использую 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 ответ

Twilio разработчик евангелист здесь.

Если вы хотите ответить, когда вызов соединяется, вы не хотите делать это в статусе обратного вызова. Вместо этого вы хотите использовать 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
  }
}

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

Другие вопросы по тегам