2025/09/15 14:59:05
错误排查
开启本地日志
当你的应用处于开发、测试阶段时,你可能需要 SDK 输出更详细的信息来定位并修复问题。你可以在初始化 RTM 实例的时候通过设置 RtmConfig 中的 RtmLogConfig 来开启日志输出并设置日志信息等级,之后即可在 IDE 中查看日志信息。
C++
RtmConfig config;
config.appId = "your_appid"
config.userId = "your_name";
config.eventHandler = new RtmEventHandler();
config.logConfig.level = RTM_LOG_LEVEL_INFO;
config.logConfig.filePath = "your_path";
config.logConfig.fileSizeInKB = 10 * 1024;
int errorCode = 0;
rtmClient_ = createAgoraRtmClient(config, errorCode);
if (!rtmClient_ || errorCode != 0) {
    std::cout << RED <<"error creating rtm service!" << std::endl;
    exit(0);
}
logLevel 字段可以设置为 debug、info、warn、error、none 五个等级之一,其中 debug 输出最详细的日志信息,none 不输出日志信息。
信息
当你的应用上线时,请将日志信息等级设置为 RTM_LOG_LEVEL_INFO。
错误码对照表
| 错误码 | 错误描述 | 原因及解决方法 | 
|---|---|---|
| 0 | RTM_ERROR_OK | 正确调用。 | 
| -10001 | RTM_ERROR_NOT_INITIALIZED | SDK 未初始化。请在调用 createAgoraRtmClient方法初始化 RTM 实例后再执行其他操作。 | 
| -10002 | RTM_ERROR_NOT_LOGIN | 用户未登录 RTM 系统、掉线超时或者主动退出登录后调用 API。请先登录 RTM 系统。 | 
| -10003 | RTM_ERROR_INVALID_APP_ID | 无效 App ID: 
 | 
| -10005 | RTM_ERROR_INVALID_TOKEN | 无效 Token。检查 Token Provider 是否生成 RTM Token。 | 
| -10006 | RTM_ERROR_INVALID_USER_ID | 无效用户 ID: 
 | 
| -10007 | RTM_ERROR_INIT_SERVICE_FAILED | SDK 初始化失败。请重新调用 createAgoraRtmClient方法进行初始化。 | 
| -10008 | RTM_ERROR_INVALID_CHANNEL_NAME | 无效频道名称: 
 | 
| -10009 | RTM_ERROR_TOKEN_EXPIRED | Token 过期失效。你需要调用 renewToken重新获取 Token。 | 
| -10010 | RTM_ERROR_LOGIN_NO_SERVER_RESOURCES | 服务器资源受限。建议重新登录。 | 
| -10011 | RTM_ERROR_LOGIN_TIMEOUT | 登录超时。你需要检查当前网络是否稳定并切换到稳定网络环境中。如果你的网络处于内网环境,请检查你的防火墙是否配置了正确的域名和端口,详见防火墙白名单设置。 | 
| -10012 | RTM_ERROR_LOGIN_REJECTED | SDK 被服务器拒绝登录: 
 | 
| -10013 | RTM_ERROR_LOGIN_ABORTED | 由于未知问题 SDK 登录中断: 
 | 
| -10014 | RTM_ERROR_INVALID_PARAMETER | 参数无效。检查你填写的参数是否正确。 | 
| -10015 | RTM_ERROR_LOGIN_NOT_AUTHORIZED | 没有 RTM 服务权限。检查控制台是否开通 RTM 服务。 | 
| -10016 | RTM_ERROR_INCONSISTENT_APPID | App ID 不一致。检查初始化、登录、加入频道的 App ID 是否一致。 | 
| -10017 | RTM_ERROR_DUPLICATE_OPERATION | 重复操作。 | 
| -10018 | RTM_ERROR_INSTANCE_ALREADY_RELEASED | 重复调用 release方法释放IRtmClient实例或重复调用release释放IStreamChannel实例。 | 
| -10019 | RTM_ERROR_INVALID_CHANNEL_TYPE | 频道类型无效。SDK 仅支持如下频道类型,请填写正确的值: 
 
 | 
| -10020 | RTM_ERROR_INVALID_ENCRYPTION_PARAMETER | 消息加密参数无效。 
 | 
