Định dạng hình ảnh giữa hành trình (Proxy giữa hành trình/Proxy giữa hành trình Plus)
Xin lưu ý
Giao diện này không phải là giao diện Midjourney chính thức, mà là một giao diện Giao diện proxy giữa hành trình được triển khai dựa trên dự án nguồn mở midjourney-proxy by author novicezk.
Dự án này được chia thành hai phiên bản, cả hai phiên bản đều được 88API điều chỉnh:
-
Phiên bản mã nguồn mở midjourney-proxy
-
Phiên bản trả phí midjourney-proxy-plus
Chúng tôi rất biết ơn sự đóng góp của tác giả, cho phép chúng tôi dễ dàng sử dụng các tính năng mạnh mẽ của Midjourney. Nếu có thời gian xin hãy tặng tác giả một Ngôi sao. Nếu có khả năng, chúng tôi khuyên bạn nên hỗ trợ phiên bản trả phí của tác giả, phiên bản này hỗ trợ nhiều tính năng hơn.
| Danh mục tính năng | Nguồn mở | Phiên bản trả phí |
|---|---|---|
| Tính năng cơ bản | ||
| Hãy tưởng tượng các lệnh và hành động liên quan | ✓ | ✓ |
| Hỗ trợ đệm hình ảnh | ✓ | ✓ |
| Blend (Trộn ảnh) | ✓ | ✓ |
| Mô tả (Hình ảnh thành văn bản) | ✓ | ✓ |
| Tiến độ nhiệm vụ theo thời gian thực | ✓ | ✓ |
| Dịch nhanh tiếng Trung | ✓ | ✓ |
| Phát hiện từ nhạy cảm nhanh chóng | ✓ | ✓ |
| Kết nối WSS mã thông báo người dùng | ✓ | ✓ |
| Cấu hình nhiều tài khoản | ✓ | ✓ |
| Tính năng nâng cao | ||
| Rút ngắn (Phân tích nhanh chóng) | ✗ | ✓ |
| Chuyển động lấy nét (Pan) | ✗ | ✓ |
| Thu phóng hình ảnh (Zoom) | ✗ | ✓ |
| Rút lại cục bộ (Vùng khác nhau) | ✗ | ✓ |
| Các thao tác nút liên kết và chế độ Phối lại | ✗ | ✓ |
| Nhận giá trị hạt giống hình ảnh | ✗ | ✓ |
| Quản lý tài khoản | ||
| Sự kiên trì của nhóm tài khoản | ✗ | ✓ |
| Hỗ trợ nhiều bộ lưu trữ (Redis/MySQL) | ✗ | ✓ |
| Truy xuất và cài đặt thông tin tài khoản | ✗ | ✓ |
| Chức năng hủy nhiệm vụ | ✗ | ✓ |
| Phụ trợ quản lý tích hợp | ✗ | ✓ |
| Tính năng thông minh | ||
| Hỗ trợ MJ V6.0 | ✗ | ✓ |
| Giám sát trạng thái tài khoản tự động | ✗ | ✓ |
| Chuyển đổi chế độ tự động | ✗ | ✓ |
| Niji・hành trình Hỗ trợ Bot | ✗ | ✓ |
| Dịch vụ khuôn mặt InsightFace | ✗ | ✓ |
| Bảo mật & Hiệu suất | ||
| Hỗ trợ cấu hình động | ✗ | ✓ |
| Sửa lỗi ngắt kết nối mã thông báo | ✗ | ✓ |
| Chức năng xác minh tự động | ✗ | ✓ |
| Từ bị cấm kháng cáo tự động | ✗ | ✓ |
📝 Giới thiệu
Midjourney là một mô hình xử lý và tạo hình ảnh mạnh mẽ có thể tạo, chỉnh sửa và sửa đổi hình ảnh dựa trên mô tả ngôn ngữ tự nhiên. Bằng cách cung cấp các giao diện khác nhau, các tác vụ xử lý và tạo hình ảnh khác nhau có thể được thực hiện.
🔄 Sơ đồ quy trình
graph TD
A[Start] --> B{Select Task Type}
%% Imagine Flow
B -->|Text to Image| C[Submit Imagine Task]
C --> D[Get Initial Image]
D --> E{Select Operation}
%% Basic Operation Branches
E -->|U1-U4| F[Upscale]
E -->|V1-V4| G[Variation]
%% Blend Flow
B -->|Image Mixing| H[Submit Blend Task]
H --> D
%% Describe Flow
B -->|Image to Text| I[Submit Describe Task]
I --> J[Get Image Description]
%% Action & Modal Flow
F --> K[Submit Action]
G --> K
K -->|Modal Required| L[Submit Modal]
K -->|Direct Execution| M[Execution Complete]
L --> M
%% Face Swap Flow
B -->|Face Replacement| N[Submit Swap Face Task]
N --> M
%% Query Related
M --> O{Subsequent Operations}
O -->|Query Progress| P[Get Task Details]
O -->|Get Seed| Q[Get Image Seed]
O -->|Save Image| R[Upload to Discord]
%% Style Definitions
classDef process fill:#f9f,stroke:#333,stroke-width:2px
classDef decision fill:#bbf,stroke:#333,stroke-width:2px
classDef endpoint fill:#bfb,stroke:#333,stroke-width:2px
class A,M,J,R endpoint
class B,E,O decision
class C,D,F,G,H,I,K,L,N,P,Q processMô tả luồng
- Nhiệm vụ ban đầu
- Hãy tưởng tượng: Tạo văn bản thành hình ảnh
- Blend: Trộn nhiều ảnh – Description: Mô tả hình ảnh
- Hoán đổi khuôn mặt: Thay thế khuôn mặt
- Xử lý hình ảnh
- U1-U4: Hoạt động nâng cao
- V1-V4: Tạo biến thể
- Pan: Dịch hình ảnh
- Zoom: Chia tỷ lệ hình ảnh
- Luồng đặc biệt
- Hành động + Phương thức: Hoạt động yêu cầu xác nhận phương thức
- Thực hiện hành động trực tiếp: Các hoạt động không yêu cầu phương thức
- Quản lý tác vụ
- Nhận chi tiết nhiệm vụ
- Lấy hạt giống hình ảnh
- Tải lên Discord
💡 Yêu cầu Ví dụ
Gửi nhiệm vụ tưởng tượng ✅
curl --location --request POST 'https://88api.ai/mj/submit/imagine' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"botType": "MID_JOURNEY",
"prompt": "Cat",
"base64Array": [],
"accountFilter": {
"channelId": "",
"instanceId": "",
"modes": [],
"remark": "",
"remix": true,
"remixAutoConsidered": true
},
"notifyHook": "",
"state": ""
}'Response Example:
{
"code": 1,
"description": "Submitted successfully",
"properties": {},
"result": 1320098173412546
}Gửi nhiệm vụ pha trộn ✅
curl --location --request POST 'https://88api.ai/mj/submit/blend' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"botType": "MID_JOURNEY",
"base64Array": [
"data:image/png;base64,xxx1",
"data:image/png;base64,xxx2"
],
"dimensions": "SQUARE",
"accountFilter": {
"channelId": "",
"instanceId": "",
"modes": [],
"remark": "",
"remix": true,
"remixAutoConsidered": true
},
"notifyHook": "",
"state": ""
}'Response Example:
{
"code": 1,
"description": "Submitted successfully",
"properties": {},
"result": 1320098173412546
}Gửi mô tả nhiệm vụ ✅
curl --location --request POST 'https://88api.ai/mj/submit/describe' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"botType": "MID_JOURNEY",
"base64": "data:image/png;base64,xxx",
"accountFilter": {
"channelId": "",
"instanceId": "",
"modes": [],
"remark": "",
"remix": true,
"remixAutoConsidered": true
},
"notifyHook": "",
"state": ""
}'Response Example:
{
"code": 1,
"description": "Submitted successfully",
"properties": {},
"result": 1320098173412546
}Gửi phương thức ✅
curl --location --request POST 'https://88api.ai/mj/submit/modal' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"maskBase64": "",
"prompt": "",
"taskId": "14001934816969359"
}'Response Example:
{
"code": 1,
"description": "Submitted successfully",
"properties": {},
"result": 1320098173412546
}Gửi nhiệm vụ swap_face ✅
curl --location --request POST 'https://88api.ai/mj/insight-face/swap' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"sourceBase64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RDnYdriP1wsS81kwU8OVs/R3xu8s6bX7+zYnOH8coSqpmRSBjqerjcBlr2OB/lbAf/2Q==",
"targetBase64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD849k="
}'Response Example:
{
"code": 0,
"description": "string",
"result": "string"
}Thực hiện hành động ✅
curl --location --request POST 'https://88api.ai/mj/submit/action' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"chooseSameChannel": true,
"customId": "MJ::JOB::upsample::1::82c51c9d-bc33-4c07-a471-36c3dcb1a6f0",
"taskId": "1728781324658687",
"accountFilter": {
"channelId": "",
"instanceId": "",
"modes": [],
"remark": "",
"remix": true,
"remixAutoConsidered": true
},
"notifyHook": "",
"state": ""
}'Response Example:
{
"code": 1,
"description": "Submitted successfully",
"properties": {},
"result": 1320098173412546
}Tải tệp lên Discord ✅
curl --location --request POST 'https://88api.ai/mj/submit/upload-discord-images' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"base64Array": [],
"filter": {
"channelId": "",
"instanceId": "",
"remark": ""
}
}'Response Example:
{
"code": 0,
"description": "string",
"result": ["string"]
}Nhiệm vụ truy vấn theo danh sách ID ✅
curl --location --request POST 'https://88api.ai/mj/task/list-by-condition' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"ids": []
}'Response Example:
[
{
"action": "IMAGINE",
"buttons": [
{
"customId": "string",
"emoji": "string",
"label": "string",
"style": 0,
"type": 0
}
],
"description": "string",
"failReason": "string",
"finishTime": 0,
"id": "string",
"imageUrl": "string",
"progress": "string",
"prompt": "string",
"promptEn": "string",
"properties": {},
"startTime": 0,
"state": "string",
"status": "NOT_START",
"submitTime": 0
}
]Nhận nhiệm vụ theo ID cụ thể ✅
curl --location --request GET 'https://88api.ai/mj/task/{id}/fetch' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Content-Type: application/json'Response Example:
{
"action": "IMAGINE",
"buttons": [
{
"customId": "string",
"emoji": "string",
"label": "string",
"style": 0,
"type": 0
}
],
"description": "string",
"failReason": "string",
"finishTime": 0,
"id": "string",
"imageUrl": "string",
"progress": "string",
"prompt": "string",
"promptEn": "string",
"properties": {},
"startTime": 0,
"state": "string",
"status": "NOT_START",
"submitTime": 0
}Nhận hạt giống hình ảnh nhiệm vụ ✅
curl --location --request GET 'https://88api.ai/mj/task/{id}/image-seed' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer $API_KEY' \
--header 'Content-Type: application/json'Response Example:
{
"code": 0,
"description": "string",
"result": "string"
}📮 Yêu cầu
Điểm cuối
Gửi nhiệm vụ tưởng tượng
POST /mj/submit/imagineTạo hình ảnh dựa trên lời nhắc văn bản.
Gửi nhiệm vụ pha trộn
POST /mj/submit/blendTạo hình ảnh mới bằng cách trộn nhiều hình ảnh đầu vào.
Gửi mô tả nhiệm vụ
POST /mj/submit/describeTạo mô tả văn bản dựa trên hình ảnh đầu vào.
Gửi phương thức
POST /mj/submit/modalGửi thông tin phương thức để điều chỉnh chi tiết tạo hình ảnh.
Gửi tác vụ swap_face
POST /mj/insight-face/swapThực hiện hoán đổi khuôn mặt dựa trên hình ảnh nguồn và mục tiêu.
Thực hiện hành động
POST /mj/submit/actionThực hiện các thao tác tiếp theo trên hình ảnh được tạo, chẳng hạn như nâng cấp, điều chỉnh, v.v.
Tải tệp lên Discord
POST /mj/submit/upload-discord-imagesTải hình ảnh lên nền tảng Discord.
Tác vụ truy vấn theo danh sách ID
POST /mj/task/list-by-conditionTruy vấn chi tiết nhiệm vụ dựa trên danh sách ID nhiệm vụ được chỉ định.
Nhận nhiệm vụ theo ID cụ thể
GET /mj/task/{id}/fetchNhận chi tiết nhiệm vụ theo ID nhiệm vụ.
Nhận hạt giống hình ảnh nhiệm vụ
GET /mj/task/{id}/image-seedLấy giá trị hạt giống của hình ảnh được tạo bởi tác vụ được chỉ định.
Phương thức xác thực
Bao gồm nội dung sau trong tiêu đề yêu cầu để xác thực khóa API:
Authorization: Bearer $API_KEYTrong đó $API_KEY là khóa API của bạn.
Thông số nội dung yêu cầu
Gửi nhiệm vụ tưởng tượng
botType
- Kiểu: Chuỗi Enum
- Bắt buộc: Không
- Mặc định: MID_JOURNEY
- Tùy chọn:
MID_JOURNEY: Mô hình giữa hành trìnhNIJI_JOURNEY: Mô hình hành trình Niji- Mô tả: Chọn loại bot để sử dụng
prompt
- Loại: Chuỗi
- Bắt buộc: Có
- Mô tả: Lời nhắc văn bản để tạo hình ảnh
- Lời khuyên:
- Sử dụng mô tả rõ ràng và cụ thể
- Có thể bao gồm phong cách nghệ thuật, bố cục và các chi tiết khác
- Hỗ trợ cả đầu vào tiếng Anh và tiếng Trung
base64Array
- Kiểu: mảng chuỗi
- Bắt buộc: Không
- Mô tả: Mảng mã hóa Base64 để đệm hình ảnh
- Định dạng: Mỗi phần tử phải là một chuỗi hình ảnh base64 hoàn chỉnh với tiền tố kiểu MIME
accountFilter
- Loại: Đối tượng
- Bắt buộc: Không
- Của cải:
channelId: ID kênhinstanceId: ID phiên bản tài khoảnmodes: Mảng chế độ tài khoản, các tùy chọn: RELAX, FAST, TURBOremark: Nội dung có trong phần chú thíchremix: Tài khoản có hỗ trợ remix khôngremixAutoConsidered: Remix cài đặt tự động gửi
notifyHook
- Loại: Chuỗi
- Bắt buộc: Không
- Mô tả: Địa chỉ gọi lại sau khi hoàn thành nhiệm vụ, sử dụng notificationHook toàn cầu khi trống
state
- Loại: Chuỗi
- Bắt buộc: Không
- Mô tả: Tham số trạng thái tùy chỉnh để theo dõi yêu cầu
Gửi nhiệm vụ pha trộn
base64Array
- Kiểu: mảng chuỗi
- Bắt buộc: Có
- Mô tả: Mảng hình ảnh được mã hóa Base64 để pha trộn
- Định dạng: Phải bao gồm 2-5 chuỗi ảnh base64
dimensions
- Kiểu: Chuỗi Enum
- Bắt buộc: Không
- Tùy chọn:
PORTRAIT: tỉ lệ 2:3SQUARE: tỷ lệ 1:1LANDSCAPE: tỉ lệ 3:2- Mô tả: Cài đặt tỷ lệ khung hình ảnh đầu ra
Gửi mô tả nhiệm vụ
base64
- Loại: Chuỗi
- Bắt buộc: Có
- Description: Mã hóa Base64 của hình ảnh cần mô tả
- Định dạng: Chuỗi base64 hoàn chỉnh với tiền tố kiểu MIME
Gửi tác vụ theo phương thức
maskBase64
- Loại: Chuỗi
- Bắt buộc: Không
- Mô tả: Mã hóa Base64 của hình ảnh mặt nạ để vẽ lại cục bộ
prompt
- Loại: Chuỗi
- Bắt buộc: Không
- Mô tả: Text nhắc vùng vẽ lại
taskId
- Loại: Chuỗi
- Bắt buộc: Có
- Mô tả: ID của tác vụ ban đầu
Gửi tác vụ hoán đổi khuôn mặt
sourceBase64
- Loại: Chuỗi
- Bắt buộc: Có
- Mô tả: Mã hóa Base64 của nguồn ảnh khuôn mặt
- Yêu cầu: Hình ảnh phải có khuôn mặt rõ nét
targetBase64
- Loại: Chuỗi
- Bắt buộc: Có
- Mô tả: Mã hóa Base64 của ảnh mục tiêu
- Yêu cầu: Hình ảnh phải chứa khuôn mặt cần thay thế
Thực hiện hành động
chooseSameChannel
- Kiểu: Boolean
- Bắt buộc: Không
- Mặc định: sai
- Mô tả: Có chọn tài khoản cùng kênh hay không
customId
- Loại: Chuỗi
- Bắt buộc: Có
- Mô tả: Định danh hành động
- Định dạng: Chuỗi định dạng cụ thể, chẳng hạn như "MJ::JOB::upsample::1::xxx"
taskId
- Loại: Chuỗi
- Bắt buộc: Có
- Mô tả: ID tác vụ cho hành động được thực thi
Tải tệp lên Discord
base64Array
- Kiểu: mảng chuỗi
- Bắt buộc: Có
- Mô tả: Chuỗi hình ảnh được mã hóa Base64 để tải lên
filter
- Loại: Đối tượng
- Bắt buộc: Không
- Của cải:
channelId: ID kênh mục tiêuinstanceId: ID phiên bản tài khoảnremark: Thông tin ghi chú
Tác vụ truy vấn theo danh sách ID
ids
- Kiểu: mảng chuỗi
- Bắt buộc: Có
- Mô tả: Danh sách ID nhiệm vụ cần truy vấn
Định dạng phản hồi chung
Tất cả các giao diện đều trả về cấu trúc phản hồi tương tự:
code
- Kiểu: Số nguyên
- Mô tả: Mã trạng thái
| Mã trạng thái | Mô tả |
|---|---|
| 1 | Đã gửi thành công |
| 22 | Nhiệm vụ xếp hàng đợi |
| 21 | Lỗi tham số |
| 23 | Lỗi hệ thống |
| 24 | Tài khoản không có sẵn |
| 25 | Số dư không đủ |
description
- Loại: Chuỗi
- Description: Thông tin mô tả phản hồi
properties
- Loại: Đối tượng
- Mô tả: Thuộc tính mở rộng
result
- Kiểu: Chuỗi hoặc mảng
- Mô tả: Kết quả trả về, có thể là ID task hoặc dữ liệu khác
📥 Phản hồi
###Phản hồi thành công
action
- Kiểu: Chuỗi Enum
- Mô tả: Loại nhiệm vụ
| Giá trị chuỗi | Mô tả |
|---|---|
IMAGINE | Tạo hình ảnh |
UPSCALE | Hình ảnh cao cấp |
VARIATION | Tạo biến thể |
ZOOM | Thu phóng hình ảnh |
PAN | Xoay hình ảnh |
DESCRIBE | Mô tả hình ảnh |
BLEND | Trộn hình ảnh |
SHORTEN | Rút ngắn lời nhắc |
SWAP_FACE | Thay thế khuôn mặt |
buttons
- Kiểu: Mảng đối tượng
- Mô tả: Các nút thao tác có thể thực thi được
| Thuộc tính mảng | Mô tả |
|---|---|
customId | Mã định danh hành động |
emoji | Biểu tượng nút |
label | Văn bản nút |
style | Kiểu (2=Chính, 3=Xanh) |
type | Loại được hệ thống sử dụng nội bộ |
description
- Loại: Chuỗi
- Description: Thông tin mô tả nhiệm vụ
failReason
- Loại: Chuỗi
- Mô tả: Lý do lỗi nhiệm vụ
finishTime
- Kiểu: Số nguyên
- Mô tả: Dấu thời gian hoàn thành nhiệm vụ
id
- Loại: Chuỗi
- Mô tả: Mã định danh duy nhất của nhiệm vụ
imageUrl
- Loại: Chuỗi
- Mô tả: URL của hình ảnh được tạo
progress
- Loại: Chuỗi
- Mô tả: Thông tin tiến độ nhiệm vụ
prompt
- Loại: Chuỗi
- Mô tả: Lời nhắc gốc
promptEn
- Loại: Chuỗi
- Mô tả: Lời nhắc tiếng Anh
status
- Kiểu: Chuỗi Enum
- Mô tả: Trạng thái nhiệm vụ
| Giá trị chuỗi | Mô tả |
|---|---|
NOT_START | Chưa bắt đầu |
SUBMITTED | Đã gửi |
MODAL | Đang vận hành phương thức |
IN_PROGRESS | Đang tiến hành |
FAILURE | Thất bại |
SUCCESS | Thành công |
CANCEL | Đã hủy |
submitTime
- Kiểu: Số nguyên
- Mô tả: Dấu thời gian nộp nhiệm vụ
startTime
- Kiểu: Số nguyên
- Mô tả: Dấu thời gian bắt đầu thực hiện nhiệm vụ
Phản hồi lỗi
Khi có vấn đề với yêu cầu, API sẽ trả về phản hồi lỗi:
Mã trạng thái HTTP
400 Bad Request: Tham số yêu cầu không hợp lệ401 Unauthorized: Key API không hợp lệ hoặc bị thiếu403 Forbidden: Không đủ quyền404 Not Found: Không tìm thấy tài nguyên429 Too Many Requests: Vượt quá giới hạn tần suất yêu cầu500 Internal Server Error: Lỗi máy chủ nội bộ
Định dạng phản hồi lỗi
{
"code": `<error_code>`,
"description": "Error description information",
"result": null
}💡 Các phương pháp hay nhất
Gợi ý viết nhanh
- Sử dụng ngôn ngữ rõ ràng, ngắn gọn để mô tả nội dung hình ảnh mong đợi
- Có thể tham khảo các thông số khác nhau được Midjourney hỗ trợ để kiểm soát kiểu hình ảnh
- Sử dụng mô tả tiêu cực một cách thích hợp để loại trừ các yếu tố không mong muốn
- Có thể sử dụng URL hình ảnh làm tài liệu tham khảo để tạo hướng dẫn
Quá trình tạo hình ảnh
- Gửi nhiệm vụ Tưởng tượng để có được hình ảnh ban đầu
- Tối ưu hóa hơn nữa thông qua Blend, Modal và các tác vụ khác nếu cần
- Thực hiện các thao tác Action để tinh chỉnh hình ảnh
- Tải lên và lưu hình ảnh kết quả ưng ý
Yêu cầu về định dạng hình ảnh
- Các định dạng hình ảnh được hỗ trợ: -JPEG/JPG
- PNG
- GIF (tĩnh)
- WEBP
- Giới hạn kích thước hình ảnh:
- Kích thước file: Tối đa 4MB
- Độ phân giải: Khuyến nghị 1024x1024 trở lên
- Tỷ lệ khung hình: Hỗ trợ 1:1, 2:3, 3:2
Đề xuất tối ưu hóa hiệu suất
- Mã hóa Base64:
- Sử dụng định dạng mã hóa Base64 tiêu chuẩn
- Bao gồm tiền tố loại MIME chính xác
- Nén hình ảnh để giảm truyền dữ liệu
- Xử lý tác vụ:
- Sử dụng webhook để nhận thông báo hoàn thành nhiệm vụ
- Đặt chiến lược thử lại hợp lý
- Khuyến nghị sử dụng các phương pháp xử lý không đồng bộ
Xử lý lỗi
-
Triển khai cơ chế thử lại yêu cầu
-
Thêm ghi nhật ký lỗi
-
Đặt thời gian chờ hợp lý