16通知

この章の内容は次のとおりです。

通知は営業担当やマネージャなどのユーザーに対するアラートで、アカウントなどのビジネス・オブジェクトに対するイベントについて通知し、必要な処理を実行できるようにします。通知の有効化は、グローバル設定および機能のオプトイン・ステップです。アカウント、担当者、リード、商談などのCX営業オブジェクトの通知を生成、構成および有効化できます。

構成に応じて、アプリケーションではレコードが更新されるとユーザーに通知を送信します。通知を構成する場合は、誰がいつ通知を受信するかを決定します。

この章を使用して、次のタスクを実行します。

  • 営業の通知の有効化

  • 営業の通知スクリプトの定義

  • 営業の通知プリファレンスの設定

  • Groovyプロンプトのデバッグ

  • プッシュ通知の構成

この表は、タスク、ナビゲータ・パスおよび詳細を取得できるこの章のトピックを示しています。

ステップ 説明 ナビゲーション 詳細情報の参照先

1

営業オブジェクトの通知を有効にします。

設定と保守

営業の通知の有効化

2

通知を構成するタスクの概要を把握します。

「アプリケーション・コンポーザ」→「標準オブジェクト」→「サーバー・スクリプト」

通知スクリプトおよびプリファレンスの設定の概要

3

アプリケーション・コンポーザを使用してGroovyスクリプトを定義します。

「アプリケーション・コンポーザ」→「標準オブジェクト」→目的のオブジェクトを展開→「サーバー・スクリプト」をクリック

営業の通知スクリプトの定義

4

通知ルールを構成します。

「ツール」→「通知プリファレンス」

営業の通知プリファレンスの設定

5

ランタイム・ログを表示し、Groovyスクリプトをデバッグします。

「アプリケーション・コンポーザ」→「オブジェクト」を展開して「共通設定」→「ランタイム・メッセージ」

Groovyプロンプトのデバッグ

6

モバイル・デバイスに通知をプッシュします。

設定と保守

プッシュ通知の構成

営業の通知の有効化

通知ごとに満たす必要がある条件を使用し、アプリケーション・コンポーザでGroovyスクリプトを使用して通知を定義および生成します。営業担当が所有するアカウントに通知が作成される場合、通知受信者を指定できます。

たとえば、サンプルのGroovyスクリプトを参照して、営業担当に対する次の場合の通知を定義およびアクティブ化できます。

  • アカウント・チームに追加された場合。

  • アカウントの所有者として指定された場合。

  • 所有するアカウントが削除された場合。

  • 営業オブジェクトがアカウントに割り当てられた場合。

注意: 営業の通知を有効にする前に、通知が全般的に有効になっていることを確認します。ステップは、「関連トピック」の項でリンクされている、通知の有効化および無効化に関するトピックを参照してください。アプリケーションを更新した場合は、必ず、これらの設定に戻って再度確認してください。

通知はキューに配置されますが、所有者を変更することによって、手動でキューにレコードを追加できます。または、特定の基準に基づいて通知をキューに追加できます。たとえば、ルールまたは条件を使用し、特定のレコード基準に基づいてリードをキューに追加できます。レコードは、所有者に割り当てられるまでキューに残ります。

通知を有効にする方法を次に示します。

  1. 設定ユーザーとしてサイン・インします。

  2. 「設定と保守」で、次の場所に移動します。

    • オファリング: 販売

    • 機能領域: 販売基盤

  3. 「販売基盤」行のドロップダウン・ボタンをクリックします。

  4. メニューの「機能選択の変更」をクリックします。「機能の編集: 販売基盤」ページが表示されます。

  5. 設定する通知関連機能の「使用可能」チェック・ボックスを選択します。これにより、営業オブジェクトの通知が有効になります。

    注意: このオプトインは、特定のオブジェクト用ではなく、ベル通知などの選択したチャネルまたは通信パス用です。
  6. 「完了」をクリックします。

通知スクリプトおよびプリファレンスの設定の概要

営業の通知機能を有効にした後、通知を構成します。

