Interfejs API REST zamiany mowy na tekst dla krótkiego dźwięku

Przypadki użycia interfejsu API REST zamiany mowy na tekst dla krótkiego dźwięku są ograniczone. Używaj go tylko w przypadkach, w których nie można używać zestawu SPEECH SDK.

Przed użyciem interfejsu API REST zamiany mowy na krótki dźwięk należy wziąć pod uwagę następujące ograniczenia:

  • Żądania korzystające z interfejsu API REST dla krótkiego dźwięku i przesyłania dźwięku bezpośrednio mogą zawierać nie więcej niż 60 sekund dźwięku. Formaty audio wejściowego są bardziej ograniczone w porównaniu z zestawem SPEECH SDK.
  • Interfejs API REST dla krótkiego dźwięku zwraca tylko końcowe wyniki. Nie zapewnia częściowych wyników.
  • Tłumaczenie mowy nie jest obsługiwane za pośrednictwem interfejsu API REST w przypadku krótkiego dźwięku. Musisz użyć zestawu SPEECH SDK.
  • Transkrypcja wsadowa i niestandardowa mowa nie są obsługiwane za pośrednictwem interfejsu API REST w przypadku krótkiego dźwięku. Zawsze należy używać interfejsu API REST rozpoznawania mowy do tłumaczenia tekstu na potrzeby transkrypcji wsadowej i niestandardowej mowy.

Przed użyciem interfejsu API REST zamiany mowy na krótki dźwięk należy ukończyć wymianę tokenów w ramach uwierzytelniania w celu uzyskania dostępu do usługi. Aby uzyskać więcej informacji, zobacz Authentication (Uwierzytelnianie).

Regiony i punkty końcowe

Punkt końcowy interfejsu API REST dla krótkiego dźwięku ma następujący format:

https://<REGION_IDENTIFIER>.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1

Zastąp <REGION_IDENTIFIER> element identyfikatorem zgodnym z regionem zasobu usługi Mowa.

Uwaga

W przypadku platformy Azure Government i platformy Microsoft Azure obsługiwanych przez punkty końcowe 21Vianet zobacz ten artykuł dotyczący suwerennych chmur.

Formaty audio

Dźwięk jest wysyłany w treści żądania HTTP POST . Musi być w jednym z formatów w tej tabeli:

Format Koder-dekoder Szybkość transmisji bitów Częstotliwość próbkowania
WAV PCM 256 kb/s 16 kHz, mono
OGG OPUS 256 kb/s 16 kHz, mono

Uwaga

Powyższe formaty są obsługiwane za pośrednictwem interfejsu API REST dla krótkich plików audio i WebSocket w usłudze Mowa. Zestaw SPEECH SDK obsługuje format WAV z koderem koderowym PCM, a także innymi formatami.

Nagłówki żądań

Ta tabela zawiera listę wymaganych i opcjonalnych nagłówków dla żądań zamiany mowy na tekst:

Nagłówek opis Wymagane lub opcjonalne
Ocp-Apim-Subscription-Key Klucz zasobu dla usługi Mowa. Ten nagłówek lub Authorization jest wymagany.
Authorization Token autoryzacji poprzedzony wyrazem Bearer. Aby uzyskać więcej informacji, zobacz Authentication (Uwierzytelnianie). Ten nagłówek lub Ocp-Apim-Subscription-Key jest wymagany.
Pronunciation-Assessment Określa parametry wyświetlania wyników wymowy w wynikach rozpoznawania. Wyniki te oceniają jakość wymowy danych wejściowych mowy, ze wskaźnikami takimi jak dokładność, płynność i kompletność.

