Hier ist der Workflow, dem ich folge:
Vom Frontend aus erfasse ich die serverCallId, wenn ich einen Anruf mit dem Call Composite starte.
- Ich übergebe die serverCallId und die groupCallID an meine Backend-API und rufen Sie die StartTranscription-Methode auf.
- Ich habe einen WebSocket-Server eingerichtet, um die transkribierten Daten in Echtzeit zu empfangen.
- Die StartTranscription-Methode gibt erfolgreich a zurück 202-Antwort mit einer gültigen CallConnectionId. (Beispiel: „16008280-6e77-4226-ac14-1d1235dffe21“). Wenn ich jedoch versuche, die Transkription mithilfe der CallConnectionId im folgenden Code zu stoppen, tritt die folgende Fehlermeldung auf:
Code: Select all
[HttpPost("start-tanscription")]
public async Task StartTranscription([FromBody] StartRecordingRequest request)
{
try
{
var serverCallId = new ServerCallLocator(request.ServerCallId);
var websocketUri = callbackUriHost.Replace("https", "wss") + "ws";
_logger.LogInformation($"Callback url: {callbackUri}, websocket Url: {websocketUri}");
var callInvite = new GroupCallLocator(request.GroupCallId);
var connectOptions = new ConnectCallOptions(callInvite, callbackUri)
{
CallIntelligenceOptions = new CallIntelligenceOptions()
{
CognitiveServicesEndpoint = new Uri(_cognitiveServicesEndpoint)
},
TranscriptionOptions = new TranscriptionOptions(
new Uri(websocketUri),
"en-US",
false,
TranscriptionTransport.Websocket
),
};
var createCallResultResponse = _callAutomationClient.ConnectCall(connectOptions);
var callConnectionMedia = createCallResultResponse.CallConnection.GetCallMedia();
StartTranscriptionOptions startTrasnscriptionOption = new StartTranscriptionOptions()
{
Locale = "en-US",
OperationContext = "startMediaStreamingContext"
};
await callConnectionMedia.StartTranscriptionAsync(startTrasnscriptionOption);
_logger.LogInformation("Real-time transcription started...");
_callAutomationClient.GetEventProcessor().AttachOngoingEventProcessor(
createCallResult.CallConnection.CallConnectionId, async (TranscriptionFailed) =>
{
_logger.LogInformation($"Received transcription event: {TranscriptionFailed.GetType()}, CorrelationId: {TranscriptionFailed.CorrelationId}, " +
$"SubCode: {TranscriptionFailed?.ResultInformation?.SubCode}, Message: {TranscriptionFailed?.ResultInformation?.Message}");
});
return Ok(new { CallConnectionId = createCallResult.CallConnection.CallConnectionId });
}
catch (Exception ex)
{
_logger.LogError(ex, "Error occurred while starting the recording.");
return BadRequest(new { error = ex.Message });
}
}
Code: Select all
[HttpPost("stop-transcription")]
public async Task StopTranscription([FromBody] StopRecordingRequest request)
{
try
{
var callConnection = _callAutomationClient.GetCallConnection(request.CallConnectionId);
var callMedia = callConnection.GetCallMedia();
StopTranscriptionOptions stopOptions = new StopTranscriptionOptions()
{
OperationContext = "stopTranscription"
};
await callMedia.StopTranscriptionAsync(stopOptions);
return Ok(new { message = "Transcription stopped & transcription stopped" });
}
catch (Exception ex)
{
_logger.LogError(ex, "Error occurred while stopping the recording & transcription.");
return BadRequest(new { error = ex.Message });
}
}
Code: Select all
{
"error": "Invalid action, Transcription is not active.\r\nStatus: 412 (Precondition Failed)\r\nErrorCode: 8583\r\n\r\nContent:\r\n{\"error\":{\"code\":\"8583\",\"message\":\"Invalid action, Transcription is not active.\"}}\r\n\r\nHeaders:\r\nDate: Sat, 11 Jan 2025 05:15:57 GMT\r\nConnection: keep-alive\r\nX-Microsoft-Skype-Client: REDACTED\r\nx-ms-client-request-id: 08da2a4c-afcd-469e-827f-b04158f829ad\r\nX-Microsoft-Skype-Chain-ID: REDACTED\r\nx-azure-ref: REDACTED\r\nStrict-Transport-Security: REDACTED\r\nX-Cache: REDACTED\r\nContent-Type: application/json; charset=utf-8\r\nContent-Length: 82\r\n"
}