#### 前言
- 我们对接的OpenIM版本号为:V2.3.3,必须使用V2.3.3
- 声明:我们没有对Open-IM-Server做任何二开
- OpenIM目前最新文档与我们使用的版本可能有出入,我们对接的是v2版本,2.2.3 官方文档地址(需要vpn才能快速打开-已失效): https://open-im-docs.vercel.app/#/?id=%e6%88%91%e4%bb%ac%e7%9a%84%e4%bd%bf%e5%91%bd
- 如果官方v2版本文档打不开可以下载文档本地运行查看 OpenIM-V2版本文档代码
- 提示:为啥不用OpenIM的最新3.0的版本:因为OpenIM更新到3.0版本后把大部分SDK的协议都修改成了AGPL-3.0协议禁止商用。OpenIM官网之前的说法是[100%开源,免费商用]。。。
- v2版本源码我们也提前下载了放在项目里:https://git.joolun.com/joolun-multi/joolun-plus/src/branch/main/joolun-plus/server/Open-IM-Server
如果不使用OpenIM客服系统,前端可通过配置关闭OpenIM客服聊天和页面
- 在前端每个工程项目文件夹下面有一个
enableIM字段(全局搜索enableIM = true)用来控制是否开启客服功能的操作,将enableIM的值改为 false 就能关闭客服IM,关闭后不会进行Im连接逻辑,然后会隐藏所有客服相关的显示和页面。
使用步骤(先用docker部署openIM)
-
安装docker
-
安装docker-compose
-
cd到Open-IM-Server目录
cd /mnt/install/joolun-plus/server/Open-IM-Server
- 修改配置文件(Open-IM-Server/config/config.yaml)里的secret,将tuoyun换成自己的密码,和后面nacos中的
im配置对应
secret: tuoyun
- 分别cd到
config和script目录下用dos2unix命令将所有文件转换成UNIX格式,防止报错
dos2unix *
- 检测环境(目前仅支持Linux系统,并且保证当前可用内存在2G以上,系统才能正常运转。在生产环境中,建议可用内存在4G以上。)
cd script ;chmod +x *.sh ; ./env_check.sh
- 由于docker被墙,可能拉取不到镜像,可直接用我们提前下载好的,百度云:https://pan.baidu.com/s/1EhhtuA6UDbfwSP3VC-f-QA?pwd=8yb7 ;如能拉取到docker镜像,此步骤可省略
//docker加载镜像
docker load < open_im_server.tar
docker load < minio.tar
docker load < grafana.tar
docker load < redis.tar
docker load < mysql.tar
docker load < prometheus.tar
docker load < node-exporter.tar
docker load < mongo.tar
docker load < kafka.tar
docker load < zookeeper.tar
docker load < etcd.tar
- 启动
cd .. ; docker-compose up -d
- 检查一
cd script ; ./docker_check_service.sh
如图所示,表示openIM已经正常启动。
-
检查二(此步骤可省略)
用postmain通过IP地址post请求接口(ip:10002/auth/user_token)返回如下则说明openIM服务正常,要先把服务器防火墙端口10002暂时放开,验证完后再关闭
- 其他相关命令
重启服务
docker-compose down; docker-compose up -d
- 配置nginx代理,必须配置https协议,否则无法使用(只修改域名和证书路径其他不要动,端口必须443)
server {
listen 80;
server_name demo-im.joolun.com www.demo-im.joolun.com;
return 301 https://demo-im.joolun.com$request_uri;
}
server {
listen 443;
server_name demo-im.joolun.com;
ssl on;
ssl_certificate /mnt/install/ssl/8662007_demo-im.joolun.com_nginx/8662007_demo-im.joolun.com.pem;
ssl_certificate_key /mnt/install/ssl/8662007_demo-im.joolun.com_nginx/8662007_demo-im.joolun.com.key;
ssl_session_timeout 5m;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
location /api/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:10002/;
}
location /jssdk/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:10003/;
}
}
-
检查nginx配置是否生效
用postmain通过你的im域名post请求接口(https://im域名/api/auth/user_token)返回如下则说明nginx配置openIM服务正常
- 完成上述操作就已经将openIM服务部署成功了,现在就可以将openIM配置到我们系统里面使用了;登录nacos后台修改
application-dev.yml文件里的im配置,secret在你部署的OpenImServer配置文件(Open-IM-Server/config/config.yaml)中
- 登录小程序微信公众平台的域名管理中加上IM的wss协议的服务域名
- 客服(即后台店员账号)登录商户端app(joolun-plus-app)即可收到、回复商城用户发来的信息
如何调用openIM的接口
- 我们有调用修改会话接口设置拓展数据,具体调用的接口文件在后台的
main.go文件中 - 具体的调用方法如下:
// 参考 `joolun-mobile-pro` 的 `jim-util.js` 文件的 `setConvExInfo`
// 调用会话修改接口设置拓展数据
// fieldType说明: 因为这个接口是调用修改会话接口的扩展字段(ex),所以按定义好的值传 7。定义的文件在后台 `joolun-plus/server/Open-IM-Server/pkg/common/constant/constant.go` 搜 `FieldEx` 的值
let requestData = {
fieldType: 7,
userIDList: [IMdata.IMuserID, convInfo
.userID
], //要修改的用户ID列表
ownerUserID: IMdata.IMuserID, // 会话所有者用户ID
conversationID: convInfo.conversationID,
conversationType: 1, // 1单聊 2:群聊
operationID: `${IMdata.IMuserID}modify_conversation_field_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
recvMsgOpt: 0,
ex: exInfo ? JSON.stringify(exInfo) : ''
}
uni.request({
url: IMdata.IMJSapiUrl +
"/api/conversation/modify_conversation_field", // 接口在main.go文件中
method: "POST",
withCredentials: false,
headers: {
'Content-Type': 'application/json',
'token': IMdata.IMtoken // IM认证token
},
data: JSON.stringify(requestData),
success(res) {
// 修改成功,刷新会话
resolve()
}
})
后台如何调用 openIM 接口
说明:基本流程为,后台构建IM接口参数然后发起im接口请求进行调用
方法可以参考文件:joolun-plus/joolun-common/joolun-common-im/src/main/java/com/joolun/cloud/common/im/util/IMUtils.java
接口说明:因为openIM接口文档不完整,所以具体可用接口请参考文件 joolun-plus/server/Open-IM-Server/cmd/open_im_api/docs/swagger.json 和 文件 joolun-plus/server/Open-IM-Server/cmd/open_im_api/main.go
如果开发新功能建议使用AI工具,然其读取接口文档开发相应的功能。




