tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:DreamHouse Slackbotを試してみました

DreamHose - Slackbotを試してみました。SalesforceとSlack APIの連携アプリを試してみることができます。
f:id:tyoshikawa1106:20160722235248p:plain

Slack Bot - DreamHouse JP サンプルアプリケーション | Salesforce Developers

はじめに

DreamHouseのインストールページに初期設定の手順が紹介されているので、それを終わらせておく必要があります。

機能概要

DreamHouseには以下のアプリが用意されています。

  • 着信 Web フック
  • スラッシュコマンド
  • ボット


DreamHouseアプリには必要なApexクラスやオブジェクトは含まれていますが、SlackAPIを利用する準備は別に行う必要があります。リンク先の手順で準備できると思います。


着信 Web フック

着信 Web フックの機能を使って、Salesforce などの外部アプリケーションから、管理下で特定のイベントが発生したときに自動的に Slack チャネルにメッセージをポストできます。DreamHouse では着信 Web フックを使って、Salesforce で物件の価格が変更されると自動的に #general Slack チャネルにメッセージをポストします。


この機能はプロセスビルダーで実装することができます。Packageインストール時にプロセスビルダーもまとめてインストールできています。
f:id:tyoshikawa1106:20160723011222p:plain


『Post Price Changes to Slack』が今回対象のプロセスビルダーです。
f:id:tyoshikawa1106:20160723012302p:plain


PropertyオブジェクトのPrice__c項目が変更されたタイミングでApexクラス「PostPriceChangeToSlack」の処理を実行されるようになっています。
f:id:tyoshikawa1106:20160723012614p:plain


SlackAPIを利用するにはIncoming WebHooksのWebhook URLが必要になります。
f:id:tyoshikawa1106:20160723014516p:plain


Webhook URLの準備ができたら、PostPriceChangeToSlackクラスのslackURL変数にセットします。(実際はカスタム表示ラベルなどを利用することになると思います。)
f:id:tyoshikawa1106:20160723015027p:plain


SalesforceからSlackAPIを実行するにはリモートサイトの設定が必要になります。これはPackageに含まれているのでインストール時に自動で設定されました。
f:id:tyoshikawa1106:20160723015037p:plain


これで実行準備は完了です。PropertyオブジェクトのPrice__c項目を変更してみます。
f:id:tyoshikawa1106:20160723015248p:plain


値を変更して保存した後、対象のSlackを確認してみると、無事に変更内容が投稿されました。
f:id:tyoshikawa1106:20160723015419p:plain


このようにApexクラスとプロセスビルダーを組み合わせることで、Slackの着信 Web フックをつかった連携アプリを簡単に用意することができました。

スラッシュコマンド

続いてスラッシュコマンドをつかった連携アプリについてです。スラッシュコマンドを使用すると、Slack の UI から外部アプリの情報の問い合わせや更新ができます。たとえば、DreamHouse では、仲介業者はスラッシュコマンドを使用することで、Slack のユーザーインターフェースを離れることなく Salesforce 内の物件情報にすばやくアクセスできます。


このアプリはHerokuなどに用意することで利用することが可能です。そのまま動くサンプルアプリがGitHubに公開されています。
f:id:tyoshikawa1106:20160723015635p:plain

動作確認の手順

詳細はGitHubのREADMEファイルに記載がありますが、ざっくりした概要を紹介します。

接続アプリケーションの設定

まずは接続アプリケーションの設定からです。
f:id:tyoshikawa1106:20160723020211p:plain

  • 接続アプリケーション名:MyDreamSlackApp(または任意の名前)
  • API 参照名:MyDreamSlackApp
  • 取引先責任者メール:自分のメールアドレスを入力します。
  • OAuth 設定の有効化:チェックボックスをオンにします。
  • コールバック URL:http://localhost:8200/oauthcallback.html(これは後で変更します)
  • 選択した OAuth 範囲:フルアクセス(full)
  • [保存]をクリックします。
Herokuアプリのデプロイ

続いてHerokuアプリを用意します。GitHubにHerokuボタンが用意されているので簡単にデプロイできます。デプロイ時に環境変数を登録します。
f:id:tyoshikawa1106:20160723020346p:plain

  • SF_CLIENT_ID:Salesforce 接続アプリケーションのコンシューマキーを入力します。
  • SF_CLIENT_SECRET:Salesforce 接続アプリケーションのコンシューマの秘密を入力します。
  • SF_USER_NAME:Salesforce 統合ユーザーのユーザー名を入力します。
  • SF_PASSWORD:Salesforce 統合ユーザーのパスワードを入力します。
  • SLACK_HOUSE_TOKEN は、ここでは空白のままにします。
