创建信号
curl --request POST \
--url https://api.dev.akria.net/api/v1/signals \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"signal_id": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-02-02T10:00:00Z",
"priority": "high",
"title": "AI 板块出现集中放量",
"summary": "多个AI相关代币在5分钟内成交量激增,同时Twitter上相关话题提及量增长230%",
"evidence": {
"market": {
"symbols": [
"AI1",
"AI2",
"AI3"
],
"volume_increase": "320%",
"price_change_range": "5-12%"
},
"twitter": {
"topic": "AI Meme",
"tweet_growth": 500,
"key_accounts": [
"@influencer1",
"@influencer2"
]
}
},
"expire_at": "2026-02-02T11:00:00Z"
}
'import requests
url = "https://api.dev.akria.net/api/v1/signals"
payload = {
"signal_id": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-02-02T10:00:00Z",
"priority": "high",
"title": "AI 板块出现集中放量",
"summary": "多个AI相关代币在5分钟内成交量激增,同时Twitter上相关话题提及量增长230%",
"evidence": {
"market": {
"symbols": ["AI1", "AI2", "AI3"],
"volume_increase": "320%",
"price_change_range": "5-12%"
},
"twitter": {
"topic": "AI Meme",
"tweet_growth": 500,
"key_accounts": ["@influencer1", "@influencer2"]
}
},
"expire_at": "2026-02-02T11:00:00Z"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
signal_id: '550e8400-e29b-41d4-a716-446655440000',
timestamp: '2026-02-02T10:00:00Z',
priority: 'high',
title: 'AI 板块出现集中放量',
summary: '多个AI相关代币在5分钟内成交量激增,同时Twitter上相关话题提及量增长230%',
evidence: {
market: {
symbols: ['AI1', 'AI2', 'AI3'],
volume_increase: '320%',
price_change_range: '5-12%'
},
twitter: {
topic: 'AI Meme',
tweet_growth: 500,
key_accounts: ['@influencer1', '@influencer2']
}
},
expire_at: '2026-02-02T11:00:00Z'
})
};
fetch('https://api.dev.akria.net/api/v1/signals', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.dev.akria.net/api/v1/signals",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'signal_id' => '550e8400-e29b-41d4-a716-446655440000',
'timestamp' => '2026-02-02T10:00:00Z',
'priority' => 'high',
'title' => 'AI 板块出现集中放量',
'summary' => '多个AI相关代币在5分钟内成交量激增,同时Twitter上相关话题提及量增长230%',
'evidence' => [
'market' => [
'symbols' => [
'AI1',
'AI2',
'AI3'
],
'volume_increase' => '320%',
'price_change_range' => '5-12%'
],
'twitter' => [
'topic' => 'AI Meme',
'tweet_growth' => 500,
'key_accounts' => [
'@influencer1',
'@influencer2'
]
]
],
'expire_at' => '2026-02-02T11:00:00Z'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.dev.akria.net/api/v1/signals"
payload := strings.NewReader("{\n \"signal_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"timestamp\": \"2026-02-02T10:00:00Z\",\n \"priority\": \"high\",\n \"title\": \"AI 板块出现集中放量\",\n \"summary\": \"多个AI相关代币在5分钟内成交量激增,同时Twitter上相关话题提及量增长230%\",\n \"evidence\": {\n \"market\": {\n \"symbols\": [\n \"AI1\",\n \"AI2\",\n \"AI3\"\n ],\n \"volume_increase\": \"320%\",\n \"price_change_range\": \"5-12%\"\n },\n \"twitter\": {\n \"topic\": \"AI Meme\",\n \"tweet_growth\": 500,\n \"key_accounts\": [\n \"@influencer1\",\n \"@influencer2\"\n ]\n }\n },\n \"expire_at\": \"2026-02-02T11:00:00Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.dev.akria.net/api/v1/signals")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"signal_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"timestamp\": \"2026-02-02T10:00:00Z\",\n \"priority\": \"high\",\n \"title\": \"AI 板块出现集中放量\",\n \"summary\": \"多个AI相关代币在5分钟内成交量激增,同时Twitter上相关话题提及量增长230%\",\n \"evidence\": {\n \"market\": {\n \"symbols\": [\n \"AI1\",\n \"AI2\",\n \"AI3\"\n ],\n \"volume_increase\": \"320%\",\n \"price_change_range\": \"5-12%\"\n },\n \"twitter\": {\n \"topic\": \"AI Meme\",\n \"tweet_growth\": 500,\n \"key_accounts\": [\n \"@influencer1\",\n \"@influencer2\"\n ]\n }\n },\n \"expire_at\": \"2026-02-02T11:00:00Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dev.akria.net/api/v1/signals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"signal_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"timestamp\": \"2026-02-02T10:00:00Z\",\n \"priority\": \"high\",\n \"title\": \"AI 板块出现集中放量\",\n \"summary\": \"多个AI相关代币在5分钟内成交量激增,同时Twitter上相关话题提及量增长230%\",\n \"evidence\": {\n \"market\": {\n \"symbols\": [\n \"AI1\",\n \"AI2\",\n \"AI3\"\n ],\n \"volume_increase\": \"320%\",\n \"price_change_range\": \"5-12%\"\n },\n \"twitter\": {\n \"topic\": \"AI Meme\",\n \"tweet_growth\": 500,\n \"key_accounts\": [\n \"@influencer1\",\n \"@influencer2\"\n ]\n }\n },\n \"expire_at\": \"2026-02-02T11:00:00Z\"\n}"
response = http.request(request)
puts response.read_body{
"id": 1,
"signal_id": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-02-02T10:00:00Z",
"priority": "high",
"title": "AI 板块出现集中放量",
"summary": "多个AI相关代币在5分钟内成交量激增",
"evidence": {
"market": {
"symbols": ["AI1", "AI2", "AI3"],
"volume_increase": "320%"
},
"twitter": {
"topic": "AI Meme",
"tweet_growth": 500
}
},
"expire_at": "2026-02-02T11:00:00Z",
"status": "dispatching",
"received_at": "2026-02-02T10:00:05.123456Z",
"created_at": "2026-02-02T10:00:05.123456Z",
"updated_at": "2026-02-02T10:00:05.123456Z"
}
Core API V1
POST 创建信号
接收来自分析层的已审计信号,验证并创建 outbox 记录
POST
/
api
/
v1
/
signals
创建信号
curl --request POST \
--url https://api.dev.akria.net/api/v1/signals \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"signal_id": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-02-02T10:00:00Z",
"priority": "high",
"title": "AI 板块出现集中放量",
"summary": "多个AI相关代币在5分钟内成交量激增,同时Twitter上相关话题提及量增长230%",
"evidence": {
"market": {
"symbols": [
"AI1",
"AI2",
"AI3"
],
"volume_increase": "320%",
"price_change_range": "5-12%"
},
"twitter": {
"topic": "AI Meme",
"tweet_growth": 500,
"key_accounts": [
"@influencer1",
"@influencer2"
]
}
},
"expire_at": "2026-02-02T11:00:00Z"
}
'import requests
url = "https://api.dev.akria.net/api/v1/signals"
payload = {
"signal_id": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-02-02T10:00:00Z",
"priority": "high",
"title": "AI 板块出现集中放量",
"summary": "多个AI相关代币在5分钟内成交量激增,同时Twitter上相关话题提及量增长230%",
"evidence": {
"market": {
"symbols": ["AI1", "AI2", "AI3"],
"volume_increase": "320%",
"price_change_range": "5-12%"
},
"twitter": {
"topic": "AI Meme",
"tweet_growth": 500,
"key_accounts": ["@influencer1", "@influencer2"]
}
},
"expire_at": "2026-02-02T11:00:00Z"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
signal_id: '550e8400-e29b-41d4-a716-446655440000',
timestamp: '2026-02-02T10:00:00Z',
priority: 'high',
title: 'AI 板块出现集中放量',
summary: '多个AI相关代币在5分钟内成交量激增,同时Twitter上相关话题提及量增长230%',
evidence: {
market: {
symbols: ['AI1', 'AI2', 'AI3'],
volume_increase: '320%',
price_change_range: '5-12%'
},
twitter: {
topic: 'AI Meme',
tweet_growth: 500,
key_accounts: ['@influencer1', '@influencer2']
}
},
expire_at: '2026-02-02T11:00:00Z'
})
};
fetch('https://api.dev.akria.net/api/v1/signals', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.dev.akria.net/api/v1/signals",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'signal_id' => '550e8400-e29b-41d4-a716-446655440000',
'timestamp' => '2026-02-02T10:00:00Z',
'priority' => 'high',
'title' => 'AI 板块出现集中放量',
'summary' => '多个AI相关代币在5分钟内成交量激增,同时Twitter上相关话题提及量增长230%',
'evidence' => [
'market' => [
'symbols' => [
'AI1',
'AI2',
'AI3'
],
'volume_increase' => '320%',
'price_change_range' => '5-12%'
],
'twitter' => [
'topic' => 'AI Meme',
'tweet_growth' => 500,
'key_accounts' => [
'@influencer1',
'@influencer2'
]
]
],
'expire_at' => '2026-02-02T11:00:00Z'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.dev.akria.net/api/v1/signals"
payload := strings.NewReader("{\n \"signal_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"timestamp\": \"2026-02-02T10:00:00Z\",\n \"priority\": \"high\",\n \"title\": \"AI 板块出现集中放量\",\n \"summary\": \"多个AI相关代币在5分钟内成交量激增,同时Twitter上相关话题提及量增长230%\",\n \"evidence\": {\n \"market\": {\n \"symbols\": [\n \"AI1\",\n \"AI2\",\n \"AI3\"\n ],\n \"volume_increase\": \"320%\",\n \"price_change_range\": \"5-12%\"\n },\n \"twitter\": {\n \"topic\": \"AI Meme\",\n \"tweet_growth\": 500,\n \"key_accounts\": [\n \"@influencer1\",\n \"@influencer2\"\n ]\n }\n },\n \"expire_at\": \"2026-02-02T11:00:00Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.dev.akria.net/api/v1/signals")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"signal_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"timestamp\": \"2026-02-02T10:00:00Z\",\n \"priority\": \"high\",\n \"title\": \"AI 板块出现集中放量\",\n \"summary\": \"多个AI相关代币在5分钟内成交量激增,同时Twitter上相关话题提及量增长230%\",\n \"evidence\": {\n \"market\": {\n \"symbols\": [\n \"AI1\",\n \"AI2\",\n \"AI3\"\n ],\n \"volume_increase\": \"320%\",\n \"price_change_range\": \"5-12%\"\n },\n \"twitter\": {\n \"topic\": \"AI Meme\",\n \"tweet_growth\": 500,\n \"key_accounts\": [\n \"@influencer1\",\n \"@influencer2\"\n ]\n }\n },\n \"expire_at\": \"2026-02-02T11:00:00Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dev.akria.net/api/v1/signals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"signal_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"timestamp\": \"2026-02-02T10:00:00Z\",\n \"priority\": \"high\",\n \"title\": \"AI 板块出现集中放量\",\n \"summary\": \"多个AI相关代币在5分钟内成交量激增,同时Twitter上相关话题提及量增长230%\",\n \"evidence\": {\n \"market\": {\n \"symbols\": [\n \"AI1\",\n \"AI2\",\n \"AI3\"\n ],\n \"volume_increase\": \"320%\",\n \"price_change_range\": \"5-12%\"\n },\n \"twitter\": {\n \"topic\": \"AI Meme\",\n \"tweet_growth\": 500,\n \"key_accounts\": [\n \"@influencer1\",\n \"@influencer2\"\n ]\n }\n },\n \"expire_at\": \"2026-02-02T11:00:00Z\"\n}"
response = http.request(request)
puts response.read_body{
"id": 1,
"signal_id": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-02-02T10:00:00Z",
"priority": "high",
"title": "AI 板块出现集中放量",
"summary": "多个AI相关代币在5分钟内成交量激增",
"evidence": {
"market": {
"symbols": ["AI1", "AI2", "AI3"],
"volume_increase": "320%"
},
"twitter": {
"topic": "AI Meme",
"tweet_growth": 500
}
},
"expire_at": "2026-02-02T11:00:00Z",
"status": "dispatching",
"received_at": "2026-02-02T10:00:05.123456Z",
"created_at": "2026-02-02T10:00:05.123456Z",
"updated_at": "2026-02-02T10:00:05.123456Z"
}
接收来自分析层的已审计信号,验证并创建 outbox 记录。
常见错误:
说明:
核心特性
字段验证
验证所有必填字段,确保数据完整性
过期检查
expire_at 必须未来时间,拒绝已过期信号幂等性保证
signal_id UNIQUE,重复提交返回已有记录自动生成 Outbox
为每个信号生成 2 条 outbox(ghost + rocketchat)
认证
所有 API 端点(除健康检查外)都需要在请求头中包含 API Key。
X-API-Key: your-api-key-here
联系管理员获取你所在组的 API Key。每个组有独立的 API Key,便于管理和追踪。
请求参数
Headers
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
X-API-Key | string | ✅ | API 认证密钥 |
Content-Type | string | ✅ | application/json |
Body 参数
| 字段 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
signal_id | UUID | ✅ | 信号唯一标识(用于幂等性) | 550e8400-e29b-41d4-a716-446655440000 |
timestamp | datetime | ✅ | 信号发生时间(ISO 8601,UTC) | 2026-02-02T10:00:00Z |
priority | string | ✅ | 优先级:high / medium / low | high |
title | string | ✅ | 信号标题(最大 100 字符) | AI 板块出现集中放量 |
summary | string | ✅ | 信号摘要 | 多个AI相关代币在5分钟内成交量激增 |
evidence | object | ✅ | 证据数据(JSON 对象) | {"market": {...}, "twitter": {...}} |
expire_at | datetime | ✅ | 过期时间(ISO 8601,UTC,必须未来时间) | 2026-02-02T11:00:00Z |
响应
成功响应(201 Created)
信号已创建,并生成了 outbox 记录。{
"id": 1,
"signal_id": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-02-02T10:00:00Z",
"priority": "high",
"title": "AI 板块出现集中放量",
"summary": "多个AI相关代币在5分钟内成交量激增",
"evidence": {
"market": {
"symbols": ["AI1", "AI2", "AI3"],
"volume_increase": "320%"
},
"twitter": {
"topic": "AI Meme",
"tweet_growth": 500
}
},
"expire_at": "2026-02-02T11:00:00Z",
"status": "dispatching",
"received_at": "2026-02-02T10:00:05.123456Z",
"created_at": "2026-02-02T10:00:05.123456Z",
"updated_at": "2026-02-02T10:00:05.123456Z"
}
状态说明:
dispatching 表示已创建 outbox,正在分发中。幂等性响应(200 OK)
使用相同的signal_id 再次提交,返回已有记录。
{
"id": 1,
"signal_id": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-02-02T10:00:00Z",
"priority": "high",
"title": "AI 板块出现集中放量",
"summary": "多个AI相关代币在5分钟内成交量激增",
"evidence": {...},
"expire_at": "2026-02-02T11:00:00Z",
"status": "dispatching",
"received_at": "2026-02-02T10:00:05.123456Z",
"created_at": "2026-02-02T10:00:05.123456Z",
"updated_at": "2026-02-02T10:00:05.123456Z"
}
错误响应
400 Bad Request - 验证失败
400 Bad Request - 验证失败
{
"detail": "expire_at must be in the future"
}
expire_at must be in the future: 过期时间已过Signal has already expired: 信号已过期Field required: 缺少必填字段priority must be one of: high, medium, low: 优先级无效Database integrity error: ...: 数据库约束错误(如重复的 signal_id)
500 Internal Server Error - 服务器错误
500 Internal Server Error - 服务器错误
{
"detail": "Internal server error"
}
- 生产环境:返回通用错误信息
"Internal server error" - 开发环境(DEBUG 模式):返回详细错误信息,格式为
"{ErrorType}: {error_message}"
生产环境不会返回详细的错误堆栈,这是出于安全考虑。如需调试,请查看服务器日志。
401 Unauthorized - 认证失败
401 Unauthorized - 认证失败
{
"detail": "Invalid API Key"
}
如果 API Key 错误或缺失,会返回
401 Unauthorized。请检查请求头中的 X-API-Key 是否正确。使用示例
curl -X POST https://api.dev.akria.net/api/v1/signals \
-H "Content-Type: application/json" \
-H "X-API-Key: your-api-key-here" \
-d '{
"signal_id": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-02-02T10:00:00Z",
"priority": "high",
"title": "AI 板块出现集中放量",
"summary": "多个AI相关代币在5分钟内成交量激增,同时Twitter上相关话题提及量增长230%",
"evidence": {
"market": {
"symbols": ["AI1", "AI2", "AI3"],
"volume_increase": "320%",
"price_change_range": "5-12%"
},
"twitter": {
"topic": "AI Meme",
"tweet_growth": 500,
"key_accounts": ["@influencer1", "@influencer2"]
}
},
"expire_at": "2026-02-02T11:00:00Z"
}'
import requests
import uuid
from datetime import datetime, timezone, timedelta
url = "https://api.dev.akria.net/api/v1/signals"
headers = {
"Content-Type": "application/json",
"X-API-Key": "your-api-key-here"
}
data = {
"signal_id": str(uuid.uuid4()),
"timestamp": datetime.now(timezone.utc).isoformat(),
"priority": "high",
"title": "AI 板块出现集中放量",
"summary": "多个AI相关代币在5分钟内成交量激增",
"evidence": {
"market": {
"symbols": ["AI1", "AI2"],
"volume_increase": "320%"
}
},
"expire_at": (datetime.now(timezone.utc) + timedelta(hours=1)).isoformat()
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const axios = require('axios');
const { v4: uuidv4 } = require('uuid');
const url = 'https://api.dev.akria.net/api/v1/signals';
const headers = {
'Content-Type': 'application/json',
'X-API-Key': 'your-api-key-here'
};
const data = {
signal_id: uuidv4(),
timestamp: new Date().toISOString(),
priority: 'high',
title: 'AI 板块出现集中放量',
summary: '多个AI相关代币在5分钟内成交量激增',
evidence: {
market: {
symbols: ['AI1', 'AI2'],
volume_increase: '320%'
}
},
expire_at: new Date(Date.now() + 3600000).toISOString()
};
axios.post(url, data, { headers })
.then(response => console.log(response.data))
.catch(error => console.error(error.response.data));
注意事项
signal_id 必须唯一
使用 UUID v4 生成,确保全局唯一性
expire_at 必须未来时间
建议至少 1 小时后,避免立即过期
幂等性保证
相同
signal_id 不会重复创建 outbox时区要求
所有时间字段使用 UTC(ISO 8601 格式,带 Z)
相关文档
团队使用手册
手把手教程,适合团队使用
拉取 Outbox
下游服务拉取待投递内容
ACK 确认
下游服务投递完成后发送 ACK 确认
Authorizations
API 认证密钥
Body
application/json
信号唯一标识(用于幂等性)
信号发生时间(ISO 8601,UTC)
优先级
Available options:
high, medium, low 信号标题
Maximum string length:
100信号摘要
证据数据(JSON 对象)
过期时间(ISO 8601,UTC,必须未来时间)
Response
幂等性响应:信号已存在
信号 ID
信号唯一标识
信号发生时间
优先级
Available options:
high, medium, low 信号标题
信号摘要
证据数据
过期时间
信号状态
Available options:
accepted, dispatching, sent, partial_sent, failed, archived 接收时间
创建时间
更新时间
⌘I