---
# System prepended metadata

title: voxy socket & rtc
tags: [rtc, socket, api, voxy]

---

# voxy socket & rtc

# 1.建立連線
測試連線位置: wss://webrtc-voxy.cfd888.info:8186

正式版： wss://chat.horofriend88.com:8185

接收訊息
| key              | value    | description   | type   |
| ---------------- | -------- | ------------- | ------ |
| action             | link_on  | 訊息類型      | string |
| content          | 連線成功 | 回傳訊息      | string |
| link_id          | 2        | 連線id        | int    |
| category         | system   | 聊天類型      | string |
| iceserver_config | 如下     | iceserver資訊 | json   |


```
{
    iceServers: {
        urls: [
            'stun:stun.l.google.com:19302'
        ],
        username: 'ceshi',
        credential: 'ceshi'
    }
}
```


# 2.綁定會員id 
傳送參數
| key       | demovalue | type   | note               | must |
| --------- | --------- | ------ | ------------------ | ---- |
| action      | bind      | string | 訊息類型           | T    |
| user_id   | 1         | string | 自己的id           | T    |
| user_img  |           | string | 自己的大頭貼       | F    |
| user_name | 訪客1     | string | 自己的暱稱         | F    |
| link_id   | 2         | int    | 此次的連線id       | T    |
| to_userid | -1        | string | 通知所有人你上線了 | T    |

接收訊息
| key      | value               | description  | type   |
| -------- | ------------------- | ------------ | ------ |
| action     | bind                | 訊息類型     | string |
| content  |                     | 回傳訊息     | string |
| link_id  | 2                   | 連線id       | int    |
| time     | 2020-11-07 09:00:00 | push時間     | string |
| list     | 參照下面格式1       | 當前會員列表 | array  |
| category | private             | 聊天類型     | string |


# 3. 傳送訊息
| key           | demovalue         | type   | note                   | must |
| ------------- | ----------------- | ------ | ---------------------- | ---- |
| action        | say               | string | 訊息類型               | T    |
| type          | 1                 | string |1：文字、2：語音、3：圖片、4：影片、5：互動遊戲、6：小天使系統消息、7：動態留言、8：男觀看自動發圖文、9：女群發、10：女發文前自動發興趣(包含type=8)、11：禮物、12：聊天室私密照片、13：贈送活動物品        | F    |
| user_id       | 1                 | string | 自己的會員id           | T    |
| user_img      | img/profile_0.jpg | string | 自己的大頭貼           | F    |
| user_name     | 訪客1             | string | 自己的暱稱             | F    |
| to_userid     | 2                 | string | 對方會員id             | T    |
| to_username   | 訪客2             | string | 對方暱稱               | F    |
| content       | 你好嗎            | string | 本次發送訊息           | T    |
| category      | private           | string | 聊天類型               | T    |
| media         | 請看下面格式2     | string | 媒體資料               | T    |
| to_user_os_type       | 1                 | string | 對方的手機os           | F    |
| to_user_token | aabbabc           | string | 對方的手機token        | F    |
| to_user_chat_pn       | 1                 | string | 對方的聊天設定是否開啟 | F    |
| sensitive       | 1                 | string | 是否含有敏感字眼，1: 有, 0:沒有 | F    |

ps:category 如果帶入default 是針對所有人進行交談,帶入id 則為私聊
* 聊天室引用回復 type = 7
* 女生不出現在對話框的系統代發引導訊息 type = 8
* 系統引導訊息 type = 9


接收訊息
| key           | value               | description            | type   |
| ------------- | ------------------- | ---------------------- | ------ |
| action        | say                 | 訊息類型               | string |
| content       | hello world         | push訊息               | string |
| link_id       | 2                   | 連線id                 | int    |
| time          | 2020-11-07 09:00:00 | push時間               | string |
| list          | 參照下面格式1       | 當前會員列表           | array  |
| to_userid     | 2                   | 對誰使用密語           | string |
| to_userimg    | 2                   | 對方圖                 | string |
| to_username   | 2                   | 對方名                 | string |
| category      | private             | 聊天類型               | string |
| media         | 請看下面格式2       | 媒體資料               | string |


