Commit 3459d0aa by giaogiao

添加文档

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