6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

chatterからSlackへ転送する(前編)

Last updated at Posted at 2020-05-09

chatterの内容をSlackへ転送する方法を紹介します
この章ではchatterの投稿文をあらかじめ指定したSlackの宛先に転送する方法を紹介しています

後編ではSlackの転送時にメンションをつけたり複数のチャンネルへ転送する方法を紹介しています
https://qiita.com/SyogoSuganoya/items/e7ebbaae571baae03a41

前準備

こちらの記事を参考にSlackへIncoming Webhookを設定します

【Slack】SlackでBotを開発する方法【GAS】
https://qiita.com/SyogoSuganoya/items/bb6a4f5256c0e944a0f5

SFの準備

リモートサイトの準備

image.png
設定画面のクイック検索から「リモートサイトサイトの設定画面」を開きます


image.png

新規リモートサイトをクリックします


image.png

リモートサイト名
 →適当な名前で大丈夫です
リモートサイトのURL
 →「 https://hooks.slack.com 」と入力します

Apexクラスの準備

設定画面のクイック検索から「Apexクラス」を開きます

image.png
新規作成します

publishToSlackBasic
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='ここにwebhockURLを入力する'; 
        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', ':sf:');
            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);
        }
    }
}

String webhookURL='ここにwebhockURLを入力する'; の部分は自身の環境に合わせてください

gen.writeStringField('username', 'Salesforce Bot');
gen.writeStringField('icon_emoji', ':sf:');
この部分はbotの名前やアイコンなのでお好みで設定してください

プロセスビルダーの準備

設定画面のクイック検索から「プロセスビルダー」を開きます

image.png
image.png

新規ボタンクリック後、新規プロセス情報を入力します
プロセス名
 →適当な名前で大丈夫です
API参照名
 →適当な名前で大丈夫です
プロセスを開始するタイミング
 →「レコードが変更されたとき」に設定します


オブジェクトをクリック後、オブジェクトを選択します
「フィード項目」を選択します

プロセスの開始トリガーを選択します
chatterを投稿したときのみ か 投稿または編集したとき かを選択します
今回は「作成または編集」を選択し保存します


条件を追加をクリックします
今回はトリガーを「chatterを投稿または編集したとき」に設定しているため、
「アクションを実行する条件がない」を選択し、保存します

image.png
image.png

アクションを追加します
アクション種別
 →Apex
アクション名
 →適当な名前で大丈夫です
Apexクラス
 →Publish to Slack

Slack Message
 →Slackへ送信する文字列を設定できます
Channel/User to post to
 →Slackの宛先を設定できます


chatterの内容は[FeedItem].Bodyに保存されています
chatterメッセージをそのまま転送するにはSlack Messageに以下を設定します
種別
 →数式

 →[FeedItem].Body

ただこのままではpタグがそのままSlackへ出力されてしまうので、
値を以下のように変更すると出力文が自然な見た目になります
(pタグを改行に置換する処理です)

 →SUBSTITUTE(SUBSTITUTE([FeedItem].Body, "</p>", BR()) , "<p>", "")


また、以下のような出力フォーマットを設定できます

ファイル投稿の時「ファイル添付があります」と転送したい
 →if([FeedItem].HasContent,"ファイル添付があります","")

商談名の出力
 →[FeedItem].Parent:Opportunity.Name


設定例を以下に記します

【Slack Message】
"chatterから送信されました" + BR() + 
[FeedItem].Parent:Opportunity.Name + BR() + 
SUBSTITUTE(SUBSTITUTE([FeedItem].Body, "</p>", BR()) , "<p>", "") + BR() + 

if([FeedItem].HasContent,"ファイル添付があります","")
【Slackへ出力される文章】
chatterから送信されました
商談名
投稿メッセージ

ファイル添付があります

設定が完了したら保存ボタンを押します


image.png

最後に有効化をクリックします

動作確認

image.png

chatterに投稿して、Slackへ転送されていれば完成です!

案内

後編ではSlackの転送時にメンションをつけたり複数のチャンネルへ転送する方法を紹介しています
https://qiita.com/SyogoSuganoya/items/e7ebbaae571baae03a41
image.png

参考

salesforceでレコードが登録されたらslackに通知を送る方法
https://blog.intracker.net/archives/2018

Salesforce および Lightning プラットフォームのオブジェクトリファレンス「FeedItem」
https://developer.salesforce.com/docs/atlas.ja-jp.object_reference.meta/object_reference/sforce_api_objects_feeditem.htm

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?