Flow Designer での最初の Mule アプリケーションの作成:page-support-status: eolScheduled

あなたは Northern Trail Outfitters (NTO) 社で Salesforce Sales Cloud の接続担当リーダーを務めています。NTO はスタイリッシュで着心地のよい衣料品のほか、アウトドア用品やフィットネス用品を製造している会社です。

NTO は、Sales Cloud を利用してパイプラインの商談を追跡し、受注に結び付けています。商談が成立すると、営業担当者は注文管理システムで発注します。 また、顧客も NTO に対して頻繁に注文の状態を確認してきます。

NTO は MuleSoft を使用して、商談が成立した時点で自動的に発注し、SMS で顧客に注文の状況や商品の ETA (到着予定) などを知らせるためのプロセスを作成したいと考えています。

与えられた任務は、このプロセスを厳しいスケジュールで完成させることです。あなたは、NTO が使用する 4 つのシステムを統合する必要があると実感しています。

システム 目的

Salesforce Sales Cloud

商談の管理

MySQL データベース

製品情報と SKU の格納

NTO 注文システム

発注し、追跡情報と注文の ETA を返す。NTO Orders API で呼び出し可能。

Twilio

顧客への通知の送信

アプローチ

このプロセスを自動化するためには、統合に関するいくつかの課題を克服しなければなりません。この受注から回収までのサイクルを自動化するためには、以下の処理が必要になります。

  1. Salesforce は、商談が成立した時点でワークフローの自動化プロセスを開始します。このプロセスは、商談の状態が「成立」に移行した時点で Salesforce によってトリガーされます。

  2. プロセスは、製品データベースから適切な製品情報を取得します。

  3. プロセスが情報を入手すると、NTO Orders API によって発注をかけます。

  4. Orders API は、注文番号、追跡情報、そして配送の ETA を返します。

  5. API が返す情報は、人間が読める形式のテキストに変換され、SMS で顧客に送信されます。

このプロセスを図で表すと次のようになります。

salesforce to twilio flowchart

この計画を実現するために最適なツール、それが Flow Designer です!

始める前に

  • MuleSoft Anypoint Platform​ へのアクセス情報を持っていない場合は、30 日間の無料トライアルにサインアップします。

  • Salesforce の無料開発者アカウント​にサインアップします。このアカウントにはログイン情報とセキュリティトークンが必要です。

  • Twilio の無料開発者アカウント​にサインアップします。Twilio が新しいアカウント用に用意するトライアル電話番号が必要です。また、自分のアカウント SID と認証トークンも必要です。

成立した商談の取得

Salesforce で商談の状態が「成立」に移行した時点で、すぐにアプリケーションがトリガーされるようにする必要があります。そのためには、Salesforce で SOQL クエリを使用して、送信する項目とアプリケーションのトリガー条件を指定します。クエリを作成したら、MuleSoft アプリケーションのトリガーとして機能するプッシュトピックをセットアップできます。

  1. SOQL クエリビルダー​に移動します。(Salesforce ログイン情報でのログインが必要です。)

  2. [Opportunity (商談)]​ をオブジェクトとして選択します。

  3. [Fields (項目)]​ メニューから ​[Amount (金額)]​、​[CloseDate (成立日)]​、​[Id]​、および ​[Name (名前)]​ を選択します。

  4. [Filter results by (結果の絞り込み条件)]​ 項目に ​StageName = ‘Closed Won’​ を追加します。

  5. [Query (クエリ)]​ ボタンをクリックしてクエリをテストします。成立したすべての商談のリストが表示されたら成功です。クエリが次のようになっていることを確認してください。​SELECT Amount,CloseDate,Id,Name FROM Opportunity WHERE StageName = 'Closed Won'

    soql query screen 1
  6. クエリをクリップボードにコピーします。

  7. ワークベンチの一番上にある ​[Query (クエリ)]​ メニューから [Streaming Push topics (ストリーミングプッシュトピック)] ページに移動します。

  8. [Create New (新規作成)]​ オプションを選択して新しいプッシュトピックを作成します。

  9. プッシュトピックに ​ClosedOpps​ という名前を付けて、作成したクエリに貼り付けます。

  10. プッシュトピックを保存します。

    streaming push topics

