OutSystemsからTwilio APIを呼び出してSMSを送信
この記事はOutSystems Advent Calendar 2021、Twilioを使うためのコツ、TIPSなど、Twilioのことなら何でも共有しよう!のそれぞれ24日目です。23日目は@kata_junnさんのOutSystems が誘う Null がない世界の罠、@kimihomさんのTwilio 録音セキュリティの考察と実装でした。
はじめに
今回の記事ではOutSystemsからTwilioのAPIを呼び出してSMSを送信してみます。OutSystemsって何?TwilioでSMSを送信?という場合はこちらを
準備するもの
- OutSystemsアカウント
- Service Studio
- Twilioアカウント(作成方法)
- SMSを受信可能な携帯電話
Twilio APiを呼び出すために必要な情報を取得し、SMS送信可能な番号を取得する
この記事ではTwilioを使ってSMSを送信します。そのため、Twilio認証情報やTwilio番号の情報が必要になります。
Twilioの認証情報はコンソールから確認できます。それぞれ次の値を控えておきます。(Auth Tokenは初期状態で隠れているので念の為Showリンクをクリックし表示しましょう)
- Account SID
- Auth Token
どちらも重要な情報となるため取り扱いには注意します。
SMSを送信可能なTwilio番号をすでに保有している場合は同じ画面で確認できます。
もし、まだ購入していない場合は、こちらのハンズオンに沿ってSMS送信可能な伝番号を取得し、番号を控えておきます。その際、+
から始まるE.164フォーマット(例: +8190xxxxyyyy)で控えておきます。
Service Studioを起動し、アプリケーションを作成
インストールしたService Studioを起動しアカウントにログインすると下記の画面からアプリケーションの作成ができます。New Application
をクリックしまっさらな状態から作成するFrom screatch
を選択しました。アプリケーションの種類はReactive Web App
を選択しています。
アプリケーションの名前はズバリSendSMS
、何の捻りもありません。
次に提案通りSendSMS
モジュールを作成します。
Twilio APIと接続
最初にSMSを送信するMessage resourceAPIを接続します。[Logic]パネルの[Integrations] - [REST]のコンテキストメニューから[Consume REST API...]を選択します。
次にメソッドを追加する方法を選択できますが、TwilioではOpenAPI Specをベータ版として公開しています。
Add multiple methods
を選択するとこのOpenAPI Specを読み込んで追加できます。URLまたはファイルを指定するポップアップにtwilio_api_v2010.jsonを指定します。
メソッド選択画面に一覧が表示されます。今回は、CreateMessage
メソッドのみを選択しました。
メソッドで使用できるInput Parameter
が自動的に作成されますが、今回使用するものは、AccountSid
、Body
、From
、To
のみなのでほかのパラメータは削除しました。Output Parameter
はそのままにしておきます。
また、[Data]タブの[Structures]にも自動的にStructureが作成されます。不要なものについても削除しました。
最後に認証情報を設定します。TwilioApi
設定画面のUsername
とPassword
に先ほど確認したAccount SID
、Auth Token
を入力します。
送信画面を作成
今回はテストなので複雑な画面は作成しません。[Interface]タブを開き空のScreen
を追加します。送信先と送信内容、送信ボタン、リクエストの結果を表すUIを設定しました。
また、変数も次のように定義しました。
変数名 | 型 | 内容 |
---|---|---|
to |
text | 送信先の電話番号入力フィールドと接続 |
body |
text | 送信内容の入力フィールドと接続 |
response |
text | リクエスト結果を表すテキストエリアと接続 |
accountSid |
text | Twilioのアカウント情報、画面では入力しない |
from |
text | 送信元のTwilio番号、画面では入力しない |
accountSid
、from
のDefault Valueに先ほど確認したAccount SID
およびTwilio番号
を指定します
そして、ボタンをクリックした場合のClient ActionSms_OnClick
も定義してあります。
ボタンクリック時に呼び出すServer Actionを定義
画面のボタンをクリックした際にSMSを送信させます。Twilioが提供するAPIは基本的にサーバー側アプリケーションから利用することが多いので、Send_Sms
という名前がついたServer Actionを作成しました。
このSend_Sms
からTwilio APIを呼び出すために次のInput ParameterをServer Actionに追加します。
変数名 | 型 |
---|---|
accountSid |
text |
to |
text |
body |
text |
またAPIからのレスポンスを受け取るために次のOutput Parameterを追加します。
変数名 | 型 |
---|---|
response |
api_v2010_account_message |
このロジックでは先ほど作成したCreateMessage
を呼び出し、response
にCreateMessage.Response
に渡すようにしています。
Sms_OnClickからServer Actionを呼び出しレスポンスを画面側の変数に設定
Sms_OnClick
からSend_Sms
を呼び出します。呼び出し時には画面側の変数をそれぞれServer Actionに渡します。
また、Server Actionから出力された情報のうち、SMSの識別子を表すsid
を画面に渡しました。
SMSを送ってみる
アプリケーションをPublishし、テストメッセージを送信します。
携帯にはメッセージが来ました!
ただ、アプリケーション側ではレスポンスをうまくパースできていませんでした。
ちょっと原因がわからないので今回は問題が発生しているsubresource_uris
そのものを削除しました。
もう一度メッセージを送ってみると...
今度はエラーが出ずにメッセージSIDが表示されました。やったね!
まとめ・感想
OutSystemsを初めて使ったので基本的な内容になりましたが、Twilio認証情報や番号を固定ではなく、入力できるようにすると予約リマインダーや一斉メッセージ送信アプリケーションをすぐ作れそうだな、と感じました。
今後も試していきたいと思います。
25日目は@taiponrockさんの「外部APIからのデータをテーブルへ表示させる」です。
Discussion