全体的なステップを次に示します。

  1. アプリケーション・コンポーザでGroovyスクリプトとして通知プロンプトを定義します。このスクリプトには、通知ごとに満たす必要がある条件が含まれます。通知は、定義した条件が満たされたときに送信されます。たとえば、営業オブジェクトがアカウントに割り当てられたときに通知を送信できます。

    通知プロンプトの定義の詳細は、この章の「営業の通知スクリプトの定義」のトピックを参照してください。

  2. 「通知プリファレンス」ページを使用して通知プリファレンスを構成します。たとえば、SmartTextを使用して通知メッセージを構成し、通知受信者を指定します。

    通知プリファレンスの詳細は、この章の「営業の通知プリファレンスの設定」のトピックを参照してください。

営業の通知スクリプトの定義

通知プロンプトのGroovyスクリプトを定義する方法を次に示します。

  1. アクティブなサンドボックスで作業していることを確認します。

  2. 「ナビゲータ」 「構成」 「アプリケーション・コンポーザ」をクリックします。

  3. ナビゲーション・ツリーで「標準オブジェクト」を展開し、目的のオブジェクトを展開して、「サーバー・スクリプト」をクリックします。たとえば、「標準オブジェクト」→「アカウント」→「サーバー・スクリプト」などです。

  4. 「サーバー・スクリプト」ページの「トリガー」タブをクリックします。

  5. 「処理」メニューから「追加」をクリックします。

  6. トリガー・オブジェクトの作成ページで、Groovyトリガーを作成します。

    1. 「トリガー」フィールドでトリガー・タイプを選択します。

      「データベースへの変更のポストの後」トリガー・タイプを使用することをお薦めします。このトリガー・タイプを使用すると、Groovyスクリプトが誤って無期限に実行されるように記述されている場合に、潜在的な問題を防止できます。トリガー・タイプが「データベースでの更新の前」に設定されているとき、スクリプトが不正な場合は、エラーが表示されることがあります。

      新しいオブジェクトを作成しているときに、オブジェクトの作成時に通知をトリガーする必要がある場合は、「データベースでの挿入の前」トリガー・タイプを使用することをお薦めします。ただし、前トリガー・タイプの中には、まだすべての属性が公開されていないものがあるため、一部のフィールドが空白になります。予期した結果が得られない場合にトリガーをデバッグするには、この章の「Groovyスクリプトのデバッグ」のトピックのステップに従います。

    2. トリガーの名前を入力します。

    3. トリガー定義の詳細を入力します。Groovyスクリプトを作成する場合は、アクセスしようとしているフィールドのAPI名が必要です。次のステップに従って、親/子フィールドに基づいてトリガーを作成します。

      1. トリガー定義セクションで、式パレットの表示/非表示をクリックします。

      2. 「フィールド」タブをクリックします。

      3. オブジェクトを選択します。

      4. 編集スクリプトの最大化矢印をクリックします。選択したオブジェクトのフィールドが表示されます。

      5. 必要なAPIを選択し、「挿入」をクリックします。

      6. 式パレットを閉じるには、編集スクリプトの復元矢印をクリックし、「式パレットの表示/非表示」をクリックします。

        isAttributeChanged()関数は、前トリガー・タイプに対してのみ機能します。後トリガー・タイプの回避策では、データベースの更新前に古い値を取得し、更新後に新しい値を取得し、2つの値を比較して属性が変更されているかどうかが確認されます。ただし、この回避策は、CriticalFlagやStatusなどの上位レベルの属性に対してのみ機能し、ViewRow属性に対しては機能しません。

  7. Groovyスクリプトを追加します。たとえば、アカウントの通知を定義する場合は、アカウント・プッシュの通知受信Groovyスクリプトを追加します。

  8. 「保存して閉じる」をクリックします。

  9. 通知のプリファレンスを構成するには、「通知プリファレンス」ページに移動します。詳細は、この章の「営業の通知プリファレンスの設定」のトピックを参照してください。

注意: Groovy通知プロンプトは、他の通知で使用されていない場合に再利用できます。

営業の通知プリファレンスの設定

