我正在使用旧的Twilio C#API将一些代码升级到新的API,我现在无法弄清楚在发送消息后你是如何检查错误的。我能看到的所有例子都没有错误检查。所以旧代码是这样的:
var attemptWithAlphanumericId = client.SendMessage(fromName, to, message);
if (attemptWithAlphanumericId.RestException == null)
{
return !string.Equals(attemptWithAlphanumericId.Status, "failed", StringComparison.OrdinalIgnoreCase);
}
if (attemptWithAlphanumericId.RestException.Status == "400"
&& attemptWithAlphanumericId.RestException.Code == "21212")
{
var attemptWithFallbackNumber = client.SendMessage(fallbackNumber, to, message);
if (attemptWithFallbackNumber.RestException == null)
{
return !string.Equals(attemptWithFallbackNumber.Status, "failed", StringComparison.OrdinalIgnoreCase);
}
throw new InvalidOperationException(attemptWithFallbackNumber.RestException.Message);
}
throw new InvalidOperationException(attemptWithAlphanumericId.RestException.Message);
但是我已经开始使用新的API样式:
var twilioResponseMessage = MessageResource.Create(
to: new PhoneNumber(to),
from: new PhoneNumber(_from),
body: message
);
...响应消息对象上没有RestException
属性。我打算如何检查RestException
的状态和代码?
答案 0 :(得分:1)
Twilio开发者传道者在这里。
我担心发送短信时没有关于捕捉错误的具体文档。我可以试着举个例子(我不是真正的C#开发者,但如果我错了,我打赌Devin可以纠正我)。它应该看起来像这样:
try {
var twilioResponseMessage = MessageResource.Create(
to: new PhoneNumber(to),
from: new PhoneNumber(_from),
body: message
);
catch (TwilioException e) {
Response.Write(string.Format($"Error: {e.Message}"));
}
在the quickstart guide to making phone calls with C#中有一个API调用和捕获错误的示例。
让我知道这是否有帮助。
修改强>
阅读完评论后,我意识到还有更多内容!
您的原始代码正在尝试使用字母数字ID发送消息,如果失败,则回退到常规号码。实际上有更好的方法可以在Twilio中使用Messaging Services来实现这一目标。
Messaging Services汇总了一系列围绕号码池的功能,用于发送短信。在您的情况下,可以使用alpha发件人ID和回退号设置邮件服务。然后,当您use the service to send an SMS时,它会首先尝试使用alpha发件人ID并回退到您的号码,就像您当前的代码一样。这可以消除应用程序中的一级捕获错误,并将该逻辑留给消息传递服务。您的代码只需要处理与API联系时的错误。
这是你如何做到的。
在Twilio控制台中创建消息服务。将您的后备号码添加到号码池中。 Add an alphanumeric sender ID to the copilot features。获取消息传递服务sid并在以下代码中使用它:
try {
var message = MessageResource.Create(
to: new PhoneNumber(to),
messagingServiceSid: "YOUR_MESSAGING_SERVICE_SID",
body: message
);
return !string.Equals(message.Status, "failed", StringComparison.OrdinalIgnoreCase);
catch (TwilioException e) {
throw new InvalidOperationException(e.Message);
}
我相信使用这样的消息服务,并以这种方式处理异常将复制您已经拥有的行为,将alpha发送者/后备数字逻辑保留给Twilio并让您更新库。
答案 1 :(得分:0)
这是来自 twilio 开发站点的示例:https://www.twilio.com/docs/libraries/csharp-dotnet/usage-guide#handling-errors
{
var message = MessageResource.Create(
body: "This is the ship that made the Kessel Run in fourteen parsecs?",
from: new Twilio.Types.PhoneNumber("+15017122661"),
to: new Twilio.Types.PhoneNumber("+15558675310")
);
Console.WriteLine(message.Sid);
}
catch (ApiException e)
{
Console.WriteLine(e.Message);
Console.WriteLine($"Twilio Error {e.Code} - {e.MoreInfo}");
}