如何在 Salesforce Apex 中通过 Web 服务发送 Twilio SMS

How to send Twilio SMS via Web Service in Salesforce Apex

我想从 Twilio 发送 SMS,注意到他们有为 Java、.Net、Node 等构建的库,以便我们在掌握这些技术时可以使用它们。

但我想从 Salesforce Apex 做同样的事情,并试图找出如何构建 Http 参数来进行授权。

我尝试使用 Twilio 文档中给出的 cURL 示例进行映射,但找不到 Auth 令牌的 header 键。

下面是我当前的代码,正在寻找如何设置身份验证参数。

req.setEndpoint(baseURL + '/2010-04-01/Accounts/account_sid/Messages.json');
req.setMethod('POST');                
req.setHeader('to', EncodingUtil.urlEncode('+to_number', 'UTF-8'));
req.setHeader('from', EncodingUtil.urlEncode('+from_number', 'UTF-8'));

Http ht = new Http();
HttpResponse res = ht.send(req);

更新请求:

Blob headerValue = Blob.valueOf('my-twilio-account-sid:my-twilio-auth-token');
String authorizationHeader = 'BASIC ' + EncodingUtil.base64Encode(headerValue);
req.setHeader('Authorization', authorizationHeader);
req.setHeader('Content-Type', 'application/x-www-form-urlencoded');
String body = EncodingUtil.urlEncode('From=+from_number&To=+to_number&Body=Sample text from twilio', 'UTF-8');
req.setBody(body);
Http ht = new Http();
HttpResponse res = ht.send(req);

回复说

Bad Request : A 'From' phone number is required.

phone 数字不在 header 中。

对于 header,您将需要

Content-Type: "application/x-www-form-urlencoded"

然后你需要另一个header授权

Authorization: auth-string

其中 auth-string 是字符串 Basic 后跟 space 后跟 twilio-account-sid:twilio-auth-token 的 base64 编码的组合(替换为您的 Twilio 凭据加入冒号)所以 header 看起来像

Authorization: "Basic ABCiDEdmFGHmIJKjLMN2OPQwR2S3TUVzABliCDE3FGc1HIo2JKL2MjNwOPcxQRSwTUc1Vzc0XmYhZAB3CDElFGH1Jw=="

POST 请求的 body 应该包含 ToFromBody 的键值对,例如

"From=" + twilio-phone-number + "&To=" + to-number + "&Body=" + message-body(替换为 phone 号码和消息的字符串值)。


希望对您有所帮助。