Lägga till transkription i realtid i ditt program
Viktigt!
Funktioner som beskrivs i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.
Den här guiden hjälper dig att bättre förstå de olika sätt som du kan använda Azure Communication Services-erbjudanden för transkription i realtid via Call Automation SDK:er.
Förutsättningar
- Azure-konto med en aktiv prenumeration finns i Skapa ett konto kostnadsfritt.
- Azure Communication Services-resurs finns i Skapa en Azure Communication Services-resurs
- Skapa och ansluta Azure AI-tjänster till din Azure Communication Services-resurs.
- Skapa en anpassad underdomän för din Azure AI-tjänstresurs.
- Skapa ett nytt webbtjänstprogram med hjälp av Call Automation SDK.
Konfigurera en WebSocket Server
Azure Communication Services kräver att serverprogrammet konfigurerar en WebSocket-server för att strömma transkription i realtid. WebSocket är ett standardiserat protokoll som tillhandahåller en kommunikationskanal med full duplex över en enda TCP-anslutning. Du kan också använda Azure-tjänster Azure WebApps som gör att du kan skapa ett program för att ta emot avskrifter via en websocket-anslutning. Följ den här snabbstarten.
Upprätta ett anrop
I den här snabbstarten antar vi att du redan är bekant med att starta anrop. Om du behöver lära dig mer om att starta och upprätta anrop kan du följa vår snabbstart. I den här snabbstarten går vi igenom processen med att starta transkription för både inkommande samtal och utgående samtal.
När du arbetar med transkription i realtid har du ett par alternativ för när och hur du startar transkription:
Alternativ 1 – Startar vid tidpunkten för att besvara eller skapa ett samtal
Alternativ 2 – Påbörja transkription under ett pågående samtal
I den här självstudien demonstrerar vi alternativ 2 och påbörjar transkription under ett pågående anrop. Som standard är "startTranscription" inställt på false vid tidpunkten för att besvara eller skapa ett anrop.
Skapa ett anrop och ange transkriptionsinformationen
Definiera TranscriptionOptions för ACS för att veta om du vill starta transkriptionen direkt eller vid ett senare tillfälle, vilket språk som ska transkriberas i och webbanslutningen som ska användas för att skicka avskriften.
var createCallOptions = new CreateCallOptions(callInvite, callbackUri)
{
CallIntelligenceOptions = new CallIntelligenceOptions() { CognitiveServicesEndpoint = new Uri(cognitiveServiceEndpoint) },
TranscriptionOptions = new TranscriptionOptions(new Uri(""), "en-US", false, TranscriptionTransport.Websocket)
};
CreateCallResult createCallResult = await callAutomationClient.CreateCallAsync(createCallOptions);
Starta transkription
När du är redo att starta transkriptionen kan du göra ett explicit anrop till Call Automation för att börja transkribera samtalet.
// Start transcription with options
StartTranscriptionOptions options = new StartTranscriptionOptions()
{
OperationContext = "startMediaStreamingContext",
//Locale = "en-US",
};
await callMedia.StartTranscriptionAsync(options);
// Alternative: Start transcription without options
// await callMedia.StartTranscriptionAsync();
Ta emot transkriptionsström
När transkriptionen startar får din websocket transkriptionsmetadatanyttolasten som det första paketet. Den här nyttolasten innehåller anropsmetadata och nationella inställningar för konfigurationen.
{
"kind": "TranscriptionMetadata",
"transcriptionMetadata": {
"subscriptionId": "835be116-f750-48a4-a5a4-ab85e070e5b0",
"locale": "en-us",
"callConnectionId": "65c57654=f12c-4975-92a4-21668e61dd98",
"correlationId": "65c57654=f12c-4975-92a4-21668e61dd98"
}
}
Ta emot transkriptionsdata
Efter metadata kommer nästa paket som din webbsocket tar emot att vara TranscriptionData för det transkriberade ljudet.
{
"kind": "TranscriptionData",
"transcriptionData": {
"text": "Testing transcription.",
"format": "display",
"confidence": 0.695223331451416,
"offset": 2516998782481234400,
"words": [
{
"text": "testing",
"offset": 2516998782481234400
},
{
"text": "testing",
"offset": 2516998782481234400
}
],
"participantRawID": "8:acs:",
"resultStatus": "Final"
}
}
Hantera transkriptionsström på webbsocketservern
using WebServerApi;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.UseWebSockets();
app.Map("/ws", async context =>
{
if (context.WebSockets.IsWebSocketRequest)
{
using var webSocket = await context.WebSockets.AcceptWebSocketAsync();
await HandleWebSocket.Echo(webSocket);
}
else
{
context.Response.StatusCode = StatusCodes.Status400BadRequest;
}
});
app.Run();
Uppdateringar av koden för websocket-hanteraren
using Azure.Communication.CallAutomation;
using System.Net.WebSockets;
using System.Text;
namespace WebServerApi
{
public class HandleWebSocket
{
public static async Task Echo(WebSocket webSocket)
{
var buffer = new byte[1024 * 4];
var receiveResult = await webSocket.ReceiveAsync(
new ArraySegment(buffer), CancellationToken.None);
while (!receiveResult.CloseStatus.HasValue)
{
string msg = Encoding.UTF8.GetString(buffer, 0, receiveResult.Count);
var response = StreamingDataParser.Parse(msg);
if (response != null)
{
if (response is AudioMetadata audioMetadata)
{
Console.WriteLine("***************************************************************************************");
Console.WriteLine("MEDIA SUBSCRIPTION ID-->"+audioMetadata.MediaSubscriptionId);
Console.WriteLine("ENCODING-->"+audioMetadata.Encoding);
Console.WriteLine("SAMPLE RATE-->"+audioMetadata.SampleRate);
Console.WriteLine("CHANNELS-->"+audioMetadata.Channels);
Console.WriteLine("LENGTH-->"+audioMetadata.Length);
Console.WriteLine("***************************************************************************************");
}
if (response is AudioData audioData)
{
Console.WriteLine("***************************************************************************************");
Console.WriteLine("DATA-->"+audioData.Data);
Console.WriteLine("TIMESTAMP-->"+audioData.Timestamp);
Console.WriteLine("IS SILENT-->"+audioData.IsSilent);
Console.WriteLine("***************************************************************************************");
}
if (response is TranscriptionMetadata transcriptionMetadata)
{
Console.WriteLine("***************************************************************************************");
Console.WriteLine("TRANSCRIPTION SUBSCRIPTION ID-->"+transcriptionMetadata.TranscriptionSubscriptionId);
Console.WriteLine("LOCALE-->"+transcriptionMetadata.Locale);
Console.WriteLine("CALL CONNECTION ID--?"+transcriptionMetadata.CallConnectionId);
Console.WriteLine("CORRELATION ID-->"+transcriptionMetadata.CorrelationId);
Console.WriteLine("***************************************************************************************");
}
if (response is TranscriptionData transcriptionData)
{
Console.WriteLine("***************************************************************************************");
Console.WriteLine("TEXT-->"+transcriptionData.Text);
Console.WriteLine("FORMAT-->"+transcriptionData.Format);
Console.WriteLine("OFFSET-->"+transcriptionData.Offset);
Console.WriteLine("DURATION-->"+transcriptionData.Duration);
Console.WriteLine("PARTICIPANT-->"+transcriptionData.Participant.RawId);
Console.WriteLine("CONFIDENCE-->"+transcriptionData.Confidence);
foreach (var word in transcriptionData.Words)
{
Console.WriteLine("TEXT-->"+word.Text);
Console.WriteLine("OFFSET-->"+word.Offset);
Console.WriteLine("DURATION-->"+word.Duration);
}
Console.WriteLine("***************************************************************************************");
}
}
await webSocket.SendAsync(
new ArraySegment(buffer, 0, receiveResult.Count),
receiveResult.MessageType,
receiveResult.EndOfMessage,
CancellationToken.None);
receiveResult = await webSocket.ReceiveAsync(
new ArraySegment(buffer), CancellationToken.None);
}
await webSocket.CloseAsync(
receiveResult.CloseStatus.Value,
receiveResult.CloseStatusDescription,
CancellationToken.None);
}
}
}
Uppdatera transkription
I situationer där ditt program gör det möjligt för användare att välja önskat språk kanske du också vill samla in transkriptionen på det språket. Det gör du genom att anropa Automation SDK så att du kan uppdatera transkriptionsspråket.
await callMedia.UpdateTranscriptionAsync("en-US-NancyNeural");
Stoppa transkription
När programmet måste sluta lyssna efter transkriptionen kan du använda StopTranscription-begäran för att meddela Call Automation om att sluta skicka avskriftsdata till din webbsocket.
StopTranscriptionOptions stopOptions = new StopTranscriptionOptions()
{
OperationContext = "stopTranscription"
};
await callMedia.StopTranscriptionAsync(stopOptions);
Skapa ett anrop och ange transkriptionsinformationen
Definiera TranscriptionOptions för ACS för att veta om du vill starta transkriptionen direkt eller vid ett senare tillfälle, vilket språk som ska transkriberas i och webbanslutningen som ska användas för att skicka avskriften.
CallInvite callInvite = new CallInvite(target, caller);
CallIntelligenceOptions callIntelligenceOptions = new CallIntelligenceOptions()
.setCognitiveServicesEndpoint(appConfig.getCognitiveServiceEndpoint());
TranscriptionOptions transcriptionOptions = new TranscriptionOptions(
appConfig.getWebSocketUrl(),
TranscriptionTransport.WEBSOCKET,
"en-US",
false
);
CreateCallOptions createCallOptions = new CreateCallOptions(callInvite, appConfig.getCallBackUri());
createCallOptions.setCallIntelligenceOptions(callIntelligenceOptions);
createCallOptions.setTranscriptionOptions(transcriptionOptions);
Response result = client.createCallWithResponse(createCallOptions, Context.NONE);
return result.getValue().getCallConnectionProperties().getCallConnectionId();
Starta transkription
När du är redo att starta transkriptionen kan du göra ett explicit anrop till Call Automation för att börja transkribera samtalet.
//Option 1: Start transcription with options
StartTranscriptionOptions transcriptionOptions = new StartTranscriptionOptions()
.setOperationContext("startMediaStreamingContext");
client.getCallConnection(callConnectionId)
.getCallMedia()
.startTranscriptionWithResponse(transcriptionOptions, Context.NONE);
// Alternative: Start transcription without options
// client.getCallConnection(callConnectionId)
// .getCallMedia()
// .startTranscription();
Ta emot transkriptionsström
När transkriptionen startar får din websocket transkriptionsmetadatanyttolasten som det första paketet. Den här nyttolasten innehåller anropsmetadata och nationella inställningar för konfigurationen.
{
"kind": "TranscriptionMetadata",
"transcriptionMetadata": {
"subscriptionId": "835be116-f750-48a4-a5a4-ab85e070e5b0",
"locale": "en-us",
"callConnectionId": "65c57654=f12c-4975-92a4-21668e61dd98",
"correlationId": "65c57654=f12c-4975-92a4-21668e61dd98"
}
}
Ta emot transkriptionsdata
Efter metadata kommer nästa paket som din webbsocket tar emot att vara TranscriptionData för det transkriberade ljudet.
{
"kind": "TranscriptionData",
"transcriptionData": {
"text": "Testing transcription.",
"format": "display",
"confidence": 0.695223331451416,
"offset": 2516998782481234400,
"words": [
{
"text": "testing",
"offset": 2516998782481234400
},
{
"text": "testing",
"offset": 2516998782481234400
}
],
"participantRawID": "8:acs:",
"resultStatus": "Final"
}
}
Hantera transkriptionsström på webbsocketservern
package com.example;
import org.glassfish.tyrus.server.Server;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class App {
public static void main(String[] args) {
Server server = new Server("localhost", 8081, "/ws", null, WebSocketServer.class);
try {
server.start();
System.out.println("Web socket running on port 8081...");
System.out.println("wss://localhost:8081/ws/server");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
reader.readLine();
} catch (Exception e) {
e.printStackTrace();
} finally {
server.stop();
}
}
}
Uppdateringar av koden för websocket-hanteraren
package com.example;
import javax.websocket.OnMessage;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import com.azure.communication.callautomation.models.streaming.StreamingData;
import com.azure.communication.callautomation.models.streaming.StreamingDataParser;
import com.azure.communication.callautomation.models.streaming.media.AudioData;
import com.azure.communication.callautomation.models.streaming.media.AudioMetadata;
import com.azure.communication.callautomation.models.streaming.transcription.TranscriptionData;
import com.azure.communication.callautomation.models.streaming.transcription.TranscriptionMetadata;
import com.azure.communication.callautomation.models.streaming.transcription.Word;
@ServerEndpoint("/server")
public class WebSocketServer {
@OnMessage
public void onMessage(String message, Session session) {
StreamingData data = StreamingDataParser.parse(message);
if (data instanceof AudioMetadata) {
AudioMetadata audioMetaData = (AudioMetadata) data;
System.out.println("----------------------------------------------------------------");
System.out.println("SUBSCRIPTION ID: --> " + audioMetaData.getMediaSubscriptionId());
System.out.println("ENCODING: --> " + audioMetaData.getEncoding());
System.out.println("SAMPLE RATE: --> " + audioMetaData.getSampleRate());
System.out.println("CHANNELS: --> " + audioMetaData.getChannels());
System.out.println("LENGTH: --> " + audioMetaData.getLength());
System.out.println("----------------------------------------------------------------");
}
if (data instanceof AudioData) {
AudioData audioData = (AudioData) data;
System.out.println("----------------------------------------------------------------");
System.out.println("DATA: --> " + audioData.getData());
System.out.println("TIMESTAMP: --> " + audioData.getTimestamp());
System.out.println("IS SILENT: --> " + audioData.isSilent());
System.out.println("----------------------------------------------------------------");
}
if (data instanceof TranscriptionMetadata) {
TranscriptionMetadata transcriptionMetadata = (TranscriptionMetadata) data;
System.out.println("----------------------------------------------------------------");
System.out.println("TRANSCRIPTION SUBSCRIPTION ID: --> " + transcriptionMetadata.getTranscriptionSubscriptionId());
System.out.println("IS SILENT: --> " + transcriptionMetadata.getLocale());
System.out.println("CALL CONNECTION ID: --> " + transcriptionMetadata.getCallConnectionId());
System.out.println("CORRELATION ID: --> " + transcriptionMetadata.getCorrelationId());
System.out.println("----------------------------------------------------------------");
}
if (data instanceof TranscriptionData) {
TranscriptionData transcriptionData = (TranscriptionData) data;
System.out.println("----------------------------------------------------------------");
System.out.println("TEXT: --> " + transcriptionData.getText());
System.out.println("FORMAT: --> " + transcriptionData.getFormat());
System.out.println("CONFIDENCE: --> " + transcriptionData.getConfidence());
System.out.println("OFFSET: --> " + transcriptionData.getOffset());
System.out.println("DURATION: --> " + transcriptionData.getDuration());
System.out.println("RESULT STATUS: --> " + transcriptionData.getResultStatus());
for (Word word : transcriptionData.getWords()) {
System.out.println("Text: --> " + word.getText());
System.out.println("Offset: --> " + word.getOffset());
System.out.println("Duration: --> " + word.getDuration());
}
System.out.println("----------------------------------------------------------------");
}
}
}
Uppdatera transkription
I situationer där ditt program gör det möjligt för användare att välja önskat språk kanske du också vill samla in transkriptionen på det språket. Det gör du genom att anropa Automation SDK så att du kan uppdatera transkriptionsspråket.
client.getCallConnection(callConnectionId)
.getCallMedia()
.updateTranscription("en-US-NancyNeural");
Stoppa transkription
När programmet måste sluta lyssna efter transkriptionen kan du använda StopTranscription-begäran för att meddela Call Automation om att sluta skicka avskriftsdata till din webbsocket.
// Option 1: Stop transcription with options
StopTranscriptionOptions stopTranscriptionOptions = new StopTranscriptionOptions()
.setOperationContext("stopTranscription");
client.getCallConnection(callConnectionId)
.getCallMedia()
.stopTranscriptionWithResponse(stopTranscriptionOptions, Context.NONE);
// Alternative: Stop transcription without options
// client.getCallConnection(callConnectionId)
// .getCallMedia()
// .stopTranscription();
Skapa ett anrop och ange transkriptionsinformationen
Definiera TranscriptionOptions för ACS för att veta om transkriptionen ska startas direkt eller vid ett senare tillfälle, vilket språk du ska transkribera i och den webbanslutning som ska användas för att skicka avskriften.
const transcriptionOptions = {
transportUrl: "",
transportType: "websocket",
locale: "en-US",
startTranscription: false
};
const options = {
callIntelligenceOptions: {
cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT
},
transcriptionOptions: transcriptionOptions
};
console.log("Placing outbound call...");
acsClient.createCall(callInvite, process.env.CALLBACK_URI + "/api/callbacks", options);
Starta transkription
När du är redo att starta transkriptionen kan du göra ett explicit anrop till Samtalsautomation för att börja transkribera samtalet.
const startTranscriptionOptions = {
locale: "en-AU",
operationContext: "startTranscriptionContext"
};
// Start transcription with options
await callMedia.startTranscription(startTranscriptionOptions);
// Alternative: Start transcription without options
// await callMedia.startTranscription();
Ta emot transkriptionsström
När transkriptionen startar får din websocket transkriptionsmetadatanyttolasten som det första paketet. Den här nyttolasten innehåller anropsmetadata och nationella inställningar för konfigurationen.
{
"kind": "TranscriptionMetadata",
"transcriptionMetadata": {
"subscriptionId": "835be116-f750-48a4-a5a4-ab85e070e5b0",
"locale": "en-us",
"callConnectionId": "65c57654=f12c-4975-92a4-21668e61dd98",
"correlationId": "65c57654=f12c-4975-92a4-21668e61dd98"
}
}
Ta emot transkriptionsdata
Efter metadata kommer nästa paket som din webbsocket tar emot att vara TranscriptionData för det transkriberade ljudet.
{
"kind": "TranscriptionData",
"transcriptionData": {
"text": "Testing transcription.",
"format": "display",
"confidence": 0.695223331451416,
"offset": 2516998782481234400,
"words": [
{
"text": "testing",
"offset": 2516998782481234400
},
{
"text": "testing",
"offset": 2516998782481234400
}
],
"participantRawID": "8:acs:",
"resultStatus": "Final"
}
}
Hantera transkriptionsström på webbsocketservern
import WebSocket from 'ws';
import { streamingData } from '@azure/communication-call-automation/src/util/streamingDataParser';
const wss = new WebSocket.Server({ port: 8081 });
wss.on('connection', (ws) => {
console.log('Client connected');
ws.on('message', (packetData) => {
const decoder = new TextDecoder();
const stringJson = decoder.decode(packetData);
console.log("STRING JSON => " + stringJson);
const response = streamingData(packetData);
if ('locale' in response) {
console.log("Transcription Metadata");
console.log(response.callConnectionId);
console.log(response.correlationId);
console.log(response.locale);
console.log(response.subscriptionId);
}
if ('text' in response) {
console.log("Transcription Data");
console.log(response.text);
console.log(response.format);
console.log(response.confidence);
console.log(response.offset);
console.log(response.duration);
console.log(response.resultStatus);
if ('phoneNumber' in response.participant) {
console.log(response.participant.phoneNumber);
}
response.words.forEach((word) => {
console.log(word.text);
console.log(word.duration);
console.log(word.offset);
});
}
});
ws.on('close', () => {
console.log('Client disconnected');
});
});
console.log('WebSocket server running on port 8081');
Uppdatera transkription
I situationer där ditt program gör det möjligt för användare att välja önskat språk kanske du också vill samla in transkriptionen på det språket. Det gör du genom att anropa Automation SDK så att du kan uppdatera transkriptionsspråket.
await callMedia.updateTranscription("en-US-NancyNeural");
Stoppa transkription
När programmet måste sluta lyssna efter transkriptionen kan du använda StopTranscription-begäran för att meddela Call Automation om att sluta skicka avskriftsdata till din webbsocket.
const stopTranscriptionOptions = {
operationContext: "stopTranscriptionContext"
};
// Stop transcription with options
await callMedia.stopTranscription(stopTranscriptionOptions);
// Alternative: Stop transcription without options
// await callMedia.stopTranscription();
Skapa ett anrop och ange transkriptionsinformationen
Definiera TranscriptionOptions för ACS för att veta om transkriptionen ska startas direkt eller vid ett senare tillfälle, vilket språk du ska transkribera i och den webbanslutning som ska användas för att skicka avskriften.
transcription_options = TranscriptionOptions(
transport_url=" ",
transport_type=TranscriptionTransportType.WEBSOCKET,
locale="en-US",
start_transcription=False
)
call_connection_properties = call_automation_client.create_call(
target_participant,
CALLBACK_EVENTS_URI,
cognitive_services_endpoint=COGNITIVE_SERVICES_ENDPOINT,
source_caller_id_number=source_caller,
transcription=transcription_options
)
Starta transkription
När du är redo att starta transkriptionen kan du göra ett explicit anrop till Samtalsautomation för att börja transkribera samtalet.
# Start transcription without options
call_connection_client.start_transcription()
# Option 1: Start transcription with locale and operation context
# call_connection_client.start_transcription(locale="en-AU", operation_context="startTranscriptionContext")
# Option 2: Start transcription with operation context
# call_connection_client.start_transcription(operation_context="startTranscriptionContext")
Ta emot transkriptionsström
När transkriptionen startar får din websocket transkriptionsmetadatanyttolasten som det första paketet. Den här nyttolasten innehåller anropsmetadata och nationella inställningar för konfigurationen.
{
"kind": "TranscriptionMetadata",
"transcriptionMetadata": {
"subscriptionId": "835be116-f750-48a4-a5a4-ab85e070e5b0",
"locale": "en-us",
"callConnectionId": "65c57654=f12c-4975-92a4-21668e61dd98",
"correlationId": "65c57654=f12c-4975-92a4-21668e61dd98"
}
}
Ta emot transkriptionsdata
Efter metadata kommer nästa paket som din websocket tar emot att vara TranscriptionData för det transkriberade ljudet.
{
"kind": "TranscriptionData",
"transcriptionData": {
"text": "Testing transcription.",
"format": "display",
"confidence": 0.695223331451416,
"offset": 2516998782481234400,
"words": [
{
"text": "testing",
"offset": 2516998782481234400
},
{
"text": "testing",
"offset": 2516998782481234400
}
],
"participantRawID": "8:acs:",
"resultStatus": "Final"
}
}
Hantera transkriptionsström på webbsocketservern
import asyncio
import json
import websockets
from azure.communication.callautomation.streaming.models import (
TranscriptionMetadata, TranscriptionData, WordData, TextFormat, ResultStatus
)
from azure.communication.callautomation.streaming.streaming_data_parser import StreamingDataParser
async def handle_client(websocket, path):
print("Client connected")
try:
async for message in websocket:
print(message)
result = StreamingDataParser.parse(message)
if isinstance(result, TranscriptionMetadata):
print("Parsed data is metadata")
print("-------------------------")
print("Subscription ID:", result.subscriptionId)
print("Locale:", result.locale)
print("Call Connection ID:", result.callConnectionId)
print("Correlation ID:", result.correlationId)
elif isinstance(result, TranscriptionData):
print("Parsed data is transcription data")
print("-------------------------")
print("Text:", result.text)
print("Format:", result.format)
print("Confidence:", result.confidence)
print("Offset:", result.offset)
print("Duration:", result.duration)
print("Participant:", result.participant.raw_id)
print("Result Status:", result.resultStatus)
for word in result.words:
print("Word:", word.text)
print("Offset:", word.offset)
print("Duration:", word.duration)
except websockets.exceptions.ConnectionClosedOK:
print("Client disconnected")
start_server = websockets.serve(handle_client, "localhost", 8081)
print('WebSocket server running on port 8081')
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
Uppdatera transkription
I situationer där ditt program gör det möjligt för användare att välja önskat språk kanske du också vill samla in transkriptionen på det språket. Det gör du genom att anropa Automation SDK så att du kan uppdatera transkriptionsspråket.
await call_connection_client.update_transcription(locale="en-US-NancyNeural")
Stoppa transkription
När programmet måste sluta lyssna efter transkriptionen kan du använda StopTranscription-begäran för att meddela Call Automation om att sluta skicka avskriftsdata till din webbsocket.
# Stop transcription without options
call_connection_client.stop_transcription()
# Alternative: Stop transcription with operation context
# call_connection_client.stop_transcription(operation_context="stopTranscriptionContext")
Händelsekoder
Event | kod | underkod | Meddelande |
---|---|---|---|
TranskriptionStartad | 200 | 0 | Åtgärden har slutförts. |
Transkriptioner toppade | 200 | 0 | Åtgärden har slutförts. |
TranscriptionUpdated | 200 | 0 | Åtgärden har slutförts. |
TranscriptionFailed | 400 | 8581 | Åtgärden misslyckades, StreamUrl är inte giltig. |
TrasncriptionFailed | 400 | 8565 | Åtgärden misslyckades på grund av en felaktig begäran till Cognitive Services. Kontrollera dina indataparametrar. |
TranscriptionFailed | 400 | 8565 | Åtgärden misslyckades på grund av en begäran om tidsgräns för Cognitive Services. Försök igen senare eller kontrollera om det finns några problem med tjänsten. |
TranscriptionFailed | 400 | 8605 | Anpassad taligenkänningsmodell för transkription stöds inte. |
TranscriptionFailed | 400 | 8523 | Ogiltig begäran, nationella inställningar saknas. |
TranscriptionFailed | 400 | 8523 | Ogiltig begäran, endast nationella inställningar som innehåller regioninformation stöds. |
TranscriptionFailed | 405 | 8520 | Transkriptionsfunktioner stöds inte just nu. |
TranscriptionFailed | 405 | 8520 | UpdateTranscription stöds inte för anslutning som skapats med Connect-gränssnittet. |
TranscriptionFailed | 400 | 8528 | Åtgärden är ogiltig, samtalet har redan avslutats. |
TranscriptionFailed | 405 | 8520 | Funktionen för uppdateringsavskrift stöds inte just nu. |
TranscriptionFailed | 405 | 8522 | Begäran tillåts inte när transkriptions-URL:en inte har angetts under anropskonfigurationen. |
TranscriptionFailed | 405 | 8522 | Begäran tillåts inte när Cognitive Service Configuration inte har angetts under anropskonfigurationen. |
TranscriptionFailed | 400 | 8501 | Åtgärden är ogiltig när anropet inte är i etablerat tillstånd. |
TranscriptionFailed | 401 | 8565 | Åtgärden misslyckades på grund av ett Cognitive Services-autentiseringsfel. Kontrollera dina auktoriseringsindata och se till att de är korrekta. |
TranscriptionFailed | 403 | 8565 | Åtgärden misslyckades på grund av en förbjuden begäran till Cognitive Services. Kontrollera din prenumerationsstatus och se till att den är aktiv. |
TranscriptionFailed | 429 | 8565 | Åtgärden misslyckades, begäranden överskred antalet tillåtna samtidiga begäranden för cognitive services-prenumerationen. |
TranscriptionFailed | 500 | 8578 | Åtgärden misslyckades, det gick inte att upprätta WebSocket-anslutningen. |
TranscriptionFailed | 500 | 8580 | Åtgärden misslyckades, transkriptionstjänsten stängdes av. |
TranscriptionFailed | 500 | 8579 | Åtgärden misslyckades, transkriptionen avbröts. |
TranscriptionFailed | 500 | 9999 | Okänt internt serverfel. |
Kända problem
- För 1:1-anrop med ACS-användare som använder Klient-SDK:er stöds startTranscription = True för närvarande inte.