LoginSignup
5
4

More than 1 year has passed since last update.

Salesforce Apex SDK for Slackの使い方1

Last updated at Posted at 2022-07-11

2022.7月現在パイロット状態です。今後のリリースによっておそらくアプローチ方法は変わると思いますが、現時点でのチュートリアルを記しておきます。自分用の備忘録です。

オフィシャルのページはこちら

オプトインしましょう

以下のDev Hubに連動しますが、Dev Hub組織でSlackの機能をオプトインしてください。
僕の場合は、本番環境をDev Hub組織として使っていますので、本番環境でオプトインしました。

Apex_で_Slack_アプリケーションを作成___Salesforce.png

DevHub組織を有効化

Dev_Hub___Salesforce.png

もし、Dev Hub組織が有効化されていない場合はSalesforceの設定画面より有効化しましょう。
ソース追跡の有効化はpushする際に必須ぽいのでしておいてください。
同時にマイドメインの設定が必要です。おそらくデフォルトのまま使っている人はいないと思いますが念の為。

権限セットを作る

アプリからSalesforceにアクセスするための権限セットが必要です。
権限セット___Salesforce.png

名前は任意です。作成したら、画像の下部にシステム権限という項目がありますのでそちらをクリックしてください。
必須な権限はこちらです

権限セット___Salesforce.png

権限セット___Salesforce.png

権限セットを作成したら、管理者ユーザー(僕の場合は自分ですが)に割り当てましょう。

接続アプリケーションを作る

Salesforceの設定画面から、アプリケーションマネージャを選択。新規接続アプリケーションボタンを押します。

アプリケーションマネージャ___Salesforce.png

コールバックURLと権限はこのような形
http://localhost:1717/OauthRedirect
アプリケーションマネージャ___Salesforce-2.png

VS CodeでDev Hub組織を認証します

まずは、作業フォルダを開いておいてください。
ターミナルを開き以下のコマンド

sfdx force:project:create -n <project_name>
弊社の場合は本番環境を使っているので
sfdx force:project:create -n ProdOrg
としました。

これで必要なファイルが作られますので、フォルダに移動します

cd <project_name>

以下のコマンドで認証をしましょう

sfdx auth:web:login -a devhub -d -r https://<my_domain>.my.salesforce.com

すると、SalesforceのOAuth画面に移動して認証が始まるのでメアドとパスを入れて認証します。

作業の開始_—_salesforce_scratch.png

プロジェクトの設定を変更する

config/project-scratch-def.jsonを変更します。

project-scratch-def_json_—scratch_220711_と_SalesForecast_2021_cls—_sf_full.png

featuresにSLACKを追加です。パッケージアプリを作る場合は"SLACKPACKAGING" も必要になるようなので気をつけましょう。

project-scratch-def_json_—_scratch_220711.png

sfdx-project.jsonを変更する

sfdx-project_json_—salesforce_scratch_と_Slack_____info_hd___Leave_a_Nest_Co__ltd.png

"sfdcLoginUrl": "https://<my_domain>.my.salesforce.com",

sourceApiVersionは54.0以降である必要があります。

Scratch 組織を作る(組織シェイプを利用する)

Salesforce CLI で本番組織にログインする

ターミナルから以下のコマンドを打ちます。
sfdx force:auth:web:login -a ProdOrg

ProdOrg から組織シェイプを作成する

ターミナルから以下のコマンドを打ちます。
sfdx force:org:shape:create -u ProdOrg
sfdx-project_json_—_salesforce_prod.png

Scratch組織を組織シェイプから作成する

参考

config/ にファイルが必要なのでそれを作成してください。

config/shape-scratch-def.json
{
    "orgName": "Scratch Org with Shape",
    "sourceOrg": "00DXXXXXXXXXXXXXXX"
}

sourceOrgはDev Hub組織の組織IDを入れます。

*弊社環境だと現状エラーで進めなかったので組織シェイプを利用する方法についてはここまでで保留。

Scratch 組織を作る(組織シェイプを利用しない)

シンプルにやる場合はこちら

ターミナルから以下のコマンドを打ちます。

sfdx force:org:create -f config/project-scratch-def.json -a scratch1 -s -d 30

すると、ユーザー名が表示されるはずです。

