POST 使用 SSJS 从 Salesforce Marketing Cloud 云页面向 Twilio 发出请求

POST request from Salesforce Marketing Cloud cloudpage to Twilio using SSJS

我正在尝试使用 SSJS 从 Marketing Cloud 的云页面向 Twilio 的 SMS API 发送 POST 请求。即使我在 URL.

中添加了 ACCOUNT_SID 和 AUTH_TOKEN,我仍收到 401 未经授权的访问

<script type="text/javascript" runat="server">
      Platform.Load("core", "1");
  
  var config = {
        endpoint: "https://XXXX:XXXX@api.twilio.com/2010-04-01/Accounts/XXXX/Messages.json",
        contentType: "application/x-www-form-urlencoded",
       payload : "From=+0000&To=+0000&Body=Test1"
    }
  try {
        var httpResult = HTTP.Post(config.endpoint, config.contentType, config.payload);
            var result = JSON.parse(httpResult.response);
    Write(httpResult.StatusCode);
         Write('result' + result);
  } catch(error) { Write(Stringify(error)); }
  </script>

我收到这个错误: {"message":"尝试评估 HTTPPost 函数调用时发生错误。有关详细信息,请参阅内部异常。","description":"ExactTarget.OMM.FunctionExecutionException: 尝试评估 HTTPPost 函数调用时发生错误。请参阅有关详细信息的内部异常。\r\n 错误代码:OMM_FUNC_EXEC_ERROR\r\n - 来自 Jint --> \r\n\r\n --- 内部异常 1---\r\n\r\nSystem.Net.WebException:远程服务器返回错误:(401) 未经授权。- 来自系统\r\n\r\n\r\n\r\n” }

我试过使用客户端JavaScript,但我得到了同样的错误。

<script>

const url = 'https://XXXX:XXXX@api.twilio.com/2010-04-01/Accounts/XXXX/Messages.json';
  
  var xhr = new XMLHttpRequest();
xhr.open("POST", url);

xhr.setRequestHeader("Accept", "application/x-www-form-urlencoded");
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  
 var data = 'From=+0000&To=+0000&Body=Test1';

xhr.send(data);
 
</script>

这里是 Twilio 开发人员布道者。

我不熟悉 SSJS,我发现很难连接 the documentation(?) with what you've written. If this documentation 指的是您正在使用的相同 HTTP.Post 方法,然后尝试这样的事情:

<script type="text/javascript" runat="server">
  Platform.Load("core", "1");
  
  var accountSid = YOUR_ACCOUNT_SID;
  var authToken  = YOUR_AUTH_TOKEN;
  var auth = btoa(accountSid + ":" + authToken);

  var config = {
    endpoint: "https://api.twilio.com/2010-04-01/Accounts/XXXX/Messages.json",
    contentType: "application/x-www-form-urlencoded",
    payload : "From=+0000&To=+0000&Body=Test1"
  };

  try {
    var httpResult = HTTP.Post(
      config.endpoint,
      config.contentType,
      config.payload,
      ["Authorization"],
      ["Basic " + auth]
    );
      
    var result = JSON.parse(httpResult.response);
    Write(httpResult.StatusCode);
    Write('result' + result);
  } catch(error) {
    Write(Stringify(error));
  }
</script>

在这种情况下,我将 accountSidauthToken 连接在一起,用“:”分隔,然后对结果进行 base 64 编码。然后我向 HTTP 请求添加了一个 Authorization header 并将值设置为 Basic 加上 base64 编码的凭据。