2017-08-15 4 views
0

Comment utiliser l'AMD améliorée via Twilio? Je comprends que cela ne peut se faire que via l'API REST (pas de TwiML) mais j'ai du mal à voir la connexion entre un appel standard et la détection du répondeur. J'ai lu plusieurs fois le this page, mais je ne comprends toujours pas. Donc, voici le code standard C# pour passer un appel via l'API REST:Détection de répondeur améliorée Twilio C#

TwilioClient.Init(AccountSid, AuthToken); 

    var to = new PhoneNumber("+14155551212"); 
    var from = new PhoneNumber("+15017250604"); 
    var call = CallResource.Create(to, from, url: new Uri("http://demo.twilio.com/docs/voice.xml")); 

Et voici mon C# traduit le code à partir du lien ci-dessus:

 using (var client = new HttpClient()) 
     { 
      var byteArray = Encoding.ASCII.GetBytes([email protected]"{AccountSid}:{AuthToken}"); 
      var header = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); 
      client.DefaultRequestHeaders.Authorization = header; 

      var requestContent = new FormUrlEncodedContent(new[] 
                  { 
                   new KeyValuePair<string, string>("To", "+15017250604"), 
                   new KeyValuePair<string, string>("From", "+15017250604"), 
                   new KeyValuePair<string, string>("MachineDetection", "DetectMessageEnd"), 
                   new KeyValuePair<string, string>("Url", Url.Action("PostTransfer")) 
                  }); 

      var response = client.PostAsync(_amdRequest, requestContent); 
      var responseContent = response.Result.Content; 
     } 

Alors qu'est-ce que je manque? Je suis sûr que c'est quelque chose de simple, mais je ne vois pas comment la DMLA améliorée sait quel appel écouter, et quel devrait être l'ordre des événements ici. Et enfin, comment suis-je censé voir les résultats?

EDIT:

Donc, pour être très clair, voici mon code comme il se trouve actuellement:

  TwilioClient.Init(AccountSid, AuthToken); 

     var toPhone = new PhoneNumber(to); 
     var fromPhone = new PhoneNumber(from); 
     var call = CallResource.Create(toPhone, fromPhone, url: new Uri("http://demo.twilio.com/docs/voice.xml")); 

     using (var client = new HttpClient()) 
     { 
      var byteArray = Encoding.ASCII.GetBytes([email protected]"{AccountSid}:{AuthToken}"); 
      var header = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); 
      client.DefaultRequestHeaders.Authorization = header; 

      var requestContent = new FormUrlEncodedContent(new[] 
                  { 
                   new KeyValuePair<string, string>("To", to), 
                   new KeyValuePair<string, string>("From", from), 
                   new KeyValuePair<string, string>("MachineDetection", "DetectMessageEnd"), 
                   new KeyValuePair<string, string>("Url", Url.Action("PostTransfer")) 
                  }); 

      var response = client.PostAsync(_amdRequest, requestContent); 
      var responseContent = response.Result.Content; 
     } 

Et ailleurs dans mon code est une fonction appelée « PostTransfer » qui obtient le « AnsweredBy » paramètre et fait des choses après l'appel est placé. Est-ce que cela devrait fonctionner? Parce que ça ne l'est pas. L'appel passe et je peux entendre le fichier d'exemple de Twilio, mais il n'arrive jamais à la fonction "PostTransfer".

Répondre

0

Twilio développeur évangéliste ici.

Vous ressemblez à making a call avec une détection réussie. Vous appelez de votre numéro Twilio vers un numéro d'utilisateur.

Vous voyez les résultats de la détection du répondeur lorsque Twilio a décidé s'il s'agit d'une machine ou d'un être humain, à quel point makes a webhook request to your URL vous l'avez envoyé lors de l'appel.

Lorsque Twilio crée le webhook, il inclut un paramètre supplémentaire: AnsweredBy. Lorsque vous définissez MachineDetection-DetectMessageEndthe values of AnsweredBy peut être: machine_end_beep, machine_end_silence, machine_end_other, human, fax et unknown. Vous pouvez alors lire cette valeur et décider quoi faire de l'appel à ce stade.

Cela aide-t-il du tout?

+0

J'ai un peu édité la question originale. Je n'ai aucun moyen de savoir si quelque chose ne va pas avec la détection du répondeur car il n'atteint jamais la fonction à la fin de l'URL que je fournis. – bkmo

+0

Ah, je crois, de la vérification [les docs] (https://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.action (v = vs.118) .aspx), que 'URL.Action' renvoie un chemin, où Twilio a besoin d'une URL complète avec le domaine, etc. – philnash

+0

Cela l'a fait. Je recevais seulement l'URL partielle avant. – bkmo

0

Pouvez-vous essayer HttpWebRequest à la place? voici un exemple comment le faire,

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); 
request.Method = "POST"; 
request.Headers.Add("Authorization", string.Format("Bearer {0}",AccessToken)); 
request.ContentType = "application/json;charset=utf-8"; 
request.ContentLength = body.Length; 
request.Accept = "application/json" 

if (!string.IsNullOrWhiteSpace(body)) 
      { 
       System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); 
       byte[] bytes = encoding.GetBytes(body); 

       request.ContentLength = bytes.Length; 

       using (Stream requestStream = request.GetRequestStream()) 
       { 
        // Send the data. 
        requestStream.Write(bytes, 0, bytes.Length); 
       } 
      } 

      using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
      { 
       if (callback != null) 
       { 
        var reader = new StreamReader(response.GetResponseStream()); 
        callback(reader.ReadToEnd()); 
       } 
      }