在JSON调用Twilio

时间:2015-11-17 18:12:47

标签: c# json rest twilio

我正在尝试使用HTTP上的JSON与Twilio API进行通信(我在asp.net vNext上运行 - 而且他们的C#库还不支持coreclr)

我有以下代码,但每次调用API时都会得到相同的400 - 错误的请求响应:

{"code": 21603, "message": "A 'From' phone number is required.", "more_info": "https://www.twilio.com/docs/errors/21603", "status": 400}

我正在使用以下代码设置请求并进行调用 - 身份验证成功,我收到上述错误:

var byteArray = Encoding.ASCII.GetBytes("{AccountSid}:{AuthToken}");

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));

var jsonStr = JsonConvert.SerializeObject(new {
    From = WebUtility.UrlEncode("+15005550003"), // A test number twilio supply
    To = WebUtility.UrlEncode("{my phone number}"),
    Body = WebUtility.UrlEncode("Hi there from a pure json rest client...")
});

var response = await client.PostAsync("https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/SMS/Messages.json", new StringContent(jsonStr));

3 个答案:

答案 0 :(得分:6)

在联系支持并与一位名叫约书亚的非常有帮助的人打交道后,我们已经弄明白了。

Twilio docs中,您可以使用带#34; messages.json"的网址。或" messages.xml" - 我认为这意味着:无论你使用哪个网址,信息(请求和响应)都必须遵循这种格式。

不幸的是,事实并非如此 - 所有对Twilio的请求都必须是Content-Type:application / x-www-form-urlencoded

e.g。为了= 0123456789&安培;从= 9876543210&安培;机体=您好

在C#(HttpClient)中的

看起来像:

_client.PostAsync(_url, new FormUrlEncodedContent(new Dictionary<string, string>(){
 { "To", "0123456789" }, 
 { "From", "9876543210" }, 
 { "Body", "Hi" } }));

答案 1 :(得分:0)

我是来自Twilio开发者社区团队的Megan。

看起来你正在使用的数字,“+ 15005550003”是Twilio的魔法输入数字之一,它实际上代表“To”字段,因此就是您收到的错误。根据您要测试的内容,您可以尝试传入“+15005550006”。

您可以详细了解每个魔术输入代表的内容in the docs here

希望这有帮助!

答案 2 :(得分:0)

如果使用允许您从多个电话号码发送的短信/短信服务,则会收到此错误,

然后替换

{ "From","<number>" }

{ "MessagingServiceSid","<sid>" }

可以在消息传递服务页面上找到SID https://www.twilio.com/console/sms/services