通过 REST API 删除短信和语音的 Twilio 演示 URL

发布于 2025-01-16 22:57:03 字数 232 浏览 2 评论 0原文

我正在尝试弄清楚如何[更新] IncomingPhoneNumber 以删除购买电话号码时为语音和短信设置的“演示”Url。

例如,我的 VoiceUrl 在 Twilio UI 控制台中设置为“https://demo.twilio.com/welcome/voice/”。我知道我可以从控制台中删除它,但我希望有一种方法可以从 REST 服务(例如通过 IncomingPhoneNumberResource.Update)设置它?

I'm trying to figure out how I can [update] the IncomingPhoneNumber to remove the 'Demo' Url set for Voice and Sms when a phone number is purchased.

For example my VoiceUrl is set to "https://demo.twilio.com/welcome/voice/" in the Twilio UI console. I know I can just remove it from the console but I am hoping there is a way that I can set it from a REST Service such as through the IncomingPhoneNumberResource.Update?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

他夏了夏天 2025-01-23 22:57:03

更新
我正在做 PR 来改善这种体验,并偶然发现了库中已有的解决方案。
有一个类型 Twilio.Types.EmptyUri 继承自 System.Uri

当您传递该类型的实例来更新电话号码上的 URL 时,它将清空/使 URL 字段为空。

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;

var app = Host.CreateDefaultBuilder(args).Build();

var configuration = app.Services.GetRequiredService<IConfiguration>();
var twilioAccountSid = configuration["TwilioAccountSid"];
var twilioAuthToken = configuration["TwilioAuthToken"];

TwilioClient.Init(twilioAccountSid, twilioAuthToken);

var phoneNumber = (await IncomingPhoneNumberResource.ReadAsync(
    phoneNumber: new PhoneNumber(configuration["TwilioPhoneNumber"]),
    limit: 1
)).Single();

await IncomingPhoneNumberResource.UpdateAsync(
    phoneNumber.Sid,
    voiceUrl: new EmptyUri(), 
    smsUrl: new EmptyUri() 
);

旧答案

您可能已经注意到,您无法使用 IncomingPhoneNumberResource.Update 方法删除 URL。
Twilio .NET 库中 voiceUrlsmsUrl 的默认值为 null,因此如果您显式传入 null code>,库不会知道差异并忽略它。

幸运的是,REST API 非常直观,因此您可以编写自己的代码来进行 REST API 调用,或者使用 Twilio .NET 库附带的 RestClient

以下是不起作用的 IncomingPhoneNumberResource.Update 和使用 RestClient 起作用的代码的示例。

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Twilio;
using Twilio.Http;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;

var app = Host.CreateDefaultBuilder(args).Build();

var configuration = app.Services.GetRequiredService<IConfiguration>();
var twilioAccountSid = configuration["TwilioAccountSid"];
var twilioAuthToken = configuration["TwilioAuthToken"];

TwilioClient.Init(twilioAccountSid, twilioAuthToken);

var phoneNumber = (await IncomingPhoneNumberResource.ReadAsync(
    phoneNumber: new PhoneNumber(configuration["TwilioPhoneNumber"]),
    limit: 1
)).Single();

// DOES NOT WORK, but wish it did
// this API call goes through, but does not empty the voiceUrl or smsUrl
await IncomingPhoneNumberResource.UpdateAsync(
    phoneNumber.Sid,
    voiceUrl: null, // new Uri("") throws an exception
    smsUrl: null // new Uri("") throws an exception
);

// this does work!
var request = new Request(
    method: Twilio.Http.HttpMethod.Post,
    url: $"https://api.twilio.com/2010-04-01/Accounts/{twilioAccountSid}/IncomingPhoneNumbers/{phoneNumber.Sid}.json"
);
request.AddPostParam("VoiceUrl", null);
request.AddPostParam("SmsUrl", null);
await TwilioClient.GetRestClient().RequestAsync(request);

Update:
I was working on a PR to make this experience better and stumbled on a solution that's already in the library.
There's a type Twilio.Types.EmptyUri which inherits from System.Uri.

When you pass an instance of the type to update URLs on a phone number, it'll empty/null the URL field.

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Twilio;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;

var app = Host.CreateDefaultBuilder(args).Build();

var configuration = app.Services.GetRequiredService<IConfiguration>();
var twilioAccountSid = configuration["TwilioAccountSid"];
var twilioAuthToken = configuration["TwilioAuthToken"];

TwilioClient.Init(twilioAccountSid, twilioAuthToken);

var phoneNumber = (await IncomingPhoneNumberResource.ReadAsync(
    phoneNumber: new PhoneNumber(configuration["TwilioPhoneNumber"]),
    limit: 1
)).Single();

await IncomingPhoneNumberResource.UpdateAsync(
    phoneNumber.Sid,
    voiceUrl: new EmptyUri(), 
    smsUrl: new EmptyUri() 
);

Old answer:

As you may have noticed, you cannot remove the URL using the IncomingPhoneNumberResource.Update method.
The default value of the voiceUrl and smsUrl in the Twilio .NET library is null, so if you explicitly pass in null, the library won't know the difference and ignore it.

Luckily, the REST API is quite intuitive, so you can write your own code to make REST API calls, or use the RestClient that comes with the Twilio .NET library.

Here's an example of both the IncomingPhoneNumberResource.Update that doesn't work, and the code that does work using the RestClient.

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Twilio;
using Twilio.Http;
using Twilio.Rest.Api.V2010.Account;
using Twilio.Types;

var app = Host.CreateDefaultBuilder(args).Build();

var configuration = app.Services.GetRequiredService<IConfiguration>();
var twilioAccountSid = configuration["TwilioAccountSid"];
var twilioAuthToken = configuration["TwilioAuthToken"];

TwilioClient.Init(twilioAccountSid, twilioAuthToken);

var phoneNumber = (await IncomingPhoneNumberResource.ReadAsync(
    phoneNumber: new PhoneNumber(configuration["TwilioPhoneNumber"]),
    limit: 1
)).Single();

// DOES NOT WORK, but wish it did
// this API call goes through, but does not empty the voiceUrl or smsUrl
await IncomingPhoneNumberResource.UpdateAsync(
    phoneNumber.Sid,
    voiceUrl: null, // new Uri("") throws an exception
    smsUrl: null // new Uri("") throws an exception
);

// this does work!
var request = new Request(
    method: Twilio.Http.HttpMethod.Post,
    url: 
quot;https://api.twilio.com/2010-04-01/Accounts/{twilioAccountSid}/IncomingPhoneNumbers/{phoneNumber.Sid}.json"
);
request.AddPostParam("VoiceUrl", null);
request.AddPostParam("SmsUrl", null);
await TwilioClient.GetRestClient().RequestAsync(request);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文