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>
在这种情况下,我将 accountSid
和 authToken
连接在一起,用“:”分隔,然后对结果进行 base 64 编码。然后我向 HTTP 请求添加了一个 Authorization
header 并将值设置为 Basic
加上 base64 编码的凭据。
我正在尝试使用 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>
在这种情况下,我将 accountSid
和 authToken
连接在一起,用“:”分隔,然后对结果进行 base 64 编码。然后我向 HTTP 请求添加了一个 Authorization
header 并将值设置为 Basic
加上 base64 编码的凭据。