2021.03.22

Einstein ボットからApexクラスを呼び出す方法について

  • このエントリーをはてなブックマークに追加
  • follow us in feedly
gettyimages (19867)

はじめに

Einstein ボットでは、標準機能でオブジェクト検索をすることが可能です。
しかし、以下のようにできることが限られています。
・複雑な条件で検索できない
・検索できる変数が1つまで
・返される最大結果が3つまで

標準のオブジェクト検索でできない要件の場合、Apexクラスを実装しボットから呼び出すことができます。

今回は、Einstein ボットからApexクラスを呼び出し、対象のカテゴリに含まれるナレッジを検索する方法についてご紹介いたします。

実装方法

Einstein ボットの作成・編集

[設定]-[Einsteinボット]からEinsteinボットを作成・編集していきます。

変数の作成

まずはボット内で使用する変数を作成していきます。
左上のプルダウンから「変数」を押下します。

次に「新規」ボタンを押下します。

変数を2つ作成します。

左上のプルダウンからダイアログを選択し、元の画面に戻ります。

Apexクラスの作成

以下がサンプルコードです。
public with sharing class EinsteinChatbots_SearchFAQ {
   //ボット設定画面の入力値
   public class FAQSearchInput{
       @InvocableVariable(required=true)
       public String category;
   }
   
   //ボット設定画面の出力値
   public class FAQSearchOutput{
       @InvocableVariable(required=true) 
       public List<Knowledge__kav> botOutputList;
   }
   
   //ボット設定画面から呼び出し
   @InvocableMethod(label='Einstein Chatbots - Search FAQ')
   public static List<FAQSearchOutput> searchFAQ(List<FAQSearchInput> faqSearchInput){
       //ボット設定画面で入力した値を変数へ設定
       String category = faqSearchInput[0].category;
       
       //対象カテゴリの公開済みナレッジを取得
       String KnowledgeKavString = 'SELECT Id, Title, Naiyou__c'
                                 + ' FROM Knowledge__kav'
                                 + ' WHERE PublishStatus = \'Online\''
                                 + ' AND Language = \'ja\''
                                 + ' WITH DATA CATEGORY Cloud__c'
                                 + ' ABOVE_OR_BELOW ' + category
                                 + ' ORDER BY ArticleTotalViewCount DESC'
                                 + ' LIMIT 5';
       List<Knowledge__kav> KnowledgeKavList;
       try {
           KnowledgeKavList = Database.query(KnowledgeKavString);
       } catch(QueryException e) {
           System.debug('次の例外が発生しました: ' + e.getMessage());
           return null;
       }
       
       //ナレッジのリストをボット設定画面へ出力
       List<FAQSearchOutput> faqSearchOutputs = new List<FAQSearchOutput>();
       FAQSearchOutput faqSearchOutput = new FAQSearchOutput();
       faqSearchOutput.botOutputList = KnowledgeKavList;
       faqSearchOutputs.add(faqSearchOutput);
       return faqSearchOutputs;
   }
}
EinsteinChatbots_SearchFAQ.cls

ボットからApexクラスの呼び出し

Apexクラスの呼び出したいダイアログで質問を選択します。

以下のように設定することで、Apexクラスを呼び出すことができます。

その他

ボット起動時にエラーとなった場合は、以下を参考にしてみてください。
※権限等の設定が必要です。

ボットのトラブルシューティング
https://help.salesforce.com/articleView?id=sf.bots_service_events_log.htm&type=5

おわりに

以上のように、Einstein ボットからApexクラスを呼び出す方法についてご紹介いたしました。
Einstein ボットの標準機能で実装できない要件の場合は、ぜひ参考にしてみてください。
29 件
     
  • banner
  • banner

関連する記事