API 參考

訊息

傳送媒體訊息

傳送標準化媒體訊息。message.url、message.file_url、message.file_key 至少提供一個非空來源,URL 必須是絕對 HTTP(S) URL。WhatsApp audio / video 的 seconds 為非負整數秒數。僅在 video 時,範圍為 0 到 4294967295;waveform 僅用於 audio。

POSThttps://api.unifyport.ai/v1/messages

呼叫前準備

在伺服器端使用資源所屬工作區的 X-Api-Key,執行範例前替換所有預留位置。

完成所選授權流程並檢查 runtime_status。授權與連線狀態不同,HTTP 成功不等於已就緒。

參數從哪裡取得
account_id
從建立或查詢帳號的回應取得 data.id。帳號屬於 X-Api-Key 對應的工作區。 取得帳號
to.id · to.type
回覆時將 message.received 的 data.conversation.id、data.conversation.type 複製到 to.id、to.type。新收件方請依渠道標識規則處理。 統一訊息發送能力

請求參數

請求標頭

X-Api-Key
string必填

工作區 API Key,工作區會由此標頭解析得到。

Content-Type
string必填

傳送 JSON 請求內容時請使用 application/json。

請求內容

account_id
string必填

傳送該訊息的渠道帳號。

minLength: 1

to
object必填

收件方目標,包含 id 與 type。

id
string必填

收件方在渠道側的識別碼。

minLength: 1

type
string必填

收件方類型:user、group 或 channel。

enum: user, group, channel

message
object必填

標準化訊息內容:文字使用 message.text,媒體使用 message.url。

type
string必填

訊息類型:text、image、video、audio、document、file 或 contact。

enum: text, image, video, audio, document, file, contact

text
string

message.type=text 時必填的非空文字。

minLength: 1

caption
string

image、video、document 或 file 訊息的選填說明文字。

url
string

非空絕對 HTTP(S) 媒體 URL;媒體訊息至少提供一個來源欄位。

format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?://

file_url
string

非空備用絕對 HTTP(S) 媒體 URL;媒體訊息至少提供一個來源欄位。

format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?://

file_key
string

非空渠道或儲存檔案引用;媒體訊息至少提供一個來源欄位。

minLength: 1

contacts[]
object[]

message.type=contact 時必填的非空名片陣列。

minItems: 1

name
string

每張名片必填的非空聯絡人顯示名稱。

minLength: 1

phones[]
object[]

名片包含的電話號碼清單。

number
string

電話號碼;每個 phone 項目都必須提供。

type
string

選填的電話類型,例如 CELL 或 WORK。

emails[]
object[]

名片包含的電子郵件清單。

address
string

電子郵件地址;每個 email 項目都必須提供。

format: email

type
string

選填的郵件類型,例如 WORK 或 HOME。

organization
string

聯絡人的選填組織名稱。

title
string

聯絡人的選填職稱。

provider_data
object

渠道專屬選項,例如 Telegram 的 parse_mode;WhatsApp audio / video 的 seconds 使用非負整數,僅在 video 時,取值範圍為 0 到 4294967295;waveform 僅適用於 audio。引用回覆請使用頂層 reply_to。

seconds
integer

WhatsApp audio 或 video 訊息的選填時長,單位為秒,使用非負整數;僅在 video 時,取值範圍為 0 到 4294967295。

minimum: 0

waveform
string

WhatsApp audio 訊息的選填音訊波形資料。非空值必須使用標準 Base64 編碼,且解碼後必須是可解析的 JSON 波形資料;空字串按未提供處理,其他格式錯誤會返回 HTTP 400 provider_invalid_request。

reply_to
object

引用回覆目標;把入站 Webhook 的 data.message.reply_token 原樣放入傳送請求的 reply_to.reply_token。

reply_token
string

從入站 Webhook 的 data.message.reply_token 原樣複製的不透明引用代符。

minLength: 1

mentions[]
object[]

群組訊息的 @ 目標列表。type=member 使用對應 Provider 的成員 id;type=all 表示 @所有人,僅在 Provider 支援時生效,否則返回 unsupported_message_type。

type
string

@ 目標類型。省略時按 member 處理以相容舊請求;type=member 必須傳 id,type=all 不傳 id 且僅適用於群組聊天。

enum: member, all

id
string

type=member 時必填的 Provider 成員識別碼。

minLength: 1

如何理解結果

保留回傳的 message_id 與 provider_ref,用於關聯後續事件或排查。accepted 不表示已送達;僅在管道支援回執時,透過對應事件確認送達。識別碼格式因管道而異。

reply_token — WhatsApp 傳送成功且渠道提供可引用訊息識別字時可能回傳的不透明回覆句柄。請原樣回傳,它不是父訊息 id。

回應 200 OK

{
  "request_id": "<REQUEST_ID>",
  "data": {
    "message_id": "msg_example",
    "account_id": "acc_example",
    "status": "accepted",
    "provider_ref": "provider_msg_example",
    "reply_token": "<opaque WhatsApp reply handle>"
  }
}

回應內容

message_id
string

已受理訊息的 UnifyPort 訊息識別字(msg_...)。

account_id
string

本回應所對應的渠道帳號。

status
string

受理狀態;accepted 表示訊息已排入佇列,準備傳送至渠道。

provider_ref
string

渠道側的訊息參考,於渠道指派後出現。

reply_token
string

WhatsApp 傳送成功且渠道提供可引用訊息識別字時可能回傳的不透明回覆句柄。請原樣回傳,它不是父訊息 id。

回應

200

200 OK

請求成功,回應內容範例如上。

400

請求錯誤

請求內容、路徑或參數無效。

401

未授權

X-Api-Key 請求標頭缺少或無效。

409

衝突

目前操作與既有的渠道帳號或資源衝突。

500

伺服器錯誤

服務遇到了未預期的錯誤。

501

渠道尚未實作

所選渠道尚未實作此操作。

502

上游閘道錯誤

渠道轉接器或上游渠道未能完成此操作。

失敗後如何處理

檢查 HTTP 狀態和 error.code/numeric_code,保留 request_id。依原因修正參數、繼續授權或檢查狀態。重試傳送及寫入前確認上次結果,避免重複操作。 錯誤碼參考

invalid_request · 10000 · 400
檢查必填欄位、格式與渠道條件,修正請求後再呼叫。
invalid_api_key · 11001 · 401
檢查 X-Api-Key 與工作區是否有效。
provider_not_ready · 30009 · 409
檢查授權與執行狀態,恢復連線後先確認上次結果,再決定是否重試。
unsupported_message_type · 36000 · 400
選擇支援的操作或訊息類型,重複請求不會增加支援能力。
invalid_reply_token · 36006 · 400
原樣複製入站 reply_token,勿以訊息 ID 組合。引用回覆需要支援的渠道。