通知ルールは、「通知プリファレンス」ページで構成します。

  1. 「ナビゲータ」で、「ツール」「通知プリファレンス」をクリックします。

  2. 「通知プリファレンス」ページで、「オブジェクト」ドロップダウン・リストからオブジェクトを選択し、プリファレンスを設定します。

    1. 「追加」をクリックして、表に空白行を追加します。

    2. 「使用可能」ドロップダウン・リストから「はい」を選択します

    3. 「トリガー・イベント」ドロップダウン・リストからGroovy通知プロンプトを選択します。

    4. 通知名および摘要を入力します。

    5. 「受信者」列で、「編集」アイコンをクリックします。

    6. 「トリガー名の構成」ダイアログ・ボックスで、各受信者の通知配信オプションを選択し、「完了」をクリックします。オプションの詳細は、次の表を参照してください。

      1つ以上の配信方法を選択した場合のみ、指定した受信者タイプの通知が送信されるため、少なくとも1つの方法を選択してください。選択した配信方法に加えて、受信者はベル通知も受信します。「ベル通知」オプションを選択して、グローバル・ヘッダーに表示される通知を有効にします。

    7. 「新規SmartText」リンクをクリックし、選択したオブジェクトの通知テキストを入力して、「公開」をクリックします。

    次に、各オブジェクトの受信者および配信オプションのリストを示します。

    CX営業オブジェクトの受信者 CX営業オブジェクトの配信オプション

    所有者IDのマネージャ: 通知所有者のマネージャ。

    ベル通知: Webアプリケーションに通知を送信します。

    所有者ID: 通知を送信または割り当てるユーザー。

    モバイル通知: モバイル・プッシュ通知をOracle CX Cloud Mobileアプリケーションに送信します。

    リソース・チーム: B2Bサービスでは、これらは「チーム」サブタブのオブジェクトに追加される追加リソースです。CX Salesではリソース・チームを使用しません。

    ブラウザ通知: B2Bサービスでは、事前定義済プロンプトが実行されると、このオプションによって、オムニチャネル・ツールバーで署名された選択済ユーザーのデスクトップにリアルタイム通知が送信されます。

  3. (オプション)通知プリファレンスを削除するには、その行を選択して「削除」をクリックします。この処理では、関連する通知テキストも削除されます。

    注意: Groovyスクリプトを使用して生成された通知を削除する場合、別の通知で使用されていなければ、同じGroovyスクリプトを使用して新しい通知を作成できます。
  4. (オプション)既存の通知テキストを変更するには、選択した行の「SmartTextの更新」アイコンをクリックします。

  5. 「保存」をクリックします。

SmartTextの使用の詳細は、『B2Bサービスの使用』ガイドの「サービス要求でのSmartTextの使用方法」を参照してください。

アクティビティでは、異なるモデルを使用して通知を設定します。アクティビティの通知の設定方法の詳細は、このガイドの「アクティビティ」の章の「アクティビティの通知および委任」の項を参照してください。

Groovyスクリプトのデバッグ

アプリケーション・コンポーザでGroovyデバッガを使用して、オブジェクトに対して定義したオブジェクト関数および検証をデバッグします。デバッグ中に、オブジェクトおよび属性値を調べることもできます。デバッガには、「カスタム・オブジェクト」ページまたは「標準オブジェクト」ページからアクセスします。

デバッガへのアクセス

アプリケーション・コンポーザの「カスタム・オブジェクト」ページまたは「標準オブジェクト」ページからデバッガにアクセスします。

デバッガにアクセスするには:

  1. アプリケーション・コンポーザの「オブジェクト」ツリーで、「カスタム・オブジェクト」または「標準オブジェクト」リンクをクリックします。

  2. 表示されるカスタム・オブジェクトまたは標準オブジェクトの「オブジェクト」ページで、デバッグするオブジェクトを選択し、表のツールバーにあるデバッガ・アイコンをクリックします。

    デバッガ・アイコンはてんとう虫のアイコンです。

  3. デバッガUIで、そのオブジェクト用にGroovyで定義されているオブジェクト関数および検証を確認します。

デバッガの使用

デバッガには、次の表で説明する複数のリージョンが含まれており、これらを使用してオブジェクトのスクリプトをデバッグできます。

デバッガ・リージョン 説明

メイン・ツールバー

ツールバーから、確認するオブジェクトを選択し、デバッグ・プロセスを開始できます。

左ペイン・リージョン

