salesforceでレコードが登録されたらslackに通知を送る方法

目次

salesforceでレコードが登録されたらslackに通知を送る方法

コーポレートエンジニアslackでトピックがあったので、salesforceのお勉強がてら試してみました。
先人のこちらのブログのままですが、単に日本語+私が引っ掛かったところの共有です

salesforceを個人でまともに契約する財力はないので、開発者向けdeveloper Editionを利用します
半年間ログインがないと環境が削除されてしまうので、注意してください。

公式説明サイト

Qiitaの記事のほうがわかりやすいかも

Slackのwebhook用のURLを取得する

slackに投稿させるための、webhook用のURLを取得します

  1. 利用したいワークスペースにログインした状態で下記URLへアクセスします
    https://slack.com/apps/manage/custom-integrations
  2. WebhookURLをコピーして控えておきます
    このURLは外部へは公開しないように注意!!

 

Salesforceの設定

  1. 登録したSalesforce Developer Editionにシステム管理者ロールを持ったユーザーでログインします
  2. 右上の歯車アイコンをクリックし、【設定】をクリックします

リモートサイトの設定

  1. 左上のクイック検索欄に「リモート」と入力します
  2. 表示された【リモートサイトの設定】をクリックします
  3. 【新規リモートサイト】をクリックします
  4. 下記のように設定し、【保存】をクリックします
    リモートサイト名 SlackAPI
    リモートサイトのURL https://hooks.slack.com
    説明 任意でわかりやすい説明

APEXクラスの作成

  1. クイック検索欄に、「APEX」と入力します
  2. 表示された【APEXクラス】をクリックします
  3. 【新規】をクリックします
  4. 先人のありがたいコードを入力し、【Save】をクリックします
    webhookURLは事前に控えたURLを貼り付けます

    public class publishToSlackBasic{
         
        public class slackRequest { 
            @InvocableVariable(label='Slack Message' required=true) 
            public String slackMessage; 
            @InvocableVariable(label='Channel/User to post to' required=true) 
            public String channel; 
        } 
        
        @InvocableMethod(label='Publish to Slack')
        public static void publishToSlack(List<slackRequest> requests) {
            String webhookURL='https://hooks.slack.com/ENTER_YOUR_OWN_WEBHOOK_URL'; 
            for(slackRequest r:requests){
                JSONGenerator gen = JSON.createGenerator(true);
                gen.writeStartObject(); //Inserts {
                gen.writeStringField('text', r.slackMessage);
                gen.writeStringField('channel', r.channel);
                gen.writeStringField('username', 'Salesforce Bot');
                gen.writeStringField('icon_emoji', ':monkey_face:');
                gen.writeEndObject(); //Inserts }
     
                String body = gen.getAsString(); //Translates JSONGenerator to string to be passed to callout
                System.debug(body);
                System.enqueueJob(new qCallOut(webhookURL, 'POST', body));
            } 
        }
       
        public class qCallOut implements System.Queueable, Database.AllowsCallouts {
             
            private final String url;
            private final String method;
            private final String body;
             
            public qCallOut(String url, String method, String body) {
                this.url = url;
                this.method = method;
                this.body = body;
            }
             
            public void execute(System.QueueableContext ctx) {
                HttpRequest req = new HttpRequest();
                req.setEndpoint(url);
                req.setMethod(method);
                req.setBody(body);
                Http http = new Http();
                HttpResponse res = http.send(req);
            }
        }
    }

  5. テストコードも書かれているので同じ手順で登録しておきましょう

プロセスビルダーの設定

次にプロセスビルダーを設定します
今回は取引先登録時、取引先名に「テスト」が含まれていたらSlackへ通知を送るようにしてみます

  1. クイック検索に「プロセス」と入力し、【プロセスビルダー】をクリックします
  2. 右上にある【新規】をクリックします
  3. 下記画像のように設定し、【SAVE】をクリックします
  4. フローチャート内にある【オブジェクト】をクリックします
  5. オブジェクトプルダウンがら「取引先」を選択します
  6. 「レコードを作成したときのみ」を選択し、【保存】をクリックします
  7. 【条件を追加】をクリックします
  8. 条件名にわかりやすい名前を入力し、【項目を検索】をクリックします
  9. プルダウンから「取引先名」を探しクリックします
    (ブラウザの検索機能を使うと便利です)
  10. 【Choose】をクリックします
  11. 【次の文字列を含む】を選択します
  12. 値欄に「テスト」と入力し、【保存】をクリックします
  13. 【アクションを追加】をクリックします
  14. アクション種別から「APEX」を選択します
  15. アクション名にわかりやすい名前を入力し、Apexクラスから事前に作成したクラス名を選択します
  16. [Channel/User to post to]に通知したいチャネル名を入力します
  17. [Slack Message]項目の種別を、「数式」に変更します
  18. 【数式を構築】をクリックします
  19. テキストボックスに下記のように入力し、【Use this Formula】をクリックします
    "次の新規テスト顧客が登録されました:" + [Account].Name

  20. 【保存】をクリックします
  21. 右上にある【有効化】をクリックします
  22. 【Confirm】をクリックします

以上でプロセスビルダーでの設定は完了です

動作確認

新規取引先を、”テスト顧客”という名前で登録し、Slackに通知されるかを確認しましょう

  1. タイルをクリックし、【セールス】を選択します(Developer Edition初期状態の場合)
  2. 「取引先」タブ横の▼をクリックし、【新規取引先】をクリックします
  3. 「取引先名」に”テスト顧客”と入力し、【保存】をクリックします
  4. Slackの指定したチャンネルに通知がきていれば成功です!!

 

これで条件によって色々と通知することが可能ですね!
APEXクラスを変更すれば、TeamsやChatwork等色々なものへ通知が可能ですね。
パッケージがすでにあるものもあるので、検索してなかったらAPEXクラスで実施するというのがいいのかな

 

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次