tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Slack API連携を試してみました

2015年のSalesforce Advent Calendarで紹介されていたSlack APIとSalesforce連携の記事を参考に自分のDev環境でSlackAPI連携を試してみました。


Slack APIを利用する場合Incoming WebHookの設定ページでWebHokURLを取得します。設定ページはトップページで検索する方法で見つかりました。
f:id:tyoshikawa1106:20160514151926p:plain

App Directory | Slack


まずはAddボタンをクリック
f:id:tyoshikawa1106:20160514152319p:plain


Post先のチャンネルを選択します。
f:id:tyoshikawa1106:20160514152401p:plain


選択後はAddボタンが利用できるようになるのでクリックして次へ。
f:id:tyoshikawa1106:20160514152540p:plain


これでWebhookURLというのを生成できました。
f:id:tyoshikawa1106:20160514152811p:plain


同じページの下の方にCurlをつかってテストするコマンドが表示されていました。
f:id:tyoshikawa1106:20160514153017p:plain


ターミナルを起動して実行してみると・・・
f:id:tyoshikawa1106:20160514153250p:plain


Slackへの投稿が行われていました。
f:id:tyoshikawa1106:20160514153537p:plain

Salesforceから実行

基本的な利用方法を確認できたところで、実際にSalesforceから実行してみます。APIはApexクラスから実行するのですが、実際にApexクラスを用意する前に開発者コンソールから実行してみました。

f:id:tyoshikawa1106:20160514161302p:plain

String slackWebhockUrl = '<Your Slack Webhock URL>';

String msg = '{"channel": "#general", "username": "salesforce bot", "text": "Hello Slack!!", "icon_emoji": ":wolf:"}';

Http http = new Http();
HttpRequest req = new HttpRequest();
req.setHeader('Content-Type', 'application/json');
req.setEndpoint(slackWebhockUrl);
req.setMethod('POST');
req.setBody(msg);
HttpResponse res = http.send(req);
System.debug(res);
String result = res.getBody();
System.debug(result);


実行すると次のエラーが発生すると思います。
f:id:tyoshikawa1106:20160514155002p:plain


これはSalesforce組織から勝手にAPIを実行されたりするのを回避するためのセキュリティチェックで弾かれるためです。リモートサイトの設定からSlack APIの利用を許可してあげると解決します。
f:id:tyoshikawa1106:20160514155229p:plain


あらためて実行してみると
f:id:tyoshikawa1106:20160514160037p:plain


無事にSlackに投稿されました。
f:id:tyoshikawa1106:20160514160354p:plain


・・・絵文字がキチンと表示されていないのは少しミスしてたせいです。(実行時に半角スペースが後についてしまっていました。)


コードを修正してもう一度実行して絵文字も正しく表示されました。
f:id:tyoshikawa1106:20160514160517p:plain


これでApexコードからSlackAPIを実行する方法について確認できました。あとはこの処理をApexクラスに実装して、AdventCalendarの記事で紹介されているようにProcessBuilderなどでレコード登録時にSlackAPIを実行するといった使い方をすれば良さそうです。


ちなみにこのSalesforceとSlackの連携についてですが、先日Salesforce Webinarでも紹介されていました。きっといろいろな使い方ができるんだと思います。

f:id:tyoshikawa1106:20160514160916p:plain

Integrating Salesforce and Slack | Salesforce Developers

デモ動画

おまけ

Slackで利用できる絵文字の一覧がまとめられたサイトがありました。