适用于PHP的AWS开发工具包等待转录作业,直到状态为“已完成”

时间:2018-07-25 14:32:45

标签: php amazon-web-services asynchronous promise aws-transcribe

因此,我一直在研究Promises and Waiters,我想知道是否有一种方法可以在提供回调的同时启动Transcription作业,因此它将打勾(定期检查自身),直到获得结果为止转录将为COMPLETED,然后使用回调获取带有转录的json并将结果写入db。 因此,我要做的就是开始工作并提供回调,服务员会定期阻塞线程并检查状态,从而允许我在两者之间抛出其他请求,而不是通过while循环来完成所有这些操作

我尝试了提供here的示例,但它仅使用wait()方法并始终阻塞线程,直到获得结果为止。

是否可以使用Transcribe服务? 一个小代码示例如何做到这一点,非常感谢!

1 个答案:

答案 0 :(得分:1)

我通过执行以下操作从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();
};

这会将https://<host><path>数据作为正文发送到event的POST请求

接下来进入AWS Cloudwatch,并创建一个rule Events->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中的所有日志记录信息