AWS SNS - 无效参数 - Phone 号码无法发布到。仅限特定 phone 号码
AWS SNS - Invalid Parameter - Phone Number is not valid to publish to. On specific phone number only
我们正在使用 AWS SNS 发送 SMS 消息。在测试中,它适用于除一位未收到消息的开发人员以外的所有人,日志显示如下:
Invalid parameter: PhoneNumber Reason: +1207XXXXXXX 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)
}
})
})
}
我可以通过直接在我们的 MySQL 数据库中手动更新用户的 phone 号码来解决这个问题。不确定这是字符编码问题还是类似问题,但我假设一定是。如果我确定确切原因,我会 post 回来。
更新:
这肯定是由编码问题引起的,将下面的代码粘贴到 jsfiddle 中,然后将鼠标悬停在第一个加号上看到警告,上面写着:
This character may get silently deleted by one or more browsers
var x = '+1207XXXXXXX'
var y = '+1207XXXXXXX'
您也可以在有问题的字符串 (var x) 中尝试 deleting/backspacing +
或 1
。一些奇怪的结果。
此数据最初是在 Mac 上使用 Chrome 通过来自 Prisma Playground 的 GraphQL 突变输入到 MySQL 数据库中的。
如果我将上面的两个字符串都转换成十六进制来检查,你会发现它们确实不同:
2b31202c32303758585858585858
(差)
2b3132303758585858585858
(好)
另请注意,并非所有 AWS 区域都支持发送短信,当向不支持的区域发送消息时,您会看到同样的错误 "InvalidParameter: Invalid parameter: PhoneNumber Reason: +614##### is not valid to publish"它(在我的例子中是 us-west-1)。
有关支持发送 SMS 的区域列表,请参阅 the sns amazon docs on supported regions。
归功于用户 RichPeaua in this comment of the AWS forums。
我们正在使用 AWS SNS 发送 SMS 消息。在测试中,它适用于除一位未收到消息的开发人员以外的所有人,日志显示如下:
Invalid parameter: PhoneNumber Reason: +1207XXXXXXX 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)
}
})
})
}
我可以通过直接在我们的 MySQL 数据库中手动更新用户的 phone 号码来解决这个问题。不确定这是字符编码问题还是类似问题,但我假设一定是。如果我确定确切原因,我会 post 回来。
更新: 这肯定是由编码问题引起的,将下面的代码粘贴到 jsfiddle 中,然后将鼠标悬停在第一个加号上看到警告,上面写着:
This character may get silently deleted by one or more browsers
var x = '+1207XXXXXXX'
var y = '+1207XXXXXXX'
您也可以在有问题的字符串 (var x) 中尝试 deleting/backspacing +
或 1
。一些奇怪的结果。
此数据最初是在 Mac 上使用 Chrome 通过来自 Prisma Playground 的 GraphQL 突变输入到 MySQL 数据库中的。
如果我将上面的两个字符串都转换成十六进制来检查,你会发现它们确实不同:
2b31202c32303758585858585858
(差)
2b3132303758585858585858
(好)
另请注意,并非所有 AWS 区域都支持发送短信,当向不支持的区域发送消息时,您会看到同样的错误 "InvalidParameter: Invalid parameter: PhoneNumber Reason: +614##### is not valid to publish"它(在我的例子中是 us-west-1)。
有关支持发送 SMS 的区域列表,请参阅 the sns amazon docs on supported regions。
归功于用户 RichPeaua in this comment of the AWS forums。