如何通过回调获取异步任务结果

更新时间:2025-02-26 06:26:05

本文为您介绍如何通过回调获取异步任务结果。

背景信息

听悟的任务创建接口为异步接口。因此,离线和实时会议后处理任务的返回结果可以通过调用查询接口来主动获取。您也可以在管控台配置回调类型和地址后,接收听悟任务完成后的事件通知。

目前,用户可以通过两种方式获取听悟的回调事件:

  • 自行配置HTTP端点服务接收回调事件。

  • 使用阿里云事件总线服务接收回调事件,再由事件总线服务转发到目标端点,如MQ、MNS、钉钉机器人等。

前提条件

HTTP方式

步骤一

您可以部署一套服务来接收听悟的回调消息。以下面Java代码为例,创建一个HTTP服务,并定义一个接收POST请求的端点。

package com.alibaba.tingwu.tingwucallbackdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@SpringBootApplication
public class TingwuCallbackDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(TingwuCallbackDemoApplication.class, args);
    }

    @PostMapping("/tingwu/callback")
    @ResponseBody
    public String receiveTingwuCallbackEvent(@RequestBody String data) {
        System.out.println("Received callback data: \n" + data);
        return "Callback received!";
    }
}

配置您的回调接收服务,指定监听的端口、环境变量等。在启动服务后,可以使用工具如Postmancurl来模拟回调请求,确保服务能够正确接收和处理消息,例如:

curl --request POST 'http://{your-external-service-url}/tingwu/callback' \
--header 'Content-Type: application/json' \
--data '{
    "Code": "0",
    "Data": {
        "Test": "CheckSyncConf170168050****"
    },
    "Message": "success",
    "RequestId": "c919a74e337c40e2b9a5de1db003****"
}'
说明

请将 {your-external-service-url} 替换为您服务的公共URL。

步骤二

前往听悟管控台,点击创建项目按钮,回调方式选择HTTP post协议,填入您服务的公共URL后点击确认按钮。

image

创建成功后,在控制台主页可以看到项目信息,其中AppKey需要作为后续提交听悟任务的必要参数。

image

如果显示创建失败,说明听悟服务端在向您填入的URL地址发起POST请求时遇到了问题,通常情况为该URL无法访问或者无法正常处理回调消息,您可以尝试检查以下几个方面:

  • 确认URL为公网URL:确保您提供的URL是可通过互联网访问的公共地址。内部地址或本地地址(如localhost)将无法被外部服务访问。

  • 检查防火墙设置:若您的服务部署在受到防火墙保护的环境中,请确保防火墙规则允许外部访问该URL。您可能需要对网络设置进行调整,以允许回调请求的通过。

  • 服务端在处理回调消息的过程中是否发生了异常。

步骤三

参考音视频文件离线转写创建一个离线转写任务。其中AppKey需要配置为步骤二中生成的对应值,同时需要将入参中的Input.ProgressiveCallbacksEnabled配置为true。

任务提交后,您可以观察回调接收服务的相关日志,听悟任务会在AI子任务完成后进行一次回调,此时回调消息中的TaskStatus值为ONGOING;在所有AI子任务都完成后再进行一次回调,此时回调消息中的TaskStatus值为COMPLETED;如果听悟任务发生异常,则会立即发起回调,此时TaskStatus值为FAILED。

例如,当离线任务仅开启了文件转写和章节速览功能时,一共会收到三次回调消息。当文件转写或章节速览任务完成时,各会收到一条ONGOING回调消息,如下所示。

{
    "Code":"0",
    "Data":{
        "TaskId":"e8adc0b3bc4b42d898fcadb0********",
        "TaskStatus":"ONGOING",
        "TaskKey":"TingwuDemo",
        "Result":{
            "Transcription":"http://speech-swap.oss-cn-zhangjiakou.aliyuncs.com/tingwu_data/output/1738248129743478/e8adc0b3bc4b42d898fcadb0a1710635/e8adc0b3bc4b42d898fcadb0a1710635_Transcription_20231101141926.json?Expires=1698906034&OSSAcceLTAI4G4uXHLPwQHj6oX8****6oX8nt5S&Signature=********NJlqSEWJxfkMwjwsHCA%3D"
        }
    },
    "Message":"success",
    "RequestId":"5cf2b587ac6e41e6a1f06ca1********"
}

当两个任务都完成后,会收到一条COMPLETED回调消息。

