AWS SNS - 无效参数 - 电话号码无法发布到。仅限特定电话号码

时间:2018-04-12 13:34:22

标签: node.js amazon-web-services typescript sms amazon-sns

我们正在使用AWS SNS发送短信。在测试中,它适用于除了我们的一个没有接收消息的开发人员之外的所有开发人员,日志显示以下内容:

Invalid parameter: PhoneNumber Reason: +1‬207XXXXXXX is not valid to publish to

我留下他的区号以防万一。同样,这是我们遇到的唯一问题,它是一部iPhone。它适用于我们尝试过的所有其他数字。我也可以通过AWS SNS控制台成功发送该号码,而不会出现问题。

我应该注意,我们只发送一个6个字符的字符串(2因子身份验证)。

我们是从Lambda做的。这是代码的相关部分:

export function sendSNS(PhoneNumber, Message) {
  return new Promise<boolean>((resolve, reject) => {
    const sns = new AWS.SNS({ region: 'us-east-1' })
    const params = {
      MessageStructure: 'String',
      Message,
      PhoneNumber
    }
    sns.setSMSAttributes({
      attributes: {
        DefaultSenderID: 'mycompany',
        DefaultSMSType: 'Transactional'
      }
    })

    sns.publish(params, function(err, data) {
      if (err) {
        console.log(err)
        reject(false)
      } else {
        console.log(`Sent this SMS via Amazon: ${Message} to ${PhoneNumber}`)
        console.log(data)
        resolve(true)
      }
    })
  })
}

2 个答案:

答案 0 :(得分:2)

我能够通过直接在MySQL数据库中手动更新用户的电话号码来解决这个问题。不确定它是否是字符编码问题或类似问题,但我认为它必须已经存在。如果我确定确切的原因,我会回复。

<强>更新: 这肯定是由编码问题引起的,将下面的代码粘贴到jsfiddle中,然后鼠标悬停以查看第一个加号上的警告:

This character may get silently deleted by one or more browsers

var x = '+1‬207XXXXXXX'
var y = '+1207XXXXXXX'

您还可以尝试删除/退回有问题字符串(var x)中的+1。一些奇怪的结果。

此数据最初是通过使用Chrome on Mac的Prisma Playground的GraphQL变异输入MySQL数据库的。

如果我将上面的两个字符串转换为十六进制来检查,你会发现它们确实不同:

2b31202c32303758585858585858(不好)

2b3132303758585858585858(好)

答案 1 :(得分:1)

还请注意,并非所有的AWS区域都支持发送SMS,并且您会看到相同的错误“ InvalidParameter:无效参数:PhoneNumber原因:+614 #####无效,无法发布” 将消息发送到不支持该消息的区域(在我的情况下为us-west-1)。

有关支持发送短信的区域列表,请参见the sns amazon docs on supported regions

信用给用户RichPeaua in this comment of the AWS forums