Slack でスラッシュコマンドを作成

f:id:tyoshikawa1106:20160723020944p:plain

  • ブラウザで、Slack チームの Custom Integration ページを開きます。例:https://<チーム名>.slack.com/apps/manage/custom-integrations(<チーム名>は実際のチーム名で置き換えます。)
  • [Slash Commands]をクリックし、[Add Configuration]をクリックします。
  • [Choose a Command]入力フィールドに「/house」と入力し、[Add Slash Command Integration]をクリックします。
  • [Integration Settings]セクションで以下のように設定します。
  • Command:/house
  • URL:Heroku にデプロイしたアプリの URL の末尾に /house を付加します。例:https://my-heroku-app.herokuapp.com/house
  • Method:POST
  • トークンをコピーし、ブラウザのタブをもう 1 つ開いて、Heroku ダッシュボードにログインし、Heroku の SLACK_HOUSE_TOKEN 環境変数にそのトークンの値を設定します([Setting]>[Reveal Config Vars])

Customize Name:DreamHouse

  • [Save Integration]をクリックします。


Slash Commandsの追加はトップページからやるほうが速いかもしれません。
f:id:tyoshikawa1106:20160723021229p:plain


こんな感じです。
f:id:tyoshikawa1106:20160723021318p:plain


Integration Settingsはこんな感じ。
f:id:tyoshikawa1106:20160723022037p:plain


Herokuの環境変数にトークンを登録します。Herokuのダッシュボードから更新できます。
f:id:tyoshikawa1106:20160723021724p:plain


接続アプリケーションのCallbackURLには一時的なURLをセットしていましたが、HerokuアプリのURLを入れておけばいいと思います。
f:id:tyoshikawa1106:20160723023132p:plain

動作確認

これで設定ができました。試しに次のCommandを試してみます。

/house search cambridge


実行結果です。Slack APIをつかってSalesforce組織の情報にアクセスすることができました。
f:id:tyoshikawa1106:20160723022841p:plain


その他こんなCommandを試せるようになっています。

/house changes
/house search boston 600000 700000

ボット

ボットを作成するには、Slack への WebSocket 接続を開くアプリケーションを作成します。そのアプリケーションでは、ボットが招待されたチャネルからのメッセージに加え、Slack ユーザーがボットに対して送信するダイレクトメッセージも受信します。

アプリでは、パターンマッチングアルゴリズムと自然言語処理ツールを使って、メッセージに返信すべきかどうか、どのように返信するかを判断できます。


これもGitHubにコードと利用手順が公開されています。

接続アプリケーションの設定
  • 接続アプリケーション名:DreamhouseJpSlackBot(または任意の名前)
  • API 参照名:DreamhouseJpSlackBot
  • 取引先責任者メール:自分のメールアドレスを入力します。
  • OAuth 設定の有効化:チェックボックスをオンにします。
  • コールバック URL:http://localhost:8200/oauthcallback.html
  • 選択した OAuth 範囲:フルアクセス(full)
  • [保存]をクリックします。
Slack でBotユーザーを作成する

Botの作り方はこちら。Custom bot usersの辺りにあるcreating a new bot userリンクから作成できます。作成後に表示されるAPI Tokenが必要になります。
Bot Users | Slack

Herokuアプリをデプロイ

これもHerokuボタンが用意されているので簡単にデプロイできます。またデプロイ時に環境変数も登録します。

  • [SLACK_BOT_TOKEN]:先ほど作成したSlack Botユーザのトークンを入力します。
  • [SF_CLIENT_ID]:Salesforce 接続アプリケーションのコンシューマキーを入力します。
  • [SF_CLIENT_SECRET]:Salesforce 接続アプリケーションのコンシューマの秘密を入力します。
  • [SF_USER_NAME]:Salesforce 統合ユーザーのユーザー名を入力します。
  • [SF_PASSWORD]:Salesforce 統合ユーザーのパスワードを入力します。


Botはできたのですが、ちょっとうまく動かすことができませんでした。
f:id:tyoshikawa1106:20160723033316p:plain


とりあえずこういうものが用意されているみたいです。

関連記事