Ten parametr jest kodem JSON zakodowanym w formacie Base64, który zawiera wiele szczegółowych parametrów. Aby dowiedzieć się, jak utworzyć ten nagłówek, zobacz Parametry oceny wymowy.
Opcjonalnie
Content-type Opisuje format i koder koderowy dostarczonych danych dźwiękowych. Akceptowane wartości to audio/wav; codecs=audio/pcm; samplerate=16000 i audio/ogg; codecs=opus. Wymagania
Transfer-Encoding Określa, że fragmentowane dane audio są wysyłane, a nie pojedynczy plik. Użyj tego nagłówka tylko wtedy, gdy fragmentujesz dane audio. Opcjonalnie
Expect Jeśli używasz fragmentowanego transferu, wyślij polecenie Expect: 100-continue. Usługa mowa potwierdza początkowe żądanie i oczekuje na więcej danych. Wymagane w przypadku wysyłania fragmentowanych danych dźwiękowych.
Accept W przypadku podania musi to być application/json. Usługa mowa udostępnia wyniki w formacie JSON. Niektóre struktury żądań zapewniają niezgodną wartość domyślną. Dobrym rozwiązaniem jest zawsze uwzględnienie Acceptfunkcji . Opcjonalne, ale zalecane.

Parametry zapytań

Te parametry mogą być uwzględniane w ciągu zapytania żądania REST.

Uwaga

Aby uniknąć odbierania błędu HTTP 4xx, należy dołączyć parametr języka do adresu URL. Na przykład język ustawiony na angielski usa za pośrednictwem punktu końcowego Zachodnie stany USA to: https://westus.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US.

Parametr Opis Wymagane lub opcjonalne
language Identyfikuje rozpoznawany język mówiony. Zobacz Obsługiwane języki. Wymagania
format Określa format wyniku. Akceptowane wartości to simple i detailed. Proste wyniki obejmują RecognitionStatus, , OffsetDisplayTexti Duration. Szczegółowe odpowiedzi obejmują cztery różne reprezentacje tekstu wyświetlanego. Ustawienie domyślne to simple. Opcjonalnie
profanity Określa sposób obsługi wulgaryzmów w wynikach rozpoznawania. Akceptowane wartości to:

masked, który zastępuje wulgaryzmy gwiazdkami.
removed, który usuwa wszystkie wulgaryzmy z wyniku.
raw, który zawiera wulgaryzmy w wyniku.

Ustawienie domyślne to masked.
Opcjonalnie
cid Gdy używasz programu Speech Studio do tworzenia modeli niestandardowych, możesz skorzystać z wartości identyfikatora punktu końcowego na stronie Wdrażanie. Użyj wartości Identyfikator punktu końcowego jako argumentu do parametru cid ciągu zapytania. Opcjonalnie

Parametry oceny wymowy

W tej tabeli wymieniono wymagane i opcjonalne parametry oceny wymowy:

Parametr Opis Wymagane lub opcjonalne
ReferenceText Tekst, względem którego jest obliczana wymowa. Wymagania
GradingSystem System punktów do kalibracji wyników. System FivePoint daje wynik zmiennoprzecinkowy 0–5 i HundredMark daje wynik zmiennoprzecinkowy 0–100. Wartość domyślna: FivePoint. Opcjonalnie
Granularity Stopień szczegółowości oceny. Akceptowane wartości to:

Phoneme, który pokazuje wynik na poziomach pełnotekstowych, słów i phoneme.
Word, który pokazuje wynik na poziomach pełnotekstowych i wyrazów.
FullText, który pokazuje wynik tylko na poziomie pełnotekstowym.

Ustawienie domyślne to Phoneme.
Opcjonalnie
Dimension Definiuje kryteria wyjściowe. Akceptowane wartości to:

Basic, który pokazuje tylko ocenę dokładności.
Comprehensive, który pokazuje wyniki dla większej liczby wymiarów (na przykład wynik płynności i wynik kompletności na poziomie pełnotekstowym oraz typ błędu na poziomie wyrazu).

Aby wyświetlić definicje różnych wymiarów wyników i typów błędów słów, zobacz Właściwości odpowiedzi. Ustawienie domyślne to Basic.
Opcjonalnie
EnableMiscue Włącza błędne obliczanie. Po włączeniu tego parametru wyrazy wymawiane są porównywane z tekstem odwołania. Są one oznaczone pominięciem lub wstawieniem na podstawie porównania. Akceptowane wartości to False i True. Ustawienie domyślne to False. Opcjonalnie
ScenarioId Identyfikator GUID wskazujący dostosowany system punktów. Opcjonalnie

Oto przykładowy kod JSON zawierający parametry oceny wymowy:

{
  "ReferenceText": "Good morning.",
  "GradingSystem": "HundredMark",
  "Granularity": "FullText",
  "Dimension": "Comprehensive"
}

