twilio一个'来自'的电话号码是快速的

时间:2017-12-05 17:33:44

标签: ios twilio

我正在尝试从twilio服务获取短信,但不断收到此错误。

请求:

func SMSRequest(countryCode:String, phoneNumber: String) {
        let accountSid = "ACc4d9785419f144412823ff2034660c3d"
        let authToken = "a2293a42841f8999caa237er363" // changed

        let phoneNumber = "+14243960339"
        let toNumber = "+37378847884"

        let url = URL(string: "https://\(accountSid):\(authToken)@api.twilio.com/2010-04-01/Accounts/\(accountSid)/SMS/Messages")
        print("url", url!)


        let parameters = [
            "From": phoneNumber,
            "To": toNumber,
            "Body":"Hi daddy"
        ]

        Alamofire.request(url!, method: .post, parameters: parameters,
                          encoding: JSONEncoding.default, headers: [:]).responseJSON { response in
                            let response = String(describing: response.result.ifFailure({
                                print(response)
                                if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {print("Data: \(utf8Text)")}
                            }))


        }
    }

错误:

<TwilioResponse><RestException><Code>21603</Code><Message>A 'From' phone number is required.</Message><MoreInfo>https://www.twilio.com/docs/errors/21603</MoreInfo><Status>400</Status></RestException></TwilioResponse>

All the credentials I get from here

解决方案: 使用utf8编码。

2 个答案:

答案 0 :(得分:0)

Twilio开发者传道者在这里。

重要的是要注意,即使你已经解决了问题,你也在构建一个根本不安全的应用程序。我离开了this comment on your other question,但我也需要在这里指出。

我们不建议您直接从本机应用程序向Twilio API发出请求。为此,您需要在应用程序中的某个位置存储或检索您的帐户SID和身份验证令牌。如果您这样做,那么恶意攻击者可以访问您的凭据并滥用您的Twilio帐户。

这实际上称为Eavesdropper vulnerability and was written about earlier this year

相反,我们建议您创建一个Web应用程序并从那里发送API请求。有关如何在此处执行此操作的博文:https://www.twilio.com/blog/2016/11/how-to-send-an-sms-from-ios-in-swift.html

答案 1 :(得分:0)

Swift 4的更新-您实际上不需要指定编码,只需将其保留为默认设置即可。

关于Twilio的回答,他们不应说人们“不应”向其API发出请求,而应删除该功能本身并在其SDK上提供适当的身份验证服务。目前,这是我发现的最佳解决方案。

let accountSID = "BOB"
let authToken = "BOB'S PASSWORD"
let url = "https://api.twilio.com/2010-04-01/Accounts/\(accountSID)/Messages" as URLConvertible
let parameters = ["From": "SENDER", "To": "RECIPIENT", "Body": "Hello world!"]

Alamofire.request(url, method: .post, parameters: parameters)
    .authenticate(user: accountSID, password: authToken)
    .responseString { response in
        debugPrint(response)
    }