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

时间:2018-08-13 07:27:41

标签: salesforce twilio apex

我想从Twilio发送SMS,因为它们已经为Java,.Net,Node等构建了库,以便在掌握这些技术的情况下可以使用它们。

但是我想在Salesforce Apex中做同样的事情,并试图弄清楚如何构建Http参数来进行授权。

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

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

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);

回复说

  

错误请求:需要“发件人”电话号码。

1 个答案:

答案 0 :(得分:1)

电话号码不在标题中。

对于标题,您将需要

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

然后您将需要另一个标头进行授权

Authorization: auth-string

其中auth-string是字符串Basic后跟空格的组合,后跟空格,后跟twilio-account-sid:twilio-auth-token的base64编码(用冒号加入的Twilio凭据替换),因此标头将看起来像

Authorization: "Basic ABCiDEdmFGHmIJKjLMN2OPQwR2S3TUVzABliCDE3FGc1HIo2JKL2MjNwOPcxQRSwTUc1Vzc0XmYhZAB3CDElFGH1Jw=="

POST请求的body应该包含密钥,值对ToFromBody,类似于

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


希望对您有所帮助。