外部テレフォニープロバイダー用のOkta Workflowを構成する

このOkta Workflowsユースケースは、「Workflowsのシステム制限」で説明されているイエローゾーンに該当します。このユースケースでは、システムの制限や他の警告に陥るリスクが高くなるため、アーキテクチャとベストプラクティスに十分な注意を払う必要があります。

Oktaでは、代わりにOkta APIを使用することを推奨します。開発者ドキュメント「テレフォニーインラインフックリファレンス」を参照してください。

このタスクでは、選択したテレフォニープロバイダーを通じてエンドユーザーにワンタイムパスコード(OTP)を送信するフローをOkta Workflowsに作成する方法について説明します。作成時のフローは次のようになります。

はじめに

  • テレフォニーのドキュメントを参照し、規制要件、有料詐欺、技術的考慮事項を理解します。

  • Okta Workflowsをセットアップします。
  • 選択したテレフォニープロバイダーをセットアップします。次の情報をメモします。
    • アカウントSID
    • Authトークン
    • 電話番号
    • POSTリクエストを送信するためのSMSメッセージURL。たとえば、Twilioの場合、URLはhttps://api.twilio.com/2010-04-01/Accounts/<yourtwilioaccountid>/Messages.jsonです。ここで<yourtwilioaccountid>はお使いのTwilioアカウントIDです。

フローを作成する

  1. Admin Console[Workflow][Workflows console(Workflowsコンソール)]に移動します。
  2. [Workflows console(Workflowsコンソール)][Flows(フロー)][New Flow(新規フロー)]をクリックします。

新しいフローにカードを追加できるようになります。

APIエンドポイントイベントカードを作成する

  1. [Add Event(イベントを追加)]をクリックします。APIエンドポイント用のOktaアプリを検索して選択します。
  2. [APIエンドポイント設定]ウィンドウで、[Security level(セキュリティレベル)][Secure with client token(クライアントトークンでセキュリティを確保)]に設定します。
  3. [Client token(クライアントトークン)]フィールドは空白のままにして[Close(閉じる)]をクリックします。
  4. [Body(本文)]セクションで、以下のフィールドを作成します。フィールドのドロップダウンをクリックしてフィールドのタイプを変更します。
フィールド タイプ
データ オブジェクト
> userProfile オブジェクト
> > userId テキスト
> messageProfile オブジェクト
> > messageTemplate テキスト
> > phoneNumber テキスト
> > otp テキスト
requestType テキスト

Compose関数カードを作成する

  1. [Add function(関数を追加)]をクリックします。[Compose]関数カードを検索して選択します。
  2. このカードに次のテキストを入力します。To=phoneNumber&From=<yourphonenumber>&Body=messageTemplate
  3. [phoneNumber] [messageTemplate]をマッピングします。これらのフィールドを[API Endpoint(APIエンドポイント)]イベントカードからドラッグアンドドロップします。
  4. <yourphonenumber>を自分の電話番号に置き換えます。これはテレフォニープロバイダーから取得した、国コードを含む番号です。

Construct関数カードを作成する

  1. [Add function(関数を追加)]をクリックします。[Construct]関数カード([Object type(オブジェクトタイプ)])を検索して選択します。
  2. このカードに、[Accept(承諾)]テキストフィールドと[Content-Type(コンテンツタイプ)]テキストフィールドを作成します。
  3. これらのフィールドに次の値を入力します。
    • [Accept(承諾)]application/json
    • [Content-Type(コンテンツタイプ)]application/x-www-form-urlencoded

If Error関数カードを作成します。

  1. [Add function(関数を追加)]をクリックします。[If Error]関数カードを検索して選択します。
  2. [If Error]関数カードが[Try]モードになっていることを確認します。

このカード内に次のカードを作成します。

