Tin nhắn
Gửi tin nhắn văn bản
Gửi tin nhắn văn bản. message.text không được rỗng; provider_data chứa trường riêng và trả lời trích dẫn dùng reply_to cấp cao nhất.
https://api.unifyport.ai/v1/messagesKênh được hỗ trợ
Trước khi gọi
Dùng X-Api-Key của workspace sở hữu tài nguyên trên máy chủ. Thay mọi giá trị mẫu trước khi chạy.
Hoàn tất xác thực và kiểm tra runtime_status. Xác thực và kết nối là hai trạng thái riêng; HTTP thành công chưa chứng minh sẵn sàng.
Nguồn tham số
- account_id
- Lấy data.id từ phản hồi tạo hoặc truy vấn tài khoản. ID thuộc workspace của X-Api-Key. Lấy tài khoản
- to.id · to.type
- Khi trả lời, sao chép data.conversation.id và data.conversation.type từ message.received vào to.id và to.type. Người nhận mới tuân theo quy tắc ID của kênh. Hỗ trợ gửi tin nhắn hợp nhất
Tham số yêu cầu
Tiêu đề
X-Api-KeyAPI key của không gian làm việc. Không gian làm việc được xác định từ tiêu đề này.
Content-TypeDùng application/json khi gửi nội dung yêu cầu JSON.
Nội dung yêu cầu
provider_dataobjectTùy chọn gửi riêng của provider, chỉ có hiệu lực với provider và loại tin nhắn được hỗ trợ. seconds của WhatsApp audio/video là số nguyên không âm. Chỉ với video, dùng giá trị từ 0 đến 4294967295, waveform chỉ dành cho audio. Dùng reply_to cấp cao nhất cho trả lời trích dẫn khi được hỗ trợ. Với sticker, bỏ qua provider_data hoặc dùng đối tượng rỗng; giá trị không phải đối tượng trả về 400 invalid_request, đối tượng không rỗng trả về 400 provider_invalid_request.
provider_dataTùy chọn gửi riêng của provider, chỉ có hiệu lực với provider và loại tin nhắn được hỗ trợ. seconds của WhatsApp audio/video là số nguyên không âm. Chỉ với video, dùng giá trị từ 0 đến 4294967295, waveform chỉ dành cho audio. Dùng reply_to cấp cao nhất cho trả lời trích dẫn khi được hỗ trợ. Với sticker, bỏ qua provider_data hoặc dùng đối tượng rỗng; giá trị không phải đối tượng trả về 400 invalid_request, đối tượng không rỗng trả về 400 provider_invalid_request.
secondsThời lượng tùy chọn tính bằng giây cho tin nhắn WhatsApp audio và video dưới dạng số nguyên không âm. Chỉ với video, phạm vi cho phép là từ 0 đến 4294967295.
minimum: 0
waveformDữ liệu waveform tùy chọn cho tin nhắn audio WhatsApp. Giá trị không rỗng phải dùng mã hóa Base64 chuẩn và sau khi decode phải là dữ liệu waveform JSON có thể parse; chuỗi rỗng được xem như chưa cung cấp, các định dạng sai khác trả về HTTP 400 provider_invalid_request.
account_idTài khoản nhà cung cấp gửi tin nhắn.
minLength: 1
toobjectbắt buộcĐích nhận với id và type.
toĐích nhận với id và type.
idĐịnh danh người nhận ở phía provider.
minLength: 1
typeLoại hội thoại chuẩn: user, group hoặc channel. Nhóm thông báo cộng đồng WhatsApp vẫn sử dụng group.
enum: user, group, channel
messageobjectbắt buộcPayload tin nhắn chuẩn hóa. Văn bản dùng message.text; media dùng message.url.
messagePayload tin nhắn chuẩn hóa. Văn bản dùng message.text; media dùng message.url.
typeLoại tin nhắn: text, image, video, audio, document, file, contact, link_preview, poll hoặc sticker.
enum: text, image, video, audio, document, file, contact, link_preview, poll, sticker
textNội dung không rỗng, bắt buộc cho text và link_preview. Với link_preview, phải có ký tự không phải khoảng trắng; WhatsApp còn yêu cầu nội dung chứa nguyên văn link_preview.url.
minLength: 1
captionChú thích không bắt buộc cho tin nhắn image, video, document hoặc file.
urlURL HTTP(S) tuyệt đối không rỗng; media cần url, file_url hoặc file_key.
format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?://
file_urlURL HTTP(S) tuyệt đối thay thế không rỗng; media cần một nguồn.
format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?://
file_keyTham chiếu tệp provider hoặc storage không rỗng; media cần một nguồn.
contacts[]object[]Mảng danh thiếp không rỗng, bắt buộc khi message.type=contact.
minItems: 1
contacts[]Mảng danh thiếp không rỗng, bắt buộc khi message.type=contact.
minItems: 1
nameTên hiển thị không rỗng, bắt buộc với mỗi danh thiếp.
minLength: 1
phones[]object[]Danh sách số điện thoại trong danh thiếp.
phones[]Danh sách số điện thoại trong danh thiếp.
numberSố điện thoại; bắt buộc với mỗi mục phone.
typeNhãn điện thoại không bắt buộc, chẳng hạn CELL hoặc WORK.
emails[]object[]Danh sách địa chỉ email trong danh thiếp.
emails[]Danh sách địa chỉ email trong danh thiếp.
addressĐịa chỉ email; bắt buộc với mỗi mục email.
format: email
typeNhãn email không bắt buộc, chẳng hạn WORK hoặc HOME.
organizationTên tổ chức không bắt buộc của liên hệ.
titleChức danh không bắt buộc của liên hệ.
link_previewobjectChỉ dùng cho message.type=link_preview, bắt buộc cùng text; không được trộn với payload khác. Cấu trúc chung chỉ bắt buộc url; title và description tùy chọn cho phép chuỗi rỗng nhưng không cho phép null. Chính sách gửi WhatsApp của API này yêu cầu title/image_url không rỗng, giới hạn title ở 255 và description ở 1024 ký tự Unicode.
link_previewChỉ dùng cho message.type=link_preview, bắt buộc cùng text; không được trộn với payload khác. Cấu trúc chung chỉ bắt buộc url; title và description tùy chọn cho phép chuỗi rỗng nhưng không cho phép null. Chính sách gửi WhatsApp của API này yêu cầu title/image_url không rỗng, giới hạn title ở 255 và description ở 1024 ký tự Unicode.
urlLiên kết đích bắt buộc: URI HTTP(S) tuyệt đối có tên máy chủ và không có khoảng trắng; địa chỉ trong ngoặc vuông chỉ chấp nhận IPv6 literal. Giữ nguyên văn, không bảo đảm tài nguyên truy cập được.
pattern: ^[Hh][Tt][Tt][Pp][Ss]?://(?:[^/?#@\s]*@)?(?:\[[0-9A-Fa-f:.]+\]|[^/?#:@\s\[\]]+)(?::[0-9]*)?(?:[/?#]|$)
titleTiêu đề xem trước tùy chọn; cho phép chuỗi rỗng, không cho phép null. WhatsApp yêu cầu không rỗng và tối đa 255 ký tự Unicode.
descriptionTóm tắt xem trước tùy chọn; cho phép chuỗi rỗng, không cho phép null. WhatsApp cho phép tối đa 1024 ký tự Unicode.
image_urlURI ảnh tùy chọn, bắt buộc và không rỗng với WhatsApp. Phải là URI HTTP(S) tuyệt đối có tên máy chủ và không có khoảng trắng; địa chỉ trong ngoặc vuông chỉ chấp nhận IPv6 literal. Giữ nguyên văn, không bảo đảm tài nguyên truy cập được.
pattern: ^[Hh][Tt][Tt][Pp][Ss]?://(?:[^/?#@\s]*@)?(?:\[[0-9A-Fa-f:.]+\]|[^/?#:@\s\[\]]+)(?::[0-9]*)?(?:[/?#]|$)
pollobjectBắt buộc và chỉ dùng cho message.type=poll; không được trộn với text hoặc payload khác. Bắt buộc có question, options và max_selections. Giữ nguyên văn câu hỏi và tiêu đề lựa chọn. Cấu trúc chung không giới hạn độ dài câu hỏi, số lựa chọn tối đa hay tiêu đề trùng lặp; provider có thể áp dụng giới hạn bổ sung.
pollBắt buộc và chỉ dùng cho message.type=poll; không được trộn với text hoặc payload khác. Bắt buộc có question, options và max_selections. Giữ nguyên văn câu hỏi và tiêu đề lựa chọn. Cấu trúc chung không giới hạn độ dài câu hỏi, số lựa chọn tối đa hay tiêu đề trùng lặp; provider có thể áp dụng giới hạn bổ sung.
questionCâu hỏi bình chọn bắt buộc, phải chứa ký tự không phải khoảng trắng; giữ nguyên văn.
minLength: 1 · pattern: \S
options[]object[]Mảng lựa chọn bắt buộc có ít nhất hai lựa chọn, mỗi lựa chọn phải có title.
minItems: 2
options[]Mảng lựa chọn bắt buộc có ít nhất hai lựa chọn, mỗi lựa chọn phải có title.
minItems: 2
titleTiêu đề lựa chọn bắt buộc có ký tự không phải khoảng trắng. Khi gửi không trim, đổi chữ hoa/thường hoặc chuẩn hóa Unicode.
minLength: 1 · pattern: \S
max_selectionsSố lựa chọn tối đa cho mỗi người bình chọn, bắt buộc; không phải số người bình chọn. Số nguyên từ 1 đến số lượng options, được API kiểm tra. Các giá trị nguyên như 1.0 và 1e0 tương đương 1; giá trị không nguyên không hợp lệ.
minimum: 1
reply_toobjectMục tiêu trả lời trích dẫn. Sao chép nguyên data.message.reply_token từ sự kiện tin nhắn có thể trích dẫn hoặc data.reply_token từ phản hồi gửi vào reply_to.reply_token, dùng tài khoản và hội thoại gốc; không thay bằng ID tin nhắn.
reply_toMục tiêu trả lời trích dẫn. Sao chép nguyên data.message.reply_token từ sự kiện tin nhắn có thể trích dẫn hoặc data.reply_token từ phản hồi gửi vào reply_to.reply_token, dùng tài khoản và hội thoại gốc; không thay bằng ID tin nhắn.
reply_tokenHandle không trong suốt từ data.message.reply_token của sự kiện tin nhắn có thể trích dẫn hoặc data.reply_token của phản hồi gửi. Dùng nguyên với tài khoản và hội thoại gốc; không thay bằng ID tin nhắn.
minLength: 1
mentions[]object[]Danh sách mục tiêu @ của tin nhắn nhóm. type=member dùng id thành viên Provider tương ứng; type=all nghĩa là @tất cả, chỉ có hiệu lực khi Provider hỗ trợ, nếu không sẽ trả về unsupported_message_type.
mentions[]Danh sách mục tiêu @ của tin nhắn nhóm. type=member dùng id thành viên Provider tương ứng; type=all nghĩa là @tất cả, chỉ có hiệu lực khi Provider hỗ trợ, nếu không sẽ trả về unsupported_message_type.
typeLoại mục tiêu @. Nếu bỏ qua sẽ xử lý như member để tương thích yêu cầu cũ; type=member bắt buộc có id, còn type=all không gửi id và chỉ áp dụng cho chat nhóm.
enum: member, all
idĐịnh danh thành viên Provider bắt buộc khi type=member.
minLength: 1
Hiểu kết quả
Lưu message_id và provider_ref để đối chiếu sự kiện sau đó hoặc chẩn đoán. accepted không xác nhận đã giao. Chỉ xác nhận qua sự kiện biên nhận khi kênh hỗ trợ; định dạng mã định danh khác nhau theo kênh.
reply_token — Handle không rỗng, không trong suốt của WhatsApp có thể trả về sau khi gửi thành công nếu ngữ cảnh trích dẫn đầy đủ, gồm cả khảo sát vừa gửi để văn bản thường trích dẫn. Bỏ qua nếu không có, không đổi trạng thái accepted. Dùng nguyên vẹn với tài khoản và hội thoại gốc; không phải ID tin nhắn.
Phản hồi 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>"
}
}
Nội dung phản hồi
message_idĐịnh danh tin nhắn UnifyPort (msg_...) cho tin nhắn đã được chấp nhận.
account_idTài khoản nhà cung cấp mà phản hồi này tham chiếu tới.
statusTrạng thái chấp nhận; accepted nghĩa là tin nhắn đã được xếp hàng để gửi tới nhà cung cấp.
provider_refTham chiếu tin nhắn phía nhà cung cấp, một khi nhà cung cấp gán một giá trị.
reply_tokenHandle không rỗng, không trong suốt của WhatsApp có thể trả về sau khi gửi thành công nếu ngữ cảnh trích dẫn đầy đủ, gồm cả khảo sát vừa gửi để văn bản thường trích dẫn. Bỏ qua nếu không có, không đổi trạng thái accepted. Dùng nguyên vẹn với tài khoản và hội thoại gốc; không phải ID tin nhắn.
minLength: 1
Phản hồi
200200 OK
Yêu cầu thành công. Xem ví dụ nội dung phản hồi.
400Bad Request
Body, đường dẫn hoặc tham số yêu cầu không hợp lệ.
401Unauthorized
Header X-Api-Key thiếu hoặc không hợp lệ.
403Forbidden
Yêu cầu đã được nhận diện nhưng thao tác không được phép.
404Not Found
Không tìm thấy tài nguyên được yêu cầu. Kiểm tra error.code cùng với thao tác hiện tại.
409Conflict
Thao tác đang yêu cầu xung đột với tài khoản hoặc tài nguyên nhà cung cấp đã có.
500Internal Server Error
Dịch vụ gặp lỗi không mong muốn.
501Not Implemented
Provider đã chọn chưa triển khai thao tác này.
502Bad Gateway
Adapter hoặc upstream provider không thể hoàn tất thao tác.
Khi yêu cầu thất bại
Kiểm tra HTTP và error.code/numeric_code, giữ request_id. Sửa tham số, tiếp tục xác thực hoặc kiểm tra runtime tùy nguyên nhân. Xác nhận kết quả cũ trước khi thử lại thao tác gửi hoặc ghi. Tham chiếu mã lỗi
Đọc trạng thái HTTP, error.code và error.numeric_code theo thao tác đang gọi. Mã số có kiểu chuỗi. Giữ request_id để chẩn đoán; đây không phải khóa chống lặp hay mã tác vụ.
- invalid_reply_token · 36006 · 400
Không đọc được mã trích dẫn. Sao chép nguyên data.message.reply_token từ sự kiện đến.
Xử lý và thử lại: Sửa tham số theo thao tác và điều kiện của kênh rồi mới gọi lại. Lặp lại yêu cầu sai y nguyên không khắc phục lỗi.
JSON minh họa; message thay đổi theo nguyên nhân thực tế · 400 · 36006
{ "request_id": "req_example", "error": { "code": "invalid_reply_token", "numeric_code": "36006", "message": "Invalid or unreadable reply_token" } }- invalid_request · 10000 · 400
Kiểm tra JSON và các trường bắt buộc.
Xử lý và thử lại: Sửa tham số theo thao tác và điều kiện của kênh rồi mới gọi lại. Lặp lại yêu cầu sai y nguyên không khắc phục lỗi.
Ví dụ · 400 · 10000
{ "request_id": "req_message_invalid_example", "error": { "code": "invalid_request", "numeric_code": "10000", "message": "Invalid message request body" } }- invalid_target_workspace · 11003 · 400
Đích ghi đè workspace trống hoặc sai định dạng. Bỏ tiêu đề ghi đè và dùng API Key thuộc workspace đích.
Điều kiện: Áp dụng khi yêu cầu có tiêu đề X-Workspace-Id để ghi đè workspace.
Xử lý và thử lại: Sửa tham số theo thao tác và điều kiện của kênh rồi mới gọi lại. Lặp lại yêu cầu sai y nguyên không khắc phục lỗi.
JSON minh họa; message thay đổi theo nguyên nhân thực tế · 400 · 11003
{ "request_id": "req_example", "error": { "code": "invalid_target_workspace", "numeric_code": "11003", "message": "Invalid target workspace" } }- provider_invalid_request · 30001 · 400
Kiểm tra các trường và định dạng riêng của kênh.
Xử lý và thử lại: Sửa tham số theo thao tác và điều kiện của kênh rồi mới gọi lại. Lặp lại yêu cầu sai y nguyên không khắc phục lỗi.
Ví dụ · 400 · 30001
{ "request_id": "req_sticker_rejected_example", "error": { "code": "provider_invalid_request", "numeric_code": "30001", "message": "sticker upload failed: media is unsupported" } }- provider_invalid_request · 36007 · 400
Tài nguyên nhãn dán không qua kiểm tra trước khi gọi gửi đến kênh. Phản hồi có thể nêu lý do chuẩn bị cụ thể; numeric_code=36007 không có nghĩa đã thử gửi.
Điều kiện: Áp dụng khi tài nguyên nhãn dán hoặc URL bị từ chối trong bước kiểm tra trước khi gửi đến kênh.
Xử lý và thử lại: Sửa lỗi tài nguyên nhãn dán được báo rồi mới gửi lại. Phân loại này xuất hiện lúc chuẩn bị nội dung, trước khi gọi gửi đến kênh; không được mô tả là đã có thể gửi nhưng chưa rõ kết quả.
Ví dụ · 400 · 36007
{ "request_id": "req_sticker_invalid_example", "error": { "code": "provider_invalid_request", "numeric_code": "36007", "message": "invalid sticker media: invalid WebP container length" } }- unsupported_message_type · 36000 · 400
Dùng message.type được kênh hỗ trợ.
Xử lý và thử lại: Chọn kênh và thao tác được tài liệu ghi là hỗ trợ. Lặp yêu cầu không bổ sung tính năng hay cấp quyền beta.
JSON minh họa; message thay đổi theo nguyên nhân thực tế · 400 · 36000
{ "request_id": "req_example", "error": { "code": "unsupported_message_type", "numeric_code": "36000", "message": "Message type not supported" } }- invalid_api_key · 11001 · 401
Kiểm tra API Key có đúng và được bật hay không.
Xử lý và thử lại: Giữ request_id và mã lỗi có cấu trúc; kiểm tra thao tác hiện tại trước khi chọn hành động tiếp theo.
JSON minh họa; message thay đổi theo nguyên nhân thực tế · 401 · 11001
{ "request_id": "req_example", "error": { "code": "invalid_api_key", "numeric_code": "11001", "message": "Invalid API key" } }- missing_api_key · 11000 · 401
Thêm tiêu đề X-Api-Key.
Xử lý và thử lại: Giữ request_id và mã lỗi có cấu trúc; kiểm tra thao tác hiện tại trước khi chọn hành động tiếp theo.
Ví dụ · 401 · 11000
{ "request_id": "req_xxx", "error": { "code": "missing_api_key", "numeric_code": "11000", "message": "Missing X-Api-Key header" } }- workspace_override_forbidden · 11002 · 403
Yêu cầu cố ghi đè workspace mà API Key không được phép dùng. Bỏ tiêu đề ghi đè và dùng API Key thuộc workspace đích.
Điều kiện: Áp dụng khi yêu cầu có tiêu đề X-Workspace-Id để ghi đè workspace.
Xử lý và thử lại: Giữ request_id và mã lỗi có cấu trúc; kiểm tra thao tác hiện tại trước khi chọn hành động tiếp theo.
JSON minh họa; message thay đổi theo nguyên nhân thực tế · 403 · 11002
{ "request_id": "req_example", "error": { "code": "workspace_override_forbidden", "numeric_code": "11002", "message": "Workspace override is not allowed" } }- target_workspace_not_found · 11004 · 404
Không tìm thấy workspace được ghi đè hoặc workspace không khả dụng. Kiểm tra chủ sở hữu, bỏ tiêu đề ghi đè và dùng API Key của workspace đích; gọi lặp không cấp thêm quyền.
Điều kiện: Áp dụng khi yêu cầu có tiêu đề X-Workspace-Id để ghi đè workspace.
Xử lý và thử lại: Kiểm tra mã đích, chủ sở hữu tài nguyên và workspace hiện tại. Không coi đích đã xác nhận thiếu hoặc không truy cập được là lỗi dịch vụ tạm thời để tự thử lại.
JSON minh họa; message thay đổi theo nguyên nhân thực tế · 404 · 11004
{ "request_id": "req_example", "error": { "code": "target_workspace_not_found", "numeric_code": "11004", "message": "Target workspace not found" } }- account_binding_not_found · 30006 · 409
Tài khoản chưa gắn với kết nối kênh hoạt động; kiểm tra trạng thái.
Xử lý và thử lại: Kiểm tra trạng thái xác thực và runtime rồi chọn làm mới, khởi động hoặc kết nối lại theo mục tiêu và khả năng kênh. Lỗi kết nối không tự chứng minh đã đăng xuất. Xác nhận running trước thao tác nghiệp vụ cần kết nối.
JSON minh họa; message thay đổi theo nguyên nhân thực tế · 409 · 30006
{ "request_id": "req_example", "error": { "code": "account_binding_not_found", "numeric_code": "30006", "message": "Account is not bound to an available server" } }- provider_not_ready · 30009 · 409
Kết nối chưa sẵn sàng. Kiểm tra ủy quyền và runtime_status trước khi thử lại.
Xử lý và thử lại: Kiểm tra trạng thái xác thực và runtime rồi chọn làm mới, khởi động hoặc kết nối lại theo mục tiêu và khả năng kênh. Lỗi kết nối không tự chứng minh đã đăng xuất. Xác nhận running trước thao tác nghiệp vụ cần kết nối.
JSON minh họa; message thay đổi theo nguyên nhân thực tế · 409 · 30009
{ "request_id": "req_example", "error": { "code": "provider_not_ready", "numeric_code": "30009", "message": "Provider client is not ready" } }- provider_not_ready · 30014 · 409
Thiếu phiên bản chạy của kênh mà tài khoản cần. Đây là vấn đề khả dụng runtime, không chứng minh xác thực đã hết hạn.
Xử lý và thử lại: Kiểm tra trạng thái xác thực và runtime rồi chọn làm mới, khởi động hoặc kết nối lại theo mục tiêu và khả năng kênh. Lỗi kết nối không tự chứng minh đã đăng xuất. Xác nhận running trước thao tác nghiệp vụ cần kết nối.
Kênh áp dụng: WhatsApp
JSON minh họa; message thay đổi theo nguyên nhân thực tế · 409 · 30014
{ "request_id": "req_example", "error": { "code": "provider_not_ready", "numeric_code": "30014", "message": "Provider instance is missing" } }- provider_not_ready · 30015 · 409
Runtime của kênh đã dừng. Kiểm tra có chủ ý không trước khi khởi động; runtime dừng không tự đồng nghĩa đã đăng xuất.
Xử lý và thử lại: Kiểm tra trạng thái xác thực và runtime rồi chọn làm mới, khởi động hoặc kết nối lại theo mục tiêu và khả năng kênh. Lỗi kết nối không tự chứng minh đã đăng xuất. Xác nhận running trước thao tác nghiệp vụ cần kết nối.
Kênh áp dụng: WhatsApp
JSON minh họa; message thay đổi theo nguyên nhân thực tế · 409 · 30015
{ "request_id": "req_example", "error": { "code": "provider_not_ready", "numeric_code": "30015", "message": "Provider runtime is stopped" } }- send_message_failed · 20020 · 500
Kiểm tra account_id và dùng X-Api-Key của không gian làm việc sở hữu tài khoản. Khóa hiện tại không truy cập được tài khoản không tìm thấy trong không gian này.
Điều kiện: Áp dụng khi không tìm thấy tài khoản; giữ trạng thái HTTP và code của thao tác, dùng numeric_code để làm rõ tài khoản bị thiếu.
Xử lý và thử lại: Kiểm tra mã đích, chủ sở hữu tài nguyên và workspace hiện tại. Không coi đích đã xác nhận thiếu hoặc không truy cập được là lỗi dịch vụ tạm thời để tự thử lại.
JSON minh họa; message thay đổi theo nguyên nhân thực tế · 500 · 20020
{ "request_id": "req_example", "error": { "code": "send_message_failed", "numeric_code": "20020", "message": "Account not found" } }- send_message_failed · 30010 · 500
Kênh không hoàn thành được thao tác. message có thể kèm nguyên nhân gốc sau “Provider operation failed:”; nội dung này thay đổi và không phải giao diện lập trình ổn định.
Điều kiện: Áp dụng khi kênh không cung cấp phân loại lỗi cụ thể hơn; giữ nguyên lỗi của thao tác hiện tại.
Xử lý và thử lại: Trước khi gửi lại, xác nhận tin nhắn hoặc phản hồi gốc đã được tạo chưa. Hết giờ hoặc phản hồi lỗi có thể khiến kết quả chưa rõ; truy vấn sau không thấy phản hồi cũng không chứng minh chưa ghi. Không tự động gửi lại.
Kênh áp dụng: WhatsApp
JSON minh họa; message thay đổi theo nguyên nhân thực tế · 500 · 30010
{ "request_id": "req_example", "error": { "code": "send_message_failed", "numeric_code": "30010", "message": "Provider operation failed" } }- send_message_failed · 36001 · 500
Gửi tin nhắn thất bại hoặc chưa thể xác nhận kết quả.
Xử lý và thử lại: Trước khi gửi lại, xác nhận tin nhắn hoặc phản hồi gốc đã được tạo chưa. Hết giờ hoặc phản hồi lỗi có thể khiến kết quả chưa rõ; truy vấn sau không thấy phản hồi cũng không chứng minh chưa ghi. Không tự động gửi lại.
Ví dụ · 500 · 36001
{ "request_id": "req_sticker_prepare_failed_example", "error": { "code": "send_message_failed", "numeric_code": "36001", "message": "download sticker: media download returned HTTP 503" } }- unsupported_by_provider · 30003 · 501
Kênh không hỗ trợ thao tác; chọn thao tác trong bảng hỗ trợ.
Xử lý và thử lại: Chọn kênh và thao tác được tài liệu ghi là hỗ trợ. Lặp yêu cầu không bổ sung tính năng hay cấp quyền beta.
Ví dụ · 501 · 30003
{ "request_id": "req_xxx", "error": { "code": "unsupported_by_provider", "numeric_code": "30003", "message": "Operation not supported by this provider" } }- provider_adapter_not_found · 30004 · 502
Dịch vụ kênh chưa khả dụng. Kiểm tra trạng thái hoặc thử sau; xác nhận kết quả trước khi thử ghi lại.
Xử lý và thử lại: Trước khi gửi lại, xác nhận tin nhắn hoặc phản hồi gốc đã được tạo chưa. Hết giờ hoặc phản hồi lỗi có thể khiến kết quả chưa rõ; truy vấn sau không thấy phản hồi cũng không chứng minh chưa ghi. Không tự động gửi lại.
JSON minh họa; message thay đổi theo nguyên nhân thực tế · 502 · 30004
{ "request_id": "req_example", "error": { "code": "provider_adapter_not_found", "numeric_code": "30004", "message": "Provider adapter unavailable" } }- provider_unavailable · 20102 · 502
Gửi tin WhatsApp đồng bộ phát hiện hạn chế đăng nhập: HTTP 502, provider_unavailable, 20102. Cùng ý nghĩa mã số có thể xuất hiện dưới account_restricted trong sự kiện lỗi WhatsApp. Phản hồi HTTP này không tự đổi trạng thái tài khoản hay tạo thêm sự kiện.
Xử lý và thử lại: Dừng gửi và thử lại tự động, hướng dẫn người dùng kiểm tra và xử lý hạn chế trong ứng dụng WhatsApp chính thức. Chỉ tiếp tục sau khi giải quyết và xác thực lại nếu cần; trạng thái running trước đó không chứng minh hạn chế đã hết.
Kênh áp dụng: WhatsApp
Ví dụ · 502 · 20102
{ "request_id": "req_example_whatsapp_account_restricted", "error": { "code": "provider_unavailable", "numeric_code": "20102", "message": "Account login is restricted. Check the official WhatsApp app for details." } }- provider_unavailable · 30002 · 502
Dịch vụ kênh chưa khả dụng. Kiểm tra trạng thái hoặc thử sau; xác nhận kết quả trước khi thử ghi lại.
Xử lý và thử lại: Trước khi gửi lại, xác nhận tin nhắn hoặc phản hồi gốc đã được tạo chưa. Hết giờ hoặc phản hồi lỗi có thể khiến kết quả chưa rõ; truy vấn sau không thấy phản hồi cũng không chứng minh chưa ghi. Không tự động gửi lại.
Ví dụ · 502 · 30002
{ "request_id": "req_example_provider_unavailable", "error": { "code": "provider_unavailable", "numeric_code": "30002", "message": "Provider service unavailable" } }- provider_unavailable · 30010 · 502
Kênh không hoàn thành được thao tác. message có thể kèm nguyên nhân gốc sau “Provider operation failed:”; nội dung này thay đổi và không phải giao diện lập trình ổn định.
Xử lý và thử lại: Trước khi gửi lại, xác nhận tin nhắn hoặc phản hồi gốc đã được tạo chưa. Hết giờ hoặc phản hồi lỗi có thể khiến kết quả chưa rõ; truy vấn sau không thấy phản hồi cũng không chứng minh chưa ghi. Không tự động gửi lại.
Kênh áp dụng: WhatsApp
Ví dụ · 502 · 30010
{ "request_id": "req_example_message_failed", "error": { "code": "provider_unavailable", "numeric_code": "30010", "message": "Provider operation failed: Example operation could not be completed" } }- provider_unavailable · 30019 · 502
Nền tảng hạn chế rõ ràng việc gửi tin này: HTTP 502, provider_unavailable, 30019. Không xác nhận tài khoản bị khóa vĩnh viễn hay có thời điểm gỡ hạn cố định.
Xử lý và thử lại: Dừng tự thử lại với hạn chế gửi tin này. Chỉ gửi tiếp sau khi xác nhận nền tảng đã gỡ hạn; không có thời gian cố định và lỗi này không tự yêu cầu xác thực lại.
Kênh áp dụng: WhatsApp
Ví dụ · 502 · 30019
{ "request_id": "req_example_message_restricted", "error": { "code": "provider_unavailable", "numeric_code": "30019", "message": "Message sending is restricted by the platform" } }- provider_unavailable · 30020 · 502
Yêu cầu đồng bộ whatsapp-protocol xác định hạn chế đăng nhập qua numeric_code=30020. Có thể ảnh hưởng nhập phiên, runtime, gửi và truy vấn liên hệ, đồng thời giữ trạng thái HTTP và code của thao tác. Không áp dụng hợp đồng sự kiện WhatsApp 20102 cho kênh này.
Xử lý và thử lại: Dừng gửi và thử lại tự động, hướng dẫn người dùng kiểm tra và xử lý hạn chế trong ứng dụng WhatsApp chính thức. Chỉ tiếp tục sau khi giải quyết và xác thực lại nếu cần; trạng thái running trước đó không chứng minh hạn chế đã hết.
Kênh áp dụng: WhatsApp Protocol
Ví dụ · 502 · 30020
{ "request_id": "req_example_account_restricted", "error": { "code": "provider_unavailable", "numeric_code": "30020", "message": "Account login is restricted. Check the official WhatsApp app for details." } }- provider_unavailable · 30021 · 502
WhatsApp chưa kết nối khi chạy thao tác; giữ nguyên thông báo kết nối gốc. Điều này không chứng minh đã đăng xuất hay hết xác thực, cũng không tự kết nối lại, gửi lại hoặc đổi trạng thái tài khoản.
Xử lý và thử lại: Tạm dừng thao tác cần kết nối. Trước tiên gọi POST /v1/accounts/{account_id}/runtime/refresh, khôi phục theo trạng thái mới nhất rồi xác nhận runtime_status=running trước yêu cầu nghiệp vụ. Xác nhận kết quả ghi trước khi gửi lại.
Kênh áp dụng: WhatsApp
Ví dụ · 502 · 30021
{ "request_id": "req_example_connection_disconnected", "error": { "code": "provider_unavailable", "numeric_code": "30021", "message": "example operation: websocket not connected" } }- provider_unavailable · 34012 · 502
Tài khoản cần quyền quản trị viên để gửi vào nhóm WhatsApp này. Hãy cập nhật vai trò trong nhóm trước khi thử lại; đừng gửi lại yêu cầu chưa đổi.
Xử lý và thử lại: Giữ request_id và mã lỗi có cấu trúc; kiểm tra thao tác hiện tại trước khi chọn hành động tiếp theo.
Kênh áp dụng: WhatsApp
Ví dụ · 502 · 34012
{ "request_id": "req_example_group_admin_required", "error": { "code": "provider_unavailable", "numeric_code": "34012", "message": "Group administrator privileges are required to send messages to this group" } }