You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过API/SSJS/Ampscript在Cloud Page实现旅程详情查询功能?

实现Cloud Page获取旅程及关联邮件详情方案

方案概述

AMPScript对Journey Builder的原生支持有限,这也是你之前尝试失败的核心原因。推荐使用SSJS结合Marketing Cloud REST API实现需求——SSJS可在Cloud Page服务端直接调用API,完整获取旅程设置及关联邮件的全部信息。

核心实现步骤与代码示例

1. 从输入链接提取旅程ID

用户输入的旅程链接格式通常为 https://mc.s1.example.com/journey-builder/journeys/[旅程ID]/edit,先通过正则提取ID:

function extractJourneyId(url) {
  const regex = /journeys\/([a-f0-9-]+)/i;
  const match = url.match(regex);
  return match ? match[1] : null;
}

2. SSJS调用API获取旅程详情

使用Server-to-Server集成的认证信息调用API,获取旅程基础设置及关联邮件活动:

<script runat="server">
Platform.Load("Core", "1.1.1");

// 替换为你的Server-to-Server集成信息
const clientId = "YOUR_CLIENT_ID";
const clientSecret = "YOUR_CLIENT_SECRET";
const authEndpoint = "https://YOUR_SUBDOMAIN.auth.marketingcloudapis.com/v2/token";
const restEndpoint = "https://YOUR_SUBDOMAIN.rest.marketingcloudapis.com/interaction/v1/interactions/";

// 获取API访问令牌
function getAccessToken() {
  const payload = {
    grant_type: "client_credentials",
    client_id: clientId,
    client_secret: clientSecret,
    account_id: Platform.Function.GetSystemValue("MID")
  };
  const req = HTTP.Post(authEndpoint, "application/json", Stringify(payload));
  if (req.StatusCode === 200) {
    return ParseJSON(req.Response)[0].access_token;
  }
  throw new Error("获取访问令牌失败");
}

// 获取指定ID的旅程详情
function getJourneyDetails(journeyId) {
  const token = getAccessToken();
  const req = HTTP.Get(restEndpoint + journeyId, ["Authorization"], ["Bearer " + token]);
  if (req.StatusCode === 200) {
    return ParseJSON(req.Response)[0];
  }
  throw new Error("获取旅程详情失败");
}

// 提取旅程中的邮件活动信息
function extractEmailActivities(journey) {
  const emailActivities = [];
  if (journey?.activities) {
    journey.activities.forEach(activity => {
      if (activity.type === "EMAIL") {
        emailActivities.push({
          activityName: activity.name,
          subject: activity.args.subject,
          senderProfileId: activity.args.senderProfileId,
          deliveryProfileId: activity.args.deliveryProfileId
        });
      }
    });
  }
  return emailActivities;
}

// 处理表单提交
if (Request.Method === "POST") {
  const journeyUrl = Request.GetFormField("journeyUrl");
  const journeyId = extractJourneyId(journeyUrl);
  if (journeyId) {
    try {
      const journey = getJourneyDetails(journeyId);
      const emailActivities = extractEmailActivities(journey);
      Platform.Variable.SetValue("journey", journey);
      Platform.Variable.SetValue("emailActivities", emailActivities);
    } catch (e) {
      Platform.Variable.SetValue("error", e.message);
    }
  } else {
    Platform.Variable.SetValue("error", "无效的旅程链接");
  }
}
</script>

3. 前端表单与结果渲染

在Cloud Page中添加交互表单和结果展示区域:

<form method="post">
  <label>旅程链接:</label>
  <input type="text" name="journeyUrl" placeholder="输入激活/草稿状态的旅程链接" required>
  <button type="submit">获取详情</button>
</form>

%%[
var @error, @journey, @emailActivities
set @error = RequestParameter("error")
set @journey = RequestParameter("journey")
set @emailActivities = RequestParameter("emailActivities")
]%%

%%[ if not empty(@error) then ]%%
<div style="color: red;">%%=v(@error)=%%</div>
%%[ elseif not empty(@journey) then ]%%
<h3>旅程设置</h3>
<ul>
  <li>名称:%%=v(@journey.name)=%%</li>
  <li>状态:%%=v(@journey.status)=%%</li>
  <li>描述:%%=v(@journey.description)=%%</li>
</ul>

<h3>关联邮件列表</h3>
<table border="1" cellpadding="8">
  <tr>
    <th>邮件活动名称</th>
    <th>主题行</th>
    <th>发件人配置ID</th>
    <th>交付配置文件ID</th>
  </tr>
  %%[
  set @emailCount = RowCount(@emailActivities)
  for @i = 1 to @emailCount do
    set @email = Row(@emailActivities, @i)
  ]%%
  <tr>
    <td>%%=Field(@email, "activityName")=%%</td>
    <td>%%=Field(@email, "subject")=%%</td>
    <td>%%=Field(@email, "senderProfileId")=%%</td>
    <td>%%=Field(@email, "deliveryProfileId")=%%</td>
  </tr>
  %%[ next @i ]%%
</table>
%%[ endif ]%%

三种技术方案能力对比

技术方式能否获取完整旅程详情优势限制
AMPScript仅支持有限元数据查询(如数据视图Lookup),无法获取关联邮件配置语法简洁,适合基础数据渲染无直接调用Journey Builder API的能力,功能受限
SSJS结合API可获取全部详情支持服务端HTTP请求,无需处理跨域需要处理API认证逻辑,代码复杂度较高
REST API完全支持获取所有旅程及关联资源信息功能最全面,支持批量查询需通过SSJS在服务端调用,无法直接在前端使用

关键注意事项

  • 必须配置Server-to-Server集成,并赋予journey_read、email_read等API权限,确保数据访问权限正常。
  • 草稿状态的旅程可正常通过API获取,状态字段返回Draft。
  • 若需要展示发件人/交付配置文件的名称而非ID,可额外调用/messaging/v1/sender-profiles/[ID]和/messaging/v1/delivery-profiles/[ID]接口获取详细信息。

内容的提问来源于stack exchange,提问作者norrinradd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 22:45:28