目次
salesforceでレコードが登録されたらslackに通知を送る方法
コーポレートエンジニアslackでトピックがあったので、salesforceのお勉強がてら試してみました。
先人のこちらのブログのままですが、単に日本語+私が引っ掛かったところの共有です
salesforceを個人でまともに契約する財力はないので、開発者向けdeveloper Editionを利用します
半年間ログインがないと環境が削除されてしまうので、注意してください。
Qiitaの記事のほうがわかりやすいかも
Slackのwebhook用のURLを取得する
slackに投稿させるための、webhook用のURLを取得します
- 利用したいワークスペースにログインした状態で下記URLへアクセスします
https://slack.com/apps/manage/custom-integrations - WebhookURLをコピーして控えておきます
このURLは外部へは公開しないように注意!!
Salesforceの設定
リモートサイトの設定
- 左上のクイック検索欄に「リモート」と入力します
- 表示された【リモートサイトの設定】をクリックします
- 【新規リモートサイト】をクリックします
- 下記のように設定し、【保存】をクリックします
リモートサイト名 SlackAPI リモートサイトのURL https://hooks.slack.com 説明 任意でわかりやすい説明
APEXクラスの作成
- クイック検索欄に、「APEX」と入力します
- 表示された【APEXクラス】をクリックします
- 【新規】をクリックします
- 先人のありがたいコードを入力し、【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); } } }
- テストコードも書かれているので同じ手順で登録しておきましょう
プロセスビルダーの設定
次にプロセスビルダーを設定します
今回は取引先登録時、取引先名に「テスト」が含まれていたらSlackへ通知を送るようにしてみます
- クイック検索に「プロセス」と入力し、【プロセスビルダー】をクリックします
- 右上にある【新規】をクリックします
- 下記画像のように設定し、【SAVE】をクリックします
- フローチャート内にある【オブジェクト】をクリックします
- オブジェクトプルダウンがら「取引先」を選択します
- 「レコードを作成したときのみ」を選択し、【保存】をクリックします
- 【条件を追加】をクリックします
- 条件名にわかりやすい名前を入力し、【項目を検索】をクリックします
- プルダウンから「取引先名」を探しクリックします
(ブラウザの検索機能を使うと便利です)
- 【Choose】をクリックします
- 【次の文字列を含む】を選択します
- 値欄に「テスト」と入力し、【保存】をクリックします
- 【アクションを追加】をクリックします
- アクション種別から「APEX」を選択します
- アクション名にわかりやすい名前を入力し、Apexクラスから事前に作成したクラス名を選択します
- [Channel/User to post to]に通知したいチャネル名を入力します
- [Slack Message]項目の種別を、「数式」に変更します
- 【数式を構築】をクリックします
- テキストボックスに下記のように入力し、【Use this Formula】をクリックします
"次の新規テスト顧客が登録されました:" + [Account].Name
- 【保存】をクリックします
- 右上にある【有効化】をクリックします
- 【Confirm】をクリックします
以上でプロセスビルダーでの設定は完了です
動作確認
新規取引先を、”テスト顧客”という名前で登録し、Slackに通知されるかを確認しましょう
- タイルをクリックし、【セールス】を選択します(Developer Edition初期状態の場合)
- 「取引先」タブ横の▼をクリックし、【新規取引先】をクリックします
- 「取引先名」に”テスト顧客”と入力し、【保存】をクリックします
- Slackの指定したチャンネルに通知がきていれば成功です!!
これで条件によって色々と通知することが可能ですね!
APEXクラスを変更すれば、TeamsやChatwork等色々なものへ通知が可能ですね。
パッケージがすでにあるものもあるので、検索してなかったらAPEXクラスで実施するというのがいいのかな