Power Automate DesktopからSMSを発信する

## 概要

Power Automate Desktopから「Twilio」APIを使ってSMSを発信します。少しまえ、パスワード付きzipファイル問題について考える機会がありました。オンプレミスから大量のファイル配信を想定し、DirectCloud-BOXへアップロード、期限設定、パスワード設定を行ったうえでリンク生成、メール送信するフローを作成しました。そのときメール配信と別経路でパスワード通知するプロセスは保留していました。そこでPCからのSMS配信について調べ、「Twilio」を試したのでレポートします。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/08e0a24c-f15c-d486-7355-efca11cd00b6.png)

https://qiita.com/sys_zero/items/7c199a31adb00978f5ea

## 環境

* Windows 10 Pro 21H1
* Power Automate Desktop 2.12.171.21216

## 注意事項等

* トライアルで送信できるSMSは認証済み番号のみです。
* 自己責任でお願いいたします。
* 2021年8月の情報です。

## Twilioについて

https://www.twilio.com/ja/

https://ja.wikipedia.org/wiki/Twilio

## アカウント作成

https://jp.twilio.com/docs/usage/tutorials/how-to-use-your-free-trial-account

ここを見ながら進めました。

https://www.twilio.com/ja/

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/4041a473-0555-5682-5ee8-af80c1bcb99f.png)

無料サインアップから進んで。必要情報を入力します。カード情報は必要ありません。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/f09f8e31-ffc9-4da8-756e-f5adc81a4fe7.png)

確認メールが届いたらクリックして認証します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/c9396716-3a6c-d942-e9a3-eff409b49aec.png)

次に電話番号での確認が必要です。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/6101660a-488d-f629-f8f0-6cc0a91dfe5c.png)

SMSが届くのでコードを入力しSubmitします。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/190f481e-ddaf-27d3-2c88-d64d943dc334.png)

アカウントが作成されるので試用したい製品を選んで進みます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/de72ac73-9e72-bd41-8973-01dee923edc6.png)

コンソールはこのような感じです。トライアルとして1715円分のクレジットが付与されます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/6948a3da-0f9d-8f93-c110-27d8644a36b5.png)

「設定 ＞ 一般」に移動し2段階認証を設定しました。設定画面に入るときにパスワードが要求されます。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/4a5e4bd7-b08d-5548-3ce7-9131973d3508.png)

今回はRequire Two-Factor Authentication (2FA)をコンピューター毎に設定しました。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/653ca5d2-29b3-30e1-75fe-ef02bfcba930.png)

電話番号を入力します。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/69d44d23-1037-a29c-59bc-2159adec50f5.png)

SMSで届いた認証コードを入力します。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/888b66a3-08e2-7b65-1b89-8571577af890.png)

万が一のときのためのリカバリーコードが表示されるので大切に保管します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/d9b02f4d-8b5e-ef86-0596-032b450b7b7d.png)

2段階認証を設定すると、ログインからやり直しになると思います。

コンソールのダッシュボードに戻ったらトライアル用の電話番を取得します。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/c50778be-2237-422b-36d2-0d2b8b60a89c.png)

表示された番号は米国の番号ですが、日本の番号にSMS送信を試すだけなので問題ありません。この番号を選択します。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/1aa0d65b-d462-c40f-4a0a-b04141497057.png)

電話番号が取得されます。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/26561609-db95-f838-d294-7d48a12f6d83.png)

アクティブな電話番号に表示されます。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/6b2e2f21-5a19-7d30-dbad-5f31ce35b0b6.png)

電話番号を取得するとトライアル用クレジットが111円減りました。今は月額111円で米国番号が取得できるようです。（レート次第）
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/a1eb8445-3cf2-7dcd-e038-2a2947b2576c.png)

「設定 ＞ 一般」からテスト用クレデンシャルを取得します。テスト用クレデンシャルは実際にSMS送信しませんがAPIを叩いたときのレスポンスが確認できるのでとりあえずこれをスクリプト確認用に使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/aa622046-a0bb-71d0-141d-98aa64e638af.png)

## PowerShellでテストしてみる

アカウント設定とクレデンシャルが取得できたのでPowerShellでテストクレデンシャルを使ってAPIを叩いてみました。Twilioはさまざまなプログラム言語のドキュメントが充実しています。読み進めるとPowerShellでREST APIリクエスト方法の記述があったので利用させていただきました。。

https://jp.twilio.com/docs/usage/tutorials/how-to-make-http-basic-request-twilio-powershell

送信先番号```$verified_number```と送信メッセージの```$body```は変数に置き換え、最後の2行はサンプルのままだとエラーが出ていたので少しだけさわりました。

```:PowerShell
# 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で記述して実行したときのターミナルの画面です）
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/58347388-9103-2d42-a7f6-b625aadc0d3f.png)

## Power Automate Desktopサンプルフロー

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/760d6f3d-4ae4-cbba-bcb9-2e0bdb1692a5.png)

1. ランダムテキストの生成
   パスワード文字列を作成します。
   ![2021-08-30-00-56-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/33edc6df-9954-e8a4-e30e-4e2df240642e.png)

2. 現在の日時を取得します
   ![2021-08-30-00-57-50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/0a5d5493-21a9-7b1a-d1b1-d60eb09f4d5a.png)

3. 加算する日時
   有効期限を設定します。今回は1日にしました。ファイルの有効期限を設定に同期させる予定です。
   ![2021-08-30-01-00-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/15412019-ef6d-50ea-1676-4c7a07e69059.png)

　
4. PowerShellスクリプトの実行
   ステータスコードを返すようにしました。成功は201です。スクリプトの内容は以下の通りです。ライブクレデンシャルを使います。

```ps1
# 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円減っていました。
![2021-08-30-01-15-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/c72ad0c1-844b-da78-266c-f46f410db798.png)

## まとめ

Power Automate DesktopからSMS送信できました。
Twilioはドキュメントが充実していました。
SMS以外も機能がいろいろあったので試してみようと思います。

API連携はおもしろい！

## 参考

https://jp.twilio.com/ja/docs

## 追記

Power Automate用コネクタが用意されていました。

![2021-08-30-01-26-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/36a3d5e5-c719-c80e-098a-2dca94783f55.png)

![2021-08-30-01-26-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/e54182e5-d554-26bf-da2c-a03457303e44.png)

発信先電話番号は+から記述する必要がありました。
![2021-08-30-01-27-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/f72f4474-6a99-0fb2-a095-ff41acd8bcce.png)