tencent cloud

即时通信 IM

动态与公告
产品动态
公告
产品简介
产品概述
基本概念
应用场景
功能介绍
账号系统
用户资料与关系链
消息管理
群组相关
公众号系统
音视频通话 Call
使用限制
购买指南
计费概述
价格说明
购买指引
续费指引
停服说明
退费说明
开发指引
Demo 专区
开通服务
体验 Demo
快速跑通
下载中心
SDK & Demo 源码
更新日志
聊天互动(含 UI)
TUIKit 组件介绍
快速开始
全功能接入
单功能接入
AI 集成
构建基础界面
更多特性
定义外观
国际化界面语言
推送服务(Push)
服务概述
名词解释
开通服务
快速跑通
厂商通道
数据统计
排查工具
客户端 API
服务端 API
推送回调
高级功能
更新日志
错误码
常见问题
智能客服
功能概述
快速入门
集成指引
管理员操作手册
客服操作手册
更多实践
直播间搭建
AI 聊天机器人方案
超大娱乐协作社群
Discord 实现指南
游戏内集成 Chat 指南
类 WhatsApp Channel 搭建方案
发送红包
Chat 应对防火墙限制相关
无 UI 集成
快速开始
集成 SDK
初始化
登录登出
消息相关
会话相关
群组相关
社群话题
用户管理
离线推送
云端搜索
本地搜索
公众号
客户端 API
JavaScript
Android
iOS & macOS
Swift
Flutter
Electron
Unity
React Native
C 接口
C++
服务端 API
生成 UserSig
REST API
第三方回调
控制台指南
新版控制台介绍
创建并升级应用
基本配置
功能配置
账号管理
群组管理
公众号管理
回调配置
用量统计
资源包查看指南
实时监控
开发辅助工具
访问管理
高级功能
常见问题
uni-app 常见问题
购买相关问题
SDK 相关问题
账号鉴权相关问题
用户资料与关系链相关问题
消息相关问题
群组相关问题
直播群相关问题
昵称头像相关问题
协议与认证
服务等级协议
安全合规认证
IM 政策
隐私政策
数据隐私和安全协议
平滑迁移方案
平滑迁移完整版
平滑迁移简化版
错误码
联系我们
文档即时通信 IM更多实践类 WhatsApp Channel 搭建方案

类 WhatsApp Channel 搭建方案

PDF
聚焦模式
字号
最后更新时间: 2025-06-13 16:54:01

一、概述

公众号功能可以提供类似 微信的公众号 和 WhatsApp Channel 的能力,为客户提供订阅和发布等功能。通过公众号相关接口,用户可以创建和管理公众号,发布文章、图文消息等内容,与粉丝进行互动,粉丝也可对公众号发单聊消息。同时 App 后台可以基于 RestAPI + 第三方回调方式对后台运营相关数据进行统计和管理。
场景用途:
公众号是商家申请的账号,可以通过文字、图片、视频等多种形式向用户推送信息。
信息传播,能快速将各类资讯如新闻、知识等传递给大量用户。
品牌推广,商家可借此提升品牌知名度与影响力。
提供便捷服务,例如一些银行公众号可办理转账等业务。

通过搭建类似 微信公众号 和 WhatsApp Channel 的最佳功能实践方案,帮助企业通过标准化接入,快速实现“社交增长→私域运营→商业变现”闭环。

二、集成接入

功能描述

公众号可以为订阅的用户发送广播消息,也可以与订阅的用户进行单聊。
当其中有消息的收发时,会产生单聊会话,会话 conversationID 的组成为 c2c_officialAccountID。
公众号的创建等管理功能参考服务端的接口,IMSDK 主要提供订阅公众号、取消订阅公众号、获取公众号列表等功能。
说明:
从 7.6.5011 版本开始支持。

公众号资料类介绍

