因此,我一直在研究Promises and Waiters,我想知道是否有一种方法可以在提供回调的同时启动Transcription作业,因此它将打勾(定期检查自身),直到获得结果为止转录将为COMPLETED
,然后使用回调获取带有转录的json并将结果写入db。
因此,我要做的就是开始工作并提供回调,服务员会定期阻塞线程并检查状态,从而允许我在两者之间抛出其他请求,而不是通过while
循环来完成所有这些操作
我尝试了提供here的示例,但它仅使用wait()
方法并始终阻塞线程,直到获得结果为止。
是否可以使用Transcribe服务? 一个小代码示例如何做到这一点,非常感谢!
答案 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
中的所有日志记录信息