前期准备
准备开源表单工具(使用金数据个人免费版替代,无需本地部署)
直接访问金数据个人免费版注册地址:https://jinshuju.net/signup,输入手机号完成注册并实名认证(个人版无需上传企业资料)。
注册企微自建应用权限
首先需要有一个已开通企微的企业,若没有,可访问企微注册地址:https://work.weixin.qq.com/wework_admin/register_wx,用个人微信扫码注册“内部演示型”企业,无需真实营业执照。
完成注册后:
1. 登录企微管理后台:https://work.weixin.qq.com/
2. 点击左侧菜单「应用管理」→「自建」→「创建应用」
3. 应用名称填「粉丝沉淀助手」,logo可选默认,可见范围选「全部成员」,点击「创建应用」
4. 进入新建应用详情页,复制保存以下3个关键参数:
- AgentId
- Secret(点击「获取」,用管理员微信扫码验证后显示,仅显示1次,请务必保存)
- 企业ID(点击右上角企业头像→「企业信息」→「企业ID」,单独保存)
第一步:搭建带分层标签的粉丝引流表单
设计表单字段
登录金数据个人免费版,点击「新建表单」→「从零开始创建」,拖拽组件添加以下字段:
1. 手机号(选「手机号」组件,勾选「必填」「唯一性校验」)
2. 粉丝来源渠道(选「单选」组件,必填,选项填你的真实渠道,如:公众号文章、小红书笔记、抖音评论区、B站私信)
3. 粉丝需求标签(选「多选」组件,必填,标签可按产品属性填,如:技术干货、工具资源、职场咨询、项目合作)
4. 企微专属添加引导(选「长文本」组件,勾选「隐藏字段」,后续会动态填入企微活码)
获取表单的「API推送」权限
1. 表单编辑完成后点击「发布」→选择「自定义发布链接」(可改为fensi-chen-dian之类好记的)
2. 点击左侧菜单「表单设置」→「数据推送」→「API推送」
3. 点击「开启推送」,先空着「推送地址」「签名密钥」,后面填企微自建应用的中转接口。
第二步:用Serverless搭建免费中转接口(无需服务器/域名)
这里使用腾讯云Serverless的「云函数SCF」免费额度,个人永久免费额度是每月100万次调用、40万GB·s内存,完全够用。
注册腾讯云账号并开通SCF
访问腾讯云注册地址:https://cloud.tencent.com/register,完成注册并实名认证(个人免费),然后搜索「云函数SCF」点击进入,按提示开通服务。
创建Python云函数
1. 点击「新建」→「从头开始」
2. 函数名称填「fensi_chen_dian_transfer」,运行环境选「Python 3.9」
3. 部署方式选「代码部署」,提交方法选「在线编辑」
4. 替换默认代码为以下内容:
```python
import json
import hashlib
import requests
from urllib.parse import urlencode
金数据API推送验证用的密钥,随便填一串32位以内的字母数字组合,复制保存
JINSHUJU_SIGN_KEY = "你的自定义32位以内密钥"
企微的三个关键参数,从前期准备第二步复制过来
WECHAT_WORK_CORP_ID = "你的企业ID"
WECHAT_WORK_AGENT_ID = "你的AgentId"
WECHAT_WORK_SECRET = "你的Secret"
获取企微access_token(2小时有效期,云函数自动缓存)
def get_access_token():
cache_key = "wechat_work_access_token"
这里用腾讯云SCF自带的简单内存缓存,生产场景建议用Redis,但个人演示足够
global access_token_cache, access_token_expire
try:
if access_token_cache and access_token_expire > time.time():
return access_token_cache
except NameError:
pass
url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={WECHAT_WORK_CORP_ID}&corpsecret={WECHAT_WORK_SECRET}"
res = requests.get(url).json()
if res.get("errcode") != 0:
raise Exception(f"获取企微access_token失败:{res}")
access_token_cache = res["access_token"]
access_token_expire = time.time() + res["expires_in"] - 300 提前5分钟过期
return access_token_cache
创建企微客户联系活码(1个表单来源+需求标签组合1个活码)
def create_contact_qrcode(source, tags):
access_token = get_access_token()
url = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_contact_way?access_token={access_token}"
把来源和标签作为企微客户的备注前缀,更直观
remark_prefix = f"【{source}】"
标签这里用企微默认的标签功能,先不管标签创建,用备注前缀即可,后续可以手动批量打企微标签
data = {
"type": 1, 单人活码
"scene": 2, 联系我场景
"user": ["你的企微成员userid"], 企微成员userid获取:管理后台→通讯录→点击你的名字→复制userid
"remark": remark_prefix,
"skip_verify": True 跳过验证,自动通过好友
}
res = requests.post(url, json=data).json()
if res.get("errcode") != 0:
raise Exception(f"创建企微活码失败:{res}")
return res["qr_code"]
验证金数据API推送的签名
def verify_jinshuju_sign(request_params):
sorted_params = sorted(request_params.items())
sign_str = "&".join([f"{k}={v}" for k, v in sorted_params if k != "sign"]) + f"&key={JINSHUJU_SIGN_KEY}"
sign = hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper()
return sign == request_params.get("sign")
云函数主入口
def main_handler(event, context):
import time
处理金数据API推送的POST请求
if event["httpMethod"] == "POST":
解析请求体
body = json.loads(event["body"])
if not verify_jinshuju_sign(body):
return {"statusCode": 403, "body": "签名验证失败"}
获取表单数据
source = body["data"]["粉丝来源渠道"]["value"]
tags = body["data"]["粉丝需求标签"]["value"]
phone = body["data"]["手机号"]["value"]
创建企微活码
qrcode = create_contact_qrcode(source, tags)
返回活码到金数据表单的隐藏字段,并弹出显示?不,金数据可以返回自定义页面,用推送后的回调?不对,这里简化处理:
把活码保存到金数据的一个单独的「已提交表单-补充活码」的字段?不,这里修改为直接返回一个带活码的HTML页面
return {
"statusCode": 200,
"headers": {"Content-Type": "text/html; charset=utf-8"},
"body": f"""
添加专属顾问
感谢填写表单,请长按下方二维码添加顾问
添加后备注已自动填写【{source}】,需求标签后续会同步
"""
}
处理金数据API推送的GET请求(验证阶段)
elif event["httpMethod"] == "GET":
request_params = event["queryString"]
if not verify_jinshuju_sign(request_params):
return {"statusCode": 403, "body": "签名验证失败"}
return {"statusCode": 200, "body": request_params.get("echostr", "")}
```
5. 往下拉到「触发器配置」,点击「新建触发器」
6. 触发方式选「API网关触发器」,触发网关选「新建」,服务名默认,环境发布选「发布」,鉴权方式选「免鉴权」,点击「提交」
7. 提交后触发器会生成一个「访问路径」,点击复制这个路径(完整的HTTP/HTTPS地址)
完善云函数代码的变量
刚才的代码里有几个需要替换的变量:
1. 替换「你的自定义32位以内密钥」为自己随便写的,比如123456abcdef
2. 替换「你的企业ID」「你的AgentId」「你的Secret」为前期准备第二步的内容
3. 替换「你的企微成员userid」:登录企微管理后台→「通讯录」→点击你的头像→复制右侧的「账号/手机号下方的userid」(一般是拼音+数字)
替换完成后点击右上角的「部署」,等待10秒左右部署成功。
第三步:打通金数据和云函数中转接口
回到金数据的粉丝沉淀表单,点击左侧菜单「表单设置」→「数据推送」→「API推送」:
1. 「推送地址」粘贴刚才腾讯云SCF的访问路径
2. 「签名密钥」粘贴刚才云函数代码里的自定义密钥
3. 「推送时机」选「提交成功后推送」
4. 「推送格式」选「JSON」
5. 点击「保存」,然后点击「测试推送」,测试成功后会显示「测试成功」,同时你的企微会收到一条自动添加好友的验证(你可以自己扫码添加测试)
第四步:落地粉丝分层沉淀的运营规则
虽然是技术指南,但补充2个关键的零成本运营规则,确保技术工具有用:
1. 企微自动备注规则:刚才的代码已经自动在备注前加了【来源渠道】,需求标签可以每周用企微的「客户联系」→「标签管理」→「批量打标签」,筛选备注前缀的来源和提交表单时记录的需求(金数据个人免费版可以导出Excel,筛选后用企微的批量导入标签功能)
2. 粉丝分层内容推送规则:企微的「客户联系」→「客户群」可以按标签建群,或者按标签发朋友圈/私信(个人版企微每天可以给每个客户发1条私信,给所有标签客户发1条朋友圈)
常见问题排查
1. 金数据测试推送失败:检查云函数的访问路径是否正确,签名密钥是否一致,云函数是否部署成功
2. 企微活码创建失败:检查企微的三个关键参数是否正确,企微成员userid是否正确
3. 金数据提交后不跳转到带活码的页面:检查表单的「发布」→「提交后跳转」是否选了「自定义跳转」,如果选了「自定义跳转」要删除,因为API推送返回的HTML会自动覆盖默认跳转