属性
含义
说明
officialAccountID
公众号 ID
以 @TOA#_ 作为前缀,最长48个字节,可自定义公众号 ID
officialAccountName
公众号名称
最长150字节,使用 UTF-8 编码,1个汉字占3个字节
faceUrl
公众号展示头像
最长500字节
organization
组织名称
最长500字节,使用 UTF-8 编码,1个汉字占3个字节
introduction
简介
最长400字节,使用 UTF-8 编码,1个汉字占3个字节
customData
自定义数据
最长3000字节
createTime
创建时间
单位:秒
subscriberCount
订阅的人数
公众号目前的订阅者人数
subscribeTime
登录用户订阅的时间
单位:秒

订阅公众号

调用 subscribeOfficialAccount (Java / Swift / Objective-C / C++) 订阅公众号,直接传入公众号的 officialAccountID 即可。
1. 订阅公众号成功后,订阅者会收到 onOfficialAccountSubscribed (Java / Swift / Objective-C / C++) 通知。
2. 当调用 服务端接口 修改订阅的公众号资料时,订阅者会收到 onOfficialAccountInfoChanged (Java / Swift / Objective-C / C++) 通知。
3. 当调用 服务端接口 销毁订阅的公众号资料时,订阅者会收到 onOfficialAccountDeleted (Java / Swift / Objective-C / C++) 通知。
示例代码如下:
Java
Swift
Objective-C
C++
V2TIMManager.getFriendshipManager().subscribeOfficialAccount("official_test", new V2TIMCallback() {
@Override
public void onSuccess() {
// 订阅公众号成功
}

@Override
public void onError(int code, String desc) {
// 订阅公众号失败
}
});

V2TIMManager.getFriendshipManager().addFriendListener(new V2TIMFriendshipListener() {
@Override
public void onOfficialAccountSubscribed(V2TIMOfficialAccountInfo officialAccountInfo) {
// 订阅公众号通知
}

@Override
public void onOfficialAccountDeleted(String officialAccountID) {
// 订阅的公众号被销毁通知
}

@Override
public void onOfficialAccountInfoChanged(V2TIMOfficialAccountInfo officialAccountInfo) {
// 订阅的公众号资料更新通知
}
});
V2TIMManager.shared.subscribeOfficialAccount(officialAccountID: "officialAccountID") {
print("subscribeOfficialAccount succ")
} fail: { code, desc in
print("subscribeOfficialAccount fail, \\(code), \\(desc)")
}
V2TIMManager.shared.addFriendListener(listener: self)

func onOfficialAccountSubscribed(officialAccountInfo: V2TIMOfficialAccountInfo) {
print("officialAccountInfo:\\(officialAccountInfo.description)");
}

func onOfficialAccountDeleted(officialAccountID: String) {
print("officialAccountID:\\(officialAccountID)");
}

func onOfficialAccountInfoChanged(officialAccountInfo: V2TIMOfficialAccountInfo) {
print("officialAccountInfo:\\(officialAccountInfo.description)");
}
[[V2TIMManager sharedInstance] subscribeOfficialAccount:@"official_test" succ:^ {
NSLog(@"订阅公众号成功");
} fail:^(int code, NSString *desc) {
NSLog(@"订阅公众号失败, code: %d, msg: %@", code, msg);
}];

[[V2TIMManager sharedInstance] addFriendListener:self];

- (void)onOfficialAccountSubscribed:(V2TIMOfficialAccountInfo *)officialAccountInfo {
// 公众号订阅通知
}

- (void)onOfficialAccountDeleted:(NSString *)officialAccountID {
// 订阅的公众号被销毁通知
}

- (void)onOfficialAccountInfoChanged:(V2TIMOfficialAccountInfo *)officialAccountInfo {
// 订阅的公众号资料更新通知
}
template <class T>
class ValueCallback final : public V2TIMValueCallback<T> {
public:
using SuccessCallback = std::function<void(const T&)>;
using ErrorCallback = std::function<void(int, const V2TIMString&)>;
ValueCallback() = default;
~ValueCallback() override = default;
void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {
success_callback_ = std::move(success_callback);
error_callback_ = std::move(error_callback);
}
void OnSuccess(const T& value) override {
if (success_callback_) {
success_callback_(value);
}
}
void OnError(int error_code, const V2TIMString& error_message) override {
if (error_callback_) {
error_callback_(error_code, error_message);
}
}

private:
SuccessCallback success_callback_;
ErrorCallback error_callback_;
};

