Twilio检查电话号码是否已被列入黑名单

时间:2014-08-12 00:35:06

标签: ruby-on-rails ruby twilio

我目前正在整合到twilio rest api中,需要对用户的电话号码进行检查,以确定该用户是否已将自己列入黑名单。我对这个api的经验很少,并且通过文档搜索并且google没有任何结果。

在我们的应用程序中,我们将有一个通知中心,如果用户已将自己列入黑名单,我不想让他们打开他们的短信通知。用户可能有SMS通知,但twilio会阻止任何消息。我知道当SMS排队时,有能力从twilio获取状态代码,显示用户被列入黑名单(https://www.twilio.com/docs/api/rest/message)。但是,我不会在通知屏幕上发送消息,并且需要直接(如果可能的话)检查twilio以确定某个号码是否被列入黑名单。任何帮助深表感谢。如果有更多信息会有帮助,请告诉我。

2 个答案:

答案 0 :(得分:10)

来自Twilio的梅根。

我很想知道你是否尝试过自己的解决方法。但我想在其他类似情况下注意如何抓住黑名单错误,然后用它做任何你想做的事情。

Ruby中,它看起来像这样:

require 'rubygems'
require 'twilio-ruby'

account_sid = 'YOUR_ACCOUNT_SID'
auth_token = 'YOUR_AUTH_TOKEN'

@client = Twilio::REST::Client.new account_sid, auth_token

begin
  @message = @client.messages.create(
    from: 'TWILIO_NUMBER',
    to: 'USER_NUMBER',
    body: 'Howdy!'
  )
rescue Twilio::REST::RestError => e
  if e.code == 21610
    # User is blacklisted
    # Store info however you choose
    puts e.message
  end
end

我们使用代码'21610'专门检查黑名单。有关错误的详细信息,请访问reference page

希望这有帮助!

答案 1 :(得分:0)

Twilio建议开发人员将退出/退出状态存储在自己的身边。我已经将其存储在数据库中。有两种收集未订阅用户列表的方法。

1)使用SMS Webhooks。您可以找到如何配置您的Twilio号码以接收Webhook事件here

@PostMapping(value = "/twilio", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE,
            produces = MediaType.APPLICATION_ATOM_XML_VALUE)
    public String twilioConsumer(TwilioEventDTO twilioEventDTO) {
// twilioEventDTO.getBody() => returns the body of the SMS user replied.
        twilioService.consume(twilioEventDTO);
        return new MessagingResponse.Builder().build().toXml();
    }

2)由于我后来实施了webhooks,因此必须收集已经取消订阅的用户。当您向已选择退出的号码发送短信时,Twilio API会引发状态数为21610的异常。您可以捕获它并将其存储在数据库中。

try {
            Message result = Message.creator(
                    new PhoneNumber(toPhoneNumber),
                    new PhoneNumber(fromPhoneNumber),
                    messageBody)
                    .create();

            response = result.getStatus().name();
        } catch (ApiException e) {
            if (e.getCode().equals(21610))
                updateSubscription(toPhoneNumber, false);
            logger.warn("Error on sending SMS: {}", e.getMessage());
        }

P.S .:用Java-Spring Boot框架编写的示例。