このリージョンには、選択したオブジェクトに定義されているオブジェクト関数および検証が表示されます。

メイン・スクリプト・リージョン

このリージョンには、選択したGroovyスクリプトが表示されます。

「スタック」リージョン

このリージョンには、コール・スタックが表示されます。たとえば、Function1とFunction2の2つの関数があるとします。Function1は、Function2をコールします。Function2内でデバッグする場合、「スタック」リージョンには、現在実行されているFunction2の文と、Function2がコールされた親Function1に関する情報が表示されます。

「変数」リージョン

このリージョンには、変数および関連する値が表示されます。

「ブレークポイント」タブ

このタブには、ブレークポイントがある文(行番号)が表示されます。ブレークポイントは、Groovyスクリプト内の、デバッグ中にスクリプトを一時停止させる場所です。デバッガはその文で停止します。

「ログ」タブ

このタブには、すべてのログが表示されます。スクリプトにprintln()文がある場合、これらの値はこのタブで取得されます。

デバッガを使用するには:

  1. アプリケーション・コンポーザの「オブジェクト」ツリーで、「カスタム・オブジェクト」または「標準オブジェクト」リンクをクリックします。

  2. 表示されるカスタム・オブジェクトまたは標準オブジェクトの「オブジェクト」ページで、デバッグするオブジェクトを選択し、表のツールバーにあるデバッガ・アイコンをクリックします。

  3. デバッガUIでは、左ペインに、Groovyでそのオブジェクトに対して定義されているオブジェクト関数および検証が表示されます。確認するスクリプトを選択します。

    スクリプトは、メイン・スクリプト・リージョンに表示されます。

  4. デバッグを開始するには、ツールバーで次のいずれかのアイコンをクリックします。

    • ステップ実行

      選択したスクリプトの文を一度に1つずつ確認します。

    • トレース実行

      実行中の文が関数のコールで、その関数内でデバッグする場合は、「トレース実行」をクリックします。

    • ステップ・アウト

      子関数内でデバッグしていて、コントロールを親関数に戻す場合は、「ステップ・アウト」をクリックします。

    • 実行

      スクリプトの次のブレークポイントに移動します。ブレークポイントがこれ以上存在しない場合、デバッガは選択したスクリプトの評価を完了し、デバッガ・セッションを閉じます。

デバッガの有効化および無効化

デバッガは、デフォルトで有効になっています。ただし、デバッガを非表示にしたり後で再度表示する場合は、「ADF: スクリプト・デバッガの有効化」プロファイル・オプションを設定します。

「ADF: スクリプト・デバッガの有効化」プロファイル・オプションを設定するには:

  1. 「設定と保守」作業領域で、次のように選択します。

    • オファリング: 販売

    • 機能領域: 販売基盤

    • タスク: 管理者プロファイル値の管理

      「管理者プロファイル値の管理」ページが表示されます。

  2. 「プロファイル表示名」フィールドに「ADF: スクリプト・デバッガの有効化」と入力して、「検索」をクリックします。

  3. 「プロファイル値」リージョンのサイト・レベルで、TRUEまたはFALSEのいずれかを入力します。

    • TRUEの場合、デバッガが表示されます。

    • FALSEの場合、デバッガを非表示になります。

通知のサンプルGroovyスクリプト

Groovyスクリプトを使用して、通知の開始を定義します。営業オブジェクトの「通知プリファレンス」ページで指定した受信者への通知を生成するサンプル・コードを次に示します。これらのスクリプトは、必要に応じて変更できます。

標準オブジェクトのスクリプト

次に、標準営業オブジェクトのサンプル・スクリプトを示します。

オブジェクト シナリオ 作成および割当のスクリプト

アカウント

プッシュ通知の受信

アカウントの作成

// Send notification to Owner when Account is created
// Use trigger type BEFORE INSERT TO DATABASE
def map = new HashMap();
// Specify one or more channels
map.put("Channels",["ORA_SVC_BELL"]);
// Specify default MessageText
def messageText = "Account created with name: " + OrganizationName;
map.put("MessageText", messageText);
// The following can be used to pass a Long PartyId
map.put("RecipientPartyId", OwnerPartyId);
adf.util.sendNotification(adf, map)

アカウント