sfdx-project_json_—_salesforce_scratch.png

Scratch 組織のユーザー情報をゲットします

ターミナルから以下のコマンドを打ちます。

sfdx force:user:password:generate --targetusername scratch1

こうすることで、ユーザーのパスワードを取得することが出来ます。

sfdx-project_json_—_salesforce_scratch-2.png

Scratch 組織情報を表示する

ターミナルから以下のコマンドを打ちます。

sfdx force:user:display -u scratch1

これでログインURL、ユーザー名、パスワードが取得できますので、スクラッチ組織にログインしていきましょう。

Slackの規約に同意する

Slack_for_Salesforce_を有効化___Salesforce.png

権限セットを作成して割り当てる

先程Dev Hubで作成したものと同じものを作って、作成されたユーザに割り当ててください。

Apex Classを作成する

ここはVS Codeから普通に作ります。

classes/SayHello.cls
// SayHello.cls
public class SayHello {
   public String hello() {
      return 'Hello World!';
   }
}

meta.xmlも作れと書いてありますが、VS Codeが作ってくれると思いますので割愛。

sfdx force:source:push とかいてありますが、自分の環境では保存と同時にpushするようになってるのでこれもやらずに進みます。

以上がここまでの手順

Slack アプリを作る

ここからの部分を続けていきます。

Slackアプリを作成

Slackアプリページを開いて、Create New Appの緑のボタンを押します。
Scratch ではなくてマニフェストから作るを選択してください。

Slack_API__Applications___Slack.png

インストールしたいSlackワークスペースを選択してNextを押します。

するとマニフェスト貼り付け画面が出てきますので、ここに貼り付けます。

全部上書きでOKです。

Slack_API__Applications___Slack-2.png

貼り付けるとこんな感じなのでNextを押しましょう。

Slack_API__Applications___Slack-3.png

出来たらまずこのボタンを押してワークスペースにインストールします

Slack_API__Applications___Leave_a_Nest_Co__ltd__Slack.png

インストールしたら、App IDをコピーしてからApp Manifest画面を開いてください。

Slack_API__Applications___Leave_a_Nest_Co__ltd__Slack-2.png

となっている部分を先程コピーしたApp IDに置き換えて保存します。

Slack___Slack_API__Applications___Leave_a_Nest_Co__ltd_.png

うまくいったかどうかは、Click here to verifyを押せば分かります。

App-Level Tokensの作成

Basic Informationsの真ん中あたりに、App-Level TokensというブロックがあるのでGenerate Token and Scopesボタンを押して作ります。こんな感じです。

Slack_API__Applications___Leave_a_Nest_Co__ltd__Slack-3.png
ここで出てくるTokenは、後で出てくる HelloSlackApp.slackapp-meta.xml のappTokenに使います。

Scratch組織をVS Codeで開く

VS Codeで新しいウィンドウを開き、先程作ったスクラッチ組織で環境構築してください。
マニフェストを使ってプロジェクトを作成し、Sandbox環境で先程手に入れたIDとパスワードでログインすればOKです。

viewdefinitions を作成する

force-app/main/defaultの中にフォルダを作成しましょう。
force-app/main/default/viewdefinitions

注意:Sandboxでも行けるかとおもって試してみたのですが、viewdefinitionsがアップ出来ないみたいです。

この中にファイルを2つ作ってください。

force-app/main/default/viewdefinitions/hello.view
description: 'Say Hello Example'
schema:
    properties:
        name:
            type: string
            required: true
components:
    - definition: modal
      properties:
          title: 'Hello {!view.properties.name}'
      components:
          - definition: section
            properties:
                text: 'You did it!'

このアプリでは、/apex-hello World
とスラッシュコマンドを打つと、モーダルでYou did it! と返してくれるというシンプルなアプリなのですが、Slackに戻す部分はviewdefinitionsの.viewファイルが担うみたいですね。
Bolt使ってると、JSONで書くのですが、こっちのほうがわかりやすくて良いかもしれない。

force-app/main/default/viewdefinitions/hello.view-meta.xml
<?xml version="1.0" encoding="UTF-8"?>
<ViewDefinition xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isProtected>false</isProtected>
    <masterLabel>Hello World Example</masterLabel>
    <targetType>slack</targetType>
