📚

OutSystemsからTwilio APIを呼び出してSMSを送信

2021/12/24に公開

この記事はOutSystems Advent Calendar 2021Twilioを使うためのコツ、TIPSなど、Twilioのことなら何でも共有しよう!のそれぞれ24日目です。23日目は@kata_junnさんのOutSystems が誘う Null がない世界の罠@kimihomさんのTwilio 録音セキュリティの考察と実装でした。

はじめに

今回の記事ではOutSystemsからTwilioのAPIを呼び出してSMSを送信してみます。OutSystemsって何?TwilioでSMSを送信?という場合はこちらを

準備するもの

Twilio APiを呼び出すために必要な情報を取得し、SMS送信可能な番号を取得する

この記事ではTwilioを使ってSMSを送信します。そのため、Twilio認証情報やTwilio番号の情報が必要になります。

Twilioの認証情報はコンソールから確認できます。それぞれ次の値を控えておきます。(Auth Tokenは初期状態で隠れているので念の為Showリンクをクリックし表示しましょう)

  • Account SID
  • Auth Token

Twilioコンソール

どちらも重要な情報となるため取り扱いには注意します。

SMSを送信可能なTwilio番号をすでに保有している場合は同じ画面で確認できます。

もし、まだ購入していない場合は、こちらのハンズオンに沿ってSMS送信可能な伝番号を取得し、番号を控えておきます。その際、+から始まるE.164フォーマット(例: +8190xxxxyyyy)で控えておきます。

Service Studioを起動し、アプリケーションを作成

インストールしたService Studioを起動しアカウントにログインすると下記の画面からアプリケーションの作成ができます。New Applicationをクリックしまっさらな状態から作成するFrom screatchを選択しました。アプリケーションの種類はReactive Web Appを選択しています。

Service Studio

アプリケーションの名前はズバリSendSMS、何の捻りもありません。

Service Studio - App Name

次に提案通りSendSMSモジュールを作成します。

SendSMSモジュール

Twilio APIと接続

最初にSMSを送信するMessage resourceAPIを接続します。[Logic]パネルの[Integrations] - [REST]のコンテキストメニューから[Consume REST API...]を選択します。

REST APIに接続

次にメソッドを追加する方法を選択できますが、TwilioではOpenAPI Specをベータ版として公開しています。

Add multiple methodsを選択するとこのOpenAPI Specを読み込んで追加できます。URLまたはファイルを指定するポップアップにtwilio_api_v2010.jsonを指定します。

Twilio OpenAPI Spec

メソッド選択画面に一覧が表示されます。今回は、CreateMessageメソッドのみを選択しました。

REST APIメソッド選択画面

メソッドで使用できるInput Parameterが自動的に作成されますが、今回使用するものは、AccountSidBodyFromToのみなのでほかのパラメータは削除しました。Output Parameterはそのままにしておきます。

パラメータを変更

また、[Data]タブの[Structures]にも自動的にStructureが作成されます。不要なものについても削除しました。

Structure

最後に認証情報を設定します。TwilioApi設定画面のUsernamePasswordに先ほど確認したAccount SIDAuth Tokenを入力します。

認証情報を設定

送信画面を作成

今回はテストなので複雑な画面は作成しません。[Interface]タブを開き空のScreenを追加します。送信先と送信内容、送信ボタン、リクエストの結果を表すUIを設定しました。

インターフェース

また、変数も次のように定義しました。

変数名 内容
to text 送信先の電話番号入力フィールドと接続
body text 送信内容の入力フィールドと接続
response text リクエスト結果を表すテキストエリアと接続
accountSid text Twilioのアカウント情報、画面では入力しない
from text 送信元のTwilio番号、画面では入力しない

accountSidfromのDefault Valueに先ほど確認したAccount SIDおよびTwilio番号を指定します

Account SID

Twilio Number

そして、ボタンをクリックした場合の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を呼び出し、responseCreateMessage.Responseに渡すようにしています。

フロー

CreateMessage

Assign

Sms_OnClickからServer Actionを呼び出しレスポンスを画面側の変数に設定

Sms_OnClickからSend_Smsを呼び出します。呼び出し時には画面側の変数をそれぞれServer Actionに渡します。

サーバーアクションを呼び出し

設定

また、Server Actionから出力された情報のうち、SMSの識別子を表すsidを画面に渡しました。

レスポンス

SMSを送ってみる

アプリケーションをPublishし、テストメッセージを送信します。

携帯にはメッセージが来ました!

sms送信テスト

ただ、アプリケーション側ではレスポンスをうまくパースできていませんでした。

エラー

ちょっと原因がわからないので今回は問題が発生しているsubresource_urisそのものを削除しました。

エラーの元になっている値を削除

もう一度メッセージを送ってみると...

結果

今度はエラーが出ずにメッセージSIDが表示されました。やったね!

まとめ・感想

OutSystemsを初めて使ったので基本的な内容になりましたが、Twilio認証情報や番号を固定ではなく、入力できるようにすると予約リマインダーや一斉メッセージ送信アプリケーションをすぐ作れそうだな、と感じました。

今後も試していきたいと思います。

25日目は@taiponrockさんの「外部APIからのデータをテーブルへ表示させる」です。

Discussion