詳細ページへのドリルダウン

アカウントの割当


// Send notification to Owner when Account is assigned to them
// Use trigger type BEFORE UPDATE TO DATABASE
if (isAttributeChanged('OwnerPartyId')) {
    try {
        def map = new HashMap();
        def messageText = "This Account has been assigned to you"
        def recipientPartyId = OwnerPartyId

        // Specify one or more channels
        map.put("Channels",["ORA_SVC_BELL"]);
        // Specify default MessageText
        map.put("MessageText", messageText);
        // The following can be used to pass a Long PartyId
        map.put("RecipientPartyId", recipientPartyId);

        if (recipientPartyId) {
            adf.util.sendNotification(adf, map)
        } else {
            println("No Owner associated with this Account")
        }
    } catch (e) {
        throw new oracle.jbo.ValidationException('Failure: ' + e.getMessage())
    }
}

担当者

プッシュ通知の受信

担当者の作成

// Send notification to Owner when Contact is created
// Use trigger type BEFORE INSERT TO DATABASE
def map = new HashMap();
// Specify one or more channels
map.put("Channels",[ "ORA_SVC_BELL"]);
// Specify default MessageText
def messageText = "Contact created with name: " + PersonName;
map.put("MessageText", messageText);
// The following can be used to pass a Long PartyId
map.put("RecipientPartyId", OwnerPartyId);
adf.util.sendNotification(adf, map)

担当者

詳細ページへのドリルダウン

担当者の割当

// Send notification to Owner when Contact is assigned to them
// Use trigger type BEFORE UPDATE TO DATABASE
if (isAttributeChanged('OwnerPartyId')) {
    try {
        def map = new HashMap();
        def messageText = "This Contact has been assigned to you"
        def recipientPartyId = OwnerPartyId

        // Specify one or more channels
        map.put("Channels",[ "ORA_SVC_BELL"]);
        // Specify default MessageText
        map.put("MessageText", messageText);
        // The following can be used to pass a Long PartyId
        map.put("RecipientPartyId", recipientPartyId);

        if (recipientPartyId) {
            adf.util.sendNotification(adf, map)
        } else {
            println("No Owner associated with this Contact")
        }
    } catch (e) {
        throw new oracle.jbo.ValidationException('Failure: ' + e.getMessage())
    }
}

リード

プッシュ通知の受信

リードの作成

// Send notification to Owner when Lead is created
// Use trigger type BEFORE INSERT TO DATABASE
def map = new HashMap();
// Specify one or more channels
map.put("Channels",["ORA_SVC_BELL"]);
// Specify default MessageText
def messageText = "Lead created with name: " + Name;
map.put("MessageText", messageText);
// The following can be used to pass a Long PartyId
map.put("RecipientPartyId", OwnerId);
adf.util.sendNotification(adf, map)

リード

詳細ページへのドリルダウン

リードの割当

Lead Assign
// Send notification to Owner when Lead is assigned to them
// Use trigger type BEFORE UPDATE TO DATABASE
if (isAttributeChanged('OwnerId')) {
    try {
        def map = new HashMap();
        def messageText = "This Lead has been assigned to you"
        def recipientPartyId = OwnerId

        // Specify one or more channels
        map.put("Channels",["ORA_SVC_BELL"]);
        // Specify default MessageText
        map.put("MessageText", messageText);
        // The following can be used to pass a Long PartyId
        map.put("RecipientPartyId", recipientPartyId);

        if (recipientPartyId) {
            adf.util.sendNotification(adf, map)
        } else {
            println("No Owner associated with this Lead")
        }
    } catch (e) {
        throw new oracle.jbo.ValidationException('Failure: ' + e.getMessage())
    }
}

商談

プッシュ通知の受信

商談の作成

// Send notification to Owner when Opportunity is created
// Use trigger type BEFORE INSERT TO DATABASE
def map = new HashMap();
// Specify one or more channels
map.put("Channels",["ORA_SVC_BELL"]);
// Specify default MessageText
def messageText = "Opportunity created with name: " + Name;
map.put("MessageText", messageText);
// The following can be used to pass a Long PartyId
map.put("RecipientPartyId", OwnerResourcePartyId);
adf.util.sendNotification(adf, map)

