所有终端订阅 MQTT频道 : dingchannel,所有信道信息统一在此频道发布.
所有终端收到消息后,请先判断to:的值,
如果to:的值和自己账号一致或to值等于call_all,call_group,call_users才会触发响应.
如果from:的值和自己账号一致则无视此消息.
所有终端无论是未接电话或已接电话记录到本地,方便一键回拨.
1
终端A 呼叫终端B 发送呼叫信令
timeout:超时时间(单位毫秒),retries:重试次数:默认0;interval:重试间隔时间
通过接口获取呼叫配置
/api/call/config?from={A-MAC}&to={B-MAC}&calltype=video
返回以下呼叫配置,如果获取不到,则调用本地默认配置.
{
"room":"{A-MAC}-{B-MAC}",
"timeout": 20000,
"retries": 0,
"interval": 2000
"calltype":"video"
}
{
"type": "call",
"to": "{B-MAC}",
"from": "{A-MAC}",
"room":"{A-MAC}-{B-MAC}",
"command": "invitation",
"calltype":"video",
"id":"通话ID,请使用{A-MAC}+毫秒时间戳16进制",
"info": "说明(可空):终端A向终端B发起视频通话邀请"
}
2
终端B答复终端A呼叫信令
B端收到订阅消息,判断to:账号和自己账号一致,界面展示接听界面(接听和拒绝)
{
"type": "reply",
"to": "{A-MAC}",
"from": "{B-MAC}",
"command": "agree",
"id":"呼叫ID",
"info": "说明:终端B通知终端A接受通话邀请"
}
{
"type": "reply",
"to": "{A-MAC}",
"from": "{B-MAC}",
"id":"呼叫ID",
"command": "reject",
"info": "说明:终端B通知终端A接受通话邀请"
}
3
A端判断B端响应状态
A端发起呼叫B端期间,请优先判断B端答复.如果B端超时未答复,则呼叫失败,根据呼叫配置判断是否重拨.如果B端接听,则A端和B端进入{room} 建立通话,如果A端和B端建立通话后 一方主动挂断电话,则告知对方退出聊天室. {
"type": "hangup",
"to": "{A-MAC}",
"from": "{B-MAC}",
"id": "呼叫ID",
"command": "dissolve",
"info": "说明:终端B通知终端A挂断电话"
}
如果A端和B端建立通话后 这时候C端拨打B端或者A端电话,A端和B端需要发送正在通话,C端此时停止重拨. {
"type": "busy",
"to": "{C-MAC}",
"from": "{B-MAC}",
"id": "呼叫ID",
"command": "dissolve",
"info": "说明:终端B通知终端C正在忙碌,无法接通电话,且拒绝自动重拨,可手动重拨.B端需展示未接电话"
}
此模式一般为后台发送通知消息.此模式挂断不发送挂断消息.
用户判断to值是call_all,弹出接听画面,
如果接听则不发送通知直接进入会议室.
如果不接听则根据收到信息 timeout retries interval 配置 去弹出接听画面.{
"type": "call",
"to": "call_all",
"from": "admin",
"room":"admin-call_all",
"command": "invitation",
"calltype":"video",
"id":"通话ID,请使用{A-MAC}+毫秒时间戳16进制",
"timeout": 20000,
"retries": 0,
"interval": 2000
"info": "说明(可空):终端A向群体用户发起视频通话邀请"
}
此模式一般为后台发送通知消息.此模式挂断不发送挂断消息.
用户判断to值是call_group,请判断自己经销商Id值是否和group_id值一致,
如果一致弹出接听画面,如果不一致无视此消息.
如果接听则不发送通知直接进入会议室.
如果不接听则根据收到信息 timeout retries interval 配置 去弹出接听画面.{
"type": "call",
"to": "call_group",
"group_id":"经销商ID",
"from": "{A-MAC}",
"room":"{A-MAC}-call_group",
"command": "invitation",
"calltype":"video",
"id":"通话ID,请使用{A-MAC}+毫秒时间戳16进制",
"timeout": 20000,
"retries": 0,
"interval": 2000
"info": "说明(可空):终端A向终端B发起视频通话邀请"
}
此模式一般为邀请模式.
此模式和单用户拨号使用相同界面,唯一区别就是拨多个号用英文逗号隔开.
如果判断到用户拨打号码中包含英文逗号,请使用此模式发送呼叫信息
用户判断to值是call_users,请使用英文逗号分割users并判断自己账号是否在此数组中.
如果一致弹出接听画面,如果不一致无视此消息.
如果接听则不发送通知直接进入会议室.
如果不接听则根据收到信息 timeout retries interval 配置 去弹出接听画面.{
"type": "call",
"to": "call_users",
"users":"MAC1,MAC2,MAC3,MAC4",
"from": "{A-MAC}",
"room":"{A-MAC}-call_users",
"command": "invitation",
"calltype":"video",
"id":"通话ID,请使用{A-MAC}+毫秒时间戳16进制",
"timeout": 20000,
"retries": 0,
"interval": 2000
"info": "说明(可空):终端A向多个终端发起视频通话邀请"
}
{
"type": "hangup",
"to": "call_users",
"users":"MAC1,MAC2,MAC3,MAC4",
"from": "{A-MAC}",
"id": "呼叫ID",
"command": "dissolve",
"info": "说明:创建会议的终端A通知本房间所有用户解散会议室."
}
如果发送参数携带 compulsion为true,则为强制接听模式,所属终端收到消息后 不需要点击接听,自动接听并加入聊天室.此参数默认为false
如果发送参数携带mute为true,则进入聊天室为禁言模式.除房间建立者 禁止所有用户麦克风.此参数默认为false如果发送参数携带 visible为false,除房间建立者 其余人则进入聊天室不显示摄像头.此参数默认为true