</ViewDefinition>

Sandboxではなく、Scratch組織だとうまく転送がかかるはずです。

slackappsフォルダを作成

force-app/main/default/slackappsを作成してください
その中にファイルを2つ作ります

force-app/main/default/slackapps/HelloSlackApp.slackapp
description: Hello World Example App
commands:
    /apex-hello:
        action:
            definition: apex__action__SayHello
        title: Say Hello
        description: A command to say Hello
force-app/main/default/slackapps/HelloSlackApp.slackapp-meta.xml
<?xml version="1.0" encoding="UTF-8"?>
<SlackApp xmlns="http://soap.sforce.com/2006/04/metadata">
    <appKey>*</appKey>
    <appToken>*</appToken>
    <botScopes>
        chat:write,chat:write.public,incoming-webhook,channels:history,groups:history,channels:read,reactions:read,commands
    </botScopes>
    <clientKey>*</clientKey>
    <clientSecret>*</clientSecret>
    <isProtected>false</isProtected>
    <masterLabel>Hello Slack App</masterLabel>
    <signingSecret>*</signingSecret>
    <userScopes>
        im:read,im:write,channels:read,channels:write,chat:write,groups:read,mpim:read,mpim:write,users:read,groups:write
    </userScopes>
</SlackApp>
  • appKeyは、SlackアプリのApp ID
  • appTokenは、先程作ったApp-Level Tokensです
  • clientKeyは、Client ID
  • clientSecretはそのままですね
  • signingSecretもそのままです

作成したら、sfdx force:source:pushでプッシュしましょう。
hello_view-meta_xml_—_scratch_org.png

Slack Actionをデプロイします

これは先程作ったSayHello.clsを更新します。

force-app/main/default/classes/SayHello.cls
public class SayHello extends Slack.SlashCommandDispatcher {

   public override Slack.ActionHandler invoke(Slack.SlashCommandParameters parameters, Slack.RequestContext context) {
       return Slack.ActionHandler.modal(new Handler(parameters, context), 'Say Hello');
   }

   public class Handler implements Slack.ModalHandler {

       Slack.SlashCommandParameters parameters;
       Slack.RequestContext context;

       public Handler(Slack.SlashCommandParameters parameters, Slack.RequestContext context){
           this.parameters = parameters;
           this.context = context;
       }

       public Slack.ModalView call() {
           String name = parameters.getText();
           Slack.ViewReference viewReference = Slack.View.hello.get();
           viewReference.setParameter('name', name);
           Slack.ModalView modalView = new Slack.ModalView.builder()
               .viewReference(viewReference)
               .build();
           return modalView;
       }
   }
}

Scratch組織にも接続アプリケーションを作る

設定は先程行ったものと同じでOKです。

Slackからテストしてみる

適当なチャンネルにアプリを招待する

チャンネルにアプリを入れたあとにスラッシュコマンドを入れてみましょう
/apex-hello

すると、Salesforceと接続するボタンが出てきます。

Slack___05-george___Leave_a_Nest_Co__ltd____1_個の新しいアイテム.png

ボタンを押したらOAuth画面が出ますので、Sandbox側を選んでください

Slack_Connect___Salesforce.png

携帯の認証登録画面になるので、SMSで認証します

携帯電話を登録___Salesforce.png

Slackのインストール画面にいくので、チャンネルを選択してインストール

_your-name__Say_Hello_App_が_Leave_a_Nest_Co__ltd__Slack_ワークスペースにアクセスする権限をリクエストしています___Leave_a_Nest_Co__ltd__Slack.png

今度はSalesforceの権限確認画面にいくので「Slack に Salesforce アカウントへのアクセスを許可することに同意します」にチェックをいれて許可ボタンを押しましょう。

:tada:これで接続成功です

Slack_の接続に成功しました___Salesforce.png

もう一度Slackからコマンドを試す

/apex-hello World

するとこんな風に返ってきます。
You did it !

Slack___05-george___Leave_a_Nest_Co__ltd____2_個の新しいアイテム-2.png

以上です

覚えることが多い…
一通りチュートリアルが終わったので、その他のサンプルを見ながら、なれていきたいと思います。

続きはこちら

5
4
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
5
4