商談

詳細ページへのドリルダウン

商談の割当

// Send notification to Owner when Opportunity is assigned to them
// Use trigger type BEFORE UPDATE TO DATABASE
if (isAttributeChanged('OwnerResourcePartyId')) {
    try {
        def map = new HashMap();
        def messageText = "This Opportunity has been assigned to you"
        def recipientPartyId = OwnerResourcePartyId

        // Specify one or more channels
        map.put("Channels",[ "ORA_SVC_BELL"]);
        // Specify default MessageText
        map.put("MessageText", messageText);
        // The following can be used to pass a Long PartyId
        map.put("RecipientPartyId", recipientPartyId);

        if (recipientPartyId) {
            adf.util.sendNotification(adf, map)
        } else {
            println("No Owner associated with this Opportunity")
        }
    } catch (e) {
        throw new oracle.jbo.ValidationException('Failure: ' + e.getMessage())
    }
}

カスタム・オブジェクトのスクリプト

Groovyスクリプトを使用して、カスタム・オブジェクトの通知を送信できます。

前提条件:

  • グローバル関数adf.util.sendNotification (adf, map)を使用します。

  • ObjectCodeは、Groovyトリガーのリクエスト・パラメータ・ハッシュ・マップの一部として明示的に渡す必要があります。

  • カスタム・オブジェクトを公開する必要があります。

オブジェクト シナリオ 作成および割当のスクリプト

カスタム・オブジェクト

ユーザーのパーティIDに基づいたユーザーへのベル通知送信

try {
        Long recipientPartyId = 100010037456865
        def messageText = 'A custom object notification (default message).'
        def objectCode='CustomObject_SR_c'
        def map = new HashMap();
        map.put("Channels", ["ORA_SVC_BELL"]);
        map.put("MessageText", messageText);
        map.put("RecipientPartyId", recipientPartyId);
        map.put("ObjectCode", objectCode);
        adf.util.sendNotification(adf,map)
        println("Triggered a notification"); 
    } catch (e) {
        // Log the failure in groovy logging. Logs can be viewed in 'Runtime Messages'.
        println("Failure to trigger notification from Groovy Script " + e.getMessage());
}

カスタム・オブジェクトのオブジェクト・コードを検索するには、オブジェクトの概要ページにナビゲートします。API名は、そのページの「オブジェクト情報」リージョンにリストされます。

プッシュ通知の構成

プッシュ通知を使用すると、営業担当およびマネージャはモバイル・デバイスに通知を配信できます。営業担当はモバイル・アプリケーションにサインインした後、グローバル・ヘッダーの「通知」アイコンをクリックして、通知のリストを表示できます。通知は、表示後に消去するか、一括して消去できます。

独自の条件ロジックを使用して、アプリケーション・コンポーザで通知を定義します。これにより、各通知を生成するタイミングを決定できます。たとえば、SLAマイルストンが近いこと、再割当て、エスカレーションに関するアラートを定義できます。重大度の高い要求をユーザーに割り当てたときに通知を送信する開始ポイントを定義します。iOSやAndroidなどのデバイスは、プッシュ通知をサポートしています。

通知機能を設定すると、ベル通知が自動的に設定されます。モバイル・プッシュ通知アラートを有効にするか、デスクトップ・アプリケーションのベル通知にのみアラートを配信するかを決定することもできます。ベル通知の配信は、モバイル通知が無効になっていても発生します。通知をクリックしてレコード詳細にナビゲートすると、通知が既読としてマークされ、通知リストからクリアされます。

CX営業オブジェクトのモバイル通知を有効にする方法を次に示します。

  1. アクティブなサンドボックスで作業していることを確認します。

  2. 「設定と保守」にナビゲートします。

  3. 「設定と保守」領域で、次に移動します。

    • オファリング: 販売

    • 機能領域: 販売基盤

    • 「販売基盤」行のドロップダウン・ボタンをクリックします。

    • メニューの「機能選択の表示」をクリックします。「機能の編集: 販売基盤」ページが表示されます。

  4. 「モバイル通知」の「使用可能」チェック・ボックスを選択します。これにより、営業オブジェクトのベル通知が有効になります。

  5. サンドボックスを公開します。