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

标签 c# twilio twilio-api

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

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

最佳答案

更新: 我正在做 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);

关于c# - 通过 REST API 删除短信和语音的 Twilio 演示 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71623153/

相关文章:

c# - 订阅msmq

C#.NET 从 XML 属性中获取制表符

c# - asp.net:在 TreeView 上检查用户输入

javascript - Twilio 发送可选参数 TwiML JavaScript Ajax Phonegap

twilio - 如何处理 Twilio SMS StatusCallback URL 的身份验证

java - 如何生成哈希签名?

c# - 如何从字符串中去除非 ASCII 字符? (在 C# 中)

twilio - 如何在 twilio 通话中发送数字

twilio - Rocket.Chat 无法接收来自 Twilio 的短信。 (Twilio 的调试器 : HTTP retrieval failure)

java - Twilio 在 Whatsapp 中发送位置