これで、クエリ条件が成立する度に、Salesforce は ​ClosedOpps​ プッシュトピックにイベントをプッシュします。

Flow Designer でのプロジェクトの作成

Flow Designer を使用して、プロジェクトで Mule アプリケーションを作成します。1 つのプロジェクトには 1 つの Mule アプリケーションしか作成できません。

1 つの Mule アプリケーションは、1 つまたは複数の​フロー​で構成されます。MuleSoft が定義するフローとは、Mule Runtime Engine の高度なメッセージフロー機能を使用してサービスのオーケストレーションを実現するためのシンプルで柔軟なメカニズムであり、サービスオーケストレーションとも呼ばれます。Flow Designer に限って言えば、フローはコアコンポーネント (ループ、条件、変換など) やシステムおよび API へのコネクタ (Salesforce、SAP、Google Docs など) を表す一連の​カード​を意味します。カードには別の側面もありますが、このチュートリアルではこの 2 点だけを覚えておけば十分です。

データは、フローの先頭から末尾に向かって流れます。フローに沿って、カードはシステムの更新、システムに対するクエリの実行、メッセージの送信、データベース行の削除など、コアコンポーネントやコネクタが行えるあらゆる処理を実行します。

多くのコアコンポーネントやコネクタが用意されています。このチュートリアルでは以下を使用します。

  • Salesforce Connector

  • Set Variable コンポーネント

  • Choice router コンポーネント

  • Database Connector

  • Set Payload コンポーネント

  • Transform コンポーネント

  • Twilio Connector

このプロジェクトでは、フローを 1 つだけ作成します。

以下の手順でプロジェクトを作成します。

  1. Anypoint Platform にログインします。

  2. Design Center を開いて新しい Mule アプリケーションを作成します。

    1. [Projects (プロジェクト)]​ ページで、​[Create new (新規作成)]​ をクリックします。

    2. [New Mule App (新しい Mule アプリケーション)]​ を選択します。

    3. [New Mule App (新しい Mule アプリケーション)]​ ダイアログで、プロジェクトに「​Order-to-cash automation​」という名前を付けます。

    4. [Create App (アプリケーションを作成)]​ をクリックします。

  3. [Let’s Get Started (始めよう)]​ ウィザードで、左下隅にある ​Go straight to canvas​ のリンクをクリックします。

    結果:​ Flow Designer が開き、キャンバスの中央に空白のトリガーカードが表示されます。

    canvas empty trigger

フローのトリガーの設定

トリガーとは、Mule アプリケーションでフローを開始するイベントです。このプロジェクトでは、Salesforce Sales Cloud で商談の状態が ​Closed Won​ に変化するというイベントがトリガーとなります。上記の「成立した商談の取得」で作成した ​ClosedOpps​ トピックをサブスクライブしている Salesforce Connector を表すようにトリガーカードを設定します。

  1. トリガーカードをクリックします。

    結果:​ 使用できるコネクタのリストがカードに表示されます。

  2. [Search (検索)]​ 項目に「Salesforce」と入力します。

    結果:​ リストに Salesforce Connector が表示されます。

  3. Salesforce Connector を選択します。

    結果:​ Salesforce Connector で Mule アプリケーションをトリガーするために使用できる操作のリストが表示されます。

  4. Subscribe Topic​ 操作を選択します。

    結果:​ カードが開きます。左上隅に Salesforce Connector であることが表示されます。操作名 (Subscribe Topic) も表示されます。カードの一番上には「You need to set up the Salesforce configuration. Click here to set it up. (Salesforce 設定をセットアップする必要があります。ここをクリックしてセットアップしてください)」というメッセージが表示されます。

  5. Flow Designer での Salesforce への認証方法を指定します。

    1. メッセージ中のリンクテキストをクリックします。

    2. [Connection Type (接続種別)]​ 項目で ​[Basic Username Password (基本ユーザー名/パスワード)]​ を選択します。再利用可能な接続が使用できる場合、その 1 つを選択します。

    3. ユーザー名、パスワード、およびセキュリティトークンを指定します。

    4. [Test (テスト)]​ ボタンをクリックして、指定したログイン情報で Flow Designer が Salesforce に接続できることを確認します。接続できない場合は、ログイン情報とトークンを再確認してください。テストが成功したら設定内容を保存します。

  6. [Topic (トピック)]​ 項目に ​ClosedOpps​ と入力して、プッシュトピックをコネクタに追加します。カードの右上隅にある [X] をクリックするか、またはキャンバス上の空白スペースをクリックして、カードを閉じます。

