Marketo REST API 批量修改邮件内容

发布于:2024-12-19 ⋅ 阅读:(8) ⋅ 点赞:(0)

以下是更加细化的 使用 Marketo REST API 批量修改邮件内容 的步骤,详细解释每个阶段的操作,包括 API 的请求、数据处理及潜在问题解决。


前期准备工作

  1. 确保 Marketo API 访问权限

    • 你需要 Marketo REST API 用户API Role,有权限访问邮件资产(Assets)。
    • 获取 API 用户的 Client IDClient Secret
    • Marketo Endpoint URL:这个在 Marketo 后台的 Admin > Web Services 页面可以找到。
  2. 获取访问令牌(Access Token)
    要调用 Marketo API,首先需要获取一个 Access Token

    请求示例:

    POST https://<your-marketo-endpoint>/identity/oauth/token?grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET
    

    返回示例:

    {
      "access_token": "abc123xyz",
      "token_type": "bearer",
      "expires_in": 3600
    }
    

    保存:记录返回的 access_token,所有后续请求都要使用它。


步骤一:获取所有邮件的列表

API 端点

  • GET /rest/asset/v1/emails.json:获取所有邮件及其 id

请求示例

GET https://<your-marketo-endpoint>/rest/asset/v1/emails.json?access_token=YOUR_ACCESS_TOKEN

关键参数

  • access_token:认证用的访问令牌。
  • offset 和 maxReturn(可选):用于分页,maxReturn 最大为 200。

响应示例

{
  "success": true,
  "result": [
    {
      "id": 1234,
      "name": "Holiday Promo Email",
      "url": "https://app-xyz.marketo.com/#EM1234",
      "status": "approved"
    },
    {
      "id": 5678,
      "name": "Newsletter Q4",
      "url": "https://app-xyz.marketo.com/#EM5678",
      "status": "approved"
    }
  ]
}

记录结果

  • 邮件 ID (id):后续获取内容时需要用到。
  • 邮件名称 (name):方便管理和确认。

步骤二:逐个获取邮件的 HTML 内容

API 端点

  • GET /rest/asset/v1/email/{id}/content.json:获取指定邮件的内容。

请求示例

GET https://<your-marketo-endpoint>/rest/asset/v1/email/1234/content.json?access_token=YOUR_ACCESS_TOKEN

响应示例

{
  "success": true,
  "result": [
    {
      "type": "Text",
      "content": "<html><body>Click here: <a href='https://old-link.com'>Link</a></body></html>"
    }
  ]
}

保存内容

  • 解析返回的 HTML 内容,记录到本地文件或数据结构中。

步骤三:替换邮件 HTML 内容中的链接

使用脚本替换 HTML 中的旧链接为新链接,示例如下:

Python 替换脚本示例

import requests
import re

# API 基本信息
MARKETO_ENDPOINT = 'https://<your-marketo-endpoint>'
ACCESS_TOKEN = 'YOUR_ACCESS_TOKEN'
OLD_LINK = 'https://old-link.com'
NEW_LINK = 'https://new-link.com'

# 获取邮件列表
def get_emails():
    url = f"{MARKETO_ENDPOINT}/rest/asset/v1/emails.json?access_token={ACCESS_TOKEN}"
    response = requests.get(url)
    return response.json().get('result', [])

# 获取邮件内容
def get_email_content(email_id):
    url = f"{MARKETO_ENDPOINT}/rest/asset/v1/email/{email_id}/content.json?access_token={ACCESS_TOKEN}"
    response = requests.get(url)
    return response.json().get('result', [])[0]['content']

# 更新邮件内容
def update_email_content(email_id, updated_content):
    url = f"{MARKETO_ENDPOINT}/rest/asset/v1/email/{email_id}/content.json?access_token={ACCESS_TOKEN}"
    payload = {'content': updated_content}
    response = requests.post(url, json=payload)
    return response.json()

# 替换链接
def replace_links():
    emails = get_emails()
    for email in emails:
        email_id = email['id']
        print(f"Processing Email ID: {email_id}")
        
        # 获取当前内容
        content = get_email_content(email_id)
        
        # 替换旧链接
        updated_content = re.sub(OLD_LINK, NEW_LINK, content)
        
        # 更新邮件内容
        update_response = update_email_content(email_id, updated_content)
        print(f"Updated Email {email_id}: {update_response}")

# 执行替换
replace_links()

脚本执行流程:

  1. 获取邮件列表:调用 /emails.json 获取邮件 ID。
  2. 获取内容:逐一调用 /email/{id}/content.json 获取每封邮件的 HTML 内容。
  3. 替换链接:使用 re.sub 替换旧链接。
  4. 更新内容:调用 POST /email/{id}/content.json 上传新的 HTML 内容。
  5. 验证结果:检查 API 响应状态码,确保修改成功。

步骤四:批准修改后的邮件

更新邮件后,邮件会变为草稿状态,需要重新批准才能发送。

API 端点

  • POST /rest/asset/v1/email/{id}/approveDraft.json:批准邮件。

请求示例

POST https://<your-marketo-endpoint>/rest/asset/v1/email/1234/approveDraft.json?access_token=YOUR_ACCESS_TOKEN

响应示例

{
  "success": true,
  "result": [
    { "id": 1234, "status": "approved" }
  ]
}

步骤五:验证更新结果

  1. 手动检查部分邮件:随机抽取几封邮件,检查链接是否正确替换。
  2. 发送测试邮件:确保邮件的 HTML 和链接在实际发送时显示正确。
  3. API 验证:再次调用 /email/{id}/content.json 确认更新后的内容。

潜在问题与解决方案

  1. API 配额限制:Marketo 每日 API 调用次数有限,超出配额需等待重置。

    • 解决:分批执行脚本,避免短时间内触发配额限制。
  2. HTML 内容嵌套复杂:可能需要更复杂的正则表达式匹配。

    • 解决:使用 HTML 解析库如 BeautifulSoup 代替简单字符串替换。
  3. 邮件未批准:修改内容后未批准的邮件无法正常发送。

    • 解决:确保调用 approveDraft API。
  4. 旧链接遗漏:部分邮件可能含有不同格式或嵌套的链接。

    • 解决:测试替换逻辑,覆盖所有可能的链接结构。

这样,通过细化的步骤,你可以使用 Marketo REST API 批量获取邮件内容,替换旧链接并重新批准邮件,确保所有邮件更新完成。


网站公告

今日签到

点亮在社区的每一天
去签到