auto callback = new Callback;
callback->SetCallback(
[=]() {
// 订阅公众号成功
delete callback;
},
[=](int error_code, const V2TIMString& error_message) {
// 订阅公众号失败
delete callback;
});
V2TIMManager::GetInstance()->GetFriendshipManager()->SubscribeOfficialAccount(
"official_test", callback);

// 公众号通知
class FriendshipListener final : public V2TIMFriendshipListener {
public:
FriendshipListener() = default;
~FriendshipListener() override = default;
void OnOfficialAccountSubscribed(const V2TIMOfficialAccountInfo &info) override {
// 公众号订阅通知
}
void OnOfficialAccountDeleted(const V2TIMString &officialAccountID) override {
// 订阅的公众号被销毁通知
}
void OnOfficialAccountInfoChanged(const V2TIMOfficialAccountInfo &info) override {
// 订阅的公众号资料更新通知
}
};

FriendshipListener friendshipListener;
V2TIMManager::GetInstance()->AddFriendshipListener(&friendshipListener);

取消订阅公众号

调用 unsubscribeOfficialAccount (Java / Swift / Objective-C / C++) 订阅公众号,直接传入公众号的 officialAccountID 即可。
取消订阅公众号成功后,取消订阅的用户会收到 onOfficialAccountUnsubscribed (Java / Swift / Objective-C / C++) 通知。
示例代码如下:
Java
Swift
Objective-C
C++
V2TIMManager.getFriendshipManager().unsubscribeOfficialAccount("official_test", new V2TIMCallback() {
@Override
public void onSuccess() {
// 取消订阅公众号成功
}
@Override
public void onError(int code, String desc) {
// 取消订阅公众号失败
}
});

V2TIMManager.getFriendshipManager().addFriendListener(new V2TIMFriendshipListener() {
@Override
public void onOfficialAccountUnsubscribed(String officialAccountID) {
// 取消订阅公众号通知
}
});
V2TIMManager.shared.unsubscribeOfficialAccount(officialAccountID: "officialAccountID") {
print("unsubscribeOfficialAccount succ")
} fail: { code, desc in
print("unsubscribeOfficialAccount fail, \\(code), \\(desc)")
}

V2TIMManager.shared.addFriendListener(listener: self)

func onOfficialAccountUnsubscribed(officialAccountID: String) {
print("officialAccountID:\\(officialAccountID)");
}
[[V2TIMManager sharedInstance] unsubscribeOfficialAccount:@"official_test" succ:^ {
NSLog(@"取消订阅公众号成功");
} fail:^(int code, NSString *desc) {
NSLog(@"取消订阅公众号失败, code: %d, msg: %@", code, msg);
}];

[[V2TIMManager sharedInstance] addFriendListener:self];

- (void)onOfficialAccountUnsubscribed:(V2TIMOfficialAccountInfo *)officialAccountInfo {
// 取消订阅公众号通知
}
template <class T>
class ValueCallback final : public V2TIMValueCallback<T> {
public:
using SuccessCallback = std::function<void(const T&)>;
using ErrorCallback = std::function<void(int, const V2TIMString&)>;
ValueCallback() = default;
~ValueCallback() override = default;
void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {
success_callback_ = std::move(success_callback);
error_callback_ = std::move(error_callback);
}
void OnSuccess(const T& value) override {
if (success_callback_) {
success_callback_(value);
}
}
void OnError(int error_code, const V2TIMString& error_message) override {
if (error_callback_) {
error_callback_(error_code, error_message);
}
}

private:
SuccessCallback success_callback_;
ErrorCallback error_callback_;
};

auto callback = new Callback;
callback->SetCallback(
[=]() {
// 取消订阅公众号成功
delete callback;
},
[=](int error_code, const V2TIMString& error_message) {
// 取消订阅公众号失败
delete callback;
});
V2TIMManager::GetInstance()->GetFriendshipManager()->UnsubscribeOfficialAccount(
"official_test", callback);