Twilio 用のカードの設定

SMS で顧客に通知を送信しますので、Twilio Connector と Send Message 操作を使用します。

  1. Salesforce カードの右側にあるプラス記号をクリックします。

  2. Twilio Connector と ​Send Message​ 操作を選択します。

    結果:​ Twilio カードが開きます。カードの一番上には「You need to set up the Twilio Connector configuration. Click here to set it up. (Twilio Connector 設定をセットアップする必要があります。ここをクリックしてセットアップしてください)」というメッセージが表示されます。

  3. Flow Designer での Twilio への認証方法を指定します。

    1. メッセージ中のリンクテキストをクリックします。

    2. [Username (ユーザー名)]​ 項目で、Twilio 用のアカウント SID を指定します。​[Password (パスワード)]​ 項目で、Twilio 用の認証トークンを指定します。

      これらの項目で自分のユーザー名やパスワードを指定しないでください。指定した場合、アプリケーションでフローをトリガーしたときに Twilio カードからメッセージ ​HTTP POST on resource 'https://api.twilio.com:443/<Date>/Accounts/<account-SID>/Messages.json' failed: Timeout exceeded.​ が返されます。

    3. [Test (テスト)]​ ボタンをクリックして、指定したログイン情報で Flow Designer が Twilio に接続できることを確認します。接続できない場合は、ログイン情報とトークンを再確認してください。テストが成功したら設定内容を保存します。

  4. [Account SID (アカウント SID)]​ 項目に自分のアカウント SID をもう一度入力します。その後、カードを閉じます。

データ型の作成

NTO のシステムは、すべて異なるデータ形式を使用しています。作成中のフローでは、これらのシステム間でデータを受け渡す必要があるため、Flow Designer では、これらのデータ型の例を定義する必要があります。データ型のいくつかは再利用しますので、フロー内で必要とされるポイントではなく、プロジェクトレベルで作成できます。

Salesforce が送信するデータ型を作成する

  1. プロジェクトサイドバーで、[Data Types (データ型)] の見出しの横にあるプラス記号をクリックします。

    結果:​ [New Type (新しい型)] ダイアログが開きます。

  2. Salesforce の商談を表し、プッシュトピックの ​ClosedOpps​ がフローをトリガーするために送信するデータ型を作成します。

    1. データ型に「Salesforce Opportunity」という名前を付けます。

    2. 次の JSON を [Add your JSON example (JSON 例の追加)] 項目に貼り付けます。

      {
       "Amount": 15000,
       "Id": "0061U0000079dWXQAY",
       "CloseDate": "2019-01-25T00:00:00.000Z",
       "Name": "Dickenson Mobile Generators"
      }

      結果:​ ダイアログの右側のサイドバーで例の項目が自動的に解析されます。

  3. [Save (保存)]​ をクリックします。

Orders API との間でやり取りするデータ型の作成

同じ手順で、次の 2 つのデータ型を作成します。

名前: Order Information

プロセスは、この形式で Orders API にデータを送信します。 以下は [New Type (新しい型)] ダイアログで使用する例です。

{
       "OppId": "fsjf3439d993",
       "OrderAmount": 500000,
       "orderdate": "2018-11-13T11:15:45",
       "productInfo": {
           "productID": "CK111274",
           "category": "Small",
           "SKU": "CKS0",
           "productName": "Old School Classic Kicks",
           "inventory": 9999
       }
}

名前: Order Tracking

Orders API は、発注後に次の情報を返します。 以下は JSON 例です。

{
 "OrderID": 50122,
 "TrackingNo": "Z34342211",
 "ETA": "2018-11-13T11:15:45"
}

製品データベースに格納されるデータ型の作成

このデータ型に ​Product Information​ という名前を付けて、次の JSON 例を使用します。

[
 {
   "productID": "CK989603",
   "category": "Medium",
   "SKU": "CKS50",
   "productName": "Air Fly High Quality Sneakers",
   "inventory": 22333
 }
]

