---
# System prepended metadata

title: URI-J-01~03  Product Alert
tags: [電子報訂閱]

---

# URI-J-01~03  Product Alert
> [name=JasonWu, Hans]

###### tags: `電子報訂閱`

## 網址
- https://{domain}/taiwantradeAlert/subscribeCategory/
    - ex: https://www.taiwantrade.com/taiwantradeAlert/subscribeCategory/

## 原版程式
- com.hyweb.tt.cms.front.rest.SubscribeResource.java
- 

## 頁面功能說明
- 首先輸入 email，檢查相關訂閱資訊；如果已經登入，省略此動作，直接進入編輯畫面
- 成功之後，提供使用者輸入訂閱的相關資訊
    - 輸入 keyword，將來可找出符合 keyword 的型錄
    - 選擇後分類，提供使用者勾選並記錄相關後分類
    - 最多可以選擇 100 項
- 需要有 google 的機器人驗證
- 送出後，記錄相關資料
![reference link](https://i.imgur.com/WpxWwGi.png)

## 相關 api 分析
- 預計應提供四隻 api
- subscribe category select api > 提供使用者找出符合的後分類
    - 找出符合對應 cid 的分類結果
    - 如果傳入的 type = 2，代表要拿到四碼的下拉選單
    - 如果傳入的 type = 4，代表要拿到六碼的下拉選單
    - 如果傳入的 type = 6，代表實際列出的結果
- subscribe keyword search api > 輸入查詢詞，找出符合的後分類
    - 找出符合 keyword 符合前三多的四碼 taitra code 與對應的六碼 taitra code
- product alert save api > 點選送出後，儲存相關資料
- product alert remove api > 點選送出後，刪除相關資料

## URI-J-01 subscribe category select api
- https://www.taiwantrade.com/taiwantradeAlert/selectCategory6?cid=7060&did=2&languageId=42

### 規格
- path : ${TT-API網址}/subscriptions/product-catalog
- method : POST
- query :

### API 邏輯
- 依照查詢條件，找出後分類列表
    - 如果 type = 2 > 代表組出二碼下拉選單
    - 如果 type = 4 > 代表組出四碼下拉選單
    - 如果 type = 6 > 代表組出可以選擇的四碼與六碼清單

### Input
```=json
{
    "did" : {{ number }},
    "type" : {{ number }},
    "cid" : {{ number }}
}
```

Column           | Type     | Require | Desc
-----------------|----------|---------|---------
did              | number   | Y       | domain id
type             | number   | Y       | 是二碼、四碼或是四六碼
cid              | number   | Y       | 查詢分類 id(查詢二碼給0)

### Output
- json 內容如下:
```=json
{ 
    "code" : {{ number }} , // 代碼，0：ok、 < 0: error 使用
    "errorMsg"  : {{ string }}, // 錯誤訊息
    "data" : [
       {
          "categoryName" : {{ string }} , // 第一層 taitra code name
          "cid" : {{ number }} , // 第一層 taitra code id
          "parentcid" : null, // 第一層不需特殊回傳 parent id
          "count" : {{ number }} , // 數量
          "subscribeCid" : {{ number }} // 第一層 taitra code 訂閱 cid
       },
    ]
}

```

#### 輸出參數說明

<span id="subscribeCategorySelectVo">`subscribeCategorySelectVo`</span>

| 欄位名稱 | 欄位說明 | 型態 |
| -------- | -------- | -------- |
| categoryName	 | 產業別名稱	 | String	 |
| cid	 | 產業別代碼<br>ex. 2碼50, 2碼下的4碼5001, 4碼下的6碼500101	 | int	 |
| parentcid	 | 父層ID	 | int	 |
| count	 | 型錄數	 | int	 |
| subscribeCid	 | CodeMeta流水號，用於 [Save-Api-catalogs](https://hackmd.io/3lN5tDL1TIiz4ySRfyQXLA?view#Input2) 儲存記錄	 | int	 |

### 實際範例

<details>
<summary>
2碼Input(Click to Show/Hide Output)

```=json
{
  "cid": 0,
  "did": 2,
  "type": 2
}
```

</summary>
2碼Output

```=json
{
  "code": 0,
  "errorMsg": "",
  "data": [
    {
      "categoryName": "Aerospace",
      "cid": 71,
      "parentcid": null,
      "count": 352,
      "subscribeCid": 21
    },
    {
      "categoryName": "Agricultural & Foods",
      "cid": 51,
      "parentcid": null,
      "count": 13271,
      "subscribeCid": 1
    },
    {
      "categoryName": "Apparel & Accessories",
      "cid": 56,
      "parentcid": null,
      "count": 9003,
      "subscribeCid": 6
    },
    {
      "categoryName": "Automobiles & Motorcycles",
      "cid": 69,
      "parentcid": null,
      "count": 34360,
      "subscribeCid": 19
    },
    {
      "categoryName": "Beauty & Personal Care",
      "cid": 54,
      "parentcid": null,
      "count": 6646,
      "subscribeCid": 4
    },
    {
      "categoryName": "Bicycles",
      "cid": 70,
      "parentcid": null,
      "count": 6190,
      "subscribeCid": 20
    },
    {
      "categoryName": "Chemicals",
      "cid": 53,
      "parentcid": null,
      "count": 4335,
      "subscribeCid": 3
    },
    {
      "categoryName": "Computer",
      "cid": 67,
      "parentcid": null,
      "count": 9719,
      "subscribeCid": 17
    },
    {
      "categoryName": "Construction",
      "cid": 76,
      "parentcid": null,
      "count": 6270,
      "subscribeCid": 2
    },
    {
      "categoryName": "Consumer Electronics",
      "cid": 64,
      "parentcid": null,
      "count": 7276,
      "subscribeCid": 14
    },
    {
      "categoryName": "Electrical & Electronics",
      "cid": 63,
      "parentcid": null,
      "count": 17216,
      "subscribeCid": 13
    },
    {
      "categoryName": "Furniture",
      "cid": 77,
      "parentcid": null,
      "count": 5859,
      "subscribeCid": 27
    },
    {
      "categoryName": "Gifts & Crafts",
      "cid": 83,
      "parentcid": null,
      "count": 4585,
      "subscribeCid": 33
    },
    {
      "categoryName": "Hardware",
      "cid": 59,
      "parentcid": null,
      "count": 7693,
      "subscribeCid": 9
    },
    {
      "categoryName": "Home Appliances",
      "cid": 65,
      "parentcid": null,
      "count": 2693,
      "subscribeCid": 15
    },
    {
      "categoryName": "Houseware",
      "cid": 78,
      "parentcid": null,
      "count": 8068,
      "subscribeCid": 28
    },
    {
      "categoryName": "Lights & Lighting",
      "cid": 66,
      "parentcid": null,
      "count": 5371,
      "subscribeCid": 16
    },
    {
      "categoryName": "Luggage, Bags & Cases",
      "cid": 57,
      "parentcid": null,
      "count": 1837,
      "subscribeCid": 7
    },
    {
      "categoryName": "Machinery",
      "cid": 61,
      "parentcid": null,
      "count": 22156,
      "subscribeCid": 11
    },
    {
      "categoryName": "Measurement & Analysis Instrument",
      "cid": 75,
      "parentcid": null,
      "count": 2966,
      "subscribeCid": 25
    },
    {
      "categoryName": "Mechanical Parts",
      "cid": 62,
      "parentcid": null,
      "count": 7228,
      "subscribeCid": 12
    },
    {
      "categoryName": "Medical & Health",
      "cid": 74,
      "parentcid": null,
      "count": 6332,
      "subscribeCid": 24
    },
    {
      "categoryName": "Mineral & Metallurgy",
      "cid": 52,
      "parentcid": null,
      "count": 1386,
      "subscribeCid": 2
    },
    {
      "categoryName": "Musical Instruments",
      "cid": 81,
      "parentcid": null,
      "count": 331,
      "subscribeCid": 31
    },
    {
      "categoryName": "Office & School Supplies",
      "cid": 82,
      "parentcid": null,
      "count": 3693,
      "subscribeCid": 32
    },
    {
      "categoryName": "Packaging, Printing & Advertising",
      "cid": 84,
      "parentcid": null,
      "count": 4358,
      "subscribeCid": 34
    },
    {
      "categoryName": "Security & Protection",
      "cid": 73,
      "parentcid": null,
      "count": 4513,
      "subscribeCid": 23
    },
    {
      "categoryName": "Services",
      "cid": 85,
      "parentcid": null,
      "count": 1278,
      "subscribeCid": 35
    },
    {
      "categoryName": "Ships & Boats",
      "cid": 72,
      "parentcid": null,
      "count": 811,
      "subscribeCid": 22
    },
    {
      "categoryName": "Sports",
      "cid": 80,
      "parentcid": null,
      "count": 7779,
      "subscribeCid": 30
    },
    {
      "categoryName": "Telecom Products",
      "cid": 68,
      "parentcid": null,
      "count": 2730,
      "subscribeCid": 18
    },
    {
      "categoryName": "Textile & Leather",
      "cid": 55,
      "parentcid": null,
      "count": 1528,
      "subscribeCid": 5
    },
    {
      "categoryName": "Timepiece, Jewelry & Eyewear",
      "cid": 58,
      "parentcid": null,
      "count": 3901,
      "subscribeCid": 8
    },
    {
      "categoryName": "Tools999",
      "cid": 60,
      "parentcid": null,
      "count": 11855,
      "subscribeCid": 10
    },
    {
      "categoryName": "Toys, Baby & Pet Products",
      "cid": 79,
      "parentcid": null,
      "count": 3608,
      "subscribeCid": 29
    }
  ]
}
```

</details>

<details>
<summary>
4碼Input(Click to Show/Hide Output)

```=json
{
  "cid": 72,
  "did": 2,
  "type": 4
}
```

</summary>
4碼Output

```=json
{
  "code": 0,
  "errorMsg": "",
  "data": [
    {
      "categoryName": "Boats & Ships",
      "cid": 7210,
      "parentcid": 72,
      "count": 143,
      "subscribeCid": 259
    },
    {
      "categoryName": "Marine Supplies",
      "cid": 7220,
      "parentcid": 72,
      "count": 668,
      "subscribeCid": 260
    }
  ]
}
```

</details>

<details>
<summary>
6碼Input(Click to Show/Hide Output)

```=json
{
  "cid": 7220,
  "did": 2,
  "type": 6
}
```

</summary>
6碼Output

```=json
{
  "code": 0,
  "errorMsg": "",
  "data": [
    {
      "categoryName": "Boat Engine",
      "cid": 722010,
      "parentcid": 7220,
      "count": 2,
      "subscribeCid": 2519
    },
    {
      "categoryName": "Marine Buoy",
      "cid": 722050,
      "parentcid": 7220,
      "count": 5,
      "subscribeCid": 2523
    },
    {
      "categoryName": "Marine Hardware",
      "cid": 722040,
      "parentcid": 7220,
      "count": 612,
      "subscribeCid": 2522
    },
    {
      "categoryName": "Marine Propeller",
      "cid": 722030,
      "parentcid": 7220,
      "count": 34,
      "subscribeCid": 2521
    },
    {
      "categoryName": "Marine Pump",
      "cid": 722020,
      "parentcid": 7220,
      "count": 8,
      "subscribeCid": 2520
    },
    {
      "categoryName": "Other Marine Supplies",
      "cid": 722099,
      "parentcid": 7220,
      "count": 7,
      "subscribeCid": 2524
    }
  ]
}
```

</details>

## URI-J-02 subscribe keyword search api 
- https://www.taiwantrade.com/taiwantradeAlert/searchCategoryByKeyword?keyword=mp3&did=2&languageId=42

### 規格
- path : ${TT-API網址}/subscriptions/product-search
- method : POST
- query : 

### API 邏輯
- 依照查詢詞條件呼叫IDOL查詢，取得所有資料後，依照四碼下涵蓋產品數量倒敘排序，排序完成後回傳前三筆四碼以及所屬六碼的結果。

### Input
```=json
{
    "did" : {{ number }},
    "keyword" : {{ string }}
}
```
Column           | Type     | Require | Desc
-----------------|----------|---------|---------
did              | number   | Y       | domain id
keyword          | String   | Y       | 查詢詞

### Output
- json 內容如下:
```=json
{ 
    "code" : {{ number }} , // 代碼，0：ok、 < 0: error 使用
    "errorMsg"  : {{ string }}, // 錯誤訊息
    "data" : [
       {
          "categoryName" : {{ string }} , // 四碼 taitra code name
          "cid" : {{ number }} , // 四碼 taitra code id
          "parentcid" : null, // 四碼沒有特別回傳 parent
          "count" : {{ number }} , // 數量
          "subscribeCid" : {{ number }} , // 四碼 taitra code 訂閱 cid
          "subscribeCategorySelectVo" : [ // 子項目
             {
                "categoryName" : : {{ string }} , // 六碼 taitra code name
                "cid" : {{ number }} , // 六碼 taitra code id
                "parentcid" : {{ number }} , // 對應的四碼 taitra code id
                "subscribeCid" : {{ number }} // 六碼 taitra code 訂閱 cid
                ]
             },
          ]
       },
    ]
}

```

#### 輸出參數說明
[`同上`](#subscribeCategorySelectVo)

### 實際範例
<details>
<summary>
Input(Click to Show/Hide Output)

```=json
{
  "did": 2,
  "keyword": "Robot"
}
```

</summary>
Output

```=json
{
  "code": 0,
  "errorMsg": "",
  "data": [
    {
      "categoryName": "Industrial Automatic Equipment",
      "cid": 6180,
      "parentcid": null,
      "count": 65,
      "subscribeCid": 155,
      "subscribeCategorySelectVo": [
        {
          "categoryName": "Robot",
          "cid": 618005,
          "parentcid": 6180,
          "count": 57,
          "subscribeCid": 1610
        },
        {
          "categoryName": "Assembly Machine",
          "cid": 618025,
          "parentcid": 6180,
          "count": 2,
          "subscribeCid": 1614
        },
        {
          "categoryName": "Automatic Feeding System",
          "cid": 618040,
          "parentcid": 6180,
          "count": 2,
          "subscribeCid": 1617
        },
        {
          "categoryName": "Robotic Arm",
          "cid": 618010,
          "parentcid": 6180,
          "count": 1,
          "subscribeCid": 1611
        },
        {
          "categoryName": "Automated & Industrial Controller Module",
          "cid": 618015,
          "parentcid": 6180,
          "count": 1,
          "subscribeCid": 1612
        },
        {
          "categoryName": "Surface Mouting Technology Equipment(SMT)",
          "cid": 618020,
          "parentcid": 6180,
          "count": 1,
          "subscribeCid": 1613
        },
        {
          "categoryName": "Automatic Material Handling Equipment",
          "cid": 618030,
          "parentcid": 6180,
          "count": 1,
          "subscribeCid": 1615
        }
      ]
    },
    {
      "categoryName": "Plastic Processing Machinery",
      "cid": 6132,
      "parentcid": null,
      "count": 39,
      "subscribeCid": 140,
      "subscribeCategorySelectVo": [
        {
          "categoryName": "Plastic Injection Moulding Machine",
          "cid": 613202,
          "parentcid": 6132,
          "count": 32,
          "subscribeCid": 1288
        },
        {
          "categoryName": "Plastic Blowing Moulding Machine",
          "cid": 613206,
          "parentcid": 6132,
          "count": 6,
          "subscribeCid": 1290
        },
        {
          "categoryName": "Plastic Laminating Machine",
          "cid": 613212,
          "parentcid": 6132,
          "count": 1,
          "subscribeCid": 1293
        }
      ]
    },
    {
      "categoryName": "Machine Tools",
      "cid": 6102,
      "parentcid": null,
      "count": 34,
      "subscribeCid": 129,
      "subscribeCategorySelectVo": [
        {
          "categoryName": "CNC Controller",
          "cid": 610255,
          "parentcid": 6102,
          "count": 10,
          "subscribeCid": 1143
        },
        {
          "categoryName": "Machine Press",
          "cid": 610235,
          "parentcid": 6102,
          "count": 7,
          "subscribeCid": 1139
        },
        {
          "categoryName": "CNC Machining Center",
          "cid": 610270,
          "parentcid": 6102,
          "count": 6,
          "subscribeCid": 1146
        },
        {
          "categoryName": "Lathe",
          "cid": 610205,
          "parentcid": 6102,
          "count": 5,
          "subscribeCid": 1133
        },
        {
          "categoryName": "Grinding Machine",
          "cid": 610220,
          "parentcid": 6102,
          "count": 2,
          "subscribeCid": 1136
        },
        {
          "categoryName": "Tapping Machine",
          "cid": 610275,
          "parentcid": 6102,
          "count": 2,
          "subscribeCid": 1147
        },
        {
          "categoryName": "Drilling Machine",
          "cid": 610215,
          "parentcid": 6102,
          "count": 1,
          "subscribeCid": 1135
        },
        {
          "categoryName": "EDM Machine",
          "cid": 610260,
          "parentcid": 6102,
          "count": 1,
          "subscribeCid": 1144
        }
      ]
    }
  ]
}
```

</details>

## URI-J-03 product alert save api
-https://www.taiwantrade.com/taiwantradeAlert/subscribeByCatalogs?email=user@hyweb.com.tw&catalogs=2484,2489&did=2&languageId=42

### 規格
- path : ${TT-API網址}/subscriptions/product-save
- method : POST
- query : 

### API 邏輯
- 儲存型錄後分類訂閱條件

### Input
```=josn
{
    "email" : {{ string }},
    "catalogs" : {{ string }},
    "did" : {{ number }},
    "method" : {{ string }}
}
```
Column           | Type     | Require | Desc
-----------------|----------|---------|---------
email            | string   | Y       | 訂閱 email
catalogs         | string   | Y       | 訂閱那些分類，以逗號分隔
did              | number   | Y       | domain id
<span id="method">method</span>     | string   | Y       | 儲存方式<br> `ADD` 依照參數逐筆新增，恭我的最愛 <br> `EDIT` 依照參數直接替換

### Output
- json 內容如下:
```=json
{ 
    "code" : {{ number }} , // 代碼，0：ok、 < 0: error 使用
    "errorMsg"  : {{ string }}, // 錯誤訊息
    "data" : null
}
```

### 實際範例
<details>
<summary>
Input(Click to Show/Hide Output)

```=json
{
  "catalogs": "1147,1135,1144",
  "did": 2,
  "email": "hans.hsu@hyweb.com.tw",
  "method": "EDIT"
}
```

</summary>
Output

```=json
{
  "code": 0,
  "errorMsg": "",
  "data": null
}
```