// 公众号通知
class FriendshipListener final : public V2TIMFriendshipListener {
public:
FriendshipListener() = default;
~FriendshipListener() override = default;

void OnOfficialAccountUnsubscribed(const V2TIMString &officialAccountID) override {
// 取消订阅公众号通知
}
};

FriendshipListener friendshipListener;
V2TIMManager::GetInstance()->AddFriendshipListener(&friendshipListener);

获取公众号列表

调用 getOfficialAccountsInfo (Java / Swift / Objective-C / C++) 接口获取公众号列表。
当 officialAccountIDList 列表为空时,为获取订阅的公众号列表;
当 officialAccountIDList 填入指定的公众号 ID 时,为获取填入的公众号列表。
示例代码如下:
Java
Swift
Objective-C
C++
List<String> officialAccountIDList = new ArrayList<>();
V2TIMManager.getFriendshipManager().getOfficialAccountsInfo(officialAccountIDList, new V2TIMValueCallback<List<V2TIMOfficialAccountInfoResult>>() {
@Override
public void onSuccess(List<V2TIMOfficialAccountInfoResult> v2TIMOfficialAccountInfoResults) {
// 获取订阅的公众号列表成功
}

@Override
public void onError(int code, String desc) {
// 获取订阅的公众号列表失败
}
});
V2TIMManager.shared.getOfficialAccountsInfo(officialAccountIDList: ["officialAccountID"]) { officialAccountResultList in
officialAccountResultList.forEach { item in
print(item.description)
}
} fail: { code, desc in
print("getOfficialAccountsInfo fail, \\(code), \\(desc)")
}
[[V2TIMManager sharedInstance] getOfficialAccountsInfo:nil succ:^(NSArray<V2TIMOfficialAccountInfoResult *> *resultList) {
[self appendString:[NSString stringWithFormat:@"获取订阅的公众号列表完成:%@", resultList]];
} fail:^(int code, NSString *desc) {
[self appendString:[NSString stringWithFormat:@"获取订阅的公众号列表失败,code:%d msg:%@",code,desc]];
}];
template <class T>
class ValueCallback final : public V2TIMValueCallback<T> {
public:
using SuccessCallback = std::function<void(const T&)>;
using ErrorCallback = std::function<void(int, const V2TIMString&)>;
ValueCallback() = default;
~ValueCallback() override = default;
void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {
success_callback_ = std::move(success_callback);
error_callback_ = std::move(error_callback);
}
void OnSuccess(const T& value) override {
if (success_callback_) {
success_callback_(value);
}
}
void OnError(int error_code, const V2TIMString& error_message) override {
if (error_callback_) {
error_callback_(error_code, error_message);
}
}

private:
SuccessCallback success_callback_;
ErrorCallback error_callback_;
};

V2TIMStringVector officialAccountIDList;

auto callback = new ValueCallback<V2TIMTopicInfoResultVector>{};
callback->SetCallback(
[=](const V2TIMOfficialAccountInfoResultVector& officialAccountInfoResultList) {
// 获取订阅的公众号列表成功
delete callback;
},
[=](int error_code, const V2TIMString& error_message) {
// 获取订阅的公众号列表失败
delete callback;
});

V2TIMManager::GetInstance()->GetFriendshipManager()->GetOfficialAccountsInfo(
officialAccountIDList, callback);

公众号收发消息

公众号的消息分为:公众号给所有订阅者发送的广播消息和公众号与某一个订阅者之间的单聊消息。

公众号发送广播消息

调用 服务端公众号发送广播消息接口 可以向关注公众号的所有订阅者发送广播消息。

公众号与订阅者互发单聊消息

调用 IMSDK 的 sendMessage (Java / Swift / Objective-C /C++) 接口发送给公众号消息,其中 receiver 填公众号 officialAccountID。
调用 服务端发送单聊消息接口 向该订阅者发送单聊消息,其中 From_Account 填公众号 officialAccountID,To_Account 填订阅者 userID。

接收消息

两种消息都可以通过 IMSDK 的 消息监听器 来接收。










帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