Aile 消息格式完整規格說明書

版本: v1.0\ 最後更新: 2026-06-13\ 服務範圍: aile-service-room(核心)、aile-common-dependency(通用類型)\ 儲存引擎: Elasticsearch(index: aile.message


1. 概述

Aile 的消息系統支援 13 種基礎消息類型、4 種模板類型、8 種消息標籤(Tag)和 5 種消息來源。消息以 MessageModel 為核心載體,透過 content 欄位(Object 類型)承載各類型專屬的結構化內容。


2. MessageModel(消息核心模型)

2.1 資料結構


    
    
    
  // aile-api/aile-room-api/.../model/MessageModel.java
@Document(indexName = "aile.message", dynamic = Dynamic.TRUE)

public
 class MessageModel implements Serializable {
    String id;                    // Elasticsearch 文檔 ID
    String messageId;             // 業務消息編號
    MessageType type;             // 消息類型
    MessageSourceType sourceType; // 消息來源類型
    String senderName;            // 發送者名稱
    String senderId;              // 發送者 ID
    String accountId;             // 帳號 ID
    long
 sendTime;                // 發送時間(epoch ms)
    String roomId;                // 聊天室 ID
    long
 sequence;                // 消息序號(房間內遞增)
    String tenantId;              // 租戶 ID
    OsType osType;                // 設備類型
    Channel channel;              // 渠道
    Channel appointChannel;       // 指定渠道(多渠道發送時)
    Object content;               // 消息內容(類型相關)
    Tag tag;                      // 消息標籤
    String themeId;               // 主題 ID
    String nearMessageId;         // 關聯消息 ID(回覆引用)
    String sessionId;             // 關聯會話 ID
    String channelMessageId;      // 渠道側消息 ID(Gateway 回傳)
    List<String> excludeMemberIds;// 排除的成員 ID
    String recipientId;           // 接收者 ID(私聊)
    String recipientAccountId;    // 接收者帳號 ID
    Integer flag;                 // 消息狀態標記
}

2.2 消息狀態標記(MessageFlag)


    
    
    
  // aile-api/aile-room-api/.../enums/MessageFlag.java
public
 enum MessageFlag {
    Deleted(-2),   // 已刪除
    Send(-1),      // 發送中
    Arrive(0),     // 已送達
    Received(1),   // 已接收
    Read(2),       // 已讀
    Retract(3)     // 已撤回
}

2.3 消息來源類型(MessageSourceType)


    
    
    
  // aile-api/aile-room-api/.../enums/MessageSourceType.java
public
 enum MessageSourceType {
    User,        // 用戶(員工或客戶)
    Assistant,   // AI 助手
    System,      // 系統自動消息
    Consult,     // 諮詢消息(客服場景)
    Broadcast    // 群發消息
}

3. MessageType(13 種消息類型)


    
    
    
  // aile-api/aile-room-api/.../enums/MessageType.java
public
 enum MessageType {
    At,        // @提及消息
    Text,      // 純文字消息
    Event,     // 事件消息(系統事件)
    Image,     // 圖片消息
    File,      // 文件消息
    Video,     // 影片消息
    Audio,     // 音頻消息
    Voice,     // 語音消息
    Sticker,   // 貼圖消息
    Template,  // 模板/卡片消息
    Location,  // 位置消息
    Action,    // 動作消息(按鈕點擊回傳)
    Json       // 結構化 JSON 消息
}

4. 各消息類型詳解與示例

4.1 Text(純文字)

最基礎的消息類型。content 為純文字字串。


    
    
    
  {
  "type"
: "Text",
  "content"
: "您好,歡迎使用 Aile 客服系統!",
  "roomId"
: "room_abc123",
  "senderId"
: "emp_001",
  "senderName"
: "客服小王",
  "sourceType"
: "User"
}

4.2 At(@提及)

用於在群聊中 @ 特定成員。content 中包含提及對象資訊。


    
    
    
  {
  "type"
: "At",
  "content"
: {
    "text"
: "@張三 請確認一下訂單狀態",
    "mentions"
: [
      {

        "memberId"
: "member_zhangsan",
        "name"
: "張三",
        "type"
: "User"
      }

    ]

  }
,
  "roomId"
: "room_group_001"
}

4.3 Image(圖片)

content 為圖片資源的結構化描述。透過 MessageSendV2Dto 上傳時,file 欄位攜帶 MultipartFile。


    
    
    
  {
  "type"
: "Image",
  "content"
: {
    "fileId"
: "file_img_001",
    "url"
: "https://cdn.aile.com/images/abc123.jpg",
    "thumbnailUrl"
: "https://cdn.aile.com/images/abc123_thumb.jpg",
    "width"
: 800,
    "height"
: 600,
    "size"
: 102400,
    "fileName"
: "product_photo.jpg"
  }
,
  "roomId"
: "room_abc123"
}

4.4 File(文件)


    
    
    
  {
  "type"
: "File",
  "content"
: {
    "fileId"
: "file_doc_001",
    "url"
: "https://cdn.aile.com/files/contract.pdf",
    "fileName"
: "合約文件.pdf",
    "fileSize"
: 2048000,
    "mimeType"
: "application/pdf"
  }
,
  "roomId"
: "room_abc123"
}

4.5 Video(影片)


    
    
    
  {
  "type"
: "Video",
  "content"
: {
    "fileId"
: "file_vid_001",
    "url"
: "https://cdn.aile.com/videos/demo.mp4",
    "thumbnailUrl"
: "https://cdn.aile.com/videos/demo_thumb.jpg",
    "duration"
: 120,
    "width"
: 1920,
    "height"
: 1080,
    "size"
: 15728640,
    "fileName"
: "產品介紹.mp4"
  }
,
  "roomId"
: "room_abc123"
}

4.6 Audio(音頻)


    
    
    
  {
  "type"
: "Audio",
  "content"
: {
    "fileId"
: "file_aud_001",
    "url"
: "https://cdn.aile.com/audio/recording.mp3",
    "duration"
: 45,
    "size"
: 360000,
    "fileName"
: "語音留言.mp3"
  }
,
  "roomId"
: "room_abc123"
}

4.7 Voice(語音)

與 Audio 類似,但語義上強調即時語音消息(如 LINE 語音輸入)。


    
    
    
  {
  "type"
: "Voice",
  "content"
: {
    "fileId"
: "file_voice_001",
    "url"
: "https://cdn.aile.com/voice/msg_001.aac",
    "duration"
: 15,
    "size"
: 48000
  }
,
  "roomId"
: "room_abc123"
}

4.8 Sticker(貼圖)

用於表情貼圖。content 中包含貼圖 ID 和套餐 ID。


    
    
    
  {
  "type"
: "Sticker",
  "content"
: {
    "packageId"
: "11537",
    "stickerId"
: "52002734",
    "url"
: "https://stickershop.line-scdn.net/stickershop/v1/sticker/52002734/iPhone/sticker.png"
  }
,
  "roomId"
: "room_abc123",
  "channel"
: "Line"
}

4.9 Location(位置)


    
    
    
  {
  "type"
: "Location",
  "content"
: {
    "title"
: "台北 101",
    "address"
: "台北市信義區信義路五段7號",
    "latitude"
: 25.033964,
    "longitude"
: 121.564468,
    "staticMapUrl"
: "https://map.example.com/static?lat=25.033964&lng=121.564468"
  }
,
  "roomId"
: "room_abc123"
}

4.10 Template(模板/卡片消息)

Template 是功能最豐富的消息類型,支援按鈕、確認框、流程卡、輪播等子類型。

4.10.1 GenericMessage(模板基底)


    
    
    
  // aile-common/.../message/GenericMessage.java
public
 abstract class GenericMessage {
    Object quickReply;  // 快速回覆選項
}

4.10.2 TemplateMessage(模板消息結構)


    
    
    
  // aile-common/.../message/type/TemplateMessage.java
public
 class TemplateMessage extends GenericMessage {
    String title;              // 標題
    String subTitle;           // 副標題
    String text;               // 正文
    TemplateType type;         // 模板類型:Buttons / Confirm / Process / Carousel
    List<Element> elements;    // 元素列表(Carousel 時使用)
    OrientationType orientation; // 排版方向:Vertical / Horizontal
    String imageUrl;           // 主題圖片
    Action defaultAction;      // 默認點擊動作
    List<Action> actions;      // 按鈕動作列表
}

4.10.3 TemplateType(模板子類型)

類型說明
按鈕模板Buttons標題 + 文字 + 多個操作按鈕
確認模板Confirm標題 + 文字 + 確認/取消按鈕
流程模板Process多步驟流程卡片
輪播模板Carousel多張卡片水平/垂直輪播

4.10.4 Template 示例:Buttons(按鈕卡片)


    
    
    
  {
  "type"
: "Template",
  "content"
: {
    "title"
: "訂單確認",
    "text"
: "您的訂單 #12345 已出貨,預計 3 天內送達。需要進一步協助嗎?",
    "type"
: "Buttons",
    "imageUrl"
: "https://cdn.aile.com/card/order_banner.jpg",
    "actions"
: [
      {

        "type"
: "Postback",
        "label"
: "查詢物流",
        "text"
: "查詢物流",
        "data"
: "action=track&orderId=12345",
        "displayText"
: "正在查詢物流狀態..."
      }
,
      {

        "type"
: "Url",
        "label"
: "查看詳情",
        "text"
: "查看詳情",
        "url"
: "https://shop.example.com/orders/12345"
      }
,
      {

        "type"
: "Action",
        "label"
: "聯絡客服",
        "text"
: "聯絡客服",
        "data"
: "action=contact_support"
      }

    ]

  }

}

4.10.5 Template 示例:Confirm(確認卡片)


    
    
    
  {
  "type"
: "Template",
  "content"
: {
    "title"
: "取消訂單",
    "text"
: "確定要取消訂單 #12345 嗎?此操作無法復原。",
    "type"
: "Confirm",
    "actions"
: [
      {

        "type"
: "Postback",
        "label"
: "確認取消",
        "text"
: "確認取消",
        "data"
: "action=cancel_order&orderId=12345",
        "isDefault"
: true
      }
,
      {

        "type"
: "Action",
        "label"
: "保留訂單",
        "text"
: "保留訂單"
      }

    ]

  }

}

4.10.6 Template 示例:Carousel(輪播卡片)


    
    
    
  {
  "type"
: "Template",
  "content"
: {
    "type"
: "Carousel",
    "orientation"
: "Horizontal",
    "elements"
: [
      {

        "title"
: "商品 A — NT$999",
        "subtitle"
: "限時優惠中",
        "imageUrl"
: "https://cdn.aile.com/product/a.jpg",
        "defaultAction"
: {
          "type"
: "Url",
          "url"
: "https://shop.example.com/product/a"
        }
,
        "actions"
: [
          {

            "type"
: "Postback",
            "label"
: "加入購物車",
            "data"
: "action=add_cart&product=A"
          }

        ]

      }
,
      {

        "title"
: "商品 B — NT$1,299",
        "subtitle"
: "新品上市",
        "imageUrl"
: "https://cdn.aile.com/product/b.jpg",
        "defaultAction"
: {
          "type"
: "Url",
          "url"
: "https://shop.example.com/product/b"
        }
,
        "actions"
: [
          {

            "type"
: "Postback",
            "label"
: "加入購物車",
            "data"
: "action=add_cart&product=B"
          }

        ]

      }

    ]

  }

}

4.10.7 Action(按鈕動作類型)


    
    
    
  // aile-common/.../message/template/Action.java
public
 class Action {
    ActionType type;     // Action / Postback / Url / Aiff
    String text;         // 顯示文字
    String imageUrl;     // 按鈕圖示
    String url;          // 外部連結(type=Url 時)
    String label;        // 按鈕標籤
    String title;        // 按鈕標題
    String data;         // 回傳資料(type=Postback 時)
    String privateData;  // 私有資料(不可見於前端)
    String displayText;  // 點擊後顯示文字
    Boolean isDefault;   // 是否為默認按鈕
    String code;         // 動作代碼
}

4.10.8 ActionType

類型說明
前端行為Action前端本地處理(如關閉卡片)
後端回傳Postback提交到後端伺服器處理
外部連結Url前端打開外部 URL
AIFF 容器Aiff開啟 AIFF 內嵌容器

4.10.9 Element(輪播元素)


    
    
    
  // aile-common/.../message/template/Element.java
public
 class Element {
    String title;
    String subtitle;
    String imageUrl;
    Action defaultAction;    // 點擊整張卡片的默認行為
    List<Action> actions;    // 卡片上的按鈕列表
}

4.11 Event(事件消息)

系統級事件,不直接對用戶展示,用於觸發後端邏輯。


    
    
    
  {
  "type"
: "Event",
  "content"
: {
    "eventCode"
: "SessionStart",
    "sessionId"
: "sess_abc123",
    "timestamp"
: 1718256000000,
    "data"
: {}
  }
,
  "sourceType"
: "System",
  "roomId"
: "room_abc123"
}

4.12 Action(動作消息)

用戶點擊按鈕後的回傳消息,content 中包含按鈕回傳的 data


    
    
    
  {
  "type"
: "Action",
  "content"
: {
    "actionType"
: "Postback",
    "data"
: "action=cancel_order&orderId=12345",
    "label"
: "確認取消",
    "sourceTemplateId"
: "tpl_xyz789"
  }
,
  "roomId"
: "room_abc123",
  "sourceType"
: "User"
}

4.13 Json(結構化 JSON)

用於傳遞任意結構化資料,前端根據內部欄位自行解析渲染。


    
    
    
  {
  "type"
: "Json",
  "content"
: {
    "customType"
: "satisfaction_survey",
    "question"
: "請為本次服務評分",
    "options"
: [
      {
 "score": 5, "label": "非常滿意" },
      {
 "score": 4, "label": "滿意" },
      {
 "score": 3, "label": "普通" },
      {
 "score": 2, "label": "不滿意" },
      {
 "score": 1, "label": "非常不滿意" }
    ]
,
    "sessionId"
: "sess_abc123"
  }
,
  "sourceType"
: "System"
}

5. Tag(消息標籤)

消息標籤用於標記消息的業務屬性,content 不變時透過 Tag 注入上下文。Tag 使用 Jackson 多態序列化。


    
    
    
  // aile-common/.../message/tag/Tag.java
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")

@JsonSubTypes({
    @JsonSubTypes.Type(value = BroadcastTag.class, name = "Broadcast"),
    @JsonSubTypes.Type(value = LinkTag.class, name = "Link"),
    @JsonSubTypes.Type(value = PostTag.class, name = "Post"),
    @JsonSubTypes.Type(value = PageTag.class, name = "Page"),
    @JsonSubTypes.Type(value = ToDoTag.class, name = "Todo"),
    @JsonSubTypes.Type(value = ReplyUrlTag.class, name = "ReplyUrl"),
    @JsonSubTypes.Type(value = EchoTag.class, name = "Echo"),
    @JsonSubTypes.Type(value = ServiceIdentityTag.class, name = "ServiceIdentity")
})

5.1 Tag 類型詳解

Tag用途關鍵欄位
Broadcast群發消息標記broadcastId, batched
Link外部連結預覽link
Post貼文/動態關聯postId, commentId, channel
Page頁面導航標記label, direction, osTypes
Todo待辦事項關聯toDoId
ReplyUrl回覆連結渠道channel
Echo消息回聲標記isEcho
ServiceIdentity服務號身份標記name, avatarId, id

6. 消息發送 DTO 對比

6.1 MessageSendDto(通用發送)


    
    
    
  // aile-api/aile-room-api/.../dto/MessageSendDto.java
public
 class MessageSendDto {
    String id;            // 客戶端消息 ID(冪等鍵)
    MessageType type;     // 消息類型(必填)
    String roomId;        // 聊天室 ID(必填)
    Object content;       // 消息內容(必填)
    Tag tag;              // 消息標籤
    String messageKey;    // 客戶端本地預存消息鍵
}

6.2 MessageSendV2Dto(V2 發送,支援文件上傳)


    
    
    
  // aile-api/aile-room-api/.../dto/MessageSendV2Dto.java
public
 class MessageSendV2Dto {
    String id;
    MessageType type;
    String roomId;
    Object content;
    Tag tag;
    MultipartFile file;   // 直接上傳文件(Image/File/Video/Audio 時使用)
}

6.3 ServiceMessageSendDto(服務號發送)


    
    
    
  // aile-api/aile-room-api/.../dto/ServiceMessageSendDto.java
public
 class ServiceMessageSendDto {
    MessageType type;               // 消息類型
    MessageSourceType sourceType;   // 來源類型
    String senderName;              // 發送者名稱
    String senderId;                // 發送者 ID
    String roomId;                  // 聊天室 ID
    Object content;                 // 消息內容
    Tag tag;                        // 標籤
    Channel channel;                // 目標渠道
    Channel appointChannel;         // 指定渠道
    List<String> excludeMemberIds;  // 排除的成員
    String sessionId;               // 會話 ID
    String nearMessageId;           // 引用消息 ID
}

6.4 CustomMessageDto(自定義消息,系統間傳遞)


    
    
    
  // aile-api/aile-room-api/.../dto/CustomMessageDto.java
public
 class CustomMessageDto {
    String id;
    MessageType type;
    MessageSourceType sourceType;
    String senderName;
    String senderId;
    String accountId;
    long
 sendTime;
    String roomId;
    long
 sequence;
    String tenantId;
    OsType osType;
    Channel channel;
    Channel appointChannel;
    Object content;
    Tag tag;
    String themeId;
    String nearMessageId;
    String sessionId;
    String channelMessageId;
    List<String> excludeMemberIds;
}

7. 群發消息格式

群發使用 BroadcastBody 定義內容,支援多條消息組合發送:


    
    
    
  // aile-api/aile-tenant-api/.../model/servicenumber/BroadcastBody.java
public
 class BroadcastBody {
    Integer index;       // 消息序號(順序發送)
    MessageType type;    // 消息類型
    String content;      // 消息內容(JSON 字串)
}

群發消息示例(3 條消息順序發送):


    
    
    
  [
  {

    "index"
: 0,
    "type"
: "Text",
    "content"
: "\"親愛的會員您好,本季新品已上架!\""
  }
,
  {

    "index"
: 1,
    "type"
: "Image",
    "content"
: "{\"fileId\":\"file_img_spring\",\"url\":\"https://cdn.aile.com/promo/spring2026.jpg\"}"
  }
,
  {

    "index"
: 2,
    "type"
: "Template",
    "content"
: "{\"title\":\"新品搶先看\",\"text\":\"點擊下方按鈕查看詳情\",\"type\":\"Buttons\",\"actions\":[{\"type\":\"Url\",\"label\":\"立即查看\",\"url\":\"https://shop.example.com/new\"}]}"
  }

]

8. Gateway 外發消息格式

Aile 向外部渠道(LINE 等)發送消息時,使用 AileMessageDto 封裝:


    
    
    
  // aile-api/aile-tenant-api/.../dto/gateway/AileMessageDto.java
public
 class AileMessageDto {
    ServiceSessionModel sessionModel;  // 會話對象
    List<MessageModel> messages;       // 消息列表
    RoomModel roomModel;               // 聊天室對象
}

9. 完整消息類型速查表

Typecontent 類型說明支援渠道
TextString純文字全部
AtObject{text, mentions[]}@提及群聊
ImageObject{fileId, url, width, height}圖片全部
FileObject{fileId, url, fileName, fileSize}文件LINE / WhatsApp
VideoObject{fileId, url, duration, thumbnailUrl}影片LINE / WhatsApp
AudioObject{fileId, url, duration}音頻LINE / WhatsApp
VoiceObject{fileId, url, duration}語音LINE
StickerObject{packageId, stickerId}貼圖LINE
TemplateTemplateMessage卡片/按鈕/輪播LINE / App
LocationObject{title, address, lat, lng}位置LINE
EventObject{eventCode, data}系統事件內部
ActionObject{actionType, data, label}按鈕回傳內部
JsonObject(自由結構)自定義 JSONApp

10. 關鍵檔案索引

層級檔案說明
Enumaile-api/aile-room-api/.../enums/MessageType.java13 種消息類型枚舉
Enumaile-api/aile-room-api/.../enums/MessageSourceType.java5 種消息來源類型
Enumaile-api/aile-room-api/.../enums/MessageFlag.java6 種消息狀態標記
Modelaile-api/aile-room-api/.../model/MessageModel.java消息核心模型(ES)
DTOaile-api/aile-room-api/.../dto/MessageSendDto.java通用發送 DTO
DTOaile-api/aile-room-api/.../dto/MessageSendV2Dto.javaV2 發送 DTO(支援文件)
DTOaile-api/aile-room-api/.../dto/ServiceMessageSendDto.java服務號發送 DTO
DTOaile-api/aile-room-api/.../dto/CustomMessageDto.java自定義消息 DTO
DTOaile-api/aile-tenant-api/.../dto/gateway/AileMessageDto.javaGateway 外發封裝
Modelaile-api/aile-tenant-api/.../model/servicenumber/BroadcastBody.java群發內容
Commonaile-common/.../message/type/TemplateMessage.java模板消息結構
Commonaile-common/.../message/template/Action.java按鈕動作
Commonaile-common/.../message/template/Element.java輪播元素
Commonaile-common/.../message/enums/template/TemplateType.java模板子類型
Commonaile-common/.../message/enums/template/ActionType.java按鈕動作類型
Commonaile-common/.../message/enums/template/OrientationType.java排版方向
Commonaile-common/.../message/tag/Tag.java消息標籤基底(8 種子類型)
Commonaile-common/.../message/GenericMessage.java泛型消息基底