商談データの変数への保存

フローの下流では商談データを使用し、トリガーの後方にあるカードはそれぞれの出力を作成するため、すべての商談データを変数に保存する必要があります。

  1. Salesforce カードと Transform カードの間にある矢印にカーソルを置いて、矢印をプラス記号に変えます。プラス記号をクリックして、新しいコンポーネントを追加します。

  2. Set Variable コンポーネントを検索して選択します。

  3. 変数に ​OppDetails​ という名前を付けます。

  4. カードの右側にある項目リストで ​[Custom Expression (カスタム式)]​ をクリックし、​[Value (値)]​ 項目までドラッグします。

  5. 式ボックスの右側にある矢印をクリックして、​[EXPAND (展開)]​ をクリックします。

  6. [Custom Expression (カスタム式)] ダイアログの ​[Expression (式)]​ 項目に ​payload​ と入力します。

    式 ​payload​ は、Mule アプリケーションの 1 回のアクティベーション中に Set Variable カードに到達する入力全体を示します。カードの右側のペインに表示されているように、ペイロードはこの事例では 4 つのデータ要素で構成されています。式 ​payload​ ではなく、これらの 1 つ以上の要素を使用するように ​[Expression (式)]​ ボックスで指定できます。これらの要素をクリックしてボックスにドラッグできます。ただし、このチュートリアルでは、ペイロード全体を使用します。

    fd tutorial set var right pane
    Figure 1. Set Variable カードに到達するペイロードを構成する 4 つのデータ要素。
  7. [OK]​ をクリックして、カードを閉じます。

    フローが次のようになっていることを確認してください。

    flow with set variable card

取引規模に基づいた SKU の追加

NTO では、大企業、中小企業、小売業者と、顧客ごとに異なる SKU (ストックキーピングユニット) を使用しています。取引規模に基づいて、適切な製品情報を製品データベースから商談に追加する必要があります。製品カテゴリを下表に示します。

取引規模 (商談金額) 製品カテゴリ

$100,000 超

Enterprise (大企業)

$50,000 超

Small Business (中小企業)

$50,000 以下

Retail (小売業者)

Choice router コンポーネントと Database コンポーネントを併用することで、この分岐となる if-else ロジックを実現します。 たとえば、取引規模が $100,000 を超えている場合はプロセスが「大企業」製品カテゴリの SKU でデータベースを検索するように Choice router コンポーネントで指定できます。