{
    "Code":"0",
    "Data":{
        "TaskId":"e8adc0b3bc4b42d898fcadb0********",
        "TaskStatus":"COMPLETED",
        "TaskKey":"TingwuDemo",
        "Result":{
            "AutoChapters":"http://speech-swap.oss-cn-zhangjiakou.aliyuncs.com/tingwu_data/output/1738248129743478/e8adc0b3bc4b42d898fcadb0a1710635/e8adc0b3bc4b42d898fcadb0a1710635_AutoChapters_20231101141955.json?Expires=1698906034&OSSAcceLTAI4G4uXHLPwQHj6oX8****6oX8nt5S&Signature=********Ax9FvifYAO8dj4qzWg%3D",
            "Transcription":"http://speech-swap.oss-cn-zhangjiakou.aliyuncs.com/tingwu_data/output/1738248129743478/e8adc0b3bc4b42d898fcadb0a1710635/e8adc0b3bc4b42d898fcadb0a1710635_Transcription_20231101141926.json?Expires=1698906034&OSSAccessKeyId=LTAI4G4uXHLPwQHj6oX8****&Signature=********NJlqSEWJxfkMwjwsHCA%3D"
        }
    },
    "Message":"success",
    "RequestId":"9c60b07f152445349eaa6161********"
}

阿里云事件总线服务

事件总线EventBridge是阿里云提供的一款无服务器事件总线服务,支持阿里云服务、自定义应用、SaaS应用以标准化、中心化的方式接入。听悟支持将回调消息发送到事件总线服务,您可以通过订阅听悟事件源,配置业务所需的事件规则,由事件总线服务将回调消息投递到目标服务,如函数计算、消息队列和钉钉机器人等。什么是事件总线EventBridge

步骤一

开通事件总线EventBridge并授权。进入事件总线控制台页面,左上角region选择华北2(北京),点击创建规则。

image

填写基本信息后,点击下一步。

image

事件源选择acs.tingwu,事件类型可以按需勾选。

image

事件类型和描述如下表所示。

事件类型

事件描述

tingwu:TaskStateUpdated:SubTaskCompleted

AI子任务完成后的回调消息。

tingwu:TaskStateUpdated:TaskCompleted

所有AI子任务完成后的回调消息。

tingwu:TaskStateUpdated:TaskFailed

任务失败的回调消息。

说明

假如用户仅使用文件转写和章节速览功能,则当文件转写或章节速览任务完成时,各会发送一条SubTaskCompleted事件,而当两项子任务都完成后,会发送一条TaskCompleted事件。

如果您仅关心完整的任务结果,则仅需要订阅TaskCompletedTaskFailed事件即可;如果您希望在单项子任务完成后立刻获取到结果,而不是等所有子任务都完成后再做处理,则需要订阅SubTaskCompleted事件。

完成配置后点击下一步,对事件目标进行配置,下图以RocketMQ为例,勾选实例和Topic后点击创建即可。

image

步骤二

前往听悟管控台,点击创建项目按钮,回调方式选择事件总线,点击确认按钮。

image

创建成功后,在控制台主页可以看到项目信息,其中AppKey需要作为后续提交听悟任务的必要参数。

步骤三

参考音视频文件离线转写创建一个离线转写任务。其中AppKey需要配置为步骤二中生成的对应值,同时需要将入参中的Input.ProgressiveCallbacksEnabled配置为true。

任务完成后,可以在事件总线default页面中,选择事件追踪,观察听悟发送给事件总线的对应事件。由于示例中配置的目标源是RocketMQ,因此这些消息将由事件总线服务路由到您的RocketMQ中。

image

如何对不同业务进行隔离

由于事件总线服务会接收同一主账号下所有听悟任务的回调消息,当用户在同一主账号下存在多个业务时,可能需要对这些回调消息进行业务隔离。因此,建议使用参数 Input.TaskKey 来区分不同的业务。例如,业务A在创建听悟任务时,将Input.TaskKey的前缀设置为TaskA。

在步骤一中,如果仅订阅Input.TaskKey前缀为TaskA的回调消息,则需要手动修改模式内容如下:

{
    "source": [
        "acs.tingwu"
    ],
    "type": [
        "tingwu:TaskStateUpdated:SubTaskCompleted",
        "tingwu:TaskStateUpdated:TaskCompleted",
        "tingwu:TaskStateUpdated:TaskFailed"
    ],
    "data": {
        "Data": {
            "TaskKey": [
                {
                    "prefix": "TaskA"
                }
            ]
        }
    }
}

您也可以参考事件模式,增加更多过滤规则。

  • 本页导读 (0)
  • 背景信息
  • 前提条件
  • HTTP方式
  • 步骤一
  • 步骤二
  • 步骤三
  • 阿里云事件总线服务
  • 步骤一
  • 步骤二
  • 步骤三
  • 如何对不同业务进行隔离