# 租戶通知特定對象(檔案上傳) --- - 常數定義 - [推播任務狀態](#推播任務狀態) - API 清單 - [取得管理列表](#取得管理列表) - [取得管理明細](#取得管理明細) - [取得上傳網址](#取得上傳網址) - [新增推播任務](#新增推播任務) - [編輯推播任務](#編輯推播任務) - [刪除推播任務](#刪除推播任務) --- ## 常數定義 ### 推播任務狀態 欄位 | 型態 | 說明 ---|---|--- status | string | 推播任務狀態, NONE: 未推播, PUSHING: 推播中, PUSHED: 已推播 --- # API 清單 ### 取得管理列表 ```url POST /tenant-push-mgmt/task/list ``` * 權限: 租戶管理員(TENANT_ADMIN) #### Request-取得管理列表 ##### Request-取得管理列表-query (查詢條件json) 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- startDate | timestamp | Y | | | 查詢起始日 endDate | timestamp | Y | | | 查詢截止日 status | string | | 10 | | 推播任務狀態, 若未填表示查詢全部, 參閱 [推播任務狀態](#推播任務狀態) keyword | string | | 50 | | 查詢標題或備註關鍵字 ##### Request-取得管理列表-pagination (分頁json) 欄位 | 型態 | 必填 | 預設 | 說明 ---|---|---|---|--- current | int | | 1 | 當前頁數 pageSize | int | | 10 | 每頁結果數量,-1 為顯示所有 ##### Request-取得管理列表-sorter (排序json) 欄位 | 型態 | 必填 | 預設 | 說明 ---|---|---|---|--- field | string | | updateTime | 排序欄位,可排序欄位有 title, pushTime, status, updateTime order | string | | desc | 升序或降序 ```javascript { "query": { "startDate": "2023-08-20", "endDate": "2023-09-01", "status": null, "keyword": null }, "pagination": { "current": 1, "total": 1, "pageSize": 10 }, "sorter": { "field": "updateTime", "order": "desc" } } ``` #### Response-取得管理列表 欄位 | 型態 | 說明 --- | --- | --- id | string | 推播任務id tenantId | string | 租戶 id title | string | 標題 pushTime | timestamp | 推播時間 status | string | 推播任務狀態, 參閱 [推播任務狀態](#推播任務狀態) remark | string | 備註 pushedTime | timestamp | 已推播時間 objectKey | string | 推播檔案的objectKey url | string | 推播檔案可download 的 url, 時效 3600 秒 fileType | string | 推播檔案的檔案類型 fileName | string | 推播檔案的檔名 creator | string | 建立者 account id updater | string | 更新者 account id createTime | timestamp | 建立時間 updateTime | timestamp | 更新時間 taskCount | int | 推播檔案的資料筆數 successCount | int | 推播成功的筆數 failCount | int | 推播失敗的筆數 ```javascript { "httpCode": 200, "result": { "data": [ { "id": "91385431-d6db-4fba-9290-4af31f0d2991", "tenantId": "5efcfd67-334e-45b3-bf49-7e52f5172891", "title": "202309家樂福100元電子票券", "pushTime": 1693531800000, "status": "NONE", "remark": "就是100元的電子票券,要搶要快!!", "creator": "153245f8-bfe0-4e28-b357-9ee48aa0c04c", "createTime": 1693476930379, "updateTime": "2023-08-31 18:15:30.379924", "objectKey": "tenant-push-mgmt/a70a3d2f-7445-41c2-a13c-5660ccd407d3.xlsx", "url": "http://localhost:3004/v1/AUTH_test/kmuh/tenant-push-mgmt/a70a3d2f-7445-41c2-a13c-5660ccd407d3.xlsx?temp_url_sig=98752f4f2d6d275064f92a95e7a056d958a4afb5&temp_url_expires=1693484236", "fileType": "xlsx", "fileName": "H365_v3_匯入_會員訊息推播名單_sample.xlsx", "taskCount": null, "successCount": null, "failCount": null } ], "pagination": { "current": 1, "pageSize": 10, "total": 1 }, "sorter": { "field": "updateTime", "order": "desc" }, "total": 1 } } ``` ### 取得管理明細 ```url POST /tenant-push-mgmt/task/info ``` * 權限: 租戶管理員(TENANT_ADMIN) #### Request-取得管理明細 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- id | string | Y | 36 | | 推播任務id ```javascript { "id": "91385431-d6db-4fba-9290-4af31f0d2991" } ``` #### Response-取得管理明細 欄位 | 型態 | 說明 --- | --- | --- id | string | 推播任務id tenantId | string | 租戶 id title | string | 標題 pushTime | timestamp | 推播時間 status | string | 推播任務狀態, 參閱 [推播任務狀態](#推播任務狀態) remark | string | 備註 pushedTime | timestamp | 已推播時間 objectKey | string | 推播檔案的objectKey url | string | 推播檔案可download 的 url, 時效 3600 秒 fileType | string | 推播檔案的檔案類型 fileName | string | 推播檔案的檔名 creator | string | 建立者 account id updater | string | 更新者 account id createTime | timestamp | 建立時間 updateTime | timestamp | 更新時間 taskCount | int | 推播檔案的資料筆數 successCount | int | 推播成功的筆數 failCount | int | 推播失敗的筆數 ```javascript { "httpCode": 200, "result": { "data": { "id": "91385431-d6db-4fba-9290-4af31f0d2991", "tenantId": "5efcfd67-334e-45b3-bf49-7e52f5172891", "title": "202309家樂福100元電子票券", "pushTime": 1693531800000, "status": "NONE", "remark": "就是100元的電子票券,要搶要快!!", "creator": "153245f8-bfe0-4e28-b357-9ee48aa0c04c", "createTime": 1693476930379, "updateTime": "2023-08-31 18:15:30.379924", "objectKey": "tenant-push-mgmt/a70a3d2f-7445-41c2-a13c-5660ccd407d3.xlsx", "url": "http://localhost:3004/v1/AUTH_test/kmuh/tenant-push-mgmt/a70a3d2f-7445-41c2-a13c-5660ccd407d3.xlsx?temp_url_sig=7d8ffe8ee530a69b7b4bbf06addca853689df53c&temp_url_expires=1693484264", "fileType": "xlsx", "fileName": "H365_v3_匯入_會員訊息推播名單_sample.xlsx", "taskCount": null, "successCount": null, "failCount": null } } } ``` ### 取得上傳網址 ```url POST /tenant-push-mgmt/task/get-upload-url ``` * 權限: 租戶管理員(TENANT_ADMIN) * 新增/編輯推播任務時用來上傳excel檔前, 要先取得可上傳檔案的網址 * 只允許上傳 .xlsx, .xls 檔案 #### Request-取得上傳網址 欄位 | 型態 | 必填 | 預設 | 說明 ---|---|---|---|--- isMultipart | boolean | Y | false | 是否使用分段上傳 isThumbnail | boolean | Y | false | 上傳的是否為縮圖 fileName | String | Y | | 檔名,不包含副檔名,限制最多50字 fileType | String | Y | | 副檔名, 限制最多10字 totalPart | int | **N** (isMultipart=false)<br>**Y** (isMultipart=true) | | 總分塊數量,不可小於2 parts | Array [...part] | **N** (isMultipart=false)<br>**Y** (isMultipart=true) | | part 資訊 ##### Request-取得上傳網址-part(Object) 欄位 | 型態 | 必填 | 預設 | 說明 ---|---|---|---|--- chunkSize | int | Y | | 該 chunk 的大小, bytes md5 | string | Y | | 該 part 的 md5 part | int | Y | | part number, 第幾塊 chunk ```javascript // 單檔 { "isMultipart": false, "fileName": "H365_v3_匯入_會員訊息推播名單_sample.xlsx", "fileType": "xlsx", "totalPart": null, "parts": [ ], "isThumbnail": false } // 分塊上傳 { isMultipart: true, isThumbnail: false, fileName: giphy (7), fileType: mp4, totalPart: 2, parts: [ { chunkSize: 5242880, md5: 5AACA89868CD486D81192221CF9F9415, part: 1 }, { chunkSize: 3145728, md5: 5AACA89868CD486D81192221CF9F9415, part: 2 } ] } ``` #### Error-取得上傳網址 httpCode | 錯誤碼 | 說明 --- | --- | --- 422 | SERVICE_ERROR.UPLOAD_FILE_TYPE_NOT_ALLOWED | 上傳的檔案類型不允許 #### Response-取得上傳網址 ##### Response-取得上傳網址-data 欄位 | 型態 | 說明 --- | --- | --- objectKey | string | storage 中的 objectKey, **unique** uploadId | string | 識別該次上傳的 uploadId fileName | string | 名稱 fileType | string | 副檔名 url | string | 單檔上傳的時候,才會回傳該 url, 時效 3600 秒 parts | [...part] | multipart上傳各part的url ##### Response-取得上傳網址-part 欄位 | 型態 | 說明 --- | --- | --- chunkSize | int | 該 chunk 的大小, bytes md5 | string | 該 part 的 md5 part | int | part number, 第幾塊 chunk url | string | 可上傳的 url, 時效 3600 秒 ```javascript // 單檔 { "httpCode": 200, "result": { "data": { "objectKey": "tenant-push-mgmt/c90d1464-97ac-4eed-8fc0-3d711f497672.xlsx", "uploadId": "1abded54-5ef2-44b2-b5aa-9e99dc418ad3", "fileName": "H365_v3_匯入_會員訊息推播名單_sample.xlsx", "fileType": "xlsx", "url": "http://localhost:3004/v1/AUTH_test/kmuh/tenant-push-mgmt/c90d1464-97ac-4eed-8fc0-3d711f497672.xlsx?temp_url_sig=c1b6a224f40f8cdc370fae4d91f71dbbb27d6e1d&temp_url_expires=1693483919" } } } // 分塊上傳 { httpCode: 200, result: { data: { objectKey: tenant-push-mgmt/c90d1464-97ac-4eed-8fc0-3d711f497672.xlsx, uploadId: 53fde368-43d9-455f-a610-62091fc30be6, fileName: giphy (7), fileType: mp4, parts: [ { chunkSize: 5242880, md5: 5AACA89868CD486D81192221CF9F9415, part: 1, url: http://swift-storage/tenant-push-mgmt/c90d1464-97ac-4eed-8fc0-3d711f497672.xlsx }, { chunkSize: 3145728, md5: 5AACA89868CD486D81192221CF9F9415, part: 2, url: http://swift-storage/tenant-push-mgmt/c90d1464-97ac-4eed-8fc0-3d711f497672.xlsx } ] } } } ``` ### 新增推播任務 ```url POST /tenant-push-mgmt/task/add ``` * 權限: 租戶管理員(TENANT_ADMIN) #### Request-新增推播任務 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- title | string | | 200 | | 標題 pushTime | timestamp | Y | | | 推播時間 remark | string | | 2000 | | 備註 contentObject | json | Y | | | 上傳推播檔案 json ##### Request-新增推播任務-contentObject(json) 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- objectKey | string | Y | 500 | | 上傳檔案的objectKey, 先取得檔案的上傳網址並上傳成功,取其 objectKey。 isMultipart | boolean | N | | | 檔案上傳時是否分塊上傳,預設為 false totalPart | int | **N** (isMultipart=false)<br>**Y** (isMultipart=true) | | | 檔案上傳的總分塊數量,不可小於2 uploadId | string | **N** (isMultipart=false)<br>**Y** (isMultipart=true) | | | 從 /tenant-push-mgmt/task/get-upload-url 取得的 uploadId ```javascript { "title": "202309家樂福100元電子票券", "pushTime": 1693531800000, "remark": "就是100元的電子票券,要搶要快!!", "contentObject": { "objectKey": "tenant-push-mgmt/a70a3d2f-7445-41c2-a13c-5660ccd407d3.xlsx", "isMultipart": false } } ``` #### Error-新增推播任務 httpCode | 錯誤碼 | 說明 --- | --- | --- 400 | API_ERROR.ARGUMENT_ERROR | 輸入參數錯誤, 可參閱 errorDesc #### Response-新增推播任務 欄位 | 型態 | 說明 --- | --- | --- id | string | 推播任務id tenantId | string | 租戶 id title | string | 標題 pushTime | timestamp | 推播時間 status | string | 推播任務狀態, 參閱 [推播任務狀態](#推播任務狀態) remark | string | 備註 pushedTime | timestamp | 已推播時間 creator | string | 建立者 account id updater | string | 更新者 account id createTime | timestamp | 建立時間 updateTime | timestamp | 更新時間 ```javascript { "httpCode": 200, "result": { "data": { "id": "91385431-d6db-4fba-9290-4af31f0d2991", "tenantId": "5efcfd67-334e-45b3-bf49-7e52f5172891", "title": "202309家樂福100元電子票券", "pushTime": 1693531800000, "status": "NONE", "remark": "就是100元的電子票券,要搶要快!!", "creator": "153245f8-bfe0-4e28-b357-9ee48aa0c04c", "createTime": 1693476930379, "updateTime": "2023-08-31 18:15:30.379924" } } } ``` ### 編輯推播任務 ```url POST /tenant-push-mgmt/task/update ``` * 權限: 租戶管理員(TENANT_ADMIN) #### Request-編輯推播任務 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- id | string | Y | 36 | | 推播任務id title | string | | 200 | | 標題 pushTime | timestamp | Y | | | 推播時間 remark | string | | 2000 | | 備註 contentObject | json | Y | | | 上傳推播檔案 json ##### Request-編輯推播任務-contentObject(json) 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- objectKey | string | Y | 500 | | 上傳檔案的objectKey, 先取得檔案的上傳網址並上傳成功,取其 objectKey。 isMultipart | boolean | N | | | 檔案上傳時是否分塊上傳,預設為 false totalPart | int | **N** (isMultipart=false)<br>**Y** (isMultipart=true) | | | 檔案上傳的總分塊數量,不可小於2 uploadId | string | **N** (isMultipart=false)<br>**Y** (isMultipart=true) | | | 從 /tenant-push-mgmt/task/get-upload-url 取得的 uploadId ```javascript { "id": "91385431-d6db-4fba-9290-4af31f0d2991", "title": "202309家樂福100元電子票券", "pushTime": 1692617732000, "remark": "就是100元的電子票券,要搶要快!!", "contentObject": { "objectKey": "user-content/dengue/150b53f5-7126-4900-9fb0-87a08b45e06b/5399c12-c5fd-4a2f-8d8a-641e1c63acea.png", "isMultipart": false } } ``` #### Error-編輯推播任務 httpCode | 錯誤碼 | 說明 --- | --- | --- 400 | API_ERROR.ARGUMENT_ERROR | 輸入參數錯誤, 可參閱 errorDesc 400 | API_ERROR.ARGUMENT_ERROR | 資料不存在 403 | API_ERROR.PERMISSION_DENIED | 無此操作權限 #### Response-編輯推播任務 欄位 | 型態 | 說明 --- | --- | --- id | string | 推播任務id tenantId | string | 租戶 id title | string | 標題 pushTime | timestamp | 推播時間 status | string | 推播任務狀態, 參閱 [推播任務狀態](#推播任務狀態) remark | string | 備註 pushedTime | timestamp | 已推播時間 creator | string | 建立者 account id updater | string | 更新者 account id createTime | timestamp | 建立時間 updateTime | timestamp | 更新時間 ```javascript { "httpCode": 200, "result": { "data": { "id": "91385431-d6db-4fba-9290-4af31f0d2991", "tenantId": "5efcfd67-334e-45b3-bf49-7e52f5172891", "title": "202309家樂福100元電子票券", "pushTime": 1693531800000, "status": "NONE", "remark": "就是100元的電子票券,要搶要快!!", "creator": "153245f8-bfe0-4e28-b357-9ee48aa0c04c", "createTime": 1693476930379, "updateTime": "2023-08-31 18:15:30.379924" } } } ``` ### 刪除推播任務 ```url POST /tenant-push-mgmt/task/delete ``` * 權限: 租戶管理員(TENANT_ADMIN) #### Request-刪除推播任務 欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明 ---|---|---|---|---|--- id | string | Y | 36 | | 推播任務id ```javascript { "id": "91385431-d6db-4fba-9290-4af31f0d2991" } ``` #### Error-刪除推播任務 httpCode | 錯誤碼 | 說明 --- | --- | --- 400 | API_ERROR.ARGUMENT_ERROR | 輸入參數錯誤, 可參閱 errorDesc 400 | API_ERROR.ARGUMENT_ERROR | 資料不存在 403 | API_ERROR.PERMISSION_DENIED | 無此操作權限 #### Response-刪除推播任務 欄位 | 型態 | 說明 --- | --- | --- count | int | 成功刪除筆數 ```javascript { "httpCode": 200, "result": { "data": { "count": 1 } } } ```