はじめに
rubyからAmazon SNSを利用して電話番号指定でSMSを送信する方法について調べたので備忘録として投稿させていただきます。
用途
- 特定の電話番号宛にSMSを1通送信する
- 複数の電話番号宛への同時送信は不要
準備
AWSコンソールでAccessKeyを払い出す。(だけ)
サンプル
コード
sms.rb
require 'aws-sdk'
def send_sms(tel:, msg:)
sns = Aws::SNS::Client.new()
sns.publish(phone_number: tel, message: msg)
end
send_sms(tel: '+81 xxxxxxxxxx',msg: "テスト")
補足
AccessKey/Regionはコード内に記述することも可能。
sns = Aws::SNS::Client.new(
access_key_id: 'xxxxx',
secret_access_key: 'xxxxx',
region: 'xxxxx'
)
メッセージ配信の信頼性を高くしたい場合は送信するメッセージのタイプにTransactionalを指定する。
# オプション:送信するメッセージのタイプに「Transactional」を指定
sns.set_sms_attributes({
attributes: {
"DefaultSMSType": "Transactional"
},
})
実行
# sws-sdkをインストール
$ gem install aws-sdk
# 環境変数でAccessKey/Regionを設定
$ export AWS_ACCESS_KEY_ID="xxxxx"
$ export AWS_SECRET_ACCESS_KEY="xxxxx"
$ export AWS_REGION="ap-northeast-1"
# サンプルコードを実行
$ ruby sms.rb
SMSの分割について
本文が長い場合にSMS内のテキストが何文字で分割されるか確認した。
調査環境
- 端末:iOS 11.4 iPhoneX
- キャリア:au
結果
1通のSMSに含められるテキストは、
- 半角:最大153文字
- 全角:最大67文字
送信したSMSの本文 | 受信したSMS |
---|---|
半角200文字 | 153/47文字の2通に分かれて受信した |
全角200文字 | 67/66/67文字の3通に分かれて受信した |