| -10021 | RTM_ERROR_OPERATION_RATE_EXCEED_LIMITATION | Channel Metadata 或 User Metadata 相关 API 的调用频率超限。请控制调用频率在 10 次/秒之内。 | 
| -10022 | RTM_ERROR_SERVICE_NOT_SUPPORTED | 服务类型不支持。请检查你在 RTM_SERVICE_TYPE中设置的服务类型是否正确。该错误码仅适用于私有化部署功能。 | 
| -10023 | RTM_ERROR_LOGIN_CANCELED | 登录操作已取消。可能原因如下: 
 | 
| -10024 | RTM_ERROR_INVALID_PRIVATE_CONFIG | 私有化部署参数设置无效。请检查你在 RtmPrivateConfig中设置的服务类型和服务器地址是否有效。 | 
| -10025 | RTM_ERROR_NOT_CONNECTED | 未连接 RTM 服务器。在调用消息订阅、Metadata 或 Lock 模块相关 API 时,如果 RTM 服务未连接,会报这个错误。 | 
| -10026 | RTM_ERROR_RENEW_TOKEN_TIMEOUT | 更新 Token 超时。 | 
| -11001 | RTM_ERROR_CHANNEL_NOT_JOINED | 用户未加入该频道: 
 | 
| -11002 | RTM_ERROR_CHANNEL_NOT_SUBSCRIBED | 用户未订阅该频道: 
 | 
| -11003 | RTM_ERROR_CHANNEL_EXCEED_TOPIC_USER_LIMITATION | 订阅该 Topic 人数超出限制。 | 
| -11004 | RTM_ERROR_CHANNEL_IN_REUSE | 共频道模式下,RTM 释放了 Stream Channel。 | 
| -11005 | RTM_ERROR_CHANNEL_INSTANCE_EXCEED_LIMITATION | 创建的频道数量或订阅的频道数量超出限制。详见 API 使用限制。 | 
| -11006 | RTM_ERROR_CHANNEL_IN_ERROR_STATE | 频道不可用。请重新创建 Stream Channel 或重新订阅 Message Channel。 | 
| -11007 | RTM_ERROR_CHANNEL_JOIN_FAILED | 加入该频道失败: 
 | 
| -11008 | RTM_ERROR_CHANNEL_INVALID_TOPIC_NAME | 无效 Topic 名: 
 | 
| -11009 | RTM_ERROR_CHANNEL_INVALID_MESSAGE | 无效消息。检查消息类型是否合法,RTM 只支持字符串或二进制类型消息。 | 
| -11010 | RTM_ERROR_CHANNEL_MESSAGE_LENGTH_EXCEED_LIMITATION | 消息长度超出限制。检查消息负载大小是否超限: 
 | 
| -11011 | RTM_ERROR_CHANNEL_INVALID_USER_LIST | 无效用户列表: 
 | 
| -11012 | RTM_ERROR_CHANNEL_NOT_AVAILABLE | Stream Channel 功能未开通,当前不可用。检查控制台是否已开启 Stream Channel 功能。 | 
| -11013 | RTM_ERROR_CHANNEL_TOPIC_NOT_SUBSCRIBED | 未订阅该 Topic。 | 
| -11014 | RTM_ERROR_CHANNEL_EXCEED_TOPIC_LIMITATION | Topic 数量超出限制。 | 
| -11015 | RTM_ERROR_CHANNEL_JOIN_TOPIC_FAILED | 加入该 Topic 失败。检查已加入 Topic 数量是否超出限制。 | 
| -11016 | RTM_ERROR_CHANNEL_TOPIC_NOT_JOINED | 未加入该 Topic。未加入 Topic 就发送消息,你需要先加入 Topic。 | 
| -11017 | RTM_ERROR_CHANNEL_TOPIC_NOT_EXIST | 该 Topic 不存在。检查 Topic 名是否错误。 | 
| -11018 | RTM_ERROR_CHANNEL_INVALID_TOPIC_META | Topic 中的 meta参数无效。检查meta参数是否超出 256 字节的限制。 | 
| -11019 | RTM_ERROR_CHANNEL_SUBSCRIBE_TIMEOUT | 频道订阅超时。检查连接是否断开。 | 
| -11020 | RTM_ERROR_CHANNEL_SUBSCRIBE_TOO_FREQUENT | 频道订阅操作太频繁。请确保 5 秒内对同一频道的订阅操作不超过 2 次。 | 
| -11021 | RTM_ERROR_CHANNEL_SUBSCRIBE_FAILED | 频道订阅失败。检查已订阅频道数量是否超出限制。 | 
| -11022 | RTM_ERROR_CHANNEL_UNSUBSCRIBE_FAILED | 取消频道订阅失败。检查连接是否断开。 | 
| -11023 | RTM_ERROR_CHANNEL_ENCRYPT_MESSAGE_FAILED | 消息加密失败: 
 | 
