# HSG Keyserver API 規格書 > 目前HSG的訊號視訊和接收到的API桌號是不一致的,需要透過 https://play.kasar.live/assets/table.json 去mapping訊號。 ## chart ```mermaid graph TD dealer[現場]-->strat_deal{荷官上桌開始發牌} strat_deal-->|是| 通知24MIS解除桌檯維護 strat_deal-->|否| maintenance[維護] 通知24MIS解除桌檯維護-->操作Keypad後台解除桌檯維護 操作Keypad後台解除桌檯維護--> keypad後台通知KeyServer keypad後台通知KeyServer--> KeyServer通知GameServer解除桌檯維護 KeyServer通知GameServer解除桌檯維護-->Cancel_Maintenance{解除桌檯維護成功} Cancel_Maintenance-->|失敗| maintenance Cancel_Maintenance-->|成功| keypad中場 keypad中場--> keypad_flow[keypad流程] keypad_flow --> maintain{是否維護} maintain-->|是| 荷官進入中場 maintain--> |否| keypad_flow 荷官進入中場--> 荷官通知24MIS進維護 荷官通知24MIS進維護--> maintenance ``` ## API 位置 - 測試: keyserver.olacak.live:2570 - 正式機: keyserver.kasar.live:2570 ## 維護 | Field | Type | Description | | ------- | ------ |:----------------------------- | | command | string | [牌桌狀態指令](#牌桌狀態指令) | | type | int | [遊戲型別](#遊戲型別) | |id|string|牌桌桌號(會與其他遊戲共用桌號, 非唯一值)| |time|timestamp|發送訊息時間| |payload|object|資料依[牌桌狀態指令](#牌桌狀態指令)而異| |&emsp;&emsp;maintenance|bool|是否維護中,true/false| ```json= { "command":"X900", "type":1, "id":"A", "time":1602827720, "payload":{ "maintenance": true // 維護狀態 true or false } } ``` ## 中場 | Field | Type | Description | | ------- | ------ |:----------------------------- | | command | string | [牌桌狀態指令](#牌桌狀態指令) | | type | int | [遊戲型別](#遊戲型別) | |id|string|牌桌桌號(會與其他遊戲共用桌號, 非唯一值)| |time|timestamp|發送訊息時間| |payload|object|資料依[牌桌狀態指令](#牌桌狀態指令)而異| ```json= { "command":"X000", "type":1, "id":"A", "time":1602827720, "payload":null } ``` ## 遊戲中 | Field | Type | Description | | ------- | ------ |:----------------------------- | | command | string | [牌桌狀態指令](#牌桌狀態指令) | | type | int | [遊戲型別](#遊戲型別) | |id|string|牌桌桌號(會與其他遊戲共用桌號, 非唯一值)| |time|timestamp|發送訊息時間| |payload|object|資料依[牌桌狀態指令](#牌桌狀態指令)而異| |&emsp;&emsp;round|long|輪號| |&emsp;&emsp;run|int|局號| |&emsp;&emsp;status|int|[牌桌狀態](#牌桌狀態)| |&emsp;&emsp;bettime|int|開始下注至結束下注秒數| |&emsp;&emsp;cards|array|[數字牌型對應](#數字牌型對應)| |&emsp;&emsp;dealer|object|荷官資料,牌桌狀態為`compute`(6) 才會帶值,其餘為`null`| |&emsp;&emsp;&emsp;id|string|荷官ID| |&emsp;&emsp;&emsp;name|string|荷官姓名| |&emsp;&emsp;&emsp;photo|string|荷官圖片| ```json= { "command":"X100", "type":1, "id":"A", "time":1602827720, "payload":{ "round":1602827707, "run":1, "status":1, "bettime":30, "cards":[12,23,0,11,34,0], "dealer":{ // if status is not compute(6), dealer will be null. "id":"123456", "name":"王小明" "photo":"http://XXXX.XXX.jpg" } } } ``` ## 更換荷官 | Field | Type | Description | | ------- | ------ |:----------------------------- | | command | string | [牌桌狀態指令](#牌桌狀態指令) | | type | int | [遊戲型別](#遊戲型別) | |id|string|牌桌桌號(會與其他遊戲共用桌號, 非唯一值)| |time|timestamp|發送訊息時間| |payload|object|資料依[牌桌狀態指令](#牌桌狀態指令)而異| |&emsp;&emsp;id|string|荷官ID| |&emsp;&emsp;name|string|荷官姓名| |&emsp;&emsp;photo|string|荷官圖片| ```json= { "command":"X500", "type":1, "id":"A", "time":1602827720, "payload":{ "id":"123456", "name":"王小明", "photo":"http://XXXX.XXX.jpg" } } ``` ## 牌桌狀態 | Number | Status | | ------ |:--------- | | `1` | newRound | | `2` | newRun | | `3` | startBet | | `4` | endBet | | `5` | deal | | `6` | compute | | `7` | cancelRun | ## 牌桌狀態指令 | Value | Description | |:------ |:----------- | | `X000` | 中場 | | `X100` | 遊戲中 | | `X500` | 更換荷官 | | `X900` | 維護 | ## 遊戲型別 | Value | Description | |:----- |:----------- | | `1` | 百家樂 | | `2` | 骰寶 | | `3` | 輪盤 | | `4` | 色碟 | | `5` | 龍虎 | ## 數字牌型對應 #### 0-52數字陣列 #### 1. 百家樂順序為:Player1,Player2,Player3,Banker1,Banker2,Banker3 #### 2. 龍虎順序為:Dragon, Tiger #### 3. 輪盤不適用以下數字排型對應, 順序第一個號碼為開出的號碼 #### 4. 色碟不適用以下數字排型對應, 順序第一個號碼為紅色碟數量 | Number | Card | Number | Card | Number | Card | Number | Card | |:------ | --------- | ------ | --------- |:------ | --------- | ------ |:-------- | | `1` | `黑桃 1` | `14` | `紅心 1` | `27` | `方塊 1` | `40` | `梅花1` | | `2` | `黑桃 2` | `15` | `紅心 2` | `28` | `方塊 2` | `41` | `梅花2` | | `3` | `黑桃 3` | `16` | `紅心 3` | `29` | `方塊 3` | `42` | `梅花3` | | `4` | `黑桃 4` | `17` | `紅心 4` | `30` | `方塊 4` | `43` | `梅花4` | | `5` | `黑桃 5` | `18` | `紅心 5` | `31` | `方塊 5` | `44` | `梅花5` | | `6` | `黑桃 6` | `19` | `紅心 6` | `32` | `方塊 6` | `45` | `梅花6` | | `7` | `黑桃 7` | `20` | `紅心 7` | `33` | `方塊 7` | `46` | `梅花7` | | `8` | `黑桃 8` | `21` | `紅心 8` | `34` | `方塊 8` | `47` | `梅花8` | | `9` | `黑桃 9` | `22` | `紅心 9` | `35` | `方塊 9` | `48` | `梅花9` | | `10` | `黑桃 10` | `23` | `紅心 10` | `36` | `方塊 10` | `49` | `梅花10` | | `11` | `黑桃 J` | `24` | `紅心 J` | `37` | `方塊 J` | `50` | `梅花J` | | `12` | `黑桃 Q` | `25` | `紅心 Q` | `38` | `方塊 Q` | `51` | `梅花Q` | | `13` | `黑桃 K` | `26` | `紅心 K` | `39` | `方塊 K` | `52` | `梅花K` | ## Web API ### Endpoint | 環境 | 位址 | | -------- | -------- | | Stage | http://stage.keypad.admin.kasar.live | | Production | http://keypad.admin.kasar.live | ### 取得路圖資料 > GET /casino-api/v2/roadmap?tableId=F&round=1617867216&gameType=gameType #### Query string | 變數 | 型態 | 說明 | | -------- | -------- | -------- | | tableId | string | 桌號 | | round | int | 輪號 | | gameType | string | 遊戲類型 `Baccarat` `DragonTiger` | #### Response ```json= { "status": "success", "data": [ { "TableName": "Baccarat", // 遊戲類型 "HistoryId": 589927, // 牌局紀錄編號 "TableId": "B", // 桌號 "Round": 1602388403, // 輪號 "Run": 56, // 局號 "Result" : { "WinSpot": null, // 輸贏注區 "Cards": [0,0,0,0,0,0] //參考 數字牌型對應 } "ModifiedStatus": "Canceled", // 狀態 Modified(改牌), Canceled(取消) "ModifiedTime": "2020-10-11 12:34:58", // 修改時間 "CreateTime": "2020-10-11 12:34:13" // 建立時間 }, .... ] } ``` ### 取得改單資料 建議每五分鐘調用一次即可 > GET /casino-api/v2/modify-game?modifyTime=2020-10-10%2020:00:00 #### Query string | 變數 | 型態 | 說明 | | -------- | -------- | -------- | | modifyTime | DateTime | 會撈取 `modifyTime` 之後有改單的注單,使用的時區為 GMT+8 時間。 | #### Response ```json= { "status": "success", "data": [ { "TableName": "Baccarat", // 遊戲類型 "HistoryId": 589927, // 牌局紀錄編號 "TableId": "B", // 桌號 "Round": 1602388403, // 輪號 "Run": 56, // 局號 "Result" : { "WinSpot": null, // 輸贏注區 "Cards": [0,0,0,0,0,0] //參考 數字牌型對應 } "ModifiedStatus": "Canceled", // 狀態 Modified(改牌), Canceled(取消) "ModifiedTime": "2020-10-11 12:34:58", // 修改時間 "CreateTime": "2020-10-11 12:34:13" // 建立時間 }, .... ] } ``` ### 平板驗證 > POST /casino-api/live-auth #### Request parameter | 變數 | 型態 | 說明 | | -------- | -------- | -------- | | gameType | Enum | `Baccarat`、`DragonTiger`、`Roulette` | | tableId | String | 桌檯編號 | | playerName | String | 玩家帳號 | | verifyNumber| String | 四碼數字組成的字串 | #### Response ```json= { "status": "success", "data": { "gameType": "Baccarat", "tableId": "Q", "playerName": "Test123", "verifyNumber": "0000" } } ``` ### 查詢牌局 ``` GET /casino-api/v2/game-history? gameType=<gameType>& tableId=<tableId>& round=<round>& run=<run> ``` #### Request parameter | 參數名稱 | 參數型態 | 說明 | |:--------:|:--------:|:-----------:| | gameType | string | 遊戲類型 | | tableId | string | 桌號 | | round | int | 輪號 | | run | int | 局號 | #### Response ##### Success ```json= { "status": "success", "data": { "TableName": "Baccarat", // 遊戲類型 "HistoryId": 589927, // 牌局紀錄編號 "TableId": "B", // 桌號 "Round": 1602388403, // 輪號 "Run": 56, // 局號 "Result" : { "WinSpot": null, // 輸贏注區 "Cards": [0,0,0,0,0,0] //參考 數字牌型對應 } "ModifiedStatus": "Canceled", // 狀態 Modified(改牌), Canceled(取消) "ModifiedTime": "2020-10-11 12:34:58", // 修改時間 "CreateTime": "2020-10-11 12:34:13" // 建立時間 } } ``` ##### Failed ```json= { "status": "success", "data": null } ``` ## 視訊位址 目前提供 720p 和 420p 兩種位址 格式如下 ### 百家樂 | 解析度 | 格式 | 範例 | | -------- | -------- | -------- | | 720p | https://flv.kasar.live/bacc/tw_{桌號}-720.flv | https://flv.kasar.live/bacc/tw_s.flv | | 480p | https://flv.kasar.live/bacc/tw_{桌號}-480.flv | https://flv.kasar.live/bacc/tw_s-480.flv | ### 龍虎 | 解析度 | 格式 | 範例 | | -------- | -------- | -------- | | 720p | https://flv.kasar.live/dt/tw_{桌號}-720.flv | https://flv.kasar.live/dt/tw_a-720.flv | | 480p | https://flv.kasar.live/dt/tw_{桌號}-480.flv | https://flv.kasar.live/dt/tw_a-480.flv | ### 輪盤 | 解析度 | 格式 | 範例 | | -------- | -------- | -------- | | 720p | https://flv.kasar.live/rt/tw_{桌號}-720.flv | https://flv.kasar.live/rt/tw_b-720.flv | | 480p | https://flv.kasar.live/rt/tw_{桌號}-480.flv | https://flv.kasar.live/rt/tw_b-480.flv | ### 色碟 | 解析度 | 格式 | 範例 | | -------- | -------- | -------- | | 720p | https://flv.kasar.live/sd/tw_{桌號}-720.flv | https://flv.kasar.live/sd/tw_c-720.flv | | 480p | https://flv.kasar.live/sd/tw_{桌號}-480.flv | https://flv.kasar.live/sd/tw_c-480.flv | ### 開放桌號 #### 百家樂 - E - F - G - H - I - J - K - L - O - P ` ` #### 龍虎 - A #### 輪盤 - B #### 色碟 - C - D ## 錄影位址 ```text https://dvr.kasar.live/<遊戲名稱代碼>/<桌號>/<輪號>/<輪號>-<局號>.mp4 ``` 桌號請參考[開放卓號](#開放桌號),遊戲名稱代碼請參考下方表格,輪號局號為API取得。 ### 遊戲名稱代碼 | 遊戲 | 代碼 | | -------- | -------- | | 百家樂 | baccarat | | 龍虎 | dragon_tiger | | 輪盤 | roulette | | 色諜 | sedie | | 骰寶 | sicbo |