AWS SDK for PHP Ждите задания Transcribe, пока статус не будет "ЗАВЕРШЕН"

Итак, я изучал Обещания и Официантов, и мне было интересно, есть ли способ запустить задание на транскрипцию, обеспечивая обратный вызов, поэтому он будет отмечаться (периодически проверяться сам), пока результат транскрипции не будет COMPLETED, а затем используйте обратный вызов, чтобы получить json с транскрипциями и записать результат в db. Так что все, что мне нужно сделать, это запустить работу и предоставить обратный вызов, и официант будет периодически блокировать поток и проверять состояние, позволяя мне бросать другие запросы между ними, вместо того, чтобы делать все это с while петли.

Я попробовал приведенный здесь пример, но он просто использует wait() метод и блокирует поток в любом случае, пока не получит результат.

Можно ли вообще сделать это с помощью сервиса Transcribe? Небольшой пример кода того, как это сделать, будет очень ценным!

0 ответов

Я получил ответный звонок от AWS Transcribe, выполнив следующие действия:

Я создаю задание на запись, используя PHP SDK:

use Aws\TranscribeService\TranscribeServiceClient;
...

$transcriber = new TranscribeServiceClient([<config>]);
$job = $transcriber->startTranscriptionJob([<config>, 'TranscriptionJobName' => 'unique-job-name']);

Затем я вхожу в консоль AWS и захожу в AWS Lambda. Внутри Lambda я создал функцию, используя среду выполнения Node.js 8.10:

var https = require('https');

exports.handler = function(event, context) {

    var body='';

    // the post options
    var optionspost = {
        host: 'example.com',
        path: '/transcriptions/callback',
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        }
    };

    var reqPost = https.request(optionspost, function(res) {
        res.on('data', function (chunk) {
            body += chunk;
        });

        context.succeed(body);
   });

   reqPost.write(JSON.stringify(event));
   reqPost.end();
};

Это отправляет запрос POST https://<host><path> с event данные как тело

Затем перейдите в AWS Cloudwatch и создайте ruleEvents->rules, Под Event Source - Service Name Выбрать Transcribe и настройте свои параметры (Event Type -> Transcribe Job State Change, Specific Status -> Completed), Под Targets Выбрать Lambda Function а затем выберите свой function

Это вызовет вызов на ваш Lambda Function когда Transcribe Job завершено. Lambda Function сообщения на ваш сервер с подробной информацией о задании транскрибирования, в том числе Job Name: unique-job-name,

В этот момент вы можете вернуться в Cloudwatch а также:

  • выберите свой Rule и нажмите show metrics for this rule,
  • Выбрать Logs чтобы увидеть любую регистрационную информацию от вашего Lambda Function
Другие вопросы по тегам