APIコネクターカードを作成する

  1. [+(追加)]メニュー内で、雲アイコンをクリックします。[API Connector(APIコネクター)]カードを検索して選択します。
  2. [Post]タイプを選択します。
  3. [Post]カードに、テレフォニープロバイダーのSMSメッセージURLを入力します。
  4. [Output(出力)]フィールドを[Construct]関数カードから[Request(リクエスト) Headers(ヘッダー)]フィールドにドラッグアンドドロップします。
  5. [Output(出力)]フィールドを[Compose]関数カードから[Request(リクエスト) Body(本文)]フィールドにドラッグアンドドロップします。
  6. [Request(リクエスト) Body(本文)]に、[sid]テキストフィールドを作成します。

成功用のCompose関数カードを作成する

  1. [Post]カードの横の[+(追加)]メニュー内で、計算機アイコンをクリックします。[Compose]関数カードを検索して選択します。
  2. このカードに、次のコードを入力します。

    コピー
    {
    "commands":[
    {
    "type":"requestType",
    "value":[
    {
    "status":"SUCCESSFUL",
    "provider":"<YOURPROVIDER>",
    "transactionId":"sid"
    }
    ]
    }
    ]
    }
  3. requestTypeをマッピングします。このフィールドを[API Endpoint(APIエンドポイント)]イベントカードからドラッグアンドドロップします。
  4. <YOURPROVIDER>をテレフォニープロバイダーの名前に置き換えます。
  5. [sid]フィールドを[Post]カードからドラッグアンドドロップします。
  6. [Output(出力)]フィールドのドロップダウンメニューをクリックし、名前を「Success(成功)」に変更します。
  7. [If Error]カードの[View outputs(出力を表示)]をクリックします。
  8. [Response(レスポンス)]という出力オブジェクトフィールドを作成します。
  9. [Response(レスポンス)]フィールドの下で、[Success(成功)]フィールドを[Compose]カードからドラッグアンドドロップします。

エラーフィールドを追加する

  1. [If Error]カードで、[Try]モードから[If Error]モードに切り替えます。
  2. [Error(エラー)]出力で、以下のフィールドを作成します。フィールドのドロップダウンをクリックしてフィールドのタイプを変更します。
フィールド タイプ
本文 オブジェクト
> code テキスト
> status テキスト
> message テキスト

エラー用のCompose関数カードを作成する

  1. [Error(エラー)]出力フィールドの横の[+(追加)]メニュー内で、計算機アイコンをクリックします。[Compose]関数カードを検索して選択します。
  2. このカードに、次のコードを入力します。

    コピー
    {
    "error":{
    "errorSummary":"Failed to deliver SMS to phoneNumber",
    "errorCauses":[
    {
    "errorSummary":"Couldn't deliver OTP",
    "reason":"message"
    }
    ]
    }
    }
  3. [phoneNumber]フィールドを[API Endpoint(APIエンドポイント)]イベントカードからドラッグアンドドロップします。
  4. [message(メッセージ)]フィールドを[Error(エラー)]出力からドラッグアンドドロップします。
  5. [Output(出力)]フィールドのドロップダウンメニューをクリックし、名前を「Error(エラー)」に変更します。
  6. [If Error]カードの[Response(レスポンス)]セクションの下に[Error(エラー)]フィールドをドラッグアンドドロップします。

[If Error]モードのカードは次のようになります。

これで[If Error]関数カードが完成しました。

Return Rawカードを作成する

  1. フローで、[Add function(関数を追加)]をクリックします。[Return Raw]関数カードを検索して選択します。

  2. [Output(出力)]フィールドを[Construct]カードから[Headers(ヘッダー)]フィールドにドラッグアンドドロップします。

  3. [If Error]カードの[Response(レスポンス)]フィールドを[Body(本文)]フィールドにドラッグアンドドロップします。

  4. フローを保存してオンにします。

テレフォニーインラインフックの情報をコピーする

  1. [APPI Endpoint(APIエンドポイント)]イベントカードに移動し、[</>]アイコンをクリックしてAPIエンドポイント設定を開きます。
  2. 設定ダイアログから、[Invoke URL(呼び出しURL)][Alias(エイリアス)][Client Token(クライアントトークン)]の情報をコピーします。

この情報は、次の手順でテレフォニーインラインフックを作成するときに必要になります。

次の手順

外部のテレフォニーサービスプロバイダーに連絡する