| -11024 | RTM_ERROR_CHANNEL_PUBLISH_MESSAGE_FAILED | 消息发布失败。检查连接是否断开。 | 
| -11026 | RTM_ERROR_CHANNEL_PUBLISH_MESSAGE_TIMEOUT | 消息发布超时。检查连接是否断开。 | 
| -11027 | RTM_ERROR_CHANNEL_NOT_CONNECTED | SDK 与 RTM 服务器断开连接。请重新登录。 | 
| -11028 | RTM_ERROR_CHANNEL_LEAVE_FAILED | 离开频道失败。检查连接是否断开。 | 
| -11029 | RTM_ERROR_CHANNEL_CUSTOM_TYPE_LENGTH_OVERFLOW | Custom type 长度溢出。 customType字段长度需要在 32 个字符以内。 | 
| -11030 | RTM_ERROR_CHANNEL_INVALID_CUSTOM_TYPE | customType字段无效。检查customType字段是否包含非法字符。 | 
| -11031 | RTM_ERROR_CHANNEL_UNSUPPORTED_MESSAGE_TYPE | 消息类型不支持。 | 
| -11032 | RTM_ERROR_CHANNEL_PRESENCE_NOT_READY | Presence 服务未就绪。请重新加入 Stream Channel 或重新订阅 Message Channel。 | 
| -11033 | RTM_ERROR_CHANNEL_RECEIVER_OFFLINE | 发送用户消息时,远端用户不在线: 
 | 
