外部テレフォニープロバイダー用のOkta Workflowを構成する
このOkta Workflowsユースケースは、「Workflowsのシステム制限」で説明されているイエローゾーンに該当します。このユースケースでは、システムの制限や他の警告に陥るリスクが高くなるため、アーキテクチャとベストプラクティスに十分な注意を払う必要があります。
Oktaでは、代わりにOkta APIを使用することを推奨します。開発者ドキュメント「テレフォニーインラインフックリファレンス」を参照してください。
このタスクでは、選択したテレフォニープロバイダーを通じてエンドユーザーにワンタイムパスコード(OTP)を送信するフローをOkta Workflowsに作成する方法について説明します。作成時のフローは次のようになります。
はじめに
-
テレフォニーのドキュメントを参照し、規制要件、有料詐欺、技術的考慮事項を理解します。
- Okta Workflowsをセットアップします。
- Okta orgからの接続をセットアップします。「Oktaコネクターを承認する」を参照してください。
- APIコネクター用の接続をセットアップします。「APIコネクターカードを使った認証」を参照してください。
- 選択したテレフォニープロバイダーをセットアップします。次の情報をメモします。
- アカウントSID
- Authトークン
- 電話番号
- POSTリクエストを送信するためのSMSメッセージURL。たとえば、Twilioの場合、URLはhttps://api.twilio.com/2010-04-01/Accounts/<yourtwilioaccountid>/Messages.jsonです。ここで<yourtwilioaccountid>はお使いのTwilioアカウントIDです。
フローを作成する
- Admin Consoleで に移動します。
- [Workflows console(Workflowsコンソール)]で をクリックします。
新しいフローにカードを追加できるようになります。
APIエンドポイントイベントカードを作成する
- [Add Event(イベントを追加)]をクリックします。APIエンドポイント用のOktaアプリを検索して選択します。
- [APIエンドポイント設定]ウィンドウで、[Security level(セキュリティレベル)]を[Secure with client token(クライアントトークンでセキュリティを確保)]に設定します。
- [Client token(クライアントトークン)]フィールドは空白のままにして[Close(閉じる)]をクリックします。
- [Body(本文)]セクションで、以下のフィールドを作成します。フィールドのドロップダウンをクリックしてフィールドのタイプを変更します。
フィールド | タイプ |
---|---|
データ | オブジェクト |
> userProfile | オブジェクト |
> > userId | テキスト |
> messageProfile | オブジェクト |
> > messageTemplate | テキスト |
> > phoneNumber | テキスト |
> > otp | テキスト |
requestType | テキスト |
Compose関数カードを作成する
- [Add function(関数を追加)]をクリックします。[Compose]関数カードを検索して選択します。
- このカードに次のテキストを入力します。To=phoneNumber&From=<yourphonenumber>&Body=messageTemplate
- [phoneNumber] と[messageTemplate]をマッピングします。これらのフィールドを[API Endpoint(APIエンドポイント)]イベントカードからドラッグアンドドロップします。
- <yourphonenumber>を自分の電話番号に置き換えます。これはテレフォニープロバイダーから取得した、国コードを含む番号です。
Construct関数カードを作成する
- [Add function(関数を追加)]をクリックします。[Construct]関数カード([Object type(オブジェクトタイプ)])を検索して選択します。
- このカードに、[Accept(承諾)]テキストフィールドと[Content-Type(コンテンツタイプ)]テキストフィールドを作成します。
- これらのフィールドに次の値を入力します。
- [Accept(承諾)]:application/json
- [Content-Type(コンテンツタイプ)]:application/x-www-form-urlencoded
If Error関数カードを作成します。
- [Add function(関数を追加)]をクリックします。[If Error]関数カードを検索して選択します。
- [If Error]関数カードが[Try]モードになっていることを確認します。
このカード内に次のカードを作成します。
APIコネクターカードを作成する
- [+(追加)]メニュー内で、雲アイコンをクリックします。[API Connector(APIコネクター)]カードを検索して選択します。
- [Post]タイプを選択します。
- [Post]カードに、テレフォニープロバイダーのSMSメッセージURLを入力します。
- [Output(出力)]フィールドを[Construct]関数カードから フィールドにドラッグアンドドロップします。
- [Output(出力)]フィールドを[Compose]関数カードから フィールドにドラッグアンドドロップします。
- [sid]テキストフィールドを作成します。 に、
成功用のCompose関数カードを作成する
- [Post]カードの横の[+(追加)]メニュー内で、計算機アイコンをクリックします。[Compose]関数カードを検索して選択します。
-
このカードに、次のコードを入力します。
コピー{
"commands":[
{
"type":"requestType",
"value":[
{
"status":"SUCCESSFUL",
"provider":"<YOURPROVIDER>",
"transactionId":"sid"
}
]
}
]
} - requestTypeをマッピングします。このフィールドを[API Endpoint(APIエンドポイント)]イベントカードからドラッグアンドドロップします。
- <YOURPROVIDER>をテレフォニープロバイダーの名前に置き換えます。
- [sid]フィールドを[Post]カードからドラッグアンドドロップします。
- [Output(出力)]フィールドのドロップダウンメニューをクリックし、名前を「Success(成功)」に変更します。
- [If Error]カードの[View outputs(出力を表示)]をクリックします。
- [Response(レスポンス)]という出力オブジェクトフィールドを作成します。
- [Response(レスポンス)]フィールドの下で、[Success(成功)]フィールドを[Compose]カードからドラッグアンドドロップします。
エラーフィールドを追加する
- [If Error]カードで、[Try]モードから[If Error]モードに切り替えます。
- [Error(エラー)]出力で、以下のフィールドを作成します。フィールドのドロップダウンをクリックしてフィールドのタイプを変更します。
フィールド | タイプ |
---|---|
本文 | オブジェクト |
> code | テキスト |
> status | テキスト |
> message | テキスト |
エラー用のCompose関数カードを作成する
- [Error(エラー)]出力フィールドの横の[+(追加)]メニュー内で、計算機アイコンをクリックします。[Compose]関数カードを検索して選択します。
-
このカードに、次のコードを入力します。
コピー{
"error":{
"errorSummary":"Failed to deliver SMS to phoneNumber",
"errorCauses":[
{
"errorSummary":"Couldn't deliver OTP",
"reason":"message"
}
]
}
} - [phoneNumber]フィールドを[API Endpoint(APIエンドポイント)]イベントカードからドラッグアンドドロップします。
- [message(メッセージ)]フィールドを[Error(エラー)]出力からドラッグアンドドロップします。
- [Output(出力)]フィールドのドロップダウンメニューをクリックし、名前を「Error(エラー)」に変更します。
- [If Error]カードの[Response(レスポンス)]セクションの下に[Error(エラー)]フィールドをドラッグアンドドロップします。
[If Error]モードのカードは次のようになります。
これで[If Error]関数カードが完成しました。
Return Rawカードを作成する
-
フローで、[Add function(関数を追加)]をクリックします。[Return Raw]関数カードを検索して選択します。
-
[Output(出力)]フィールドを[Construct]カードから[Headers(ヘッダー)]フィールドにドラッグアンドドロップします。
-
[If Error]カードの[Response(レスポンス)]フィールドを[Body(本文)]フィールドにドラッグアンドドロップします。
-
フローを保存してオンにします。
テレフォニーインラインフックの情報をコピーする
- [APPI Endpoint(APIエンドポイント)]イベントカードに移動し、[</>]アイコンをクリックしてAPIエンドポイント設定を開きます。
- 設定ダイアログから、[Invoke URL(呼び出しURL)]、[Alias(エイリアス)]、[Client Token(クライアントトークン)]の情報をコピーします。
この情報は、次の手順でテレフォニーインラインフックを作成するときに必要になります。