目次
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を貼り付けます12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849public 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 calloutSystem.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】をクリックします
1"次の新規テスト顧客が登録されました:" + [Account].Name
- 【保存】をクリックします
- 右上にある【有効化】をクリックします
- 【Confirm】をクリックします
以上でプロセスビルダーでの設定は完了です
動作確認
新規取引先を、”テスト顧客”という名前で登録し、Slackに通知されるかを確認しましょう
- タイルをクリックし、【セールス】を選択します(Developer Edition初期状態の場合)
- 「取引先」タブ横の▼をクリックし、【新規取引先】をクリックします
- 「取引先名」に”テスト顧客”と入力し、【保存】をクリックします
- Slackの指定したチャンネルに通知がきていれば成功です!!
これで条件によって色々と通知することが可能ですね!
APEXクラスを変更すれば、TeamsやChatwork等色々なものへ通知が可能ですね。
パッケージがすでにあるものもあるので、検索してなかったらAPEXクラスで実施するというのがいいのかな