Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wecloud_im_server
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hewei
wecloud_im_server
Commits
3459d0aa
Commit
3459d0aa
authored
Oct 11, 2021
by
giaogiao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加文档
parent
758340b9
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
180 additions
and
111 deletions
+180
-111
docs/md/wecloud-im前端Websocket对接文档.md
+62
-70
docs/md/wecloud-im单人RTC对接文档的.md
+109
-37
开发记录.md
+9
-4
No files found.
docs/md/wecloud-im前端Websocket对接文档.md
View file @
3459d0aa
# wec
loud-im 前端Websocket对接文档
# wec
loud-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可能有变化 联系后端
```
http
s://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://ws
test.im199.com/api/doc.html#/home
```
__
_
websocket连接示例
```
wss://ws.im199.com/ws?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJ3ZWIiLCJjbGllbnRJZCI6ImFiY2QxIiwiaXNzIjoid2VjbG91ZF9pbSIsImFwcEtleSI6IkpLdE5IZnJWVXdzaGF4ek4iLCJleHAiOjE2MjgzMjMxNDMsImlhdCI6MTYyMzEzOTE0MywianRpIjoiNWU3NzU5ZjM2ODQ3NDFiMzg4MGEyYjkwMjQ0OWZjZmYifQ.CC-iuGjNwQLH4VxFI2wZEPuP4AGabOUOiRh9snp3IB4
```
只包含api接口文档 websocket对接说明在此文档中
____
__
_
## 适用对象
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"
,
...
...
docs/md/wecloud-im单人RTC对接文档的.md
View file @
3459d0aa
# wec
loud-RTC音视频客户端对接文档
# wec
loud-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需要监听频道内 状态更新(房间断开,挂断)、用户状态更新(用户加入, 用户退出)、流状态更新(切换音频 切换视频)
```
## 流程图

# 指令说明
## 指令说明
**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 | 是 | 自定义拓展字段 |
| sub
Type | String | 否 | 子类型
|
| sub
Cmd | 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"
:
14021478462617067
52
,
"sub
Type
"
:
"reject"
,
"
channelId"
:
12342634576
52
,
"sub
Cmd
"
:
"reject"
,
"attrs"
:{}
}
}
...
...
@@ -153,10 +222,10 @@ client接收方向服务端发送数据:
| attrs | Object | 是 | 自定义拓展字段 |
| toConversation | Long | 否 | 会话id |
| diyParam自定义字段 | Object | 是 | 自定义拓展字段 |
| sub
Type
| String | 否 | 子类型 |
| sub
Cmd
| String | 否 | 子类型 |
### 通知发送方: 接收方拒绝加入频道
### 通知发送方: 接收方拒绝加入房间
服务端向发送方下发数据:
```
json
...
...
@@ -166,7 +235,7 @@ client接收方向服务端发送数据:
"data"
:{
"diyParam自定义字段"
:
"aaaa自已定义字段的值"
,
"toConversation"
:
1402147846261706752
,
"sub
Type
"
:
"reject"
"sub
Cmd
"
:
"reject"
}
}
```
...
...
@@ -175,9 +244,9 @@ client接收方向服务端发送数据:
## 流媒体描述信息SDP转发
(服务端仅负责转发)(ice_candidate,anser,offer)
## 视频
切音频
## 视频
/音频切换
##
离开房间
##
有用户离开频道
## 系统电话繁忙
...
...
@@ -194,3 +263,6 @@ client接收方向服务端发送数据:
## 确认是否离开
## 查询对方是否离开
开发记录.md
View file @
3459d0aa
...
...
@@ -111,11 +111,16 @@ CREATE DATABASE IF NOT EXISTS wecloud_im DEFAULT CHARSET utf8mb4 COLLATE utf8mb4
client需要监听频道内 状态更新(房间断开 .挂断)、用户状态更新(用户加入, 用户退出)、流状态更新(切换音频 切换视频)
## 创建频道请求参数
# RTC接口
## 创建频道
*
请求参数
接收者id (数组)
扩展参数(Object)
绑定的聊天会话ID(可选)
### 响应参数
频道id
*
响应参数 :
生成的唯一
频道id
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment