概要
Power Automate Desktopから「Twilio」APIを使ってSMSを発信します。少しまえ、パスワード付きzipファイル問題について考える機会がありました。オンプレミスから大量のファイル配信を想定し、DirectCloud-BOXへアップロード、期限設定、パスワード設定を行ったうえでリンク生成、メール送信するフローを作成しました。そのときメール配信と別経路でパスワード通知するプロセスは保留していました。そこでPCからのSMS配信について調べ、「Twilio」を試したのでレポートします。
環境
- Windows 10 Pro 21H1
- Power Automate Desktop 2.12.171.21216
注意事項等
- トライアルで送信できるSMSは認証済み番号のみです。
- 自己責任でお願いいたします。
- 2021年8月の情報です。
Twilioについて
アカウント作成
ここを見ながら進めました。
無料サインアップから進んで。必要情報を入力します。カード情報は必要ありません。
確認メールが届いたらクリックして認証します。
SMSが届くのでコードを入力しSubmitします。
アカウントが作成されるので試用したい製品を選んで進みます。
コンソールはこのような感じです。トライアルとして1715円分のクレジットが付与されます。
「設定 > 一般」に移動し2段階認証を設定しました。設定画面に入るときにパスワードが要求されます。
今回はRequire Two-Factor Authentication (2FA)をコンピューター毎に設定しました。
万が一のときのためのリカバリーコードが表示されるので大切に保管します。
2段階認証を設定すると、ログインからやり直しになると思います。
コンソールのダッシュボードに戻ったらトライアル用の電話番を取得します。
表示された番号は米国の番号ですが、日本の番号にSMS送信を試すだけなので問題ありません。この番号を選択します。
電話番号を取得するとトライアル用クレジットが111円減りました。今は月額111円で米国番号が取得できるようです。(レート次第)
「設定 > 一般」からテスト用クレデンシャルを取得します。テスト用クレデンシャルは実際にSMS送信しませんがAPIを叩いたときのレスポンスが確認できるのでとりあえずこれをスクリプト確認用に使います。
PowerShellでテストしてみる
アカウント設定とクレデンシャルが取得できたのでPowerShellでテストクレデンシャルを使ってAPIを叩いてみました。Twilioはさまざまなプログラム言語のドキュメントが充実しています。読み進めるとPowerShellでREST APIリクエスト方法の記述があったので利用させていただきました。。
送信先番号$verified_number
と送信メッセージの$body
は変数に置き換え、最後の2行はサンプルのままだとエラーが出ていたので少しだけさわりました。
# Twilio account info and phone numbers.
$sid = "*************************"
$token = "****************************"
$phone_number = "15005550006"
$verified_number = "************"
$body="Use Test token Zerosys20210829"
# Twilio API endpoint and POST params
$url = "https://api.twilio.com/2010-04-01/Accounts/$sid/Messages.json"
$params = @{ To = $verified_number ; From = $phone_number ; Body = $body }
# Create a credential object for HTTP basic auth
$p = $token | ConvertTo-SecureString -asPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($sid, $p)
# Make API request, selecting JSON properties from response
$response = Invoke-WebRequest $url -Method Post -Credential $credential -Body $params -UseBasicParsing
ConvertFrom-Json $response.Content | Select-Object sid, body
テストクレデンシャルとFrom電話番号は15005550006、Toは自分の電話番号でテストしました。自分の番号は国番号81から記入します。バリデーションが通る番号15005550006以外にもさまざまなケースでテストできる番号が用意されています。
詳細はドキュメントを参照ください。
https://jp.twilio.com/docs/iam/test-credentials#test-sms-messages
テストが上手くいくとsidと送信予定のメッセージが表示されます。(VSCで記述して実行したときのターミナルの画面です)
Power Automate Desktopサンプルフロー
4. PowerShellスクリプトの実行
ステータスコードを返すようにしました。成功は201です。スクリプトの内容は以下の通りです。ライブクレデンシャルを使います。
# Twilio account info and phone numbers.
$sid = "********************************" #your sid
$token = "*******************************" #your token
$phone_number = "***********" #Twilioで取得した電話番号
$verified_number = "***********" #送信先:先頭の0を抜いて81を付けた自分の番号でテスト
$body="パスワードは%RandomText%です。有効期限は%ResultedDate%です。"
# Twilio API endpoint and POST params
$url = "https://api.twilio.com/2010-04-01/Accounts/$sid/Messages.json"
$params = @{ To = $verified_number ; From = $phone_number ; Body = $body }
# Create a credential object for HTTP basic auth
$p = $token | ConvertTo-SecureString -asPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($sid, $p)
# Make API request, selecting JSON properties from response
$response = Invoke-WebRequest $url -Method Post -Credential $credential -Body $params -UseBasicParsing
ConvertFrom-Json $response.StatusCode
試用してみたところSMS1通あたり表示では9円減っていました。
まとめ
Power Automate DesktopからSMS送信できました。
Twilioはドキュメントが充実していました。
SMS以外も機能がいろいろあったので試してみようと思います。
API連携はおもしろい!
参考
追記
Power Automate用コネクタが用意されていました。