| -11034 | RTM_ERROR_CHANNEL_JOIN_CANCELED | 加入频道操作已取消。调用 join方法后,如果你在收到调用结果之前再次调用该方法,则前一次的调用操作会被取消,SDK 会执行后一次的调用。 | 
| -11035 | RTM_ERROR_CHANNEL_RECEIVER_OFFLINE_BUT_STORE_SUCCEEDED | 接收端已下线,且消息成功保存至历史消息,待接收端上线后可查看消息。 | 
| -11036 | RTM_ERROR_CHANNEL_RECEIVER_OFFLINE_AND_STORE_FAILED | 接收端已下线,但历史消息存储失败。 | 
| -11037 | RTM_ERROR_CHANNEL_MESSAGE_DELIVERED_BUT_STORE_FAILED | 消息成功发送到接收端,但历史消息存储失败。 | 
| -12001 | RTM_ERROR_STORAGE_OPERATION_FAILED | Storage 操作失败。 | 
| -12002 | RTM_ERROR_STORAGE_METADATA_ITEM_EXCEED_LIMITATION | Storage Metadata Item 数量超出限制。 | 
| -12003 | RTM_ERROR_STORAGE_INVALID_METADATA_ITEM | 无效 Metadata Item。 | 
| -12004 | RTM_ERROR_STORAGE_INVALID_ARGUMENT | 无效参数。 | 
| -12005 | RTM_ERROR_STORAGE_INVALID_REVISION | 无效 Revision 参数。 | 
| -12006 | RTM_ERROR_STORAGE_METADATA_LENGTH_OVERFLOW | Metadata 长度溢出。 | 
| -12007 | RTM_ERROR_STORAGE_INVALID_LOCK_NAME | 无效 Lock 名称。 | 
| -12008 | RTM_ERROR_STORAGE_LOCK_NOT_ACQUIRED | 未获取该 Lock。 | 
| -12009 | RTM_ERROR_STORAGE_INVALID_KEY | 无效 Metadata 键。 | 
| -12010 | RTM_ERROR_STORAGE_INVALID_VALUE | 无效 Metadata 值。 | 
| -12011 | RTM_ERROR_STORAGE_KEY_LENGTH_OVERFLOW | Metadata 键长度溢出。 | 
| -12012 | RTM_ERROR_STORAGE_VALUE_LENGTH_OVERFLOW | Metadata 值长度溢出。 | 
| -12013 | RTM_ERROR_STORAGE_DUPLICATE_KEY | 重复的 Metadata Item 键。 | 
| -12014 | RTM_ERROR_STORAGE_OUTDATED_REVISION | Metadata Item 中的 Revision 过时或 Key 不存在。 | 
| -12015 | RTM_ERROR_STORAGE_NOT_SUBSCRIBE | 未订阅该频道。 | 
| -12016 | RTM_ERROR_STORAGE_INVALID_METADATA_INSTANCE | Metadata 实例不存在。请创建 Metadata 实例。 | 
| -12017 | RTM_ERROR_STORAGE_SUBSCRIBE_USER_EXCEED_LIMITATION | 订阅用户 Metadata 数量超出限制。 | 
| -12018 | RTM_ERROR_STORAGE_OPERATION_TIMEOUT | Storage 操作超时。 | 
| -12019 | RTM_ERROR_STORAGE_NOT_AVAILABLE | Storage 服务不可用。 | 
| -13001 | RTM_ERROR_PRESENCE_NOT_CONNECTED | 用户未连接到系统。 | 
| -13002 | RTM_ERROR_PRESENCE_NOT_WRITABLE | Presence 服务不可用。 | 
| -13003 | RTM_ERROR_PRESENCE_INVALID_ARGUMENT | 无效参数。 | 
| -13004 | RTM_ERROR_PRESENCE_CACHED_TOO_MANY_STATES | 加入频道前缓存的临时用户状态超出限制。详见 API 使用限制。 | 
| -13005 | RTM_ERROR_PRESENCE_STATE_COUNT_OVERFLOW | 临时用户状态键/值对数量超出限制。详见 API 使用限制。 | 
| -13006 | RTM_ERROR_PRESENCE_INVALID_STATE_KEY | 无效状态键。 | 
| -13007 | RTM_ERROR_PRESENCE_INVALID_STATE_VALUE | 无效状态值。 | 
| -13008 | RTM_ERROR_PRESENCE_STATE_KEY_SIZE_OVERFLOW | 状态键长度溢出。 | 
| -13009 | RTM_ERROR_PRESENCE_STATE_VALUE_SIZE_OVERFLOW | 状态值长度溢出 | 
| -13010 | RTM_ERROR_PRESENCE_STATE_DUPLICATE_KEY | 重复的状态键。 | 
| -13011 | RTM_ERROR_PRESENCE_USER_NOT_EXIST | 该用户不存在。 | 
| -13012 | RTM_ERROR_PRESENCE_OPERATION_TIMEOUT | Presence 操作超时。 | 
| -13013 | RTM_ERROR_PRESENCE_OPERATION_FAILED | Presence 操作失败。 | 
| -14001 | RTM_ERROR_LOCK_OPERATION_FAILED | Lock 操作失败。 | 
| -14002 | RTM_ERROR_LOCK_OPERATION_TIMEOUT | Lock 操作超时。 | 
| -14003 | RTM_ERROR_LOCK_OPERATION_PERFORMING | Lock 操作进行中。 | 
| -14004 | RTM_ERROR_LOCK_ALREADY_EXIST | Lock 已存在。 | 
| -14005 | RTM_ERROR_LOCK_INVALID_NAME | 无效 Lock 名。 | 
| -14006 | RTM_ERROR_LOCK_NOT_ACQUIRED | 未获取该 Lock。 | 
| -14007 | RTM_ERROR_LOCK_ACQUIRE_FAILED | 获取该 Lock 失败。 | 
| -14008 | RTM_ERROR_LOCK_NOT_EXIST | 该 Lock 不存在。 | 
| -14009 | RTM_ERROR_LOCK_NOT_AVAILABLE | Lock 服务不可用。 | 
| -15001 | RTM_ERROR_HISTORY_OPERATION_FAILED | 历史消息的操作失败。 | 
| -15002 | RTM_ERROR_HISTORY_INVALID_TIMESTAMP | 历史消息的时间戳无效。 | 
| -15003 | RTM_ERROR_HISTORY_OPERATION_TIMEOUT | 历史消息的操作超时。 | 
| -15004 | RTM_ERROR_HISTORY_OPERATION_NOT_PERMITTED | 没有权限进行历史消息的操作。 | 
| -15005 | RTM_ERROR_HISTORY_NOT_AVAILABLE | 历史消息服务不可用。 | 
联系我们
如果以上措施都为未能解决你的故障,或者你需要解决方案的支持,请将你的需求整理出来并通过邮箱发送到:rtm-support@agora.io。我们会在收到邮件的第一时间与你取得联系。