smartpush 1.5.3__py3-none-any.whl → 1.5.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- smartpush/account/__init__.py +0 -0
- smartpush/account/operate_account.py +36 -0
- smartpush/base/request_base.py +41 -5
- smartpush/base/url_enum.py +1 -1
- smartpush/form/form_after.py +19 -28
- smartpush/test.py +215 -0
- {smartpush-1.5.3.dist-info → smartpush-1.5.5.dist-info}/METADATA +1 -1
- {smartpush-1.5.3.dist-info → smartpush-1.5.5.dist-info}/RECORD +10 -7
- {smartpush-1.5.3.dist-info → smartpush-1.5.5.dist-info}/WHEEL +1 -1
- {smartpush-1.5.3.dist-info → smartpush-1.5.5.dist-info}/top_level.txt +0 -0
File without changes
|
@@ -0,0 +1,36 @@
|
|
1
|
+
import json
|
2
|
+
import requests
|
3
|
+
|
4
|
+
|
5
|
+
def del_merchant_sub_account(cookies, ac_host, merchantId, platform, num=None):
|
6
|
+
"""删除店铺未验证子账号"""
|
7
|
+
if num is None or num == "":
|
8
|
+
num = 49
|
9
|
+
# 查询店铺所有子账号
|
10
|
+
role_url = ac_host + "/role/getMerchantRoles"
|
11
|
+
role_headers = {
|
12
|
+
'cookie': cookies
|
13
|
+
}
|
14
|
+
params = {"merchantId": merchantId, "plat": platform}
|
15
|
+
del_roles = {}
|
16
|
+
role_result = json.loads(requests.request("GET", url=role_url, params=params, headers=role_headers).text)
|
17
|
+
if num > len(role_result["resultData"]["merchantRoleInfos"]):
|
18
|
+
num = len(role_result["resultData"]["merchantRoleInfos"])
|
19
|
+
for i in range(num):
|
20
|
+
if not (role_result["resultData"]["merchantRoleInfos"][i]["status"] == "1" or
|
21
|
+
role_result["resultData"]["merchantRoleInfos"][i]["role"] == "owner"):
|
22
|
+
del_roles[i] = role_result["resultData"]["merchantRoleInfos"][i]
|
23
|
+
del_roles[i]["plat"] = role_result["resultData"]["plat"]
|
24
|
+
del_roles[i]["merchantId"] = merchantId
|
25
|
+
del del_roles[i]["status"]
|
26
|
+
del del_roles[i]["name"]
|
27
|
+
|
28
|
+
# 删除子账号
|
29
|
+
del_role_url = ac_host + "/role/delMerchantRole"
|
30
|
+
role_headers["content-type"] = 'application/json'
|
31
|
+
results = []
|
32
|
+
for i in del_roles.values():
|
33
|
+
del_role_result = requests.request("POST", url=del_role_url, headers=role_headers, data=json.dumps(i)).text
|
34
|
+
results.append({i["email"]: del_role_result})
|
35
|
+
|
36
|
+
print(f"已删除账号: {results}")
|
smartpush/base/request_base.py
CHANGED
@@ -1,8 +1,15 @@
|
|
1
|
+
import json
|
2
|
+
|
1
3
|
import requests
|
4
|
+
from requests.adapters import HTTPAdapter
|
5
|
+
from tenacity import stop_after_attempt, wait_fixed, retry
|
6
|
+
from urllib3 import Retry
|
7
|
+
|
8
|
+
from smartpush.export.basic.GetOssUrl import log_attempt
|
2
9
|
|
3
10
|
|
4
11
|
class RequestBase:
|
5
|
-
def __init__(self, host, headers):
|
12
|
+
def __init__(self, host, headers, retries=3, **kwargs):
|
6
13
|
"""
|
7
14
|
|
8
15
|
:param headers: 头,cookie
|
@@ -10,13 +17,42 @@ class RequestBase:
|
|
10
17
|
"""
|
11
18
|
self.host = host
|
12
19
|
self.headers = headers
|
13
|
-
|
14
|
-
|
15
|
-
|
20
|
+
|
21
|
+
# 配置重试策略
|
22
|
+
retry_strategy = Retry(
|
23
|
+
total=retries,
|
24
|
+
status_forcelist=[429, 500, 502, 503, 504],
|
25
|
+
backoff_factor=1
|
26
|
+
)
|
27
|
+
|
28
|
+
# 创建 Session 并配置适配器
|
29
|
+
self.session = requests.Session()
|
30
|
+
self.session.mount("https://", HTTPAdapter(max_retries=retry_strategy))
|
31
|
+
|
32
|
+
@retry(stop=stop_after_attempt(3), wait=wait_fixed(2), after=log_attempt)
|
33
|
+
def request(self, method, path, **kwargs):
|
34
|
+
url = f"{self.host}{path}"
|
35
|
+
print(f"{method} 请求:", url)
|
36
|
+
# 统一处理请求参数
|
37
|
+
default_kwargs = {
|
38
|
+
"timeout": 30,
|
39
|
+
"headers": self.headers
|
40
|
+
}
|
41
|
+
default_kwargs.update(kwargs)
|
42
|
+
if default_kwargs.get('data'): # 如果data有值json序列化
|
43
|
+
data = json.dumps(default_kwargs.get('data'))
|
44
|
+
default_kwargs.update({'data': data})
|
45
|
+
try:
|
46
|
+
response = self.session.request(method, url, **default_kwargs)
|
47
|
+
response.raise_for_status()
|
48
|
+
print("响应内容为:\n", response.json())
|
49
|
+
return response.json()
|
50
|
+
except requests.exceptions.RequestException as e:
|
51
|
+
print(f"请求失败: {e}")
|
52
|
+
return None
|
16
53
|
|
17
54
|
|
18
55
|
class FormRequestBase(RequestBase):
|
19
56
|
def __init__(self, form_id, host, headers):
|
20
57
|
super().__init__(host, headers)
|
21
58
|
self.form_id = form_id
|
22
|
-
|
smartpush/base/url_enum.py
CHANGED
smartpush/form/form_after.py
CHANGED
@@ -6,10 +6,9 @@ from smartpush.export.basic.GetOssUrl import log_attempt
|
|
6
6
|
|
7
7
|
|
8
8
|
class FormAfter(FormRequestBase):
|
9
|
-
def __init__(self, form_id,
|
10
|
-
super().__init__(form_id,
|
9
|
+
def __init__(self, form_id, host, headers):
|
10
|
+
super().__init__(form_id, host, headers)
|
11
11
|
|
12
|
-
@retry(stop=stop_after_attempt(3), wait=wait_fixed(2), after=log_attempt)
|
13
12
|
def callPageFormReportDetail(self, reportDetailType, start_time=None, end_time=None):
|
14
13
|
"""
|
15
14
|
获取PageFormReportDetail数据
|
@@ -22,28 +21,26 @@ class FormAfter(FormRequestBase):
|
|
22
21
|
if start_time is not None and end_time is not None:
|
23
22
|
requestParam["startTime"] = start_time
|
24
23
|
requestParam["endTime"] = end_time
|
25
|
-
result = self.
|
26
|
-
|
24
|
+
result = self.request(method=URL.pageFormReportDetail.method, path=URL.pageFormReportDetail.url,
|
25
|
+
data=requestParam)
|
27
26
|
persons_list = result["resultData"]["reportDetailData"]["datas"]
|
28
27
|
return persons_list
|
29
28
|
|
30
|
-
|
29
|
+
|
31
30
|
def callGetFormReportDetail(self):
|
32
31
|
requestParam = {"formId": self.form_id}
|
33
|
-
result = self.
|
34
|
-
|
32
|
+
result = self.request(method=URL.getFormReportDetail.method, path=URL.getFormReportDetail.url,
|
33
|
+
data=requestParam)
|
35
34
|
resultData = result["resultData"]
|
36
35
|
return resultData
|
37
36
|
|
38
|
-
@retry(stop=stop_after_attempt(3), wait=wait_fixed(2), after=log_attempt)
|
39
37
|
def callGetFormPerformanceTrend(self):
|
40
38
|
requestParam = {"formId": self.form_id}
|
41
|
-
result = self.
|
42
|
-
|
39
|
+
result = self.request(method=URL.getFormPerformanceTrend.method, path=URL.getFormPerformanceTrend.url,
|
40
|
+
data=requestParam)
|
43
41
|
resultData = result["resultData"]
|
44
42
|
return resultData
|
45
43
|
|
46
|
-
@retry(stop=stop_after_attempt(3), wait=wait_fixed(2), after=log_attempt)
|
47
44
|
def callEditCrowdPackage(self, _id=None, groupRules=None, groupRelation="$AND"):
|
48
45
|
"""
|
49
46
|
更新群组条件id
|
@@ -54,8 +51,7 @@ class FormAfter(FormRequestBase):
|
|
54
51
|
"""
|
55
52
|
requestParam = {"id": _id, "crowdName": "表单查询群组-自动化", "groupRelation": groupRelation,
|
56
53
|
"groupRules": groupRules, "triggerStock": False}
|
57
|
-
result = self.
|
58
|
-
result.raise_for_status()
|
54
|
+
result = self.request(method=URL.editCrowdPackage.method, path=URL.editCrowdPackage.url, data=requestParam)
|
59
55
|
assert result.get("code") == 1
|
60
56
|
resultData = result["resultData"]
|
61
57
|
assert resultData.get("status") == 2
|
@@ -65,30 +61,25 @@ class FormAfter(FormRequestBase):
|
|
65
61
|
requestParam = {"id": _id, "page": page, "pageSize": pageSize}
|
66
62
|
if filter_value is not None:
|
67
63
|
requestParam["filter"] = {filter_type: {"in": filter_value}}
|
68
|
-
result = self.
|
64
|
+
result = self.request(method=URL.crowdPersonList.method, path=URL.crowdPersonList.url, data=requestParam)
|
69
65
|
result.raise_for_status()
|
70
66
|
return result['resultData']
|
71
67
|
|
72
|
-
@retry(stop=stop_after_attempt(3), wait=wait_fixed(2), after=log_attempt)
|
73
68
|
def callGetFormList(self, formName):
|
74
|
-
|
75
|
-
result = self.
|
76
|
-
result.raise_for_status()
|
69
|
+
requestParam = {'page': 1, 'pageSize': 10, 'name': formName}
|
70
|
+
result = self.request(method=URL.getFormList.method, path=URL.getFormList.url, data=requestParam)
|
77
71
|
return result["resultData"]['datas']
|
78
72
|
|
79
|
-
@retry(stop=stop_after_attempt(3), wait=wait_fixed(2), after=log_attempt)
|
80
73
|
def callGetFormInfo(self):
|
81
|
-
|
82
|
-
result = self.
|
83
|
-
result.raise_for_status()
|
74
|
+
requestParam = {'formId': self.form_id}
|
75
|
+
result = self.request(method=URL.getFormInfo.method, path=URL.getFormInfo.url, params=requestParam)
|
84
76
|
return result['resultData']
|
85
77
|
|
86
|
-
@retry(stop=stop_after_attempt(3), wait=wait_fixed(2), after=log_attempt)
|
87
78
|
def callDeleteForm(self, merchant_id):
|
88
|
-
|
89
|
-
result = self.
|
90
|
-
result
|
91
|
-
print(f"删除id{self.form_id}表单成功")
|
79
|
+
requestParam = {"formId": self.form_id, "merchant_id": merchant_id}
|
80
|
+
result = self.request(url=self.host + URL.deleteForm.url, params=requestParam)
|
81
|
+
assert result['code']
|
82
|
+
print(f"删除id:{self.form_id}表单成功")
|
92
83
|
|
93
84
|
# -------- 处理数据 --------------
|
94
85
|
def collectFormDetails(self, key, start_time=None, end_time=None):
|
smartpush/test.py
ADDED
@@ -0,0 +1,215 @@
|
|
1
|
+
# -*- codeing = utf-8 -*-
|
2
|
+
# @Time :2025/2/20 00:27
|
3
|
+
# @Author :luzebin
|
4
|
+
import json
|
5
|
+
import re
|
6
|
+
import time
|
7
|
+
|
8
|
+
import pandas as pd
|
9
|
+
|
10
|
+
from smartpush.export.basic import ExcelExportChecker
|
11
|
+
from smartpush.export.basic.ReadExcel import read_excel_from_oss
|
12
|
+
from smartpush.export.basic.ReadExcel import read_excel_and_write_to_dict
|
13
|
+
from smartpush.export.basic.GetOssUrl import get_oss_address_with_retry
|
14
|
+
from smartpush.utils.DataTypeUtils import DataTypeUtils
|
15
|
+
from smartpush.flow import MockFlow
|
16
|
+
from smartpush.utils import EmailUtlis, ListDictUtils
|
17
|
+
|
18
|
+
if __name__ == '__main__':
|
19
|
+
# 导出流程
|
20
|
+
oss1 = "https://cdn.smartpushedm.com/material_ec2/2025-02-26/31c1a577af244c65ab9f9a984c64f3d9/ab%E5%BC%B9%E7%AA%97%E6%B5%8B%E8%AF%952.10%E5%88%9B%E5%BB%BA-%E6%9C%89%E5%85%A8%E9%83%A8%E6%95%B0%E6%8D%AE%E9%94%80%E5%94%AE%E9%A2%9D%E6%98%8E%E7%BB%86%E6%95%B0%E6%8D%AE.xlsx"
|
21
|
+
oss2 = "https://cdn.smartpushedm.com/material_ec2/2025-02-26/31c1a577af244c65ab9f9a984c64f3d9/ab%E5%BC%B9%E7%AA%97%E6%B5%8B%E8%AF%952.10%E5%88%9B%E5%BB%BA-%E6%9C%89%E5%85%A8%E9%83%A8%E6%95%B0%E6%8D%AE%E9%94%80%E5%94%AE%E9%A2%9D%E6%98%8E%E7%BB%86%E6%95%B0%E6%8D%AE.xlsx"
|
22
|
+
# # print(check_excel_all(oss1, oss1))
|
23
|
+
oss3 = "https://cdn.smartpushedm.com/material_ec2/2025-03-07/dca03e35cb074ac2a46935c85de9f510/导出全部客户.csv"
|
24
|
+
oss4 = "https://cdn.smartpushedm.com/material_ec2/2025-03-07/c5fa0cc24d05416e93579266910fbd3e/%E5%AF%BC%E5%87%BA%E5%85%A8%E9%83%A8%E5%AE%A2%E6%88%B7.csv"
|
25
|
+
expected_oss = "https://cdn.smartpushedm.com/material_ec2/2025-02-26/757df7e77ce544e193257c0da35a4983/%E3%80%90%E8%87%AA%E5%8A%A8%E5%8C%96%E5%AF%BC%E5%87%BA%E3%80%91%E8%90%A5%E9%94%80%E6%B4%BB%E5%8A%A8%E6%95%B0%E6%8D%AE%E6%A6%82%E8%A7%88.xlsx"
|
26
|
+
# actual_oss = "https://cdn.smartpushedm.com/material_ec2/2025-02-26/757df7e77ce544e193257c0da35a4983/%E3%80%90%E8%87%AA%E5%8A%A8%E5%8C%96%E5%AF%BC%E5%87%BA%E3%80%91%E8%90%A5%E9%94%80%E6%B4%BB%E5%8A%A8%E6%95%B0%E6%8D%AE%E6%A6%82%E8%A7%88.xlsx"
|
27
|
+
url = "https://cdn.smartpushedm.com/material_ec2_prod/2025-03-06/fe6f042f50884466979155c5ef825736/copy%20of%202025-01-16%20%E5%88%9B%E5%BB%BA%E7%9A%84%20A%2FB%20%E6%B5%8B%E8%AF%95%20copy%20of%202025-01-16%20app-%E6%99%AE%E9%80%9A%E6%A8%A1%E6%9D%BF%201%E6%95%B0%E6%8D%AE%E6%80%BB%E8%A7%88.xlsx"
|
28
|
+
|
29
|
+
# e_person_oss1 = "https://cdn.smartpushedm.com/material_ec2/2025-02-27/b48f34b3e88045d189631ec1f0f23d51/%E5%AF%BC%E5%87%BA%E5%85%A8%E9%83%A8%E5%AE%A2%E6%88%B7.csv"
|
30
|
+
# a_person_oss2 = "https://cdn.smartpushedm.com/material_ec2/2025-02-27/c50519d803c04e3b9b52d9f625fed413/%E5%AF%BC%E5%87%BA%E5%85%A8%E9%83%A8%E5%AE%A2%E6%88%B7.csv"
|
31
|
+
|
32
|
+
# # #actual_oss= get_oss_address_with_retry("23161","https://cdn.smartpushedm.com/material_ec2_prod/2025-02-20/dae941ec20964ca5b106407858676f89/%E7%BE%A4%E7%BB%84%E6%95%B0%E6%8D%AE%E6%A6%82%E8%A7%88.xlsx","",'{"page":1,"pageSize":10,"type":null,"status":null,"startTime":null,"endTime":null}')
|
33
|
+
# # res=read_excel_and_write_to_dict(read_excel_from_oss(actual_oss))
|
34
|
+
# # print(res)
|
35
|
+
# # print(read_excel_and_write_to_dict(read_excel_from_oss(oss1), type=".xlsx"))
|
36
|
+
# print(check_excel(check_type="all", actual_oss=actual_oss, expected_oss=expected_oss))
|
37
|
+
# print(check_excel_all(actual_oss=oss1, expected_oss=oss2,skiprows =1))
|
38
|
+
# print(check_excel_all(actual_oss=oss1, expected_oss=oss2,ignore_sort=True))
|
39
|
+
# print(check_excel_all(actual_oss=a_person_oss2, expected_oss=e_person_oss1, check_type="including"))
|
40
|
+
# print(ExcelExportChecker.check_excel_all(actual_oss=oss3, expected_oss=oss4, check_type="including"))
|
41
|
+
# read_excel_csv_data(type=)
|
42
|
+
# print(DataTypeUtils().check_email_format())
|
43
|
+
# errors = ExcelExportChecker.check_field_format(actual_oss=oss1, fileds={0: {5: "time"}}, skiprows=1)
|
44
|
+
# ExcelExportChecker.check_excel_name(actual_oss=oss1, expected_oss=url)
|
45
|
+
|
46
|
+
# flow触发流程 ------------------------------------------------------------------------------------------------------------------------
|
47
|
+
_url = "http://sp-go-flow-test.inshopline.com"
|
48
|
+
host_domain = "https://test.smartpushedm.com/api-em-ec2"
|
49
|
+
cookies = "_ga=GA1.1.88071637.1717860341; _ga_NE61JB8ZM6=GS1.1.1718954972.32.1.1718954972.0.0.0; _ga_Z8N3C69PPP=GS1.1.1723104149.2.0.1723104149.0.0.0; _ga_D2KXR23WN3=GS1.1.1735096783.3.1.1735096812.0.0.0; osudb_lang=; a_lang=zh-hans-cn; osudb_uid=4213785247; osudb_oar=#01#SID0000128BA0RSWIkgaJoBiROHmmY9zaWt+yNT/cLZpKsGBxkFK4G4Fi+YE+5zicSeFaJmg/+zbnZjt543htvh4TVJOox971SEqJXBJuZu1bKK41UleDRJkw1ufT+wR8zbZw/w1VkSProXPqvU3SXTkEAA6ho; osudb_appid=SMARTPUSH; osudb_subappid=1; ecom_http_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NTAzMjY4NDgsImp0aSI6IjE1ZjU1ZDUwLTgwMzgtNDFkMS05YzA4LTAwNTUyYTZjYzc0MSIsInVzZXJJbmZvIjp7ImlkIjowLCJ1c2VySWQiOiI0MjEzNzg1MjQ3IiwidXNlcm5hbWUiOiIiLCJlbWFpbCI6ImZlbGl4LnNoYW9Ac2hvcGxpbmVhcHAuY29tIiwidXNlclJvbGUiOiJvd25lciIsInBsYXRmb3JtVHlwZSI6Nywic3ViUGxhdGZvcm0iOjEsInBob25lIjoiIiwibGFuZ3VhZ2UiOiJ6aC1oYW5zLWNuIiwiYXV0aFR5cGUiOiIiLCJhdHRyaWJ1dGVzIjp7ImNvdW50cnlDb2RlIjoiQ04iLCJjdXJyZW5jeSI6IkpQWSIsImN1cnJlbmN5U3ltYm9sIjoiSlDCpSIsImRvbWFpbiI6InNtYXJ0cHVzaDQubXlzaG9wbGluZXN0Zy5jb20iLCJsYW5ndWFnZSI6ImVuIiwibWVyY2hhbnRFbWFpbCI6ImZlbGl4LnNoYW9Ac2hvcGxpbmUuY29tIiwibWVyY2hhbnROYW1lIjoiU21hcnRQdXNoNF9lYzJf6Ieq5Yqo5YyW5bqX6ZO6IiwicGhvbmUiOiIiLCJzY29wZUNoYW5nZWQiOmZhbHNlLCJzdGFmZkxhbmd1YWdlIjoiemgtaGFucy1jbiIsInN0YXR1cyI6MCwidGltZXpvbmUiOiJBc2lhL01hY2FvIn0sInN0b3JlSWQiOiIxNjQ0Mzk1OTIwNDQ0IiwiaGFuZGxlIjoic21hcnRwdXNoNCIsImVudiI6IkNOIiwic3RlIjoiIiwidmVyaWZ5IjoiIn0sImxvZ2luVGltZSI6MTc0NzczNDg0ODc0Miwic2NvcGUiOlsiZW1haWwtbWFya2V0IiwiY29va2llIiwic2wtZWNvbS1lbWFpbC1tYXJrZXQtbmV3LXRlc3QiLCJlbWFpbC1tYXJrZXQtbmV3LWRldi1mcyIsImFwaS11Yy1lYzIiLCJhcGktc3UtZWMyIiwiYXBpLWVtLWVjMiIsImZsb3ctcGx1Z2luIiwiYXBpLXNwLW1hcmtldC1lYzIiXSwiY2xpZW50X2lkIjoiZW1haWwtbWFya2V0In0.O3HQgqEvqb2nxm_6EkYX797j_qqeQ21M1ohIWOJu8Uo; JSESSIONID=57D8A7D13DD34650E0FF72DDB3435515"
|
50
|
+
|
51
|
+
params = {
|
52
|
+
"abandonedOrderId": "c2c4a695a36373f56899b370d0f1b6f2",
|
53
|
+
"areaCode": "",
|
54
|
+
"context": {
|
55
|
+
"order": {
|
56
|
+
"buyerSubscribeEmail": True,
|
57
|
+
"checkoutId": "c2c4a695a36373f56899b370d0f1b6f2",
|
58
|
+
"discountCodes": [],
|
59
|
+
"orderAmountSet": {
|
60
|
+
"amount": 3,
|
61
|
+
"currency": "JPY"
|
62
|
+
},
|
63
|
+
"orderDetails": [
|
64
|
+
{
|
65
|
+
"productId": "16060724900402692190790343",
|
66
|
+
"title": "测试2.0-商品同步AutoSync-2023-08-17 20:52:00",
|
67
|
+
"titleTranslations": []
|
68
|
+
}
|
69
|
+
],
|
70
|
+
"receiverCountryCode": "HK"
|
71
|
+
},
|
72
|
+
"user": {
|
73
|
+
"addresses": [],
|
74
|
+
"areaCode": "",
|
75
|
+
"email": "testsmart200+10@gmail.com",
|
76
|
+
"firstName": "testsmart200+10",
|
77
|
+
"gender": "others",
|
78
|
+
"id": "1911625831177650177",
|
79
|
+
"lastName": "",
|
80
|
+
"phone": "",
|
81
|
+
"tags": [],
|
82
|
+
"uid": "4603296300",
|
83
|
+
"userName": "testsmart200+10"
|
84
|
+
}
|
85
|
+
},
|
86
|
+
"controlObjectId": "c2c4a695a36373f56899b370d0f1b6f2",
|
87
|
+
"controlObjectType": 4,
|
88
|
+
"email": "testsmart200+10@gmail.com",
|
89
|
+
"handle": "smartpush4",
|
90
|
+
"language": "en",
|
91
|
+
"messageId": "1911625832100397058",
|
92
|
+
"phone": "",
|
93
|
+
"platform": 4,
|
94
|
+
"storeId": "1644395920444",
|
95
|
+
"timezone": "Asia/Macao",
|
96
|
+
"triggerId": "c1001",
|
97
|
+
"uid": "4603296300",
|
98
|
+
"userId": "1911625831177650177"
|
99
|
+
}
|
100
|
+
update_flow_params = {"id": "FLOW6941975456855532553", "version": "10", "triggerId": "c1001",
|
101
|
+
"templateId": "TEMP6911595896571704333", "showData": False, "flowChange": True, "nodes": [
|
102
|
+
{"type": "trigger", "data": {
|
103
|
+
"trigger": {"trigger": "c1001", "group": "", "suggestionGroupId": "", "triggerStock": False,
|
104
|
+
"completedCount": 4, "skippedCount": 0}, "completedCount": 4, "skippedCount": 0},
|
105
|
+
"id": "92d115e7-8a86-439a-8cfb-1aa3ef075edf"}, {"type": "delay", "data": {
|
106
|
+
"delay": {"type": "relative", "relativeTime": 0, "relativeUnit": "HOURS", "designatedTime": ""},
|
107
|
+
"completedCount": 4}, "id": "e0fc258b-fcfc-421c-b215-8e41638072ca"}, {"type": "sendLetter", "data": {
|
108
|
+
"sendLetter": {"id": 367462, "activityTemplateId": 367462, "activityName": "flowActivity_EwEi3d",
|
109
|
+
"activityImage": "http://cdn.smartpushedm.com/frontend/smart-push/staging/1644395920444/1744102089665/1744102093754_f99e3703.jpeg",
|
110
|
+
"emailName": "A Message from Your Cart", "merchantId": "1644395920444",
|
111
|
+
"merchantName": "SmartPush4_ec2_自动化店铺",
|
112
|
+
"brandName": "SmartPush4_ec2_自动化店铺 AutoTestName", "currency": "JP¥",
|
113
|
+
"activityType": "NORMAL", "activityStatus": "ACTIVE", "createTime": 1745201732286,
|
114
|
+
"updateTime": 1745201825819, "createDate": "2025-04-21 10:15:32",
|
115
|
+
"updateDate": "2025-04-21 10:17:05", "pickContactPacks": [], "excludeContactPacks": [],
|
116
|
+
"customerGroupIds": [], "excludeCustomerGroupIds": [], "pickContactInfos": [],
|
117
|
+
"excludeContactInfos": [], "customerGroupInfos": [], "excludeCustomerGroupInfos": [],
|
118
|
+
"sender": "SmartPush4_ec2_自动化店铺", "senderDomain": "DEFAULT_DOMAIN", "domainType": 3,
|
119
|
+
"receiveAddress": "", "originTemplate": 33,
|
120
|
+
"currentJsonSchema": "{\"id\":\"a4a9fba2a\",\"type\":\"Stage\",\"props\":{\"backgroundColor\":\"#EAEDF1\",\"width\":\"600px\",\"fullWidth\":\"normal-width\"},\"children\":[{\"id\":\"84ba788da\",\"type\":\"Header\",\"props\":{\"backgroundColor\":\"#ffffff\",\"borderLeft\":\"1px none #ffffff\",\"borderRight\":\"1px none #ffffff\",\"borderTop\":\"1px none #ffffff\",\"borderBottom\":\"1px none #ffffff\",\"paddingTop\":\"0px\",\"paddingBottom\":\"0px\",\"paddingLeft\":\"0px\",\"paddingRight\":\"0px\",\"cols\":[12]},\"children\":[{\"id\":\"98d909a48\",\"type\":\"Column\",\"props\":{},\"children\":[]}]},{\"id\":\"84ba7bbda\",\"type\":\"Section\",\"props\":{\"backgroundColor\":\"#ffffff\",\"borderLeft\":\"1px none #ffffff\",\"borderRight\":\"1px none #ffffff\",\"borderTop\":\"1px none #ffffff\",\"borderBottom\":\"1px none #ffffff\",\"paddingTop\":\"0px\",\"paddingBottom\":\"0px\",\"paddingLeft\":\"0px\",\"paddingRight\":\"0px\",\"cols\":[12]},\"children\":[{\"id\":\"8cab9aa48\",\"type\":\"Column\",\"props\":{},\"children\":[]}]},{\"id\":\"b8bbabad9\",\"type\":\"Footer\",\"props\":{\"backgroundColor\":\"#ffffff\",\"borderLeft\":\"1px none #ffffff\",\"borderRight\":\"1px none #ffffff\",\"borderTop\":\"1px none #ffffff\",\"borderBottom\":\"1px none #ffffff\",\"paddingTop\":\"0px\",\"paddingBottom\":\"0px\",\"paddingLeft\":\"0px\",\"paddingRight\":\"0px\",\"cols\":[12]},\"children\":[{\"id\":\"b3bcabad7\",\"type\":\"Column\",\"props\":{},\"children\":[{\"id\":\"b39b6a94a\",\"type\":\"Subscribe\",\"props\":{\"content\":\"<p style=\\\"text-align:center;\\\"><span style=\\\"font-size:12px\\\"><span style=\\\"font-family:Arial, Helvetica, sans-serif\\\">在此處輸入聯繫地址,可以讓你的顧客更加信任這封郵件</span></span></p>\"},\"children\":[]}]}]}],\"extend\":{\"version\":\"1.0.0\",\"updateTime\":\"2025-03-18T09:57:40.953Z\"}}",
|
121
|
+
"currentHtml": "<!doctype html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\">\n <head>\n <title></title>\n <!--[if !mso]><!-->\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n <!--<![endif]-->\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <style type=\"text/css\">\n #outlook a { padding:0; }\n body { margin:0;padding:0;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%; }\n table, td { border-collapse:collapse;mso-table-lspace:0pt;mso-table-rspace:0pt; }\n img { border:0;line-height:100%; outline:none;text-decoration:none;-ms-interpolation-mode:bicubic; }\n pre{margin: 0;}p{ display: block;margin:0;}\n </style>\n <!--[if mso]>\n <noscript>\n <xml>\n <o:OfficeDocumentSettings>\n <o:AllowPNG/>\n <o:PixelsPerInch>96</o:PixelsPerInch>\n </o:OfficeDocumentSettings>\n </xml>\n </noscript>\n <![endif]-->\n <!--[if lte mso 11]>\n <style type=\"text/css\">\n .mj-outlook-group-fix { width:100% !important; }\n </style>\n <![endif]-->\n \n <!--[if !mso]><!-->\n <link href=\"https://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700\" rel=\"stylesheet\" type=\"text/css\">\n <style type=\"text/css\">\n @import url(https://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700);\n </style>\n <!--<![endif]-->\n\n \n \n <style type=\"text/css\">\n @media only screen and (min-width:480px) {\n .mj-column-per-100 { width:100% !important; max-width: 100%; }\n }\n </style>\n <style media=\"screen and (min-width:480px)\">\n .moz-text-html .mj-column-per-100 { width:100% !important; max-width: 100%; }\n </style>\n \n \n <style type=\"text/css\">\n \n \n </style>\n <style type=\"text/css\">\n @import url(https://fonts.googleapis.com/css?family=Arvo:400|Bodoni+Moda:400|DM+Sans:400|Poppins:400|Hammersmith+One:400|Libre+Baskerville:400|Lexend+Giga:400|Ubuntu:400|Montserrat:400|Nunito:400|News+Cycle:400|Roboto:400|Oswald:400);@import url(https://fonts.googleapis.com/css?family=Asar:400|Bruno+Ace:400|Cantata+One:400|League+Gothic:400|Long+Cang:400|Lovers+Quarrel:400|Nanum+Gothic+Coding:400|Nanum+Myeongjo:400|Noto+Sans+Kaithi:400|Noto+Sans+Kannada:400|Noto+Sans+Math:400|Noto+Sans+Syloti+Nagri:400|Noto+Serif+JP:400|Playwrite+AT+Guides:400|Saira+Extra+Condensed:400|Tsukimi+Rounded:400|Waiting+for+the+Sunrise:400);h1,\nh2,\nh3,\nh4,\nh5 {\n font-weight: bold;\n margin-bottom: 0;\n}\np {\n margin-top: 0;\n margin-bottom: 0;\n min-height: 1em;\n}\n\nul {\n margin-bottom: 0;\n}\n\nth {\n font-weight: bold;\n}\n\na {\n text-decoration: none;\n}\n\na::-webkit-scrollbar {\n -webkit-appearance: none;\n}\n\na::-webkit-scrollbar:horizontal {\n max-height: 8px;\n}\n\na::-webkit-scrollbar-thumb {\n border-radius: 8px;\n background-color: rgba(0, 0, 0, 0.5);\n}\n\nul,\nol,\ndl {\n margin-top: 16px !important;\n}\n\npre {\n word-break: break-word;\n padding: 0;\n margin: 0;\n white-space: inherit !important;\n}\n\npre p {\n word-break: break-word;\n padding: 0;\n margin: 0;\n color: #000000;\n}\n\nspan[style*='color'] a {\n color: inherit;\n}\n\n.mj-column-no-meida-100{\n width: 100% !important;\n}\n.mj-column-no-meida-50{\n width: 50% !important;\n}\n.mj-column-no-meida-33-333333333333336{\n width: 33.333333333333336% !important;\n}\n.mj-column-no-meida-25{\n width: 25% !important;\n}\n\n.white-nowrap {\n white-space: nowrap !important;\n}\n\n/* 间距 */\n.sp-m-p-0 {\n margin: 0;\n padding: 0;\n}\n\n.nps-content-span a {\n color: inherit !important;\n}.sp-font-12 {\n font-size: 12px !important;\n}\n\n.sp-font-14 {\n font-size: 14px !important;\n}\n\n.sp-font-16 {\n font-size: 16px !important;\n}\n\n.sp-font-18 {\n font-size: 18px !important;\n}\n\n.sp-font-20 {\n font-size: 20px !important;\n}\n\n.sp-font-22 {\n font-size: 22px !important;\n}\n\n.sp-font-24 {\n font-size: 24px !important;\n}\n\n.sp-font-26 {\n font-size: 26px !important;\n}\n\n.sp-font-28 {\n font-size: 28px !important;\n}\n\n.sp-font-30 {\n font-size: 30px !important;\n}\n\n.sp-font-32 {\n font-size: 32px !important;\n}\n\n.sp-font-34 {\n font-size: 34px !important;\n}\n\n.sp-font-36 {\n font-size: 36px !important;\n}\n\n.sp-font-38 {\n font-size: 38px !important;\n}\n\n.sp-font-40 {\n font-size: 40px !important;\n}\n\n.sp-font-42 {\n font-size: 42px !important;\n}\n\n.sp-font-44 {\n font-size: 44px !important;\n}\n\n.sp-font-46 {\n font-size: 46px !important;\n}\n\n.sp-font-48 {\n font-size: 48px !important;\n}\n\n.sp-font-50 {\n font-size: 50px !important;\n}\n\n.sp-font-52 {\n font-size: 52px !important;\n}\n\n.sp-font-54 {\n font-size: 54px !important;\n}\n\n.sp-font-56 {\n font-size: 56px !important;\n}\n\n.sp-font-58 {\n font-size: 58px !important;\n}\n\n.sp-font-60 {\n font-size: 60px !important;\n}\n\n.sp-image-icon {\n width: 50px;\n}\n\n@media only screen and (max-width:600px) {\n\n .sp-font-12 {\n font-size: 12px !important;\n }\n\n .sp-font-14 {\n font-size: 12px !important;\n }\n\n .sp-font-16 {\n font-size: 12px !important;\n }\n\n .sp-font-18 {\n font-size: 13px !important;\n }\n\n .sp-font-20 {\n font-size: 15px !important;\n }\n\n .sp-font-22 {\n font-size: 16px !important;\n }\n\n .sp-font-24 {\n font-size: 18px !important;\n }\n\n .sp-font-26 {\n font-size: 19px !important;\n }\n\n .sp-font-28 {\n font-size: 21px !important;\n }\n\n .sp-font-30 {\n font-size: 22px !important;\n }\n\n .sp-font-32 {\n font-size: 24px !important;\n }\n\n .sp-font-34 {\n font-size: 25px !important;\n }\n\n .sp-font-36 {\n font-size: 27px !important;\n }\n\n .sp-font-38 {\n font-size: 28px !important;\n }\n\n .sp-font-40 {\n font-size: 30px !important;\n }\n\n .sp-font-42 {\n font-size: 31px !important;\n }\n\n .sp-font-44 {\n font-size: 32px !important;\n }\n\n .sp-font-46 {\n font-size: 33px !important;\n }\n\n .sp-font-48 {\n font-size: 34px !important;\n }\n\n .sp-font-50 {\n font-size: 35px !important;\n }\n\n .sp-font-52 {\n font-size: 36px !important;\n }\n\n .sp-font-54 {\n font-size: 37px !important;\n }\n\n .sp-font-56 {\n font-size: 38px !important;\n }\n\n .sp-font-58 {\n font-size: 39px !important;\n }\n\n .sp-font-60 {\n font-size: 40px !important;\n }\n\n .sp-image-icon {\n width: 28px !important;\n }\n\n}@media only screen and (max-width:480px) {\n\n .sp-img-h-1-TwoVertical-11,\n .sp-img-h-1-TwoHorizontalColumns-11 {\n height: 170px !important;\n }\n\n .sp-img-h-1-TwoVertical-23,\n .sp-img-h-1-TwoHorizontalColumns-23 {\n height: 243px !important;\n }\n\n .sp-img-h-1-TwoVertical-34,\n .sp-img-h-1-TwoHorizontalColumns-34 {\n height: 227px !important;\n }\n\n .sp-img-h-1-TwoVertical-43,\n .sp-img-h-1-TwoHorizontalColumns-43 {\n height: 127px !important;\n }\n\n .sp-img-h-1-ThreeHorizontalColumns-11 {\n height: 109px !important;\n }\n\n .sp-img-h-1-ThreeHorizontalColumns-23 {\n height: 163px !important;\n }\n\n .sp-img-h-1-ThreeHorizontalColumns-34 {\n height: 145px !important;\n }\n\n .sp-img-h-1-ThreeHorizontalColumns-43 {\n height: 81px !important;\n }\n\n .sp-img-h-2-TwoVertical-11 {\n height: 164px !important;\n }\n\n .sp-img-h-2-TwoVertical-23 {\n height: 246px !important;\n }\n\n .sp-img-h-2-TwoVertical-34 {\n height: 218px !important;\n }\n\n .sp-img-h-2-TwoVertical-43 {\n height: 123px !important;\n }\n\n .sp-img-h-2-ThreeHorizontalColumns-11,\n .sp-img-h-2-TwoHorizontalColumns-11 {\n height: 76px !important;\n }\n\n .sp-img-h-2-ThreeHorizontalColumns-23,\n .sp-img-h-2-TwoHorizontalColumns-23 {\n height: 113px !important;\n }\n\n .sp-img-h-2-ThreeHorizontalColumns-34,\n .sp-img-h-2-TwoHorizontalColumns-34 {\n height: 101px !important;\n }\n\n .sp-img-h-2-ThreeHorizontalColumns-43,\n .sp-img-h-2-TwoHorizontalColumns-43 {\n height: 57px !important;\n }\n}@media only screen and (min-width: 320px) and (max-width: 599px) {\n .mj-w-50 {\n width: 50% !important;\n max-width: 50%;\n }\n}\n\n@media only screen and (max-width: 480px) {\n .shop-white-mobile {\n width: 100% !important;\n }\n .mj-td-force-100{\n display: inline-block;\n width: 100% !important;\n }\n\n .mj-ImageText-screen {\n width: 100% !important;\n }\n .mj-ImageText-img {\n margin: 0 auto;\n }\n\n .mj-ImageText-margin {\n margin: 0 !important;\n }\n\n .mj-ImageText-margin-zero {\n margin: 0 5px 0 0 !important;\n }\n\n .mj-ImageText-margin-one {\n margin: 0 0 0 5px !important;\n }\n .mj-column-per-50-force {\n width: 50% !important;\n max-width: 50%;\n }\n}\n\n@media only screen and (min-width: 480px) {\n .mj-imagetext-force-100{\n display: inline-block;\n width: 100% !important;\n }\n .mj-column-per-100 {\n width: 100% !important;\n max-width: 100%;\n }\n\n .mj-column-per-50 {\n width: 50% !important;\n max-width: 50%;\n }\n\n .mj-column-per-33-333333333333336 {\n width: 33.333333333333336% !important;\n max-width: 33.333333333333336%;\n }\n\n .mj-column-per-25 {\n width: 25% !important;\n max-width: 25%;\n }\n\n\n .mg-column-per-46-5 {\n width: 46.5% !important;\n max-width: 46.5%;\n }\n\n .mj-AbandonProduct-cloum-align-center {\n align-items: flex-start !important;\n }\n\n\n .mj-OrderInformation-padding-top-220 {\n padding-top: 20px !important;\n }\n\n .mj-OrderInformation-float-left {\n float: left !important;\n }\n}@media only screen and (max-width: 480px) {\n .mt-1{\n margin-top: 1px;\n }\n .mt-2{\n margin-top: 2px;\n }\n .mt-3{\n margin-top: 3px;\n }\n .mt-4{\n margin-top: 4px;\n }\n .mt-5{\n margin-top: 5px;\n }\n .mt-6{\n margin-top: 7px;\n }\n .mt-8{\n margin-top: 9px;\n }\n .mt-10{\n margin-top: 10px;\n }\n\n}\n </style>\n \n </head>\n <body style=\"word-spacing:normal;background-color:#EAEDF1;\">\n \n \n <div\n style=\"background-color:#EAEDF1;\"\n >\n <table className=\"pv-stage\">\n <tbody>\n <tr>\n <td style=\"display:table-column;\"><div style=\"width:1px; height:1px;\"><img style=\"width:1px; height:1px;\" width=\"1\" src=\"${SP_OPEN_EMAIL_URL}\" />\n </div></td>\n </tr>\n </tbody>\n </table><div mso-hide: all; position: fixed; height: 0; max-height: 0; overflow: hidden; font-size: 0; style=\"display:none;\">${emailSubtitle}</div>\n \n <!--[if mso | IE]><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"\" role=\"presentation\" style=\"width:600px;\" width=\"600\" bgcolor=\"#ffffff\" ><tr><td style=\"line-height:0px;font-size:0px;mso-line-height-rule:exactly;\"><![endif]-->\n \n \n <div style=\"background:#ffffff;background-color:#ffffff;margin:0px auto;max-width:600px;\">\n \n <table\n align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"background:#ffffff;background-color:#ffffff;width:100%;\"\n >\n <tbody>\n <tr>\n <td\n style=\"border-bottom:1px none #ffffff;border-left:1px none #ffffff;border-right:1px none #ffffff;border-top:1px none #ffffff;direction:ltr;font-size:0px;padding:20px 0;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px;text-align:center;\"\n >\n <!--[if mso | IE]><table role=\"presentation\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td class=\"\" style=\"vertical-align:top;width:598px;\" ><![endif]-->\n \n <div\n class=\"mj-column-per-100 mj-outlook-group-fix\" style=\"font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;\"\n >\n \n <table\n border=\"0\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"vertical-align:top;\" width=\"100%\"\n >\n <tbody>\n \n <tr>\n <td\n align=\"left\" style=\"font-size:0px;padding:0;word-break:break-word;\"\n >\n \n <table\n cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" border=\"0\" style=\"color:#000000;font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:13px;line-height:22px;table-layout:fixed;width:100%;border:none;\"\n >\n <table style=\"margin:0;padding:0;width:100%;table-layout:fixed\" class=\"\" sp-id=\"subscribe-area-b39b6a94a\"><tbody><tr style=\"width:100%\"><td style=\"margin:0;padding:0;width:100%;text-align:center;padding-top:20px;padding-left:20px;padding-right:20px;padding-bottom:20px;background-color:transparent;font-family:arial,helvetica,sans-serif,Arial, Helvetica, sans-serif\" class=\"Subscribe\"><table cellPadding=\"0\" cellSpacing=\"0\" style=\"width:100%\"><tbody><tr><td align=\"center\" class=\"sp-font-16\" valign=\"middle\" style=\"padding-left:10px;padding-right:10px;padding-top:10px;text-align:left;font-size:16px\"><div><p style=\"text-align:center;\"><span style=\"font-size:12px\"><span style=\"font-family:Arial, Helvetica, sans-serif\">在此處輸入聯繫地址,可以讓你的顧客更加信任這封郵件</span></span></p></div></td></tr><tr><td align=\"center\" valign=\"middle\" height=\"20\" style=\"font-size:12px;font-family:arial,helvetica,sans-serif,Arial, Helvetica, sans-serif;padding-left:10px;padding-right:10px;padding-bottom:20px\"></td></tr><div><tr style=\"${hide_logo}\" sp-id=\"subscribe-dom-b39b6a94a\">\n <td class='sp-font-16' style=\"padding-left:20px;padding-right:20px;padding-top:20px;text-align:center;font-size:16px\" >\n <div style=\"border-top: 1px solid #EEF1F6\">\n <img src=\"https://cdn.smartpushedm.com/frontend/smart-push/product/image/1731577171577_83853d55.png\" style=\"padding: 10px;vertical-align: middle;width: 158px;\"alt=\"\" />\n </div>\n <p style=\"color:#343434;font-size:12px\">Providing content services for [[shopName]]</p>\n </td>\n </tr></div></tbody></table></td></tr></tbody></table>\n </table>\n \n </td>\n </tr>\n \n </tbody>\n </table>\n \n </div>\n \n <!--[if mso | IE]></td></tr></table><![endif]-->\n </td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n \n <!--[if mso | IE]></td></tr></table><![endif]-->\n \n \n </div>\n \n </body>\n</html>\n ",
|
122
|
+
"previewJsonSchema": "{\"id\":\"a4a9fba2a\",\"type\":\"Stage\",\"props\":{\"backgroundColor\":\"#EAEDF1\",\"width\":\"600px\",\"fullWidth\":\"normal-width\"},\"children\":[{\"id\":\"84ba788da\",\"type\":\"Header\",\"props\":{\"backgroundColor\":\"#ffffff\",\"borderLeft\":\"1px none #ffffff\",\"borderRight\":\"1px none #ffffff\",\"borderTop\":\"1px none #ffffff\",\"borderBottom\":\"1px none #ffffff\",\"paddingTop\":\"0px\",\"paddingBottom\":\"0px\",\"paddingLeft\":\"0px\",\"paddingRight\":\"0px\",\"cols\":[12]},\"children\":[{\"id\":\"98d909a48\",\"type\":\"Column\",\"props\":{},\"children\":[]}]},{\"id\":\"84ba7bbda\",\"type\":\"Section\",\"props\":{\"backgroundColor\":\"#ffffff\",\"borderLeft\":\"1px none #ffffff\",\"borderRight\":\"1px none #ffffff\",\"borderTop\":\"1px none #ffffff\",\"borderBottom\":\"1px none #ffffff\",\"paddingTop\":\"0px\",\"paddingBottom\":\"0px\",\"paddingLeft\":\"0px\",\"paddingRight\":\"0px\",\"cols\":[12]},\"children\":[{\"id\":\"8cab9aa48\",\"type\":\"Column\",\"props\":{},\"children\":[]}]},{\"id\":\"b8bbabad9\",\"type\":\"Footer\",\"props\":{\"backgroundColor\":\"#ffffff\",\"borderLeft\":\"1px none #ffffff\",\"borderRight\":\"1px none #ffffff\",\"borderTop\":\"1px none #ffffff\",\"borderBottom\":\"1px none #ffffff\",\"paddingTop\":\"0px\",\"paddingBottom\":\"0px\",\"paddingLeft\":\"0px\",\"paddingRight\":\"0px\",\"cols\":[12]},\"children\":[{\"id\":\"b3bcabad7\",\"type\":\"Column\",\"props\":{},\"children\":[{\"id\":\"b39b6a94a\",\"type\":\"Subscribe\",\"props\":{\"content\":\"<p style=\\\"text-align:center;\\\"><span style=\\\"font-size:12px\\\"><span style=\\\"font-family:Arial, Helvetica, sans-serif\\\">在此處輸入聯繫地址,可以讓你的顧客更加信任這封郵件</span></span></p>\"},\"children\":[]}]}]}],\"extend\":{\"version\":\"1.0.0\",\"updateTime\":\"2025-03-18T09:57:40.953Z\"}}",
|
123
|
+
"generatedHtml": False,
|
124
|
+
"templateUrl": "https://cdn2.smartpushedm.com/material/2021-11-29/d4f96fc873e942a397be708c932bbbe4-自定义排版.png",
|
125
|
+
"sendStrategy": "NOW", "totalReceiver": 0, "utmConfigEnable": False,
|
126
|
+
"subtitle": "Items in your cart are selling out fast!", "language": "en",
|
127
|
+
"languageName": "英语", "timezone": "Asia/Shanghai", "timezoneGmt": "GMT+08:00",
|
128
|
+
"type": "FLOW", "relId": "FLOW6941975456855532553",
|
129
|
+
"parentId": "TEMP6911595896571704333", "nodeId": "2503b475-ce3e-4906-ab04-0ebc387f0d7e",
|
130
|
+
"version": "10", "nodeOrder": 0, "sendType": "EMAIL", "productInfos": [], "blocks": [
|
131
|
+
{"domId": "subscribe-dom-b39b6a94a", "blockId": "", "areaId": "", "type": "SP_LOGO",
|
132
|
+
"column": 1, "fillStyle": 0, "ratio": ""}], "discountCodes": [], "reviews": [], "awards": [],
|
133
|
+
"selectProducts": [], "createSource": "BUILD_ACTIVITY", "contentChange": True,
|
134
|
+
"activityChange": False, "imageVersion": "1744102089665", "subActivityList": [],
|
135
|
+
"warmupPack": 0, "boosterEnabled": False, "smartSending": False, "boosterCreated": False,
|
136
|
+
"gmailPromotion": False, "sendTimeType": "FIXED", "sendTimezone": "B_TIMEZONE",
|
137
|
+
"sendTimeDelay": False, "sendOption": 1, "hasUserBlock": False, "hasAutoBlock": False,
|
138
|
+
"smsSendDelay": True, "payFunctionList": [], "minSendTime": "2025-04-21 10:15:32",
|
139
|
+
"completedCount": 4, "skippedCount": 0, "openRate": 1, "clickRate": 0, "orderIncome": 0,
|
140
|
+
"openDistinctUserRate": 1, "clickDistinctUserRate": 0}, "completedCount": 4,
|
141
|
+
"skippedCount": 0, "openRate": 1, "clickRate": 0, "orderIncome": 0, "openDistinctUserRate": 1,
|
142
|
+
"clickDistinctUserRate": 0}, "id": "2503b475-ce3e-4906-ab04-0ebc387f0d7e"}],
|
143
|
+
"showDataStartTime": 1745164800000, "showDataEndTime": 1745251199000}
|
144
|
+
# mock_pulsar = MockFlow.check_flow(mock_domain=_url, host_domain=host_domain, cookies=cookies,
|
145
|
+
# flow_id="FLOW6966717528141252274", pulsar=params,
|
146
|
+
# split_node=["true"])
|
147
|
+
# print(mock_pulsar)
|
148
|
+
|
149
|
+
old_flow_counts, old_versions, email_contents = MockFlow.get_current_flow(host_domain=host_domain, cookies=cookies,
|
150
|
+
flow_id="FLOW6966717528141252274",
|
151
|
+
splits=["false","true","true","true","true","true"],
|
152
|
+
get_email_content=True)
|
153
|
+
print(old_flow_counts, old_versions, email_contents)
|
154
|
+
|
155
|
+
# mock_pulsar_step1, _ = MockFlow.check_flow(mock_domain=_url, host_domain=host_domain, cookies=cookies,
|
156
|
+
# flow_id="FLOW6966717528141252274", pulsar=params,
|
157
|
+
# split_steps="one", split_node=["false", "true", "true"])
|
158
|
+
# print(mock_pulsar_step1)
|
159
|
+
# # time.sleep(60)
|
160
|
+
# mock_pulsar_step2, email_contents = MockFlow.check_flow(mock_domain=_url, host_domain=host_domain, cookies=cookies,
|
161
|
+
# flow_id="FLOW6966717528141252274",
|
162
|
+
# old_flow_counts=mock_pulsar_step1,
|
163
|
+
# split_steps="two", split_node=["false", "true", "true"],
|
164
|
+
# get_email_content=True)
|
165
|
+
# print(mock_pulsar_step2)
|
166
|
+
# print(email_contents)
|
167
|
+
|
168
|
+
# split_steps="two")
|
169
|
+
# node_counts, versions = MockFlow.get_current_flow(host_domain=host_domain, cookies=cookies,
|
170
|
+
# flow_id="FLOW6749144046546626518")
|
171
|
+
|
172
|
+
# 调试
|
173
|
+
# a = [{'049fd321-5a22-4f92-9692-a3da9507ee4b': {'completedCount': 44}},
|
174
|
+
# {'09ff19db-33a3-41d8-88e9-12e6017ddfd3': {'completedCount': 44}},
|
175
|
+
# {'31941d3a-910b-48fa-b302-0f3cf7790401': {'skippedCount': 7}},
|
176
|
+
# {'01e7c21d-ab57-4f89-98ad-1a437bca1138': {'completedCount': 5}},
|
177
|
+
# {'f3af15d5-848e-43d3-9ad3-d8f5172df6e0': {'completedCount': 5}},
|
178
|
+
# {'15630c25-75fa-4456-a6ee-a2bd1e3e64a1': {'completedCount': 42}}]
|
179
|
+
# b = [{'049fd321-5a22-4f92-9692-a3da9507ee4b': {'completedCount': 44}},
|
180
|
+
# {'09ff19db-33a3-41d8-88e9-12e6017ddfd3': {'completedCount': 44}},
|
181
|
+
# {'31941d3a-910b-48fa-b302-0f3cf7790401': {'skippedCount': 7}},
|
182
|
+
# {'01e7c21d-ab57-4f89-98ad-1a437bca1138': {'completedCount': 5}},
|
183
|
+
# {'f3af15d5-848e-43d3-9ad3-d8f5172df6e0': {'completedCount': 5}},
|
184
|
+
# {'15630c25-75fa-4456-a6ee-a2bd1e3e64a1': {'completedCount': 42}}]
|
185
|
+
# result = ListDictUtils.compare_lists(temp1=a,
|
186
|
+
# temp2=b, num=1,
|
187
|
+
# check_key=["completedCount", "skippedCount"],
|
188
|
+
# all_key=False)
|
189
|
+
# print(result)
|
190
|
+
|
191
|
+
# 断言邮件
|
192
|
+
loginEmail, password = 'lulu9600000@gmail.com', 'evvurakhttndwspx'
|
193
|
+
email_property = [{'1AutoTest-固定B-营销-生产2.0-2025-04-24 10:19:47.341333-🔥🔥': {'activityId': 408764,
|
194
|
+
'utmConfigInfo': {
|
195
|
+
'utmSource': '1',
|
196
|
+
'utmMedium': '2',
|
197
|
+
'utmCampaign': '3'},
|
198
|
+
'receiveAddress': 'autotest-smartpushpro5@smartpush.com',
|
199
|
+
'sender': 'SmartPush_Pro5_ec2自动化店铺 AutoTestName',
|
200
|
+
'subtitle': 'AutoTest-2025-04-24 10:19:47.341333-subtitle-[[contact.name]]-🔥🔥'}},
|
201
|
+
{'AutoTest-固定B-营销-生产2.0-2025-04-24 10:19:59.023150-🔥🔥': {'activityId': 408765,
|
202
|
+
'utmConfigInfo': {'utmSource': '1',
|
203
|
+
'utmMedium': '2',
|
204
|
+
'utmCampaign': '3'},
|
205
|
+
'receiveAddress': '1autotest-smartpushpro5@smartpush.com',
|
206
|
+
'sender': 'SmartPush_Pro5_ec2自动化店铺 AutoTestName',
|
207
|
+
'subtitle': 'AutoTest-2025-04-24 10:19:59.023150-subtitle-[[contact.name]]-🔥🔥'}},
|
208
|
+
{'测试邮件-AutoTest_营销_生产2.0_2025_04_24 10:20:28.529290_🔥🔥-😈': {'activityId': None,
|
209
|
+
'utmConfigInfo': None,
|
210
|
+
'receiveAddress': 'autotest-smartpushpro5@smartpush.com',
|
211
|
+
'sender': '1SmartPush_Pro5_ec2自动化店铺 AutoTestName',
|
212
|
+
'subtitle': '营销测试邮件-2025-04-24 10:20:29.560357-😈'}}]
|
213
|
+
|
214
|
+
# result = EmailUtlis.check_email_content(emailProperty=email_property, loginEmail=loginEmail, password=password)
|
215
|
+
# print(result)
|
@@ -1,9 +1,12 @@
|
|
1
1
|
smartpush/__init__.py,sha256=XJrl1vhGATHSeSVqKmPXxYqxyseriUpvY5tLIXir3EE,24
|
2
2
|
smartpush/get_jira_info.py,sha256=OYaDV6VPAmkGKYLlRnsi1ZyKHU8xEiVnjsYrc41ZR0U,17910
|
3
|
+
smartpush/test.py,sha256=8HClfxYx4XhtMmKfnSMD6gI9DXSVuuWbSOtnkVvpgxg,36757
|
4
|
+
smartpush/account/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
|
+
smartpush/account/operate_account.py,sha256=nzJLLAEwNElavZeWVqnA_MSGTBzQrSrknmezYBwtvWs,1525
|
3
6
|
smartpush/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
7
|
smartpush/base/faker_data.py,sha256=TOd5EKVImxZpsKEW_dtKa2iqiUGqU7OBkOM8pvqKVUc,24643
|
5
|
-
smartpush/base/request_base.py,sha256=
|
6
|
-
smartpush/base/url_enum.py,sha256=
|
8
|
+
smartpush/base/request_base.py,sha256=JCkISn2mp_Aaugv_ZaNtFQrVaHtjQPxGgko6kCXOdlk,1848
|
9
|
+
smartpush/base/url_enum.py,sha256=_RcBMjDMWS_KOAK9T0HKG9msOWZLJGiKYKC4W5lOKjU,965
|
7
10
|
smartpush/export/__init__.py,sha256=D9GbWcmwnetEndFDty5XbVienFK1WjqV2yYcQp3CM84,99
|
8
11
|
smartpush/export/basic/ExcelExportChecker.py,sha256=3IAeu1kjFS4MpDxjVB1htAcRA1BtfpH3xEkZyP4htAA,19963
|
9
12
|
smartpush/export/basic/GetOssUrl.py,sha256=LeF1y1_uJaYXth1KvO6mEDS29ezb9tliBv5SrbqYkXc,6136
|
@@ -12,7 +15,7 @@ smartpush/export/basic/__init__.py,sha256=6tcrS-2NSlsJo-UwEsnGUmwCf7jgOsh_UEbM0F
|
|
12
15
|
smartpush/flow/MockFlow.py,sha256=MI8WIMZyKlxrV5QVs8rXX6iD07Ldl37_L5Yb5FWqHzU,8595
|
13
16
|
smartpush/flow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
14
17
|
smartpush/form/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
15
|
-
smartpush/form/form_after.py,sha256=
|
18
|
+
smartpush/form/form_after.py,sha256=3z3dO22_ncVsAA1w9zGAcfJZCOELZ2lVBmaV-RfD0Hc,6335
|
16
19
|
smartpush/form/form_assert.py,sha256=wPIRfQHhr7lN1fFd-mp0z_qKMtF4jfrNxRWvp2xfqCg,257
|
17
20
|
smartpush/form/form_before.py,sha256=CCvAC_2yWPlnQGtjEA8LPLy9853Nq3nNjcL2GewFWIs,175
|
18
21
|
smartpush/form/form_client_operation.py,sha256=gg-5uHXCyMa_ypBSYPYFVxXdwZdYBJsNtUCqayknMBw,303
|
@@ -22,7 +25,7 @@ smartpush/utils/ListDictUtils.py,sha256=Fm5_d7UyY6xB8gySMPdl5jIFSRhXZcYXdYW-_L1a
|
|
22
25
|
smartpush/utils/StringUtils.py,sha256=n8mo9k0JQN63MReImgv-66JxmmymOGknR8pH2fkQrAo,4139
|
23
26
|
smartpush/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
27
|
smartpush/utils/form_utils.py,sha256=ld-g_Dm_ZlnagQt7imYfUc87bcBRVlTctywuLtzmjXQ,849
|
25
|
-
smartpush-1.5.
|
26
|
-
smartpush-1.5.
|
27
|
-
smartpush-1.5.
|
28
|
-
smartpush-1.5.
|
28
|
+
smartpush-1.5.5.dist-info/METADATA,sha256=43TU4_gJxJUy8RtUELiVk41Ty-WODtIb5VaFWE0KYHg,131
|
29
|
+
smartpush-1.5.5.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
30
|
+
smartpush-1.5.5.dist-info/top_level.txt,sha256=5_CXqu08EfbPaKLjuSAOAqCmGU6shiatwDU_ViBGCmg,10
|
31
|
+
smartpush-1.5.5.dist-info/RECORD,,
|
File without changes
|