Webhook是一種基于HTTP/HTTPS協議的回調機制,允許服務端主動推送數據。RTC回調通知服務器使用Webhook將相關事件回調給開發者服務器,以便開發者按需處理自己的業務邏輯。
使用方法
前提條件
您已部署用于接收回調消息的HTTP/HTTPS服務。
您已經注冊了阿里云賬號并完成賬號實名認證。注冊地址請參見阿里云官網。注冊指引請參見注冊阿里云賬號。實名認證指引請參見個人實名認證或企業實名認證和個體工商戶認證。
您已經開通了RTC服務。開通步驟請參見開通服務。
使用流程
在控制臺開通某個AppID的事件回調功能。
登錄RTC控制臺,在左側導航欄選擇配置管理 > 事件通知 > 選中對應的AppID,進行回調設置頁面。按需配置具體的事件。
觸發回調事件。
完成AppID應用事件通知配置之后,您可以通過服務端API,發起相關任務,比如開啟錄制、開啟推流等操作來觸發相應的回調事件產生。
接收回調事件。
當回調事件產生之后,比如錄制文件生成,若回調成功,您可以在您部署的回調接受服務器中查看具體的回調事件通知。
回調機制
您需要自行部署一個HTTP服務來接收回調消息,并在控制臺中具體業務中配置回調URL。
當事件產生時,RTC回調通知服務器會向該URL發起HTTP POST請求,事件通知內容將通過HTTP Body送達。
您的HTTP服務對HTTP POST請求進行響應且HTTP狀態碼為200,即視為回調成功;若響應其他狀態碼或響應超時,則視為回調失敗。
回調成功后,您配置的回調URL中將接收到相應的事件通知內容。
回調格式
回調消息以HTTP POST請求發送到您的服務器,請求Body格式為JSON。字符編碼為UTF-8。
回調消息的請求Header 中包含以下字段:
字段 | 示例值 | 描述 |
Content-Type | application/json | 固定值 |
trace-id | 2401058********622012463d9 | 該字段用于排查問題使用 |
DingRTC-Signature | z5jbvxxx.1718877424.xx3e7691142ffe4342e13e25dc317695b17827e34ec248a5cc35d3a7e1e1cd44 | RTC回調服務加密算法生成的加密值。詳見驗證簽名。 |
回調消息請求的Body中包含以下字段:
名稱 | 類型 | 是否必須 | 示例值 | 描述 |
eventId | string | 是 | 12343aed********* | 事件ID |
eventType | string | 是 | 101 | 事件類型,RTC回調服務器有個eventType,具體類型見下文回調消息列表 |
notifyTime | long | 是 | 1701056041128 | 通知時間戳,單位:毫秒 |
eventData | JSONObject | 是 |
| 回調消息具體內容,每種類型的事件不一樣,具體見下文回調消息列表 |
您的服務器收到的通知順序和事件發生的順序不一定完全一致。
為確保回調消息通知的可靠性,每次事件可能會有不止一次消息通知,您的服務器可能需要做消息冪等處理。
驗證簽名
RTC回調服務器在通知客戶服務器時,為了校驗本次請求的合法性,約定簽名算法如下。
消息頭中的 DingRTC-Signature 由三部分組成,用.
拼接在一起。格式為AppId.TimeStamp.Signature
,字段含義如下:
AppID: 應用ID。
TimeStamp:UTC時間戳(精確到秒)。
Signature:簽名,由HTTP請求內容的原始字符串、時間戳、回調密鑰計算得出,詳細算法如下:
Signature=hexString(HmacSHA256(請求內容的原始字符串+TimeStamp,callbackSecret))
回調通知密鑰請通過控制臺獲取。
驗證簽名時,您可以參考以下代碼:
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
public class SignUtil {
public static final String HMAC_SHA_256 = "HmacSHA256";
public static String hmacSha256(String message, String secret) {
try {
SecretKeySpec signingKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), HMAC_SHA_256);
Mac mac = Mac.getInstance(HMAC_SHA_256);
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));
return bytesToHex(rawHmac);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static String bytesToHex(byte[] bytes) {
StringBuffer sb = new StringBuffer();
for (byte b : bytes) {
String hex = Integer.toHexString(b & 0xFF);
if (hex.length() < 2) {
sb.append(0);
}
sb.append(hex);
}
return sb.toString();
}
public static void main(String[] args) {
String requestBody = "{\"eventData\":{\"channelId\":\"55\",\"timestamp\":1718877424674},\"eventId\":\"2133cc0c17188774246986428d0cb0\",\"eventType\":\"101\",\"notifyTime\":1718877424701}";
String secret = "your callback secret";
String signatureHeader = "z5jbvxxx.1718877424.150f2b8e107a0f4399671dcf2b1e3e2ac78252a26c9626abf4a29a77464a96c1";
String appId = signatureHeader.split("\\.")[0];
String timestamp = signatureHeader.split("\\.")[1];
String signature = signatureHeader.split("\\.")[2];
if (signature.equals(hmacSha256(requestBody + timestamp, secret))) {
System.out.println("DingRTC-Signature is valid");
} else {
System.out.println("DingRTC-Signature is invalid");
}
}
}
# !-*- coding: utf-8 -*-
import hashlib
import hmac
request_body='{"eventData":{"channelId":"55","timestamp":1718877424674},"eventId":"2133cc0c17188774246986428d0cb0","eventType":"101","notifyTime":1718877424701}'
secret = 'your callback secret'
signature_header = 'z5jbvxxx.1718877424.150f2b8e107a0f4399671dcf2b1e3e2ac78252a26c9626abf4a29a77464a96c1'
appId = signature_header.split('.')[0]
timestamp = signature_header.split('.')[1]
signature = signature_header.split('.')[2]
sign_body = request_body + timestamp
if (signature == hmac.new(secret.encode('utf-8'), sign_body.encode('utf-8'), hashlib.sha256).hexdigest()):
print("DingRTC-Signature is valid")
else:
print("DingRTC-Signature is invalid")
回調消息列表
本文檔的JSON示例省略了Body中eventId
和notifyTime
。
回調內容可能會增加字段,或者調整字段順序,請根據您使用的開發語言采用適當的解析方式。
驗證事件
001 回調驗證
該場景僅在控制臺設置具體回調URL或者手動校驗時觸發。
{
"eventType": "001",
"eventData":{
"appId": "12adxxxx2"
}
}
頻道事件
101 頻道開始
{
"eventType": "101",
"eventData":{
"channelId": "room**" // 頻道id
"timestamp": 1709696165584 // 發生時間(ms)
}
}
102 頻道結束
{
"eventType": "102",
"eventData":{
"channelId": "room**" // 頻道id
"timestamp": 1709696165584 // 發生時間(ms)
}
}
103 用戶加入
{
"eventType": "103",
"eventData":{
"channelId": "room**" // 頻道id
"user":{
"userId":"123444"
}
"timestamp": 1709696165584 // 發生時間(ms)
}
}
104 用戶離開
{
"eventType": "104",
"eventData":{
"channelId": "room**" // 頻道id
"reasonCode": 20003001, // 用戶離開原因,詳見狀態碼表格
"user":{
"userId":"123444"
}
"timestamp": 1709696165584 // 發生時間(ms)
}
}
推流事件
1000 開始推流
{
"eventType": "1000",
"eventData": {
"channelId": "room**", // 頻道id
"liveState":{
"code": 20000000, // 狀態碼,詳見狀態碼表格
},
"taskId": "task-03061", // 任務id
"timestamp": 1709737037688 // 發生時間(ms)
}
}
1001 推流正常結束
{
"eventType": "1001",
"eventData": {
"channelId": "room**", // 頻道id
"liveState":{
"code": 20000000, // 狀態碼,詳見狀態碼表格
},
"taskId": "task-03061", // 任務id
"timestamp": 1709737037688 // 發生時間(ms)
}
}
1002 推流異常
{
"eventType": "1002",
"eventData": {
"channelId": "room**", // 頻道id
"liveState":{
"code": 50001001, // 狀態碼,詳見狀態碼表格
}
"taskId": "task-03061", // 任務id
"timestamp": 1709737037688 // 發生時間(ms)
}
}
錄制事件
2000 開始錄制
{
"eventType": "2000",
"eventData": {
"channelId": "room**",
"recordState": {
"bucket":"rtc*******", // 錄制文件存放bucket
"vendor":1, // 對象存儲供應商,見開啟錄制接口
"region":1, // 對象存儲region,見開啟錄制接口
"startTs":1709737037688, // 錄制開始時間戳,單位:毫秒(ms)
"code": 20000000
},
"taskId": "task-0422",
"timestamp": 1709737037688
}
}
2001 錄制成功
{
"eventType": "2001",
"eventData": {
"channelId": "room**",
"recordState": {
"bucket":"rtc*******", // 錄制文件存放bucket
"vendor":1, // 對象存儲供應商,見開啟錄制接口
"region":1, // 對象存儲region,見開啟錄制接口
"startTs":1709737037688, // 錄制開始時間戳,單位:毫秒(ms)
"code": 20000000, // 狀態碼,詳見狀態碼表格
"fileFailCount": 0,
"fileInfo": [
{
"fileDuration": 7859, // 錄制文件時長,單位:毫秒(ms)
"fileSize": 216777, // 錄制文件大小,單位:字節(Byte)
"filePath": "record/v980**/65e82ef000210**/1709737028486_1709737030532/1709737028486-1709737030532.mp4",// 錄制文件存儲路徑
"status": 0, // 0表示成功, 其他表示失敗
"timestamp": 1709737037679 // 錄制文件生成的時間戳(ms)
}
],
"fileCount": 1 // 錄制文件總數
},
"taskId": "task-03061",
"timestamp": 1709737037688
}
}
2002 錄制失敗
{
"eventType": "2002",
"eventData": {
"channelId": "room**",
"recordState": {
"bucket":"rtc*******", // 錄制文件存放bucket
"vendor":1, // 對象存儲供應商,見開啟錄制接口
"region":1, // 對象存儲region,見開啟錄制接口
"startTs":1709737037688, // 錄制開始時間戳,單位:毫秒(ms)
"reason": "WritePlaylist failed",
"code": 50002001, //狀態碼,見最后狀態碼表格
"fileFailCount": 2,
"fileInfo": [
{
"reason": "write flv file fail", // 失敗原因
"status": 50002001,
"timestamp": 1709721091674
},
{
"reason": "WritePlaylist failed",
"fileDuration": 30437,
"fileSize": 123875456,
"filePath": "taskidtaskId-199-cid65e844**e000000001ac0000/playlist.m3u8",
"status": 50002001,
"timestamp": 1709721103666
}
],
"fileCount": 2
},
"taskId": "taskId-199",
"timestamp": 1709721103673
}
}
2010 錄制服務狀態變化
該事件默認不會主動回調,請通過控制臺或者OpenAPI 完成訂閱。
{
"eventType": "2010",
"eventData": {
"channelId": "room**",
"recordState": {
"bucket":"rtc*******", // 錄制文件存放bucket
"vendor":1, // 對象存儲供應商,見開啟錄制接口
"region":1, // 對象存儲region,見開啟錄制接口
"startTs":1709737037688, // 錄制開始時間戳,單位:毫秒(ms)
"code": 20002002 // 狀態碼,詳見狀態碼表格
},
"taskId": "taskId-199",
"timestamp": 1709721103673
}
}
2011 錄制音頻流變化
該事件默認不會主動回調,請通過控制臺或者OpenAPI 完成訂閱。
{
"eventType": "2011",
"eventData": {
"channelId": "room**",
"recordState": {
"streamChangeInfo": { // 流變化信息
"streamType": 3, // 流類型 1: 攝像頭流 2:共享流 3: 音頻合流 4: 視頻合流
"state": 1, // 錄制收流狀態 1: 正在接收 2: 未在接收
"direction": 2, // 流方向 1: 輸入 2: 輸出
"timestamp": 1721112755076 // 狀態變化Unix 毫秒時間戳
}
},
"taskId": "taskId-199",
"timestamp": 1709721103673
}
}
2012 錄制視頻流變化
該事件默認不會主動回調,請通過控制臺或者OpenAPI 完成訂閱。
{
"eventType": "2012",
"eventData": {
"channelId": "room**",
"recordState": {
"streamChangeInfo": { // 流變化信息
"uid": "user1", // 流方向為輸出時,流屬于合流,uid為空。否則為具體uid
"streamType": 1, // 流類型 1: 攝像頭流 2:共享流 3: 音頻合流 4: 視頻合流
"state": 1, // 錄制收流狀態 1: 正在接收 2: 未在接收
"direction": 1, // 流方向 1: 輸入 2: 輸出
"timestamp": 1721112755076 // 狀態變化Unix 毫秒時間戳
}
},
"taskId": "taskId-199",
"timestamp": 1709721103673
}
}
紀要事件
3000 紀要開始
{
"eventType": "3000",
"eventData": {
"channelId": "room**",
"asrState": {
"code": 20000000 // 狀態碼,詳見狀態碼表格
},
"taskId": "taskId-199",
"timestamp": 1709721103673
}
}
3001 紀要成功
{
"eventType": "3001",
"eventData": {
"asrState": {
"transcriptionFilePath": "cloudNote/6pz38941/1234_1234/transcription_1734069823271.json", // 轉寫結果
"serviceInspectionFilePath": "cloudNote/6pz38941/1234_1234/serviceInspection_1734069824007.json", // 服務質檢結果
"customPromptFilePath": "cloudNote/6pz38941/1234_1234/customPrompt_1734069824057.json", // 自定義Prompt結果
"meetingAssistanceFilePath": "cloudNote/6pz38941/1234_1234/meetingAssistance_1734069823787.json", // 要點提煉結果
"summarizationFilePath": "cloudNote/6pz38941/1234_1234/summarization_1734069823845.json", // 摘要總結結果
"textPolishFilePath": "cloudNote/6pz38941/1234_1234/textPolish_1734069823903.json", // 口語書面化結果
"autoChaptersFilePath": "cloudNote/6pz38941/1234_1234/autoChapters_1734069823728.json", // 自動章節結果
"vendor": 1, // 對象存儲提供方
"region": 1, // 對象存儲region
"bucket": "rtc-qa-test" // bucket 名稱
},
"channelId": "room**",
"taskId": "taskId-199",
"timestamp": 1709721103673
}
}
結果文件路徑格式規則:cloudNote/{appId}/{channelId}_{taskId}/{biz}_{putTs}.json
{
"TaskId":"10683ca4ad3f4f06bdf6e9dc*********",
"Transcription":{
"AudioInfo": {
"Size": 670663,
"Duration": 10394,
"SampleRate": 48000,
"Language": "cn"
},
"Paragraphs":[
{
"ParagraphId":"16987422100275*******",
"SpeakerId":"1",
"Words":[
{
"Id":10,
"SentenceId":1,
"Start":4970,
"End":5560,
"Text":"您好,"
},
{
"Id":20,
"SentenceId":1,
"Start":5730,
"End":6176,
"Text":"我是"
}
]
}
]
"AudioSegments": [
[12130, 16994],
[17000, 19720],
[19940, 28649]
]
}
}
參數名 | 類型 | 說明 |
TaskId | string | 紀要內部ID,可以通過該字段排查問題。 |
Transcription | object | 語音轉寫結果對象。 |
Transcription.Paragraphs | list[] | 語音轉寫結構以段落形式組織的集合。 |
Transcription.Paragraphs[i].ParagraphId | string | 段落級別id。 |
Transcription.Paragraphs[i].SpeakerId | string | 發言人id。 |
Transcription.Paragraphs[i].Words | list[] | 該段落包含的word信息。 |
Transcription.Paragraphs[i].Words[i].Id | int | word序號,通常無須關注。 |
Transcription.Paragraphs[i].Words[i].SentenceId | int | 句子id,同屬于一個SentenceId的word信息可以組裝成一句話。 |
Transcription.Paragraphs[i].Words[i].Start | long | 該word相對于音頻起始時間的開始時間,相對時間戳,單位毫秒。 |
Transcription.Paragraphs[i].Words[i].End | long | 該word相對于音頻起始時間的結束時間,相對時間戳,單位毫秒。 |
Transcription.Paragraphs[i].Words[i].Text | string | word文本。 |
Transcription.AudioInfo | object | 音頻信息對象。 |
Transcription.AudioInfo.Size | long | 音頻大小,單位:字節。 |
Transcription.AudioInfo.Duration | long | 音頻時長,單位:毫秒。(實時語音轉寫時,該字段不表示實際音頻時長) |
Transcription.AudioInfo.SampleRate | int | 音頻采樣率。 |
Transcription.AudioInfo.Language | string | 音頻語種。 |
Transcription.AudioSegments | list[][] | 有效音頻片斷范圍。 |
Transcription.AudioSegments[i][0] | int | 有效音頻片段的開始時間,單位為毫秒。 |
Transcription.AudioSegments[i][1] | int | 有效音頻片段的結束時間,單位為毫秒。 |
{
"TaskId": "4ee872e72fd0490694f1cd615b6b6314",
"ServiceInspection": [
{
"Title": "到店迎接-歡迎語",
"Matched": true,
"Remarks": "銷售人員通過詢問開啟對話,表現出一定的迎接意圖。",
"MatchedSentenceIds": [
]
},
{
"Title": "離店送別-客戶留資",
"Matched": true,
"Remarks": "銷售人員提出加釘釘的方式以便后續聯系。",
"MatchedSentenceIds": [
]
},
{
"Title": "到店迎接-飲品提供",
"Matched": false,
"Remarks": "對話中未提及提供飲品的信息。",
"MatchedSentenceIds": [
]
}
]
}
參數名 | 類型 | 說明 |
TaskId | string | 紀要內部ID,可以通過該字段排查問題。 |
ServiceInspection | list[] | 服務質檢結果的集合,含有0個、1個或多個服務質檢結果信息。 |
ServiceInspection[i].Title | string | 服務質檢結果的名稱,和入參的ServiceInspection.InspectionContents[i].Title對應。 |
ServiceInspection[i].Matched | boolean | 本條服務質檢項是否命中。 |
ServiceInspection[i].Remarks | string | 大模型對本條質檢項的分析。 |
ServiceInspection[i].MatchedSentenceIds | list[] | 命中該質檢項的原始對話,在原文中的句子id。 |
{
"TaskId": "c8b8f8cac1134675a8722ae3********",
"CustomPrompt": [
{
"Name": "split-summary-demo",
"Result": "這段對話主要圍繞著釘釘的語音技術和相關的人工智能研究成果展開。發言人1(靜常)來自釘釘,負責介紹釘釘的研究成果和未來展望;而發言人2則是來自西瓜視頻的科普視頻創作者,主要通過提問和觀察來了解并分享釘釘的技術。\n\n發言人1首先提到,雖然預測未來科技存在很大風險,但他們仍然堅持這樣做,旨在向公眾傳達對未來科技的看法與態度。他隨后介紹了釘釘在全球的分布,并重點提到釘釘位于杭州的總部及研究院的重要性和規模。此外,靜常還討論了釘釘發布的關于未來十大科技的報告,表達了他們對人工智能前沿技術的研究興趣,尤其是語音技術。\n\n在對語音技術的討論中,靜常提出了在多種環境中(如嘈雜環境、多人討論會議等)語音識別面臨的挑戰,并探討了目前的技術解決方案,例如通過機器學習將問題分類后轉交給相應的人工服務。他還談到了一個長期目標-實現AI參與會議,以提高會議效率和決策質量。\n\n發言人2則從外部觀察者的角度出發,通過實際體驗來感受和展示釘釘的語音技術支持下的各種應用場景,比如語音控制販賣機、智能電視機等,并通過直觀的例子說明語音技術在現實生活中的應用潛力和挑戰。\n\n最后,兩位發言人共同強調了讓語音交互“無處不在”的目標,并探討了基于此技術,如何更好地服務于人類社會,以及企業在持續發展中如何堅持以用戶需求為中心的原則。\n\n總之,這次對話深入探討了釘釘在語音技術及其他人工智能領域的研究進展和未來規劃,同時也反映了這些技術在實際生活中的應用現狀和潛在影響。",
"Truncated": false
},
{
"Name": "inspection-demo",
"Result": "無",
"Truncated": false
}
]
}
參數名 | 類型 | 說明 |
TaskId | string | 紀要內部ID,可以通過該字段排查問題。 |
CustomPrompt | list[] | 自定義Prompt結果列表。 |
CustomPrompt.Name | string | 與入參結構中的CustomPrompt.Contents[i].Name對應。 |
CustomPrompt.Result | string | 大模型返回結果。 |
CustomPrompt.Truncated | boolean | 是否發生了截斷。 |
{
"TaskId":"8b78c180e034fe9097e9135s7ebba1fa",
"MeetingAssistance":{
"Keywords":[
"釘釘",
"阿里巴巴",
"語音"
],
"KeySentences":[
{
"Id":1,
"SentenceId":1,
"Start":31680,
"End":36582,
"Text":"首先我介紹一下我們的工作和崗位的要求。"
},
{
"Id":2,
"SentenceId":45,
"Start":1452950,
"End":1462184,
"Text":"主要做的是語音,來自語音實驗室,主要做語音轉文字和語音相關的云服務。"
}
],
"Actions":[
{
"Id":1,
"SentenceId":8,
"Start":39654,
"End":52117,
"Text":"確認PPT模板中的內容是否有問題"
},
{
"Id":2,
"SentenceId":18,
"Start":84693,
"End":86786,
"Text":"關注釘釘試用情況和即將發布情況"
}
],
"Classifications":{
"Interview":0.6549709,
"Lecture":0.18346232,
"Meeting":0.16156682
}
}
}
參數名 | 類型 | 說明 |
TaskId | string | 紀要內部ID,可以通過該字段排查問題。 |
MeetingAssistance | object | 要點提煉結果對象,可能包含0個或多個不同類型的結果。 |
MeetingAssistance.Keywords | list[] | 關鍵詞提取結果。 |
MeetingAssistance.KeySentences | list[] | 關鍵句提取結果,也稱為重點內容。 |
MeetingAssistance.KeySentences[i].Id | long | 關鍵句序號。 |
MeetingAssistance.KeySentences[i].SentenceId | long | 該關鍵句在原ASR轉寫中對應的句子Id。 |
MeetingAssistance.KeySentences[i].Start | long | 相對于音頻起始時間的開始時間,相對時間戳,單位毫秒。 |
MeetingAssistance.KeySentences[i].End | long | 相對于音頻起始時間的結束時間,相對時間戳,單位毫秒。 |
MeetingAssistance.KeySentences[i].Text | string | 關鍵句信息。 |
MeetingAssistance.Actions | list[] | 待辦內容、待辦摘要的集合。 |
MeetingAssistance.Actions[i].Id | long | 待辦序號。 |
MeetingAssistance.Actions[i].SentenceId | long | 該關鍵句在原ASR轉寫中對應的句子Id。 |
MeetingAssistance.Actions[i].Start | long | 相對于音頻起始時間的開始時間,相對時間戳,單位毫秒。 |
MeetingAssistance.Actions[i].End | long | 相對于音頻起始時間的結束時間,相對時間戳,單位毫秒。 |
MeetingAssistance.Actions[i].Text | string | 待辦內容。 |
MeetingAssistance.Classifications | object | 場景識別分類,目前只有3種場景分類。 |
MeetingAssistance.Classifications.Interview | float | 面試場景置信度得分。 |
MeetingAssistance.Classifications.Lecture | float | 演講場景置信度得分。 |
MeetingAssistance.Classifications.Meeting | float | 會議場景置信度得分。 |
{
"TaskId": "5a7343ad75e6493da121ce65*********",
"Summarization": {
"ParagraphSummary": "介紹了阿里巴巴釘釘音視頻的工作和崗位要求。他提到釘釘紀要相關的云服務。另外,他還回答了其他問題以及多模態項目的介紹。",
"ConversationalSummary": [
{
"SpeakerId": "1",
"SpeakerName": "發言人1",
"Summary": "介紹了阿里巴巴釘釘的工作和崗位要求,主要是語音的轉文字和文字轉語音相關的云服務。他還提到了釘釘的目標是一個接口的服務,在云上對外進行售賣,并介紹了紀要產品的功能,包括總結、關鍵詞提取等多模態能力。該產品即將在月底發布,可供用戶訪問。"
},
{
"SpeakerId": "2",
"SpeakerName": "發言人2",
"Summary": "他負責NLP方向的AI能力的生產和業務能力的對接。他介紹了公司的三個項目。他還提到了在批改中遇到的一些難點和解決方案,以及公司未來對多模態項目的嘗試。"
}
],
"QuestionsAnsweringSummary": [
{
"Question": "請問釘釘音視頻是什么樣的部門?",
"SentenceIdsOfQuestion": [
207,
208,
209,
210
],
"Answer": "釘釘音視頻是阿里巴巴集團釘釘下的一個事業部,主要負責音視頻服務。",
"SentenceIdsOfAnswer": [
207,
208,
209,
210
]
}
],
"MindMapSummary": [
{
"Title": "阿里巴巴釘釘語音技術與智能設備實地參觀紀要",
"Topic": [
{
"Title": "1. 釘釘介紹",
"Topic": [
{
"Title": "總部位于杭州,分設在全球多個地點",
"Topic": []
},
{
"Title": "主要研究領域及成果",
"Topic": [
{
"Title": "未來十大科技趨勢預測",
"Topic": []
},
{
"Title": "持續進行高風險科研項目",
"Topic": []
}
]
}
]
},
{
"Title": "2. 語音技術討論",
"Topic": [
{
"Title": "實驗室環境挑戰",
"Topic": [
{
"Title": "強噪聲、多人交談、多種電器干擾",
"Topic": []
}
]
},
{
"Title": "技術挑戰",
"Topic": [
{
"Title": "目標說話人識別",
"Topic": []
},
{
"Title": "語意理解:同音異義詞的情感區分",
"Topic": []
}
]
},
{
"Title": "應用現狀",
"Topic": [
{
"Title": "Call Center自動化應答",
"Topic": []
},
{
"Title": "會議場景中的語音識別優化",
"Topic": []
}
]
},
{
"Title": "未來展望",
"Topic": [
{
"Title": "AI參與會議,提高決策質量",
"Topic": []
},
{
"Title": "語音技術在各領域的廣泛應用",
"Topic": []
}
]
}
]
}
]
}
]
}
}
參數名 | 類型 | 說明 |
TaskId | string | 紀要內部ID,可以通過該字段排查問題。 |
Summarization | object | 摘要結果對象,可能包含0個或多個不同摘要類型的結果。 |
Summarization.ParagraphSummary | string | 全文摘要結果。 |
Summarization.ConversationalSummary | list[] | 發言總結摘要結果列表。 |
Summarization.ConversationalSummary[i].SpeakerId | string | 發言人id。 |
Summarization.ConversationalSummary[i].SpeakerName | string | 發言人名字。 |
Summarization.ConversationalSummary[i].Summary | string | 該發言人對應的總結。 |
Summarization.QuestionsAnsweringSummary | list[] | 問答回顧摘要結果列表。 |
Summarization.QuestionsAnsweringSummary[i].Question | string | 問題 |
Summarization.QuestionsAnsweringSummary[i].SentenceIdsOfQuestion | list[] | 提煉出該問題對應的原語音轉寫的SentenceId列表。 |
Summarization.QuestionsAnsweringSummary[i].Answer | string | 問題對應的答案。 |
Summarization.QuestionsAnsweringSummary[i].SentenceIdsOfAnswer | list[] | 總結出該答案對應的原語音轉寫的SentenceId列表。 |
Summarization.MindMapSummary | list[] | 思維導圖結果列表。 |
Summarization.MindMapSummary[i].Title | string | 思維導圖單個節點的文本內容。 |
Summarization.MindMapSummary[i].Topic | list[] | 思維導圖單個節點的子節點列表。 |
{
"TaskId": "742efa3a71f7475fae81a060********",
"TextPolish": [
{
"FormalParagraphText": "云棲大會作為中國產業界的盛會,成為數字時代共同討論的場所。阿里巴巴通過青橙獎助力青年科學家追求科學先進性。阿里云在云計算和數字生態方面不斷發展,努力成為全球先進的計算基礎設施。同時,阿里巴巴也在不斷追求技術先進性,包括自主可控的云操作系統、算法模型的訓練等。阿里巴巴希望通過低代碼環境讓普通人也能享受數據的成果和創造。此外,在芯片領域,阿里巴巴也在努力突破核心技術。",
"SentenceIds": [
1,
2
],
"ParagraphId": "1708487265101500000",
"Start": 30,
"End": 9600
},
{
"FormalParagraphText": "平頭哥圍繞云計算場景定義了倚天710芯片,并助力冬奧在云上舉辦。云計算為各行各業帶來全新的生產管理方式,推動中國走向現代化。阿里巴巴致力于追求技術先進性,并為社會發展擔當更大責任,努力使云計算成為可持續發展的綠色動力。",
"SentenceIds": [
3,
4,
5
],
"ParagraphId": "1708487280411500000",
"Start": 15340,
"End": 17790
}
]
}
參數名 | 類型 | 說明 |
TaskId | string | 紀要內部ID,可以通過該字段排查問題。 |
TextPolish | list[] | 口語書面化集合, 含有0個、1個或多個口語書面化信息。 |
TextPolish[i].FormalParagraphText | string | 口語書面化的文本結果。 |
TextPolish[i].SentenceIds | list[] | 口語書面化改寫內容對應的SentenceId列表。 |
TextPolish[i].ParagraphId | string | 文本結果的段落id,和語音轉寫結果中的段落id對應。 |
TextPolish[i].Start | long | 文本結果在原音頻中的開始時間,相對時間戳,單位為毫秒。 |
TextPolish[i].End | long | 文本結果在原音頻中的結束時間,相對時間戳,單位為毫秒。 |
{
"TaskId":"05c45066fc6df96dg09bf8z4*********",
"AutoChapters":[
{
"Id":1,
"Start":1930,
"End":283874,
"Headline":"阿里巴巴云棲大會及技術責任",
"Summary":"云棲大會作為中國產業界的盛會,成為數字時代共同討論的場所。阿里巴巴通過青橙獎助力青年科學家追求科學先進性。阿里云在云計算和數字生態方面不斷發展,努力成為全球先進的計算基礎設施。同時,阿里巴巴也在不斷追求技術先進性,包括自主可控的云操作系統、算法模型的訓練等。阿里巴巴希望通過低代碼環境讓普通人也能享受數據的成果和創造。此外,在芯片領域,阿里巴巴也在努力突破核心技術。"
},
{
"Id":2,
"Start":284050,
"End":452084,
"Headline":"云計算:推動中國走向現代化",
"Summary":"平頭哥圍繞云計算場景定義了倚天710芯片,并助力冬奧在云上舉辦。云計算為各行各業帶來全新的生產管理方式,推動中國走向現代化。阿里巴巴致力于追求技術先進性,并為社會發展擔當更大責任,努力使云計算成為可持續發展的綠色動力。"
}
]
}
參數名 | 類型 | 說明 |
TaskId | string | 紀要內部ID,可以通過該字段排查問題。 |
AutoChapters | list[] | 章節速覽集合, 含有0個、1個或多個章節速覽信息。 |
AutoChapters[i].Id | int | 該章節序號。 |
AutoChapters[i].Start | long | 該章節相對于音頻起始時間的開始時間,相對時間戳,單位毫秒。 |
AutoChapters[i].End | long | 該章節相對于音頻起始時間的結束時間,相對時間戳,單位毫秒。 |
AutoChapters[i].Headline | string | 該章節的一句話標題。 |
AutoChapters[i].Summary | string | 章節總結。 |
3002 紀要失敗
{
"eventType": "3000",
"eventData": {
"channelId": "room**",
"asrState": {
"code": 50004001 // 狀態碼,詳見狀態碼表格
},
"taskId": "taskId-199",
"timestamp": 1709721103673
}
}
狀態碼表格
類型 | 狀態碼 | 說明 |
公共 | 20000000 | 成功 |
50000000 | 服務器內部錯誤 | |
推流 | 50001001 | 推流異常 |
錄制 | 50002001 | 寫入用戶存儲失敗, 可能是網絡問題 |
50002002 | 啟動用戶存儲失敗, 可能是入參AK/SK/Bucket/Region/Vendor輸入錯誤 | |
50002003 | 錄制時間過短,沒有生成錄制文件 | |
50002004 | 用戶存儲密鑰錯誤 | |
50002005 | bucket不存在 | |
50002006 | 訪問用戶存儲被拒絕 | |
20002001 | 沒有開始云端錄制 | |
20002002 | 云端錄制初始化完成 | |
20002003 | 錄制組件開始啟動 | |
20002004 | 錄制組件啟動完成 | |
20002005 | 停止錄制 | |
20002006 | 上傳組件已啟動 | |
20002007 | 已成功上傳第一個文件 | |
用戶 | 20003001 | 客戶端主動退會 |
20003002 | 客戶端保活異常 | |
20003003 | 用戶被踢出 | |
20003004 | 相同uid移除 | |
20003005 | 未知原因退會 | |
紀要 | 50004001 | 紀要服務器異常 |
50004002 | 紀要任務超過最大時間 | |
30006001 | 用戶ak/sk/bucket配置異常 |