### 格式2
```
{"file":[{"file_id":"540","file_url":"http://172.105.228.202/voxy/file/mode_1/20210406/606bdc5416dff.png"
,"file_length":"","file_preview":"","diamond":"","islock":false}]}
```

# 4. 心跳檢測 
目前預設30秒檢查一次,如果沒ping則會被server斷線
| key     | demovalue | type   | note             | must |
| ------- | --------- | ------ | ---------------- | ---- |
| action    | ping      | string | 心跳檢測用的類型 | T    |
| link_id | 1         | string | 自己的link id     | T    |

# 5.webrtc 通話/視訊/遊戲

## 情境圖:
![](https://i.imgur.com/Oqu99W8.jpg)


# 發起詢問是否接聽電話
## 對象:發送方
| key             | demovalue         | type   | note           | must |
| --------------- | ----------------- | ------ | -------------- | ---- |
| action          | call_remote       | string | 訊息類型       | T    |
| user_id         | 1                 | string | 自己的會員id   | T    |
| user_img        | img/profile_0.jpg | string | 自己的大頭貼   | T    |
| user_name       | 訪客1             | string | 自己的暱稱     | T    |
| to_userid       | 2                 | string | 對方會員id     | T    |
| used_phone      | 1                 | int    | 是否有意願接聽 | T    |
| media_type      | 1                 | int    | 1語音2視訊     | T    |
| user_voice_fee  | 1                 | int    | 語音費用(此次通話費率)  | T    |
| user_text_fee   | 1                 | int    | 訊息費用(此次通話費率)  | T    |
| user_video_fee  | 1                 | int    | 視訊費用(此次通話費率)  | T    |
| to_user_os_type | 1                 | int    | 對方手機os  作業系統；1：Android，2：iOS   | T    |
| user_age        | 1                 | int    | 自己年紀       | T    |
| to_user_token   | 1                 | string | 對方的token    | T 
| connection_mode   | 0                | string | 發起模式(Ex：incomingCall(0) / GuessGame(1)) / LuckyWheel(2)   | T   |

ps1.發起方 used_phone = 1 詢問通話 ;  used_phone = 0 取消詢問通話
ps2. 若為接收方，used_phone = 1 同意通話 ; used_phone = 0 拒絕通話

ps3.web在同意的當下 要先確認 mediaDevices 是否存在 ,否則之後流程會有問題


# 確認是否接聽
## 對象:接收方
| key       | demovalue            | type   | note           | must |
| --------- | -------------------- | ------ | -------------- | ---- |
| action      | call_remote_callback | string | 訊息類型       | T    |
| user_id   | 1                    | string | 自己的會員id   | T    |
| user_img  | img/profile_0.jpg    | string | 自己的大頭貼   | F    |
| user_name | 訪客1                | string | 自己的暱稱     | F    |
| to_userid | 2                    | string | 對方會員id     | T    |
| used_phone| 1                    | int    | 是否雙方都已確認 | T    |
| media_type | 1                 | int    | 1語音2視訊 | T    |
| to_user_voice_fee | 1                 | int    | 語音費用 | F    |
| to_user_text_fee | 1                 | int    | 訊息費用 | F    |
| to_user_video_fee | 1                 | int    | 視訊費用 | F    |
| to_user_token   | 1                 | string | 對方的token    | T 
| connection_mode   | 1                | string | 發起模式(Ex：incomingCall(0) / GuessGame(1))   | T   |

ps1 : 接收方 used_phone = 0 收到來電通知 ; used_phone = 3 拒絕通話;
used_phone = 2 對方忙線中 ; used_phone = 4 不存在此人

ps2 : 撥打方 used_phone = 1 接聽電話 ; used_phone = 3 拒絕通話 ; used_phone = 2 對方忙線中 ; used_phone = 4 不存在此人

# 雙方都確認後 開始RTC
# create_offer 並發client_offer 通知給對方
| key       | demovalue         | type   | note             | must |
| --------- | ----------------- | ------ | ---------------- | ---- |
| action      | client_offer      | string | 訊息類型         | T    |
| user_id   | 1                 | string | 自己的會員id     | T    |
| user_img  | img/profile_0.jpg | string | 自己的大頭貼     | F    |
| user_name | 訪客1             | string | 自己的暱稱       | F    |
| to_userid | 2                 | string | 對方會員id       | T    |
| info      | description物件   | string | localDescription | T    |
## 文件太難寫附上demo的相關code
![](https://i.imgur.com/16zPttY.png)




# RTC client_offer 回傳
| key  | demovalue       | type   | note                   |
| ---- | --------------- | ------ | ---------------------- |
| action | client_offer    | string | 訊息類型               |
| info | description物件 | string | 對方的localDescription |


# RTC 接收到client_offer後 create_answer 並發client_answer 通知給對方
| key       | demovalue         | type   | note             | must |
| --------- | ----------------- | ------ | ---------------- | ---- |
| action      | client_answer      | string | 訊息類型         | T    |
| user_id   | 1                 | string | 自己的會員id     | T    |
| user_img  | img/profile_0.jpg | string | 自己的大頭貼     | F    |
| user_name | 訪客1             | string | 自己的暱稱       | F    |
| to_userid | 2                 | string | 對方會員id       | T    |
| info      | description物件   | string | localDescription | T    |
![](https://i.imgur.com/Vx8s9UL.png)



# RTC client_answer 回傳
| key  | demovalue     | type   | note         |
| ---- | ------------- | ------ | ------------ | 
| action | client_answer | string | 訊息類型     |
| info | description物件 | string | 對方的localDescription |
![](https://i.imgur.com/yJ8Llkv.png)


# RTC client_candidate
| key       | demovalue         | type   | note         | must |
| --------- | ----------------- | ------ | ------------ | ---- |
| action      | client_candidate  | string | 訊息類型     | T    |
| user_id   | 1                 | string | 自己的會員id | T    |
| user_img  | img/profile_0.jpg | string | 自己的大頭貼 | F    |
| user_name | 訪客1             | string | 自己的暱稱   | F    |
| to_userid | 2                 | string | 對方會員id   | T    |
| ice_sdp | xxx              | string | iceCandidate.sdp   | T    |
| ice_index | 0                |int|iceCandidate.sdpMLineIndex   | T    |
| ice_mid | 2                 | string | iceCandidate.sdpMid   | T    |


![](https://i.imgur.com/1mqyzNV.png)


# RTC client_candidate 回傳
| key       | demovalue        | type   | note                       | 
| --------- | ---------------- | ------ | -------------------------- | 
| action    | client_candidate | string | 訊息類型                   |  
| ice_sdp   | xxx              | string | iceCandidate.sdp           |
| ice_index | 0                | int    | iceCandidate.sdpMLineIndex | 
| ice_mid   | 2                | string | iceCandidate.sdpMid        |
| logid   | sfd123                | string | 本次通話的唯一id       | 

![](https://i.imgur.com/qGpQxmi.png)


# 6.掛電話
| key       | demovalue         | type   | note         | must |
| --------- | ----------------- | ------ | ------------ | ---- |
| action    | cancel_phone      | string | 訊息類型     | T    |
| user_id   | 1                 | string | 自己的會員id | T    |
| user_img  | img/profile_0.jpg | string | 自己的大頭貼 | F    |
| user_name | 訪客1             | string | 自己的暱稱   | F    |
| to_userid | 2                 | string | 對方會員id   | T    |
| time      | 0                 | string | 通話秒數     | T    |