Poniższy przykładowy kod pokazuje, jak skompilować parametry oceny wymowy w nagłówku Pronunciation-Assessment :

var pronAssessmentParamsJson = $"{{\"ReferenceText\":\"Good morning.\",\"GradingSystem\":\"HundredMark\",\"Granularity\":\"FullText\",\"Dimension\":\"Comprehensive\"}}";
var pronAssessmentParamsBytes = Encoding.UTF8.GetBytes(pronAssessmentParamsJson);
var pronAssessmentHeader = Convert.ToBase64String(pronAssessmentParamsBytes);

Zdecydowanie zalecamy przesyłanie strumieniowe (transfer fragmentowany) podczas publikowania danych audio, co może znacznie zmniejszyć opóźnienie. Aby dowiedzieć się, jak włączyć przesyłanie strumieniowe, zobacz przykładowy kod w różnych językach programowania.

Uwaga

Aby uzyskać więcej informacji, zobacz ocena wymowy.

Przykładowe żądanie

Poniższy przykład zawiera nazwę hosta i wymagane nagłówki. Należy pamiętać, że usługa oczekuje również danych dźwiękowych, które nie są uwzględnione w tym przykładzie. Jak wspomniano wcześniej, fragmentowanie jest zalecane, ale nie jest wymagane.

POST speech/recognition/conversation/cognitiveservices/v1?language=en-US&format=detailed HTTP/1.1
Accept: application/json;text/xml
Content-Type: audio/wav; codecs=audio/pcm; samplerate=16000
Ocp-Apim-Subscription-Key: YOUR_RESOURCE_KEY
Host: westus.stt.speech.microsoft.com
Transfer-Encoding: chunked
Expect: 100-continue

Aby włączyć ocenę wymowy, możesz dodać następujący nagłówek. Aby dowiedzieć się, jak utworzyć ten nagłówek, zobacz Parametry oceny wymowy.

Pronunciation-Assessment: eyJSZWZlcm...

Kody stanu HTTP

Kod stanu HTTP dla każdej odpowiedzi wskazuje powodzenie lub typowe błędy.

Kod stanu HTTP opis Możliwe przyczyny
100 Kontynuuj Początkowe żądanie jest akceptowane. Kontynuuj wysyłanie pozostałych danych. (Ten kod jest używany z transferem fragmentów).
200 OK Żądanie zakończyło się pomyślnie. Treść odpowiedzi jest obiektem JSON.
400 Nieprawidłowe żądanie Nie podano kodu językowego, język nie jest obsługiwany lub plik dźwiękowy jest nieprawidłowy (na przykład).
401 Brak autoryzacji Klucz zasobu lub token autoryzacji jest nieprawidłowy w określonym regionie lub punkt końcowy jest nieprawidłowy.
403 Dostęp zabroniony Brak klucza zasobu lub tokenu autoryzacji.

Przykładowe odpowiedzi

Oto typowa odpowiedź na potrzeby simple rozpoznawania:

{
  "RecognitionStatus": "Success",
  "DisplayText": "Remind me to buy 5 pencils.",
  "Offset": "1236645672289",
  "Duration": "1236645672289"
}

Oto typowa odpowiedź na potrzeby detailed rozpoznawania:

{
  "RecognitionStatus": "Success",
  "Offset": "1236645672289",
  "Duration": "1236645672289",
  "NBest": [
    {
      "Confidence": 0.9052885,
      "Display": "What's the weather like?",
      "ITN": "what's the weather like",
      "Lexical": "what's the weather like",
      "MaskedITN": "what's the weather like"
    },
    {
      "Confidence": 0.92459863,
      "Display": "what is the weather like",
      "ITN": "what is the weather like",
      "Lexical": "what is the weather like",
      "MaskedITN": "what is the weather like"
    }
  ]
}

Oto typowa odpowiedź na uznanie za pomocą oceny wymowy:

