亚马逊SNS与ruby,简单的短信息

时间:2016-07-14 14:33:37

标签: ruby amazon-sns

我正在尝试将一个简单的短信从ruby直接发送到使用SNS服务的电话号码。

require 'aws-sdk'
sns = Aws::SNS::Client.new(region: 'my_region', access_key_id: 'my_id', secret_access_key: 'mykey')
sns.publish({phone_number: 'my_number', message: 'test message'})

但我得到ArgumentError: unexpected value at params[:phone_number]

4 个答案:

答案 0 :(得分:12)

以下使用E.164格式的虚构英国手机号码的示例对我有用,您确定要将phone_number传递给字符串吗?

require 'aws-sdk'

sns = Aws::SNS::Client.new(...)
#=> #<Aws::SNS::Client>
sns.publish(phone_number: '+447911123456', message: 'test message')
#=> #<struct Aws::SNS::Types::PublishResponse...>

答案 1 :(得分:1)

使用 AWS 发送 SMS 的最简单方法(假设发件人号码是您在 AWS Pinpoint 中拥有的号码)。

    client = client = Aws::SNS::Client.new(
      region: ENV['AWS_SNS_REGION'],
      access_key_id: ENV['AWS_SNS_ACCESS_KEY'],
      secret_access_key: ENV['AWS_SNS_SECRET_KEY']
    )

    response = client.publish(
      phone_number: "+1<your phone>",
      message: "something something",
      message_attributes: {
        "AWS.SNS.SMS.SMSType" => {
          data_type: "String",
          string_value: "Promotional",
        },
        "AWS.MM.SMS.OriginationNumber" => {
          data_type: "String",
          string_value: "+1<AWS Pinpoint number>",
        },
      },
    )

答案 2 :(得分:0)

对于到达这里想知道如何用 ruby​​ 发送 SNS 消息的任何人,这里有一个最小的可重现示例(基于 docs):

# Create topic

require 'aws-sdk-sns'  # v2: require 'aws-sdk'
sns = Aws::SNS::Resource.new(region: 'us-west-2')
topic = sns.create_topic(name: 'MyOtherTopic')


# Subscribe to it

sub = topic.subscribe({
  protocol: 'email',
  endpoint: 'your.email@example.com'
})


# Check your inbox and confirm subscription! (otherwise messages won't go through)


# Publish a message to it
topic.publish({
  message: 'Here is a cool message!'
})

# Check your email inbox!

答案 3 :(得分:0)

如果有人寻求这个问题的答案:

您可以在 AWS SNS 中通过 2 种方式发送 SMS。

  1. 订阅在 AWS SNS 中创建的主题并向所有订阅的号码发送短信
  2. 直接向手机号码发送短信

你需要的是第二个。

我将在这里演示如何使用 Ruby 语言做到这一点。

安装 gem aws sns:

gem install aws-sdk-sns 
require 'aws-sdk-sns'

1.设置SNS客户端

@sns_client = Aws::SNS::Client.new(
  region: ENV['AWS_SNS_REGION'],
  access_key_id: ENV['AWS_SNS_ACCESS_KEY'],
  secret_access_key: ENV['AWS_SNS_SECRET_KEY']
)

2.设置SNS客户端属性

@sns_client.set_sms_attributes({
                                 attributes: {
                                   'DefaultSenderID' => SENDER_ID,
                                   'DefaultSMSType' => SMS_TYPE
                                 }
                               })

3.发布短信

@mobile_no = "+919888888888" # with country code

@sns_client.publish({
                      phone_number: @mobile_no,
                      message: MSG
                    })

就是这样!

MSG:“您的消息来了”

SMS_TYPE:“交易”或“促销”

如果您想发送 OTP/银行交易,则是“交易”。否则,如果您想发送一些产品的促销短信,那就是“促销”

SENDER_ID:如果您想使用自己的发件人 ID,则是您已经注册的发件人 ID。

如果您没有发件人 ID,请跳过第 2 步 - 设置 SNS 客户端属性

AWS_SNS_REGION、AWS_SNS_ACCESS_KEY、AWS_SNS_SECRET_KEY - 是您希望从中使用 SNS 的 AWS 账户的凭证。

请参阅此处的 AWS 文档: https://docs.aws.amazon.com/sns/latest/dg/sms_publish-to-phone.html 它还提供 Java 语言的代码。