Choice router コンポーネントは Mule Runtime の一部です。Mule Runtime には他にもいくつかのコンポーネントがあります。これらのコンポーネントは他のシステムには接続せず、フローのロジック作成を支援します。

  1. Choice router ブロック (Choice カードと、ルーティングオプションを指定する複数のサブカードで構成されます) をフローに追加します。

    1. Set Variable カードと Twilio カードの間にあるプラス記号をクリックします。

    2. Choice router を選択します。

      結果:​ Choice router ブロックがフローに表示されます。

      choice router card
  2. ルーティングオプションをセットアップします。

    1. 最初のサブカードをクリックして開きます。

    2. サブカードの右上隅にある 3 つのドットをクリックして ​[Add Below (下に追加)]​ を選択します。現在のサブカードが閉じて、その下に新しいサブカードが開きます。

    3. 最初のサブカードをクリックします。

    4. payload.Amount > 100000​ を ​[Expression (式)]​ 項目に貼り付けます。

    5. サブカードに ​Enterprise​ という名前を付けます。

    6. 2 番目のサブカードをクリックします。

    7. payload.Amount > 50000​ を ​[Expression (式)]​ 項目に貼り付けます。

    8. サブカードに ​Small Business​ という名前を付けます。

    結果:​ Choice router ブロックに、フローで必要な 3 つのルーティングオプションが表示されます。デフォルトのオプションは $50,000 以下の注文用であるため、小売業者の SKU で使用されます。フローは次のようになっています。

    +

    flow with choice
  3. 取引の規模が「大企業」か「中小企業」かに従って、製品データベースに対してクエリを実行します。

    1. Enterprise​ サブカードの横にあるプラスアイコンをクリックします。

    2. Database カードを追加して ​Select​ 操作を選択します。

    3. 次の情報でデータベースドライバーを設定します。

      • Connection Type (接続種別): MySQL Connection

      • Host (ホスト): ntoproducts.c3w6upfzlwwe.us-west-1.rds.amazonaws.com

      • Port (ポート): 3306

      • User (ユーザー): mulesoft

      • Password (パスワード): mulesoft

      • Database (データベース): nto_products

    4. 接続をテストして、成功したら ​[Save (保存)]​ をクリックします。

    5. 次のクエリを Database カードに追加します。

      select * from products where category = "Enterprise" and inventory > 1 limit 1
    6. Database カードを閉じます。

    7. Database カードを ​Small Business​ サブカードの後に追加して、​Select​ 操作を選択します。

      データベースドライバーを再び設定する必要はありません。その理由は、上の手順で設定したときに、Flow Designer で設定が保存されているからです。プロジェクトサイドバーの「Reusable Configurations (再利用可能な設定)」の下に「Database (データベース)」というエントリが確認できます。

    8. この Database カードに次のクエリを追加します。

      select * from products where category = "Small Business" and inventory > 1 limit 1
  4. 取引の規模が $50,000 以下の場合のデフォルトオプションをセットアップします。このケースでは、データベースに対してクエリを実行する必要はありません。

    1. Set Payload カードを Default サブカードの後に追加します。ここでは、Set Payload カードを使用して、Choice router ブロックでこのデフォルトオプションへのルートが選択された場合に、フローが必要な SKU と関連情報を単純に追加するようにします。

    2. 開いている Set Payload カードで ​[f(x)]​ ボタンをクリックして、​[Value (値)]​ 項目でスクリプトモードに入ります。

    3. 項目に次の JSON データを貼り付けます。

      [
       {
         "productID": "CK111274",
         "category": "Retail",
         "SKU": "CKS0",
         "productName": "Old School Classic Kicks",
         "inventory": 9999
       }
      ]

フローが次のようになっていることを確認してください。

flow with complete choice

情報を NTO Orders API に渡す前の形式の変更

この時点で、フローは Salesforce から商談の情報を、製品データベースから製品の情報を取得しています。この情報を利用して NTO Orders API で発注をかける前に、API が期待する形式にデータを書式設定する必要があります。

  1. Choice router ブロックの右側にあるプラス記号をクリックして Transform カードを追加します。

  2. [Input (入力)]​ ペインで入力データ型を指定します。

    1. payload​ の隣にある 3 つのドットをクリックします。

    2. [Set (設定)]​ を選択します。

    3. 以前に作成してある ​Product Information​ データ型を選択します。

    4. vars​ の下にある ​OppDetails​ の隣の 3 つのドットをクリックして、データ型を ​Salesforce Opportunity​ に設定します。

  3. [出力 (入力)]​ ペインで ​payload​ のデータ型を ​Order Information​ に設定します。

    結果:​ Transform カードは次のようになっています。

    transform first after input output
  4. 下表を参考にして、左側の要素を右側にドラッグアンドドロップします。

    左側の要素 右側の次の要素にマッピング

    productID

    productID

    category

    category

    SKU

    SKU

    productName

    productName

    inventory

    inventory

    Amount

    OrderAmount

    Id

    OppId

    CloseDate

    orderDate

Output media type differs from expected one​ (出力メディア型が予想と異なります) というメッセージが表示された場合は ​Fix it​ リンクをクリックして問題を解決してください。

形式の変更が終わると、Transform カードは次のようになります。

transform first final

カードが ​[Preview (プレビュー)]​ ペインに表示する JSON は、フローが発注時に NTO Orders API に送信する JSON の例です。

NTO Orders API を使用した発注

フローで発注をかける準備ができました。フローは、REST API である NTO Orders API を使用して POST 要求を送信することで発注をかけます。API は、要求に対して注文 ID、注文の追跡番号、そして ETA (顧客への到着予定日) の情報を返します。

  1. 今設定したばかりの Transform カードの右側に HTTP Request カードを追加します。

  2. カードで次の情報を設定します。

Twilio API 用のデータの送信