{
  "RecognitionStatus": "Success",
  "Offset": "400000",
  "Duration": "11000000",
  "NBest": [
      {
        "Confidence" : "0.87",
        "Lexical" : "good morning",
        "ITN" : "good morning",
        "MaskedITN" : "good morning",
        "Display" : "Good morning.",
        "PronScore" : 84.4,
        "AccuracyScore" : 100.0,
        "FluencyScore" : 74.0,
        "CompletenessScore" : 100.0,
        "Words": [
            {
              "Word" : "Good",
              "AccuracyScore" : 100.0,
              "ErrorType" : "None",
              "Offset" : 500000,
              "Duration" : 2700000
            },
            {
              "Word" : "morning",
              "AccuracyScore" : 100.0,
              "ErrorType" : "None",
              "Offset" : 5300000,
              "Duration" : 900000
            }
        ]
      }
  ]
}

Właściwości odpowiedzi

Wyniki są udostępniane jako dane JSON. Format simple zawiera następujące pola najwyższego poziomu:

Właściwości opis
RecognitionStatus Stan, taki jak Success pomyślne rozpoznawanie. Zobacz następną tabelę.
DisplayText Rozpoznany tekst po wielkich literach, interpunkcja, odwrotna normalizacja tekstu i maskowanie wulgaryzmów. Prezentuj tylko na sukces. Odwrotna normalizacja tekstu to konwersja tekstu mówionego na krótsze formy, takie jak 200 dla "dwustu" lub "Dr Smith" dla "lekarza smitha".
Offset Czas (w 100-nanosekundowych jednostkach), w którym rozpoznana mowa rozpoczyna się w strumieniu audio.
Duration Czas trwania (w 100-nanosekundowych jednostkach) rozpoznanej mowy w strumieniu audio.

Pole RecognitionStatus może zawierać następujące wartości:

Stan opis
Success Rozpoznawanie zakończyło się pomyślnie, a DisplayText pole jest obecne.
NoMatch W strumieniu audio wykryto mowę, ale nie zostały dopasowane żadne słowa z języka docelowego. Ten stan zwykle oznacza, że język rozpoznawania różni się od języka, w jakim mówi użytkownik.
InitialSilenceTimeout Początek strumienia audio zawierał tylko milczenie, a usługa upłynął limit czasu podczas oczekiwania na mowę.
BabbleTimeout Początek strumienia audio zawierał tylko szum, a usługa upłynął limit czasu podczas oczekiwania na mowę.
Error Usługa rozpoznawania napotkała błąd wewnętrzny i nie mogła kontynuować. Spróbuj ponownie, jeśli to możliwe.

Uwaga

Jeśli dźwięk składa się tylko z wulgaryzmów, a profanity parametr zapytania jest ustawiony na removewartość , usługa nie zwraca wyniku mowy.

Format detailed zawiera więcej form rozpoznanych wyników. Jeśli używasz detailed formatu, DisplayText zostanie podany dla Display każdego wyniku na NBest liście.

Obiekt na NBest liście może zawierać następujące elementy:

Właściwości opis
Confidence Współczynnik ufności wpisu z zakresu od 0,0 (bez pewności) do 1,0 (pełna pewność).
Lexical Forma leksykalna rozpoznanego tekstu: rozpoznane rzeczywiste wyrazy.
ITN Odwrotnie znormalizowany tekst (ITN) lub kanoniczna forma rozpoznanego tekstu, z numerami telefonów, cyframi, skrótami ("lekarz smith" do "dr smith") i innymi zastosowanymi przekształceniami.
MaskedITN Jeśli jest to wymagane, formularz ITN z maskowaniem wulgaryzmów.
Display Formularz wyświetlania rozpoznanego tekstu z dodanymi znakami interpunkcyjnymi i wielkich liter. Ten parametr jest taki sam jak parametr, który DisplayText zapewnia, gdy format jest ustawiony na simplewartość .
AccuracyScore Dokładność wymowy mowy. Dokładność wskazuje, jak blisko fonezy pasują do wymowy osoby mówiącej natywnej. Wynik dokładności na poziomie słowa i pełnotekstu jest agregowany z wyniku dokładności na poziomie phoneme.
FluencyScore Płynność podanej mowy. Płynność wskazuje, jak ściśle mowa pasuje do użycia przez osoby mówiące w trybie dyskretnym przerw między wyrazami.
CompletenessScore Kompletność mowy określona przez obliczenie współczynnika wymawianych wyrazów w celu odwołowania się do wprowadzania tekstu.
PronScore Ogólny wynik wskazujący jakość wymowy podanej mowy. Ten wynik jest agregowany z AccuracyScorewartości , FluencyScorei CompletenessScore z wagą.
ErrorType Wartość wskazująca, czy wyraz zostanie pominięty, wstawiony lub źle wymawiany w porównaniu do ReferenceText. Możliwe wartości to None (czyli brak błędu w tym słowie), Omission, Insertioni Mispronunciation.

