Commit 3459d0aa by giaogiao

添加文档

parent 758340b9
# wecloud-im 前端Websocket对接文档
# wecloud-im 前端Websocket对接文档
......@@ -4,7 +4,7 @@
本项目有两个文档: websocket对接文档 和 HTTP协议的API文档
**本文档为websocket技术对接文档**
**本文档为websocket对接文档**
HTTP协议的API以Swagger实时生成为准
......@@ -14,78 +14,26 @@ HTTP协议的API以Swagger实时生成为准
Swagge文档地址:
本地环境IP可能有变化 联系后端
http://192.168.1.89:8082/api/doc.html#/home
账号密码admin admin
以上只包含api接口文档 websocket对接说明在此文档中
## 适用对象
web端. 安卓端. ios端. flutter等一切支持websocket的语言
### 测试外网
api文档:
```
https://wstest.im199.com/api/doc.html#/home
```
___
测试外网api请求示例:
**本地环境 api文档(实时更新 开发查看此文档):**
IP可能有变化 联系后端
```
https://wstest.im199.com/api/imApplication/add
http://192.168.1.89/api/doc.html#/home
```
账号密码admin admin
___
websocket连接示例
```
wss://wstest.im199.com/ws?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJ3ZWIiLCJjbGllbnRJZCI6ImFiY2QxIiwiaXNzIjoid2VjbG91ZF9pbSIsImFwcEtleSI6IkpLdE5IZnJWVXdzaGF4ek4iLCJleHAiOjE2MjgzMjMxNDMsImlhdCI6MTYyMzEzOTE0MywianRpIjoiNWU3NzU5ZjM2ODQ3NDFiMzg4MGEyYjkwMjQ0OWZjZmYifQ.CC-iuGjNwQLH4VxFI2wZEPuP4AGabOUOiRh9snp3IB4
```
_______
### 生产环境
ws.im199.com
api文档:
```
https://ws.im199.com/api/doc.html#/home
```
___
测试外网api请求示例:
**测试外网 api文档:**
```
https://ws.im199.com/api/imApplication/add
https://wstest.im199.com/api/doc.html#/home
```
___
只包含api接口文档 websocket对接说明在此文档中
websocket连接示例
```
wss://ws.im199.com/ws?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJ3ZWIiLCJjbGllbnRJZCI6ImFiY2QxIiwiaXNzIjoid2VjbG91ZF9pbSIsImFwcEtleSI6IkpLdE5IZnJWVXdzaGF4ek4iLCJleHAiOjE2MjgzMjMxNDMsImlhdCI6MTYyMzEzOTE0MywianRpIjoiNWU3NzU5ZjM2ODQ3NDFiMzg4MGEyYjkwMjQ0OWZjZmYifQ.CC-iuGjNwQLH4VxFI2wZEPuP4AGabOUOiRh9snp3IB4
```
_______
## 适用对象
web端. 安卓端. ios端. flutter等一切支持websocket的语言
## 核心概念说明
......@@ -93,13 +41,13 @@ _______
即时通讯服务中的每一个终端称为一个「Client」。Client 拥有一个在应用内唯一标识自己的 ID(`clientId`)。这个 ID 由应用自己定义,必须是 **由任意英文字母、数字、半角下划线与半角短横线组成,可以纯数字,不超过 64个字符的字符串组成**。在大部分场合,Client 都可以对应到应用中的某个「用户」,但是并不是只有真的用户才能作为「Client」,你完全可以把一个探测器当成一个「Client」,把它收集到的数据通过即时通讯服务广播给更多「人」。
要使用即时通讯服务,每一个终端设备需要首先建立与即时通讯云端的 WebSocket 长连接,并使用唯一的 `clientId` 来加入即时通讯服务,我们把这一过程称为「登录」。请注意这里的登录仅仅指客户端登录即时通讯服务,与应用层面的用户账户注册登录是不一样的。
要使用即时通讯服务,每一个终端设备需要首先建立与即时通讯云服务端的 WebSocket 长连接,并使用唯一的 `clientId` 来加入即时通讯服务,我们把这一过程称为「登录」。请注意这里的登录仅仅指客户端登录即时通讯服务,与应用层面的用户账户注册登录是不一样的。
### appKey与appSecret
appKey为应用在蔚可云的唯一标识, appSecret为安全密钥, 均由蔚可云控制台或联系客服下发,给应用接入方安全验证密钥,生产环境appSecret不建议保存在接入方前端客户端, appKey与appSecret总是成对出现和使用
### sign签名
### 生成sign签名
sign 由接入方后端生成, 进行加签的参数: MD5{timestamp + clientId + appKey + appSecret}
timestamp:毫秒时间戳
......@@ -176,25 +124,53 @@ ws://localhost:8899/ws?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJ3ZW
| token | String | 否 | token |
| platform | int | 是 | 设备平台类型: 1 安卓; 2 ios; 3 web |
#### 不同环境连接
**本地环境**
```
ws://192.168.1.89:8899/ws?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJ3ZWIiLCJjbGllbnRJZCI6ImFhYWFhMyIsImlzcyI6IndlY2xvdWRfaW0iLCJhcHBLZXkiOiJRTnRQM0VqdEx3MjZla3QwIiwiZXhwIjoxNjc2NjYzNTkyLCJpYXQiOjE2MjY2ODQ1ODQsImp0aSI6ImY3NWVkODljMGZlZDQ0OWViZTczNzdiNmRlZTNhMDNlIn0.QxzGhpIpzYmJDaFGmdrMynWBkM7umtT5SnSSBKu46UY
```
**测试外网**
```
wss://wstest.im199.com/ws?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJ3ZWIiLCJjbGllbnRJZCI6ImFiY2QxIiwiaXNzIjoid2VjbG91ZF9pbSIsImFwcEtleSI6IkpLdE5IZnJWVXdzaGF4ek4iLCJleHAiOjE2MjgzMjMxNDMsImlhdCI6MTYyMzEzOTE0MywianRpIjoiNWU3NzU5ZjM2ODQ3NDFiMzg4MGEyYjkwMjQ0OWZjZmYifQ.CC-iuGjNwQLH4VxFI2wZEPuP4AGabOUOiRh9snp3IB4
```
_______
**生产环境**
```
wss://ws.im199.com/ws?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJ3ZWIiLCJjbGllbnRJZCI6ImFiY2QxIiwiaXNzIjoid2VjbG91ZF9pbSIsImFwcEtleSI6IkpLdE5IZnJWVXdzaGF4ek4iLCJleHAiOjE2MjgzMjMxNDMsImlhdCI6MTYyMzEzOTE0MywianRpIjoiNWU3NzU5ZjM2ODQ3NDFiMzg4MGEyYjkwMjQ0OWZjZmYifQ.CC-iuGjNwQLH4VxFI2wZEPuP4AGabOUOiRh9snp3IB4
```
## 请求CMD指令说明
- 1: 发送消息
- 1: 发送IM消息请求
- 3: 单人WebRTC
- 3: 单人WebRTC请求
## 响应CMD指令说明
- 1:响应用户请求
- 1:响应请求(用于im聊天)
- 2:下发在线用户消息
- 3:下发在线消息事件类型
- 4:下发单人在线RTC事件
- 4:下发单人在线RTC事件通知
- 5:响应请求(用于RTC音视频通话)
- 401:无权限 token失效
## 消息type说明
......@@ -259,6 +235,22 @@ websocket是异步的 有可能你很快速的发送了几条消息,服务器响
### 1. 客户端发送文本消息
**示例一: 必传参数:**
```
{
"reqId":"123123123",
"cmd":1,
"data":{
"toConversation":1402147846261706752,
"type":-1,
"text":"你好,这是一123个纯文本消息"
}
}
```
**示例二: 全部可选参数:**
```json
{
"reqId":"123123123",
......
# wecloud-RTC音视频客户端对接文档
# wecloud-RTC音视频客户端对接文档
......@@ -6,35 +6,77 @@
由于RTC基于wecloud-im即时通讯服务,**对接RTC前,需要先对接wecloud-im服务**
## 核心概念说明
### 频道与会话
频道与会话的概念不一样
```
1. 引入"频道RtcChannel"概念, 可以不基于会话发起音视频通话
2. 目前频道只支持两个client,进行通话的两端必须先加入到同一个"频道",所有的指令都在频道内进行转发
3. 允许不在同个会话中的两个client加入到同个频道进行通话 (可配置是否两个client必须在同一个会话才能发起音视频通话)
4. 一个频道可以由通话发起者绑定到会话ID,"挂断","未接听"等状态会同步到会话, 未绑定将不同步到会话(可选)
5. 连接websocket时带上client类型, 如web,安卓,ios
client需要监听频道内 状态更新(房间断开,挂断)、用户状态更新(用户加入, 用户退出)、流状态更新(切换音频 切换视频)
```
## 流程图
![单人WebRTC发起流程图](https://tva1.sinaimg.cn/large/008i3skNgy1guxhnn6x64j60jr0xgmz302.jpg)
# 指令说明
## 指令说明
**subCmd**子类型
客户端**请求**指令列表:
**create**:创建频道
**join**: 加入频道
服务端**响应**指令列表:
**rtcCall**:接收到RTC邀请
**userEvent** : 用户状态更新事件(用户加入, 用户退出)
**typeChangeEvent**:流状态更新(切换音频 切换视频)
**statusEvent**:状态更新(网络断开,挂断)
## 创建频道 发起RTC音视频通话
### 1.client发起方 发起请求:
**示例一: 必传参数:**
```json
{
"reqId":"555111-ad-afd12",
"cmd":3,
"data":{
"toClient":["client_3030"],
"subCmd":"create",
"type":"video"
}
}
subType子类型:
创建会话:create
接收到RTC:rtcCall
```
## 发起RTC音视频通话
**示例二: 全部可选参数:**
client发送方向服务端发送数据:
```json
{
"reqId":"555111",
"reqId":"555111-ad-afd12",
"cmd":3,
"data":{
"diyParam自定义字段":"aaaa自已定义字段的值",
"toConversation":null,
"toClient":"client_3030",
"subType":"create",
"toClient":["client_3030"],
"subCmd":"create",
"type":"video",
"push":{
"title":"xxx正在邀请你视频通话",
"subTitle":"点击接听"
},
"attrs":{
"a":"示例: 用户自定义的一些键值对",
"b":"示例: 存储用户自定义的一些键值对"
"a":"示例: 用户自定义的一些键值对A",
"b":"示例: 存储用户自定义的一些键值对B"
}
}
}
......@@ -42,7 +84,7 @@ client发送方向服务端发送数据:
**说明:** toConversation会话ID可以为空, 为空时通话记录将不会记录到会话当中, 如"未接听", "已拒绝"等事件通知不会写入到会话的聊天记录中.
**参数描述**
**请求参数描述**
| 字段名 | 字段类型 | 是否可空 | 说明 |
| ---- | -------- | -- | ------ |
......@@ -50,9 +92,33 @@ client发送方向服务端发送数据:
| attrs | Object | 是 | 自定义拓展字段 |
| toConversation | Long | 是 | 会话id,可为空 |
| diyParam自定义字段 | Object | 是 | 自定义拓展字段 |
| push | String | 是 | 接收方展示的推送内容 |
| subType | String | 否 | 子类型 |
| toClient | String | 否 | 被邀请的客户端ID |
| push | String | 是 | 接收方展示的系统推送内容 |
| subCmd | String | 否 | 子类型指令 |
| toClient | Array[String] | 否 | 被邀请的客户端ID |
| type | String | 否 | 类型: "video" 或 "voice" |
### 2.服务端向client发起方响应数据:
```json
{
"reqId":"555111-ad-afd12",
"cmd":5,
"data":{
"channelId":1234263457652
}
}
```
**参数描述**
| 字段名 | 字段类型 | 是否可空 | 说明 |
| ---- | -------- | -- | ------ |
| cmd | String | 否 | 指令码 |
| channelId | Long | 否 | 由服务端创建的频道id |
## 接收方收到RTC音视频通话邀请
......@@ -65,7 +131,8 @@ client发送方向服务端发送数据:
"data":{
"diyParam自定义字段":"aaaa自已定义字段的值",
"toConversation":null,
"subType":"rtcCall",
"channelId":1234263457652,
"subCmd":"rtcCall",
"sender":"client_1010",
"attrs":{
"a":"示例: 用户自定义的一些键值对",
......@@ -81,12 +148,15 @@ client发送方向服务端发送数据:
| ---- | -------- | -- | ------ |
| cmd | String | 否 | 指令码 |
| attrs | Object | 是 | 自定义拓展字段 |
| toConversation | Long | 否 | 会话id |
| toConversation | Long | 否 | 绑定的会话id |
| diyParam自定义字段 | Object | 是 | 自定义拓展字段 |
| subType | String | 否 | 子类型 |
| subCmd | String | 否 | 子类型指令 |
| sender | String | 否 | 发起通话的客户端ID |
| channelId | Long | 否 | 由服务端创建的频道id |
## 接收方同意加入频道
## 接收方同意加入房间
client接收方向服务端发送数据:
```json
......@@ -94,10 +164,8 @@ client接收方向服务端发送数据:
"reqId":"123",
"cmd":3,
"data":{
"diyParam自定义字段":"aaaa自已定义字段的值",
"toConversation":1402147846261706752,
"subType":"agree",
"attrs":{}We
"channelId":1234263457652,
"subCmd":"join"
}
}
```
......@@ -108,25 +176,26 @@ client接收方向服务端发送数据:
| ---- | -------- | -- | ------ |
| cmd | String | 否 | 指令码 |
| attrs | Object | 是 | 自定义拓展字段 |
| toConversation | Long | 否 | 会话id |
| diyParam自定义字段 | Object | 是 | 自定义拓展字段 |
| subType | String | 否 | 子类型 |
| subCmd | String | 否 | 子类型指令 |
### 通知发起方: 接收方同意加入频道
### 通知发送方: 接收方同意加入房间
服务端向发送方下发数据:
```json
{
"reqId":"123",
"cmd":4,
"data":{
"channelId":1234263457652,
"clientId":"adsfadf",
"diyParam自定义字段":"aaaa自已定义字段的值",
"toConversation":1402147846261706752,
"subType":"agree"
"subCmd":"agree"
}
}
```
## 接收方拒绝加入房间
## 接收方拒绝加入频道
client接收方向服务端发送数据:
......@@ -136,8 +205,8 @@ client接收方向服务端发送数据:
"cmd":3,
"data":{
"diyParam自定义字段":"aaaa自已定义字段的值",
"toConversation":1402147846261706752,
"subType":"reject",
"channelId":1234263457652,
"subCmd":"reject",
"attrs":{}
}
}
......@@ -153,10 +222,10 @@ client接收方向服务端发送数据:
| attrs | Object | 是 | 自定义拓展字段 |
| toConversation | Long | 否 | 会话id |
| diyParam自定义字段 | Object | 是 | 自定义拓展字段 |
| subType | String | 否 | 子类型 |
| subCmd | String | 否 | 子类型 |
### 通知发送方: 接收方拒绝加入频道
### 通知发送方: 接收方拒绝加入房间
服务端向发送方下发数据:
```json
......@@ -166,7 +235,7 @@ client接收方向服务端发送数据:
"data":{
"diyParam自定义字段":"aaaa自已定义字段的值",
"toConversation":1402147846261706752,
"subType":"reject"
"subCmd":"reject"
}
}
```
......@@ -175,9 +244,9 @@ client接收方向服务端发送数据:
## 流媒体描述信息SDP转发
(服务端仅负责转发)(ice_candidate,anser,offer)
## 视频切音频
## 视频/音频切换
## 离开房间
## 有用户离开频道
## 系统电话繁忙
......@@ -194,3 +263,6 @@ client接收方向服务端发送数据:
## 确认是否离开
## 查询对方是否离开
......@@ -111,11 +111,16 @@ CREATE DATABASE IF NOT EXISTS wecloud_im DEFAULT CHARSET utf8mb4 COLLATE utf8mb4
client需要监听频道内 状态更新(房间断开 .挂断)、用户状态更新(用户加入, 用户退出)、流状态更新(切换音频 切换视频)
## 创建频道请求参数
# RTC接口
## 创建频道
* 请求参数
接收者id (数组)
扩展参数(Object)
绑定的聊天会话ID(可选)
### 响应参数
频道id
* 响应参数 :
生成的唯一频道id
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment