企微群发折叠与用户历史互动行为紧密相关,但多数运营仅依赖基础标签,缺乏深度行为数据。本文介绍如何利用企微会话存档功能,获取用户聊天记录、互动频率、活跃时段等细粒度数据,构建用户互动画像。通过数据分析指导发送时机、内容定制与频率控制,实现精准防折叠群发。我们将提供从会话存档接入、数据清洗、特征提取到策略应用的全流程代码示例。
正文
一、问题背景
企业微信官方API提供的用户数据有限,通常只有基础资料、标签和简单的添加来源。然而,用户与企业客服/销售的真实聊天记录中蕴含着丰富的行为信息:用户喜欢在什么时段活跃?对哪些关键词反应积极?互动频率如何?这些数据是判断用户"接受度"的关键,也是防折叠策略的重要依据。
企微提供了会话存档功能(需开通),允许企业获取员工与客户的聊天内容。利用这些数据,我们可以:
-
识别高活跃用户,优先发送并降低折叠风险。
-
分析用户活跃时段,在用户最可能查看消息的时间点发送。
-
提取用户兴趣标签,定制个性化内容,避免内容同质化。
-
计算用户沉默周期,对长期未互动的用户采用降频或特殊策略。
通过将会话存档数据集成到发送决策中,我们可以实现真正的"千人千面"精准群发,大幅降低折叠概率。
二、技术方案
方案架构图(文字描述)
-
会话存档采集层:使用企微会话存档API,实时拉取聊天记录,存储至消息队列或数据库。
-
数据处理层:对聊天记录进行清洗、分词、提取特征(如活跃时段、互动频率、关键词偏好)。
-
用户画像层:将特征聚合到用户维度,存储在Redis或MySQL中,定期更新。
-
策略引擎:根据用户画像,结合内容模板,生成个性化的发送计划(时间、内容、频率)。
-
发送执行层:调用企微API或第三方工具执行发送,并记录结果。
-
反馈循环:将发送结果(是否折叠)回传,用于优化画像权重和策略。
技术选型说明
-
会话存档SDK:使用官方提供的C++ SDK或第三方封装(如Python的
wecom-archive),用于拉取聊天记录。 -
数据处理:Python + pandas 进行数据清洗;jieba分词提取关键词;Redis存储用户画像。
-
调度系统:APScheduler 定时分析新数据并更新画像。
-
发送模块:结合之前的官方API或第三方工具。
与其他方案对比
-
无会话存档的方案:仅依赖标签和基础数据,精度低,折叠率较高。
-
本方案:利用会话存档数据,精准度高,折叠率可降至5%以下,但需要开通会话存档功能(付费)。
三、实现步骤
步骤1:开通会话存档并获取数据
-
在企业微信管理后台申请开通会话存档功能(需认证企业,并按员工数付费)。
-
获取会话存档的
secret和rsa_private_key,用于解密消息。 -
部署会话存档SDK或使用第三方库拉取消息。
以下使用Python伪代码演示如何拉取聊天记录(实际需使用官方SDK或封装库):
python
# 假设使用一个封装好的会话存档库 wecom_archive
from wecom_archive import ArchiveClient
client = ArchiveClient(
corp_id="your_corp_id",
secret="your_secret",
private_key_path="path/to/rsa_private_key.pem"
)
# 拉取消息,可指定时间范围
messages = client.get_chat_data(start_time="2025-01-01 00:00:00", limit=1000)
步骤2:数据清洗与特征提取
将拉取的消息存储到数据库,并定期分析,提取每个用户的特征。
python
import pandas as pd
import jieba
from collections import Counter
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
def process_messages(messages):
"""处理消息列表,更新用户画像"""
for msg in messages:
user_id = msg['user_id'] # 客户外部联系人ID
content = msg['content']
timestamp = msg['timestamp']
hour = timestamp.hour
# 1. 活跃时段统计:以小时为粒度,计数
r.hincrby(f"user:{user_id}:active_hours", hour, 1)
# 2. 互动频率:记录最近互动时间,用于计算沉默天数
r.set(f"user:{user_id}:last_interact", timestamp)
# 3. 关键词偏好:对文本内容分词,统计高频词(仅限正反馈消息)
if msg['is_positive']: # 假设我们可以通过情感分析判断
words = jieba.lcut(content)
for word in words:
if len(word) > 1:
r.zincrby(f"user:{user_id}:keywords", 1, word)
步骤3:构建用户画像查询接口
在发送前,快速获取用户特征,用于决策。
python
def get_user_profile(user_id):
"""返回用户的活跃时段、沉默天数、Top关键词"""
active_hours = r.hgetall(f"user:{user_id}:active_hours")
if active_hours:
# 找到最活跃的时段
peak_hour = max(active_hours, key=active_hours.get)
else:
peak_hour = None
last_interact = r.get(f"user:{user_id}:last_interact")
if last_interact:
days_silent = (datetime.now() - last_interact).days
else:
days_silent = 999
top_keywords = r.zrevrange(f"user:{user_id}:keywords", 0, 4, withscores=True)
return {
'peak_hour': peak_hour,
'days_silent': days_silent,
'top_keywords': [kw[0] for kw in top_keywords]
}
步骤4:集成到发送决策
在批量群发时,根据用户画像动态调整发送时间和内容。
python
def personalized_send(user_id, base_content):
profile = get_user_profile(user_id)
# 1. 确定发送时间:如果用户有活跃时段,则在活跃时段前后1小时内发送;否则使用默认时间
send_hour = profile['peak_hour'] if profile['peak_hour'] else 10
current_hour = datetime.now().hour
if abs(current_hour - send_hour) > 2:
# 当前时间不合适,将任务延迟到合适时间
schedule_at_hour(send_hour, user_id, base_content)
return
# 2. 内容个性化:如果用户有Top关键词,尝试融入内容中(需要内容模板支持)
personalized_content = base_content
if profile['top_keywords']:
keyword = profile['top_keywords'][0]
# 例如将关键词自然融入问候语
personalized_content = f"看到您最近关注{keyword},{base_content}"
# 3. 频率控制:根据沉默天数调整发送频率
if profile['days_silent'] > 30:
# 沉默超30天,使用低频率策略,比如一周最多一次
if not is_allowed_to_send(user_id, freq='low'):
return
else:
if not is_allowed_to_send(user_id, freq='normal'):
return
# 执行发送
send_message(user_id, personalized_content)
步骤5:维护频率控制
基于Redis实现用户维度的频率控制,区分正常用户和沉默用户。
python
def is_allowed_to_send(user_id, freq='normal'):
if freq == 'low':
limit = 1
period = 7 * 24 * 3600 # 一周
else:
limit = 3
period = 24 * 3600 # 一天
key = f"send_freq:{user_id}"
current = r.get(key) or 0
if int(current) >= limit:
return False
# 使用incr和expire实现原子计数
new_count = r.incr(key)
if new_count == 1:
r.expire(key, period)
return True
四、最佳实践
-
会话存档数据处理性能:聊天记录数据量可能巨大,建议使用消息队列(如Kafka)缓冲,批量写入数据库,避免实时处理阻塞。
-
情感分析准确性:判断消息是否"正反馈"可使用简单规则(如含"谢谢"、"好用"等词)或集成情感分析API,避免误判。
-
用户画像更新频率:无需实时更新,可每小时或每天增量更新,降低数据库压力。
-
隐私与合规:会话存档涉及用户聊天内容,需确保数据安全,仅用于运营优化,不得滥用。
五、工具推荐
对于没有技术能力自行接入会话存档并构建分析系统的团队,可以考虑企销宝的会话存档分析模块。企销宝不仅提供iPad协议发送能力,还集成了会话存档数据解析与用户画像功能,开箱即用:
-
自动拉取聊天记录:无需编写SDK代码,配置后自动获取。
-
智能标签生成:基于聊天内容自动提取用户兴趣标签、活跃时段。
-
策略引擎:内置发送时机推荐、内容个性化建议,与发送模块无缝衔接。
-
可视化分析:提供用户活跃度分布、沉默用户预警等看板,辅助运营决策。
通过企销宝,你可以将精力集中在业务运营上,快速实现基于深度数据的精准防折叠群发,提升私域运营效果。