Transfer fragmentowany

Fragmentowany transfer (Transfer-Encoding: chunked) może pomóc zmniejszyć opóźnienie rozpoznawania. Umożliwia usłudze rozpoznawania mowy rozpoczęcie przetwarzania pliku audio podczas przesyłania. Interfejs API REST dla krótkiego dźwięku nie zapewnia wyników częściowych ani tymczasowych.

Poniższy przykładowy kod pokazuje, jak wysyłać dźwięk we fragmentach. Tylko pierwszy fragment powinien zawierać nagłówek pliku audio. requestHttpWebRequest to obiekt połączony z odpowiednim punktem końcowym REST. audioFile to ścieżka do pliku audio na dysku.

var request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
request.SendChunked = true;
request.Accept = @"application/json;text/xml";
request.Method = "POST";
request.ProtocolVersion = HttpVersion.Version11;
request.Host = host;
request.ContentType = @"audio/wav; codecs=audio/pcm; samplerate=16000";
request.Headers["Ocp-Apim-Subscription-Key"] = "YOUR_RESOURCE_KEY";
request.AllowWriteStreamBuffering = false;

using (var fs = new FileStream(audioFile, FileMode.Open, FileAccess.Read))
{
    // Open a request stream and write 1,024-byte chunks in the stream one at a time.
    byte[] buffer = null;
    int bytesRead = 0;
    using (var requestStream = request.GetRequestStream())
    {
        // Read 1,024 raw bytes from the input audio file.
        buffer = new Byte[checked((uint)Math.Min(1024, (int)fs.Length))];
        while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) != 0)
        {
            requestStream.Write(buffer, 0, bytesRead);
        }

        requestStream.Flush();
    }
}

Uwierzytelnianie

Każde żądanie wymaga nagłówka autoryzacji. W tej tabeli przedstawiono, które nagłówki są obsługiwane dla każdej funkcji:

Obsługiwany nagłówek autoryzacji Zamiana mowy na tekst Zamiana tekstu na mowę
Ocp-Apim-Subscription-Key Tak Tak
Authorization: Bearer Tak Tak

Jeśli używasz nagłówka Ocp-Apim-Subscription-Key , musisz podać tylko klucz zasobu. Na przykład:

'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'

Gdy używasz nagłówka Authorization: Bearer , musisz wysłać żądanie do punktu końcowego issueToken . W tym żądaniu wymieniasz klucz zasobu dla tokenu dostępu ważnego przez 10 minut.

Jak uzyskać token dostępu

Aby uzyskać token dostępu, musisz wysłać żądanie do punktu końcowego issueToken przy użyciu polecenia Ocp-Apim-Subscription-Key i klucza zasobu.

Punkt issueToken końcowy ma następujący format:

https://<REGION_IDENTIFIER>.api.cognitive.microsoft.com/sts/v1.0/issueToken

Zastąp <REGION_IDENTIFIER> ciąg identyfikatorem zgodnym z regionem subskrypcji.

Użyj poniższych przykładów, aby utworzyć żądanie tokenu dostępu.

Przykład HTTP

W tym przykładzie jest proste żądanie HTTP w celu uzyskania tokenu. Zastąp YOUR_SUBSCRIPTION_KEY ciąg kluczem zasobu dla usługi Mowa. Jeśli Twoja subskrypcja nie znajduje się w regionie Zachodnie stany USA, zastąp Host nagłówek nazwą hosta twojego regionu.

POST /sts/v1.0/issueToken HTTP/1.1
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
Host: eastus.api.cognitive.microsoft.com
Content-type: application/x-www-form-urlencoded
Content-Length: 0

Treść odpowiedzi zawiera token dostępu w formacie JSON Web Token (JWT).

Przykładowy skrypt programu PowerShell

