2022.7月現在パイロット状態です。今後のリリースによっておそらくアプローチ方法は変わると思いますが、現時点でのチュートリアルを記しておきます。自分用の備忘録です。
オフィシャルのページはこちら
オプトインしましょう
以下のDev Hubに連動しますが、Dev Hub組織でSlackの機能をオプトインしてください。
僕の場合は、本番環境をDev Hub組織として使っていますので、本番環境でオプトインしました。
DevHub組織を有効化
もし、Dev Hub組織が有効化されていない場合はSalesforceの設定画面より有効化しましょう。
ソース追跡の有効化はpushする際に必須ぽいのでしておいてください。
同時にマイドメインの設定が必要です。おそらくデフォルトのまま使っている人はいないと思いますが念の為。
権限セットを作る
アプリからSalesforceにアクセスするための権限セットが必要です。
名前は任意です。作成したら、画像の下部にシステム権限という項目がありますのでそちらをクリックしてください。
必須な権限はこちらです
権限セットを作成したら、管理者ユーザー(僕の場合は自分ですが)に割り当てましょう。
接続アプリケーションを作る
Salesforceの設定画面から、アプリケーションマネージャを選択。新規接続アプリケーションボタンを押します。
コールバックURLと権限はこのような形
http://localhost:1717/OauthRedirect
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画面に移動して認証が始まるのでメアドとパスを入れて認証します。
プロジェクトの設定を変更する
config/project-scratch-def.json
を変更します。
featuresにSLACKを追加です。パッケージアプリを作る場合は"SLACKPACKAGING" も必要になるようなので気をつけましょう。
sfdx-project.json
を変更する
"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
Scratch組織を組織シェイプから作成する
参考
config/
にファイルが必要なのでそれを作成してください。
{
"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
すると、ユーザー名が表示されるはずです。
Scratch 組織のユーザー情報をゲットします
ターミナルから以下のコマンドを打ちます。
sfdx force:user:password:generate --targetusername scratch1
こうすることで、ユーザーのパスワードを取得することが出来ます。
Scratch 組織情報を表示する
ターミナルから以下のコマンドを打ちます。
sfdx force:user:display -u scratch1
これでログインURL、ユーザー名、パスワードが取得できますので、スクラッチ組織にログインしていきましょう。
Slackの規約に同意する
権限セットを作成して割り当てる
先程Dev Hubで作成したものと同じものを作って、作成されたユーザに割り当ててください。
Apex Classを作成する
ここはVS Codeから普通に作ります。
// 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ワークスペースを選択してNextを押します。
するとマニフェスト貼り付け画面が出てきますので、ここに貼り付けます。
全部上書きでOKです。
貼り付けるとこんな感じなのでNextを押しましょう。
出来たらまずこのボタンを押してワークスペースにインストールします
インストールしたら、App IDをコピーしてからApp Manifest画面を開いてください。
となっている部分を先程コピーしたApp IDに置き換えて保存します。
うまくいったかどうかは、Click here to verifyを押せば分かります。
App-Level Tokensの作成
Basic Informationsの真ん中あたりに、App-Level TokensというブロックがあるのでGenerate Token and Scopesボタンを押して作ります。こんな感じです。
ここで出てくる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つ作ってください。
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で書くのですが、こっちのほうがわかりやすくて良いかもしれない。
<?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つ作ります
description: Hello World Example App
commands:
/apex-hello:
action:
definition: apex__action__SayHello
title: Say Hello
description: A command to say Hello
<?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でプッシュしましょう。
Slack Actionをデプロイします
これは先程作った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と接続するボタンが出てきます。
ボタンを押したらOAuth画面が出ますので、Sandbox側を選んでください
携帯の認証登録画面になるので、SMSで認証します
Slackのインストール画面にいくので、チャンネルを選択してインストール
今度はSalesforceの権限確認画面にいくので「Slack に Salesforce アカウントへのアクセスを許可することに同意します」にチェックをいれて許可ボタンを押しましょう。
これで接続成功です
もう一度Slackからコマンドを試す
/apex-hello World
するとこんな風に返ってきます。
You did it !
以上です
覚えることが多い…
一通りチュートリアルが終わったので、その他のサンプルを見ながら、なれていきたいと思います。
続きはこちら