2017-04-05 155 views
1

更新:代碼與Microsoft的試用密鑰(f2da0a19f4d94875880e9fbaceabc97d)完美協同工作,但使用我在Azure中生成的自己的密鑰失敗。 Whaat?403嘗試從機器人中調用Microsoft Bing Speech API時出現禁止

解決方案:我使用了「翻譯語音API」代替「Bing Speech API」的密鑰。那是錯誤的。哇。浪費了兩個小時。


我正在寫一個帶語音輸入的機器人。爲此,我正在使用微軟的Bing Speech API。

我發送一個請求,如下所示,得到一個403 Forbidden錯誤。根據官方文檔,403意味着身份驗證或配額問題。但是,我有一個付費帳戶(不是免費帳戶),並且驗證令牌似乎被正確接收。

網址:

https://speech.platform.bing.com/recognize?scenarios=ulm&appid=D4D52672-91D7-4C74-8AD8-42B1D98141A5&locale=en-US&device.os=bot&version=3.0&format=json&instanceid=45d58c78-e2d8-444f-83c8-9a5dca7225ba&requestid=a3613a79-d84b-497d-87d7-19b19552c0a5

頁眉:

授權:承載eyJ0eXAiOiJlV1QiLCJhbGciOiJIUzI1NiJ9.eyJzY29wZSI6Imh0dHBzOi8vZGV2Lm1pY3Jvc29mdHRyYW5zbGF0b3IuY29tLyIsInN1YnNjcmlwdGlvbi1pZCI6ImM4ZWQyMTNlNjUyMTRhYzc4MDFlNGU0M2RjZmQ1ZWZkIiwicHJvZHVjdC1pZCI6IlNwZWVjaFRyYW5zbGF0b3IuUzEiLCJjb2duaXRpdmUtc2VydmljZXMtZW5kcG9pbnQiOiJodHRwczovL2F waS5jb2duaXRpdmUubWljcm9zb2Z0LmNvbS9pbnRlcm5hbC92MS4wLyIsImF6dXJlLXJlc291cmNlLWlkIjoiL3N1YnNjcmlwdGlvbnMvZmU4ZjI4ZDktZDJlNy00YWY0LxIwOGUtNWU3N2Y5YTc0ODY2L3Jlc291cmNlR3JvdXBzL2JvdHMvcHJvdmlkZXJzL01pY3Jvc29mdC5Db2duaXRpdmVTZXJ2aWNlcy ... bWljcm9zb2Z0dHJhbnNsYXRvciIsImV4cCI6MTQ5MTQwNTcxM30.mdFdi98OGyjZ_sDYvd2lMWZqvPMROYyiChQz0JKh7fk}

我得到的響應403禁止無需任何額外的信息。

任何想法?我只是從這裏使用微軟的參考實現 - https://github.com/Microsoft/BotBuilder-Samples/tree/master/CSharp/intelligence-SpeechToText - 但使用我自己的訂閱密鑰。

代碼:

public async Task<string> GetTextFromAudioAsync(Stream audiostream) 
    { 
     var requestUri = @"https://speech.platform.bing.com/recognize?scenarios=ulm&appid=D4D52672-91D7-4C74-8AD8-42B1D98141A5&locale=en-US&device.os=bot&version=3.0&format=json&instanceid=45d58c78-e2d8-444f-83c8-9a5dca7225ba&requestid=" + Guid.NewGuid(); 

     using (var client = new HttpClient()) 
     { 
      var token = Authentication.Instance.GetAccessToken(); 
      client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); 

      //using (var binaryContent = new ByteArrayContent(StreamToBytes(audiostream))) 
      using (var binaryContent = new ByteArrayContent(File.ReadAllBytes(Environment.GetEnvironmentVariable("HOME").ToString() + "\\site\\wwwroot\\test.wav"))) 
      { 
       binaryContent.Headers.TryAddWithoutValidation("content-type", "audio/wav; codec=\"audio/pcm\"; samplerate=8000"); 

       var response = await client.PostAsync(requestUri, binaryContent); 
       var responseString = await response.Content.ReadAsStringAsync(); 
       try 
       { 
        dynamic data = JsonConvert.DeserializeObject(responseString); 
        if (data == null) 
        { 
         throw new Exception("Server responded: " + response.StatusCode); 
        } 
        return data.header.name; 
       } 
       catch (JsonReaderException ex) 
       { 
        throw new Exception(responseString, ex); 
       } 
      } 
     } 
    } 
+1

如果您找到了答案,請將其作爲答案張貼並接受。謝謝。 –

回答

0

我用於 「翻譯語音API」,而不是 「兵語音API」 的關鍵。那是錯誤的。哇。浪費了兩個小時。

相關問題