呼叫与应答是SDK的核心功能之一,提供了完整的会议呼叫、应答和会议管理功能。支持点对点通话、多人会议、预约会议等多种场景。
登录成功后,可以发起呼叫:
// 发起呼叫 - 使用会议URI
NemoSdkAdaptor::getInstance()->makeCall("meeting_uri", "display_name");
// 发起呼叫 - 使用会议号
NemoSdkAdaptor::getInstance()->makeCall("123456789", "张三");
当收到来电时,通过回调函数处理:
void onCallInvited(const XYString& caller, const XYString& callUri, const XYString& displayName)
{
// 处理来电邀请
qDebug() << "Incoming call from:" << caller.str()
<< ", URI:" << callUri.str()
<< ", Name:" << displayName.str();
}
根据用户选择进行应答或拒绝:
// 接受呼叫
NemoSdkAdaptor::getInstance()->acceptCall();
// 拒绝呼叫
NemoSdkAdaptor::getInstance()->rejectCall();
通话结束后,可以挂断或结束会议:
// 挂断当前通话
NemoSdkAdaptor::getInstance()->hangup();
// 结束整个会议
NemoSdkAdaptor::getInstance()->endMeeting();
API: makeCall
参数:
callUri
: 呼叫URI或会议号displayName
: 显示名称示例:
// 发起点对点通话
NemoSdkAdaptor::getInstance()->makeCall("user@domain.com", "张三");
// 发起会议
NemoSdkAdaptor::getInstance()->makeCall("meeting_123", "项目讨论会");
API: hangup
示例:
NemoSdkAdaptor::getInstance()->hangup();
API: endMeeting
示例:
NemoSdkAdaptor::getInstance()->endMeeting();
API: acceptCall
示例:
NemoSdkAdaptor::getInstance()->acceptCall();
API: rejectCall
示例:
NemoSdkAdaptor::getInstance()->rejectCall();
API: getParticipantInfo
示例:
NemoSdkAdaptor::getInstance()->getParticipantInfo("user_id");
API: getCallUrlInfo
示例:
NemoSdkAdaptor::getInstance()->getCallUrlInfo("call_uri");
API: getCallHistory
示例:
NemoSdkAdaptor::getInstance()->getCallHistory();
API: deleteCallHistory
示例:
NemoSdkAdaptor::getInstance()->deleteCallHistory("call_id");
示例:
NemoSdkAdaptor::getInstance()->getScheduledMeetingInfo();
API: getAllScheduledMeetingInfo
示例:
NemoSdkAdaptor::getInstance()->getAllScheduledMeetingInfo();
示例:
NemoSdkAdaptor::getInstance()->getMeetingConlictInfo();
API: endMeetingConflict
示例:
NemoSdkAdaptor::getInstance()->endMeetingConflict("conflict_meeting_id");
class CallManager {
private:
bool _isInCall = false;
QString _currentCallUri;
QString _currentCaller;
public:
void makeCall(const QString& callUri, const QString& displayName) {
NemoSdkAdaptor::getInstance()->makeCall(
callUri.toStdString(),
displayName.toStdString()
);
}
void acceptCall() {
NemoSdkAdaptor::getInstance()->acceptCall();
}
void rejectCall() {
NemoSdkAdaptor::getInstance()->rejectCall();
}
void hangup() {
NemoSdkAdaptor::getInstance()->hangup();
}
void endMeeting() {
NemoSdkAdaptor::getInstance()->endMeeting();
}
void getCallHistory() {
NemoSdkAdaptor::getInstance()->getCallHistory();
}
void getScheduledMeetings() {
NemoSdkAdaptor::getInstance()->getAllScheduledMeetingInfo();
}
// 呼叫状态变化回调
void onCallStateChanged(XYCallState state, const XYString& callUri) {
QString uri(callUri.str());
switch (state) {
case XYCallState_Connecting:
qDebug() << "Call connecting:" << uri;
break;
case XYCallState_Connected:
qDebug() << "Call connected:" << uri;
_isInCall = true;
_currentCallUri = uri;
break;
case XYCallState_Disconnected:
qDebug() << "Call disconnected:" << uri;
_isInCall = false;
_currentCallUri.clear();
break;
case XYCallState_Failed:
qDebug() << "Call failed:" << uri;
_isInCall = false;
break;
}
emit callStateChanged(state, uri);
}
// 来电邀请回调
void onCallInvited(const XYString& caller, const XYString& callUri, const XYString& displayName) {
QString callerStr(caller.str());
QString uri(callUri.str());
QString name(displayName.str());
_currentCaller = callerStr;
_currentCallUri = uri;
qDebug() << "Incoming call from:" << callerStr
<< ", URI:" << uri
<< ", Name:" << name;
// 显示来电界面
emit incomingCall(callerStr, uri, name);
}
// 会议邀请回调
void onMeetingInvited(const XYString& meetingUri, const XYString& displayName) {
QString uri(meetingUri.str());
QString name(displayName.str());
qDebug() << "Meeting invitation:" << uri << ", Name:" << name;
emit meetingInvited(uri, name);
}
// 获取通话历史结果回调
void onGetCallHistoryResult(const XYString& code, const XYArray& callHistory) {
QString errCode(code.str());
if (errCode == SDKError_NoError) {
qDebug() << "Call history retrieved successfully";
// 处理通话历史数据
emit callHistoryReceived(callHistory);
} else {
qDebug() << "Failed to get call history:" << errCode;
}
}
// 获取预约会议结果回调
void onGetScheduledMeetingInfoResult(const XYString& code, const XYArray& meetings) {
QString errCode(code.str());
if (errCode == SDKError_NoError) {
qDebug() << "Scheduled meetings retrieved successfully";
emit scheduledMeetingsReceived(meetings);
} else {
qDebug() << "Failed to get scheduled meetings:" << errCode;
}
}
// 呼叫错误回调
void onCallError(XYCallError error, const XYString& callUri) {
QString uri(callUri.str());
qDebug() << "Call error:" << error << ", URI:" << uri;
emit callError(error, uri);
}
bool isInCall() const {
return _isInCall;
}
QString getCurrentCallUri() const {
return _currentCallUri;
}
QString getCurrentCaller() const {
return _currentCaller;
}
};
状态 | 说明 |
| 正在连接中 |
| 已连接 |
| 已断开 |
| 连接失败 |
错误 | 说明 |
| 正常 |
| 超时 |
| 网络错误 |
| 被拒绝 |
| 忙线 |
| 未找到 |
方法 | 描述 | 链接 |
接受呼叫 | ||
拒绝呼叫 |
方法 | 描述 | 链接 |
查询参会者信息 | ||
获取呼叫URL信息 |
方法 | 描述 | 链接 |
获取历史通话记录 | ||
删除指定历史通话记录 |
方法 | 描述 | 链接 |
请求最新一次会议预约 | ||
请求全部会议预约 |
方法 | 描述 | 链接 |
获取会议冲突信息 | ||
结束会议冲突 |
回调 | 描述 | 链接 |
呼叫状态变化回调 | ||
来电邀请回调 | ||
会议邀请回调 | ||
呼叫错误回调 | ||
获取通话历史结果回调 | ||
获取参会者信息结果回调 | ||
获取预约会议结果回调 | ||
获取所有预约会议结果回调 | ||
获取会议冲突信息结果回调 | ||
结束会议冲突结果回调 | ||
预约会议通知回调 | ||
预约会议变化回调 |
枚举 | 描述 | 链接 |
呼叫状态枚举 | ||
呼叫错误枚举 |