W tym przykładzie jest prosty skrypt programu PowerShell umożliwiający uzyskanie tokenu dostępu. Zastąp YOUR_SUBSCRIPTION_KEY ciąg kluczem zasobu dla usługi Mowa. Upewnij się, że używasz poprawnego punktu końcowego dla regionu zgodnego z subskrypcją. Ten przykład jest obecnie ustawiony na Zachodnie stany USA.

$FetchTokenHeader = @{
  'Content-type'='application/x-www-form-urlencoded';
  'Content-Length'= '0';
  'Ocp-Apim-Subscription-Key' = 'YOUR_SUBSCRIPTION_KEY'
}

$OAuthToken = Invoke-RestMethod -Method POST -Uri https://eastus.api.cognitive.microsoft.com/sts/v1.0/issueToken
 -Headers $FetchTokenHeader

# show the token received
$OAuthToken

Przykład cURL

cURL to narzędzie wiersza polecenia dostępne w systemie Linux (i w Podsystem Windows dla systemu Linux). To polecenie cURL ilustruje sposób uzyskiwania tokenu dostępu. Zastąp YOUR_SUBSCRIPTION_KEY ciąg kluczem zasobu dla usługi Mowa. Upewnij się, że używasz poprawnego punktu końcowego dla regionu zgodnego z subskrypcją. Ten przykład jest obecnie ustawiony na Zachodnie stany USA.

curl -v -X POST \
 "https://eastus.api.cognitive.microsoft.com/sts/v1.0/issueToken" \
 -H "Content-type: application/x-www-form-urlencoded" \
 -H "Content-Length: 0" \
 -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY"

Przykład w języku C#

Ta klasa języka C# ilustruje sposób uzyskiwania tokenu dostępu. Przekaż klucz zasobu dla usługi Mowa podczas tworzenia wystąpienia klasy. Jeśli Twoja subskrypcja nie znajduje się w regionie Zachodnie stany USA, zmień wartość FetchTokenUri na zgodną z regionem subskrypcji.

public class Authentication
{
    public static readonly string FetchTokenUri =
        "https://eastus.api.cognitive.microsoft.com/sts/v1.0/issueToken";
    private string subscriptionKey;
    private string token;

    public Authentication(string subscriptionKey)
    {
        this.subscriptionKey = subscriptionKey;
        this.token = FetchTokenAsync(FetchTokenUri, subscriptionKey).Result;
    }

    public string GetAccessToken()
    {
        return this.token;
    }

    private async Task<string> FetchTokenAsync(string fetchUri, string subscriptionKey)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
            UriBuilder uriBuilder = new UriBuilder(fetchUri);

            var result = await client.PostAsync(uriBuilder.Uri.AbsoluteUri, null);
            Console.WriteLine("Token Uri: {0}", uriBuilder.Uri.AbsoluteUri);
            return await result.Content.ReadAsStringAsync();
        }
    }
}

Przykład języka Python

# Request module must be installed.
# Run pip install requests if necessary.
import requests

subscription_key = 'REPLACE_WITH_YOUR_KEY'


def get_token(subscription_key):
    fetch_token_url = 'https://eastus.api.cognitive.microsoft.com/sts/v1.0/issueToken'
    headers = {
        'Ocp-Apim-Subscription-Key': subscription_key
    }
    response = requests.post(fetch_token_url, headers=headers)
    access_token = str(response.text)
    print(access_token)

Jak używać tokenu dostępu

Token dostępu powinien zostać wysłany do usługi jako Authorization: Bearer <TOKEN> nagłówek. Każdy token dostępu jest ważny przez 10 minut. Nowy token można uzyskać w dowolnym momencie, ale aby zminimalizować ruch sieciowy i opóźnienie, zalecamy użycie tego samego tokenu przez dziewięć minut.

Oto przykładowe żądanie HTTP do interfejsu API REST zamiany mowy na tekst w celu uzyskania krótkiego dźwięku:

POST /cognitiveservices/v1 HTTP/1.1
Authorization: Bearer YOUR_ACCESS_TOKEN
Host: westus.stt.speech.microsoft.com
Content-type: application/ssml+xml
Content-Length: 199
Connection: Keep-Alive

// Message body here...

Następne kroki