この時点で、NTO Orders API は、注文 ID、注文の追跡番号、および ETA の情報を返しています。最後のステップは、この情報を Twilio API に送信して、SMS 経由で顧客に伝達することです。Twilio がこの情報を受け取るためには、Twilio が必要とする形式にメッセージを書式設定する必要があります。

  1. Transform カードを Twilio カードの左側に追加します。

  2. [Input (入力)]​ セクションで 2 つのデータ型を設定します。

    1. payload​ のデータ型を ​Order Tracking​ に設定します。

    2. OppDetails​ のデータ型を ​Salesforce Opportunity​ に設定します。

  3. [出力 (入力)]​ セクションで次のステップを実行します。

    1. To​ 項目をダブルクリックして、先頭に国番号を付けた電話番号を入力します。(例: 米国の国番号は 1 ですので「12223334444」のように入力します。)

    2. From​ 項目をダブルクリックして、Twilio 開発者アカウントを開いたときに取得した無料電話番号を入力します。

  4. Transform カードの一番下にある ​[Script (スクリプト)]​ タブをクリックします。

  5. 項目をマップするのではなく、別の方法で変換を作成します。次の DataWeave スクリプトを、スクリーンショットに示されている ​[Transformation script (変換スクリプト)]​ パネル内の位置に貼り付けます。

    Body: "Order for " ++ vars.OppDetails.Name ++ " has been placed. Details:
    " ++ "OrderID: " ++ payload.OrderID as String ++ ", Tracking: " ++ payload.TrackingNo ++ ", ETA:" ++ payload.ETA as Date
    transform second script panel

    DataWeave スクリプトは、入力項目を出力項目にマップするための代替手段です。​[Mappings (マッピング)]​ タブをクリックして、スクリプトの指定によって項目がどのようにマップされているかを確認します。

    transform second mappings panel

結果:​ ​[Preview (プレビュー)]​ ペインは、Transform カードが Twilio カードに送信する JSON メッセージの例を表示します。

アプリケーションのテスト

いよいよ Mule アプリケーションをテストする準備ができました。その前に、フローにエラーがないことを確認しましょう。エラーが見つかった場合は、キャンバスの一番下にある ​[Problems (問題)]​ ペインを開いて説明を読みます。エラーをクリックすると、プロジェクト内の該当箇所に移動します。

エラーがなく、Flow Designer の右上隅にある ​[Run (実行)]​ ボタンが有効になっていたら、​[Run (実行)]​ ボタンをクリックしてアプリケーションを実行します。その後、次のステップを実行します。

  1. Salesforce カードで使用したログイン情報で Salesforce インスタンスにログインします。

  2. ブラウザーウィンドウの左上隅にあるアプリケーションスイッチャー (下図) から Sales アプリケーションを開きます。

    salesforce app switcher
  3. [商談]​ に移動し、ビューを ​[すべての商談]​ に変更します。

  4. Closed Won​ フェーズではない商談を探します。

  5. その商談を開いて編集し、​Stage​ の値を ​Closed Won​ に変更します。

  6. 金額を $100,000 より大きな値に変更して ​[保存]​ をクリックします。

  7. Flow Designer で Mule アプリケーションに戻ります。各カードに緑の線が表示されていれば、フローがトリガーされ、注文の詳細を示すテキストメッセージが携帯電話に送信されたことを意味します。

お疲れ様!

テキストメッセージを受信したら、オフィスの同僚の前でアプリケーションを何度も実行して見せて称賛の嵐を巻き起こしましょう。同僚からの称賛には謙虚に明るく応じて、Flow Designer の仕組みを説明してください。アプリケーションで使用するカードとは何か、コネクタとは、そしてコンポーネントとは何かを、指でフローを追いながらデータの流れと共に説明するのです。アプリケーションがデザイン環境の外でも利用できるようになったことを示せば、同僚はさらに褒めてくれるでしょう。

さて、いよいよ最後のステップに移ります。​Mule アプリケーションのデプロイ​です。このチュートリアルでは説明しませんが、リンクをクリックすれば必要なステップが表示されますので、Mule アプリケーションのデプロイが必要であれば行ってください。

このチュートリアルが非常に簡単で分かりやすい一方で、Flow Designer を現実のシナリオで役立てるのに十分な情報を提供できたことを祈るばかりです。では、フローデザインをお楽しみください!