У меня есть лямбда, которая срабатывает, когда кто-нибудь загружает аудиофайл в корзину. Мне нужно обработать файл, используя AWS Transcribe в асинхронном режиме. Я написал код, чтобы сделать это, но проблема в том, что его проверка выполняется только один раз, это не вызов функции-обработчика после завершения обработки файла.
Ниже приведена ссылка stackoverflow для транскрипции AWS, но нам нужно дождаться ответа до тех пор, пока задание не будет завершено, и у лямбда-функции будет тайм-аут в течение 5 минут. После этого исполнение будет остановлено.
// чтобы создать асинхронный клиентский объект для вызова AWS Transcribe
private AmazonTranscribeAsync asyncClient = AmazonTranscribeAsyncClientBuilder.standard().build();
// ниже приведен метод, который вызывает API-интерфейс AWS с загруженным аудиофайлом
private void startText(String guid, String bucket) {
String jobName = UUID.randomUUID().toString();
StartTranscriptionJobRequest request = new StartTranscriptionJobRequest();
request.withLanguageCode(LanguageCode.EnUS);
Settings channel_settings = new Settings();
channel_settings.setChannelIdentification(true);
channel_settings.withChannelIdentification(true);
Media media = new Media();
media.setMediaFileUri(s3.getUrl(bucket, guid).toString());
request.withMedia(media);
request.setTranscriptionJobName(jobName);
request.withMediaFormat(getFileFormat(guid));
request.withSettings(channel_settings);
asyncClient.startTranscriptionJobAsync(request, new AsyncTranscriptionJobHandler());
}
// метод асинхронного обработчика
private class AsyncTranscriptionJobHandler implements AsyncHandler<StartTranscriptionJobRequest, StartTranscriptionJobResult>
{
public void onError(Exception e) {
System.out.println(e.getMessage());
System.exit(1);
}
@Override
public void onSuccess(StartTranscriptionJobRequest request, StartTranscriptionJobResult result) {
logger.log(result.getTranscriptionJob().getTranscriptionJobName());
TranscriptionJob transcriptionJob = result.getTranscriptionJob();
if (transcriptionJob.getTranscriptionJobStatus().equals(TranscriptionJobStatus.COMPLETED.name())) {
logger.log("completed");
} else if(transcriptionJob.getTranscriptionJobStatus().equals(TranscriptionJobStatus.FAILED.name())) {
logger.log("failed");
} else if(transcriptionJob.getTranscriptionJobStatus().equals(TranscriptionJobStatus.IN_PROGRESS.name())) {
logger.log("processing");
}
}
}