如何在Zapier代码步骤生成嵌套JSON传递给Formstack Documents
Zapier Python步骤实现Pipedrive产品明细转Formstack Documents兼容结构方案
前置准备
确认Zap的触发步骤已配置为「Pipedrive - Deal Updated to Stage」,且触发后已通过Pipedrive的「Find Deal Products」动作拉取到当前商机关联的所有产品字段:name、code、unit、quantity、category。
步骤1:配置Python代码步骤输入
- 在Pipedrive取数步骤后新增「Code by Zapier」动作,选择
Run Python - 在Input Data配置区按如下规则映射字段:
- 键名
names,值选择Pipedrive输出的所有产品名称数组 - 键名
codes,值选择Pipedrive输出的所有产品编码数组 - 键名
units,值选择Pipedrive输出的所有产品单位数组 - 键名
quantities,值选择Pipedrive输出的所有产品数量数组 - 键名
categories,值选择Pipedrive输出的所有产品分类数组
按需可新增其他商机字段的映射,比如deal_name、deal_id等
- 键名
步骤2:写入Python合并逻辑
将以下代码粘贴到代码编辑区:
# 读取Zapier传入的输入数据,兼容字符串逗号分隔和数组两种格式 names = input_data.get('names', '').split(',') if isinstance(input_data.get('names'), str) else input_data.get('names', []) codes = input_data.get('codes', '').split(',') if isinstance(input_data.get('codes'), str) else input_data.get('codes', []) units = input_data.get('units', '').split(',') if isinstance(input_data.get('units'), str) else input_data.get('units', []) quantities = input_data.get('quantities', '').split(',') if isinstance(input_data.get('quantities'), str) else input_data.get('quantities', []) categories = input_data.get('categories', '').split(',') if isinstance(input_data.get('categories'), str) else input_data.get('categories', []) # 校验所有明细字段长度一致 line_item_count = len(names) if not all(len(lst) == line_item_count for lst in [codes, units, quantities, categories]): raise Exception("产品明细字段长度不匹配,请检查输入配置") # 生成Formstack Documents可识别的嵌套明细结构 product_line_items = [] for i in range(line_item_count): product_line_items.append({ "name": names[i].strip(), "code": codes[i].strip(), "unit": units[i].strip(), "quantity": quantities[i].strip(), "category": categories[i].strip() }) # 输出结果供后续步骤调用 output = { "product_line_items": product_line_items, "line_item_count": line_item_count }
代码运行后输出的product_line_items字段完全兼容Formstack的tablerow函数,原有文档模板无需修改,直接用{% tablerow product in product_line_items %}即可循环生成表格行。
可选:同步骤直接调用Formstack REST API生成文档
如果不想走Zapier自带的Formstack动作,可以在上述代码基础上新增API调用逻辑,跳过后续动作直接完成文档生成:
import requests # 替换为你的Formstack账户信息 FORMSTACK_API_KEY = "你的API密钥" DOCUMENT_ID = "目标文档ID" # 构造完整合并数据 merge_data = { "deal_name": input_data.get("deal_name"), "deal_id": input_data.get("deal_id"), "product_line_items": product_line_items # 按需添加其他需要填充到文档的字段 } # 调用API触发文档合并 api_url = f"https://www.webmerge.me/merge/{DOCUMENT_ID}?api_key={FORMSTACK_API_KEY}" response = requests.post(api_url, json=merge_data) response.raise_for_status() # 新增文档地址到输出结果 output["formstack_document_url"] = response.json().get("url")
后续配置说明
- 若使用Zapier自带的Formstack Documents动作:直接在动作的输入参数中,选择代码步骤输出的
product_line_items传入产品列表字段即可 - 若使用代码直接调用API:可直接将输出的
formstack_document_url用于后续发送邮件、存储到云盘等动作
内容的提问来源于stack exchange,提问作者warwickp
相关产品推荐
相关产品推荐

