如何使用新的Twilio API检查邮件错误?

时间:2018-02-10 14:01:13

标签: c# twilio

我正在使用旧的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的状态和代码?

2 个答案:

答案 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}");
    }