2015年のSalesforce Advent Calendarで紹介されていたSlack APIとSalesforce連携の記事を参考に自分のDev環境でSlackAPI連携を試してみました。
Slack APIを利用する場合Incoming WebHookの設定ページでWebHokURLを取得します。設定ページはトップページで検索する方法で見つかりました。
まずはAddボタンをクリック
Post先のチャンネルを選択します。
選択後はAddボタンが利用できるようになるのでクリックして次へ。
これでWebhookURLというのを生成できました。
同じページの下の方にCurlをつかってテストするコマンドが表示されていました。
ターミナルを起動して実行してみると・・・
Slackへの投稿が行われていました。
Salesforceから実行
基本的な利用方法を確認できたところで、実際にSalesforceから実行してみます。APIはApexクラスから実行するのですが、実際にApexクラスを用意する前に開発者コンソールから実行してみました。
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);
実行すると次のエラーが発生すると思います。
これはSalesforce組織から勝手にAPIを実行されたりするのを回避するためのセキュリティチェックで弾かれるためです。リモートサイトの設定からSlack APIの利用を許可してあげると解決します。
あらためて実行してみると
無事にSlackに投稿されました。
・・・絵文字がキチンと表示されていないのは少しミスしてたせいです。(実行時に半角スペースが後についてしまっていました。)
コードを修正してもう一度実行して絵文字も正しく表示されました。
これでApexコードからSlackAPIを実行する方法について確認できました。あとはこの処理をApexクラスに実装して、AdventCalendarの記事で紹介されているようにProcessBuilderなどでレコード登録時にSlackAPIを実行するといった使い方をすれば良さそうです。
ちなみにこのSalesforceとSlackの連携についてですが、先日Salesforce Webinarでも紹介されていました。きっといろいろな使い方ができるんだと思います。
おまけ
Slackで利用できる絵文字の一覧がまとめられたサイトがありました。