Slack
Slackをデジタル・アシスタント(またはスタンドアロン・スキル)のチャネルとして使用すると、次のようになります:
- Slackによって、デジタル・アシスタントがSlackアプリケーションを介してホストされます。
- ユーザーは、Slackユーザー・インタフェースでSlackアプリケーションを介してデジタル・アシスタントとチャットします。
Slackアプリケーションについては、Slack開発者ドキュメントのBuilding Slack appsを参照してください。
デジタル・アシスタント用のSlackチャネルを作成するステップは、次のとおりです。
ステップ1: Slackワークスペースの取得
Slackでデジタル・アシスタント(またはスタンドアロン・ボット)を使用できるようにするには、Slackワークスペースが使用可能になっており、そこでSlackアプリケーションの作成に必要な権限を持っている必要があります。
そのようなワークスペースが使用可能になっていない場合は、独自のワークスペースを作成できます。SlackのCreate a new workspaceページを参照してください。
ステップ2: Slackアプリケーションの作成
-
Slackの「Your Apps」ページに移動します。
-
「Create a Slack App」をクリックします。
-
「Create a Slack App dialog」ダイアログで、「App Name」および「Development Slack Workspace」の各フィールドに入力し、「Create App」をクリックします。
アプリケーションが作成されると、その「Basic Information」ページが表示されます。
-
ページの「App Credentials」セクションまでスクロールし、「Client ID」、「Client Secret」および「Signing Secret」の値を書き留めます。
デジタル・アシスタントでチャネルを設定する際、これらの資格証明が必要になります。
ステップ3: SlackアプリケーションのOAuthスコープの追加
ボットおよびユーザーに付与する権限のOAuthスコープを追加します。
-
SlackアプリケーションのWebコンソールの左側のナビゲーションで、「Features」セクションから「OAuth and Permissions」を選択します。
-
ページの「Scopes」セクションにスクロールします。
-
スコープは次のカテゴリに分類されます:
- Bot Token Scopes
- User Token Scopes
-
「Bot Token Scopes」セクションで、許可するボットレベルの権限に対応するスコープを追加します。少なくとも、次のボット・トークン・スコープが必要です:
chat:write
im:history
users:read
スキルの機能によっては、他のスコープが必要になる場合があります。たとえば、添付の操作には、次のスコープが必要です。
files:read
files:write
-
「User Token Scopes」セクションで、許可するユーザーレベルの権限に対応するスコープを追加します。次のユーザー・トークン・スコープが必要です:
files:read
files:write
ボットの要件によっては、他のスコープの追加が必要になる場合があります。
ステップ4: ワークスペースへのアプリケーションの追加
-
「OAuth& Permissions」ページの上部までスクロールして戻ります。
-
OAuth「トークンとリダイレクトURL」セクションで、「ワークスペースにインストール」をクリックします。
アプリケーションが実行できることを示したページが表示されます。
-
ページの下部で、「Allow」をクリックします。
このステップを完了すると、左側のナビゲーションで「Apps」を選択して、Slackワークスペースにアプリケーションを表示できるようになります。
ステップ5: デジタル・アシスタントでのチャネルの作成
-
デジタル・アシスタントで、左側のメニューの「チャネル」をクリックして、「ユーザー」を選択します。
-
「+チャネル」をクリックして「チャネルの作成」ダイアログを開きます。
-
チャネルの名前を指定します。
-
チャネル・タイプとして「Slack」を選択します。
-
「クライアントID」、「クライアント・シークレット」および「署名シークレット」に、Slackアプリケーションの作成時に取得した値を入力します。
これらの値はSlackアプリケーションの「Settings」ページから取得できます。
- グループ・チャット用にチャネルを設定し、Slackアプリケーション名を指定せずにメッセージをグループに移動する場合は、「グループ・チャットでのアプリケーション・メンションのないメッセージの許可」を選択します。
-
「作成」をクリックします。
-
「チャネル」ページで、WebフックURLをコピーして、システム上の便利な場所に貼り付けます。Slackアプリケーションの設定を完了するには、これが必要です。
-
をクリックし、チャネルに関連付けるデジタル・アシスタントまたはスキルを選択します。
-
「ルート先」ドロップダウンで、チャネルに関連付けるデジタル・アシスタントまたはスキルを選択します。
- 「チャネル有効」コントロールをオンに切り替えます。
ステップ6: SlackアプリケーションでのWebフックURLの構成
-
SlackアプリケーションのWebコンソールの左側のナビゲーションで、「Interactivity & Shortcuts」を選択します。
-
「Interactivity」スイッチを「ON」にします。
-
「Request URL」フィールドと「Options Load URL」フィールドの両方に、デジタル・アシスタントでチャネルを作成したときに生成されたWebフックURLを貼り付けます。
-
「Save Changes」をクリックします。
-
左側のナビゲーションで、「OAuth & Permissions」を選択します。
-
「Redirect URLs」フィールドで、「Add New Redirect URL」をクリックします。
-
WebフックURLを貼り付け、
/authorizeV2
を追加して、「Add」をクリックします。 -
「Save URLs」をクリックします。
-
左側のナビゲーションで、「App Home」を選択します。
-
「Your App's Presence in Slack」セクションで、「Always Show My Bot as Online」スイッチをオンにします。
-
ページを下にスクロールして「タブの表示」セクションに移動し、「メッセージ」タブ・スイッチをオンにします。
-
「ユーザーにメッセージ・タブからのスラッシュ・コマンドおよびメッセージの送信を許可」チェック・ボックスを選択します。
-
左側のナビゲーションで、「Event Subscriptions」を選択します。
-
「Enable Events」スイッチを「ON」に設定します。
-
「Request URL」フィールドに、WebフックURLを貼り付けます。
URLを入力した後、緑色の「Verified」ラベルが「Request URL」ラベルの横に表示されます。
-
ページの「サブスクライブ・オブ・ボット・イベント」セクションを展開し、「ボット・ユーザー・イベントの追加」をクリックして、次のイベントを追加します:
message.im
- ボットをグループ・チャットで使用できるようにするには、次のイベントも追加します:
app_mention
message.mpim
message.channels
-
「Save Changes」をクリックします。
-
左側のナビゲーションで、「Manage Distribution」を選択します。
-
「Add to Slack」ボタンをクリックし、「Allow」をクリックします。
この時点で、メッセージ「You've successfully installed your App in Slack」が表示されます。
ステップ7: Slackでのボットのテスト
Slackチャネルとメッセージングの構成が完了したら、Slackでボット(デジタル・アシスタントまたはスキル)をテストできます。
-
アプリケーションをインストールしたSlackワークスペースを開きます。
-
左側のナビゲーション・バーで、デジタル・アシスタントに関連付けられているアプリケーションを選択します。
- 「Message」フィールドにテキストを入力して、デジタル・アシスタントとの通信を開始します。
Slackクライアントに「Sending messages to this app has been off」というメッセージが表示された場合は、Slackアプリケーションを再起動してみてください。これによってフィールドが有効にならない場合は、必要な権限がすべて付与されていることを確認してください。
"新規"と"クラシック"のSlackアプリケーション
Oracle Digital Assistantのバージョン20.6以降、Slackチャネルの作成は、Slackアプリケーションの更新されたOAuthフローに基づいています。この更新されたフローにより、より詳細なスコープが使用できるようになります。このガイドのチャネル設定の手順は、新しいOAuthフローに基づいています。
更新されたOAuthフローの詳細は、https://api.slack.com/authentication/oauth-v2を参照してください。
デジタル・アシスタント20.6より前に作成され、"クラシック"Slackアプリケーションに基づいている既存のチャネルは引き続き機能します。ただし、これらのクラシックSlackアプリケーションを新しいSlackアプリケーションに移行することを検討する必要があります。詳細は、https://api.slack.com/authentication/migrationを参照してください。
サポートされている機能
デジタル・アシスタントのSlackチャネルでは、次の機能がサポートされています:
- テキスト(送信と受信の両方)
- イメージ(送信と受信の両方)
- ファイル(送信では一部サポート、受信では完全サポート)
- 絵文字(送信では一部サポート、受信では完全サポート)
- リンク
- ポストバック
- カスタム・プロパティ
- カルーセル・コンポーネント(ただし、レンダリングは水平方向ではなく垂直方向)
- リスト・コンポーネント
Slackでは、Markdownを使用してメッセージを書式設定できます。Slack APIドキュメントのhttps://api.slack.com/reference/surfaces/formattingを参照してください。
異なる書式設定機能および構文を使用してスキルを複数のチャネルにターゲット指定する場合は、メッセージで基本的なHTMLマークアップを使用できます。その場合、メッセージがチャネルに送信されると、そのマークアップは自動的にSlackのマークダウン形式に変換されます。これは、Slackに加えて他のチャネルにスキルをターゲットにしている場合に特に役立ちます。チャネルでのリッチ・テキスト形式を参照してください。
メッセージの制約
デジタル・アシスタントのSlackチャネルには、次のようなメッセージの制約があります:
- テキスト・メッセージ
- テキスト・メッセージの最大長: 3000文字。長さが3000を超えると、テキストは複数のメッセージに分割されます。
- テキスト・アクション・ラベルの最大長: 30文字
- 許可されるテキスト・アクションのタイプ: ポストバック、URL
- 水平カード
- サポートの有無: いいえ。カードのレイアウトは垂直に変換されます。
- 垂直カード
- タイトルの最大長: 3000文字
- 説明の最大長: 3000文字
- カード・アクション・ラベルの最大長: 30文字
- カードの最大数: 100
- 許可されるカード・アクションのタイプ: ポストバック、URL
- 許可されるカード・リスト・アクションのタイプ: ポストバック、URL
- アタッチメント・メッセージ
- サポートの有無: はい
- 許可されるアクションのタイプ: ポストバック、URL
- アクション・ボタン
- グローバル・アクション・ラベルの最大長: 30文字
- 許可されるグローバル・アクションのタイプ: ポストバック、URL
Slackチャネルの拡張機能
Slackチャネルの場合、Slackに固有の機能でCommon Responseコンポーネントの機能を拡張できます。
拡張機能にアクセスするには、共通レスポンス・コンポーネントのメタデータのchannelCustomProperties
要素を使用し、適切なプロパティを設定します。コードのフォーマットは次のとおりです:
...
channelCustomProperties:
- channel: "slack"
properties:
PROPERTY_NAME: "PROPERTY_VALUE"
...
Slackチャネルで使用可能なカスタム・プロパティを次に示します:
名前 | 許可される値 | 適用対象 | 説明 |
---|---|---|---|
dropDownPlaceholder |
|
レスポンス・アイテム | このプロパティを使用して、ドロップダウン・リスト内に表示されるプレースホルダ・テキストを指定します。 |
ephemeral |
|
レスポンス・アイテム | 1人のユーザーだけにメッセージを表示するためにグループ・チャットで使用できます(そのユーザーが認証を試みたときなど)。 |
fields |
|
タイプがtext のレスポンス・アイテム。
|
このプロパティで指定した文字列値は、2列レイアウト(デスクトップ)または単一列レイアウト(モバイル)でフィールドとして表示されます。 |
renderActionsAsDropDown |
|
レスポンス・アイテム | デフォルトでは(このプロパティを設定しない場合)、アクションは次のように表示されます:
アクションをドロップダウン・リストに表示する場合は、アクションの数にかかわらず、このプロパティを アクションをボタンとして表示する場合は、アクションの数にかかわらず、このプロパティを ポストバック・アクションのタイプごとに異なる動作が必要な場合は、次のアクション・タイプごとにブール値を持つネストされたオブジェクトを使用できます:
ドロップダウン・メニューのアクションをレンダリングするために、Slackでは、静的アイテムを含む選択メニューが使用されます。https://api.slack.com/reference/messaging/block-elements#static-selectを参照してください。 |
showDatePicker |
|
タイプがtext のレスポンス・アイテム。
|
テキスト・メッセージの横に日付ピッカーを表示するには、true に設定します。
「状態の追加」ダイアログで、Slack日付ピッカー・テンプレートを選択して、日付ピッカーを条件付きで表示するためのサンプル・コードを取得できます。 https://api.slack.com/reference/messaging/block-elements#datepickerも参照してください。 |
showImageInAccessory |
|
タイプがcards のレスポンス・アイテム。
|
カード・イメージを中央に配置された大きいイメージではなく右側に小さいイメージとして表示するには、true に設定します。
|
次に、renderActionsAsDropDown
カスタム・プロパティの使用例を示します。
responseItems:
- type:
"text"
text: "Here is a list of the UI features of the Common Response Component:"
actions:
- ...
channelCustomProperties:
- channel: "slack"
properties:
renderActionsAsDropDown: false
次に、postbackActions
、cardPostbackActions
およびglobalPostbackActions
のネストされたプロパティを持つrenderActionsAsDropDown
カスタム・プロパティの使用例を示します。
responseItems:
- type: "text"
text: "Here is a list of the UI features of the Common Response Component:"
actions:
- ...
channelCustomProperties:
- channel: "slack"
properties:
renderActionsAsDropDown:
postbackActions: false
cardPostbackActions: true
globalPostbackActions: true
channelCustomProperties
の全般的な情報は、チャネル固有の拡張機能を参照してください。
Slackモーダル
共通レスポンス・コンポーネントでSlackモーダルを起動するボタンを作成できます。そのためには、ボタンのactionプロパティをsystem.openModal
に設定し、タイプmap
のsystem.dialogPayload
という名前の変数を含めます。アクション・メタデータは、次のスニペットのようになります:
actions:
- label: "Open Dialog"
type: "postback"
payload:
action: "system.openModal"
variables:
system.dialogPayload: ${dialogPayload}
system.dialogPayload
変数を参照するFreemarker式が.value
で終わっていません。これは、変数がJSONオブジェクトを保持し、Freemarker式が常に文字列に評価される必要があるためです。式${dialogPayload.value}
を使用すると、エラーがスローされます。JSONオブジェクトから文字列への変換は、.value
を省略した場合に行われます。
system.dialogPayload
の値は通常、カスタム・コンポーネントで設定されますが、インラインで定義することも、変数の設定コンポーネントを使用して定義することもできます。
カスタム・コンポーネントに
system.dialogPayload
変数を設定する場合は、エンティティ値をオプションとしてハードコードする必要はありません。かわりに、特定のアイテムのすべてのエンティティ値を反復処理し、使用可能な値のオプション配列を使用して選択要素タイプを動的に作成できます。
ユーザーがSlackダイアログで入力を送信すると、共通レスポンス・コンポーネントは、system.dialogSubmitted
遷移を、送信された値を処理する状態に移動するように設定します。送信された値は、同名の変数に格納されます。
送信されたフィールド値の処理方法は、ユーザーが決定します。共通レスポンス・コンポーネントでは、エンティティ値の自動更新は実行されません。変数に値のみが格納されます。通常、これらの値はカスタム・コンポーネントで処理するため、必要に応じて追加の検証を実行できます。最も単純な形式では、送信されたフィールド値を文字列変数に格納し、エンティティの照合コンポーネントを使用してエンティティ値を更新できます。
ヒント:
ダイアログ・フロー・エディタ(ビジュアル・モードとYAMLダイアログ・モードの両方)には、キット・ビルダーからの出力の一般的な、よくネストされたメタデータ・サンプルを含むSlack Block Kitテンプレートがあります。このような状態に対して複雑なメタデータが必要で、読みやすくしたい場合は、フローレベルのマップ変数を使用し、キット・ビルダーによって生成されたJSONオブジェクト全体をデフォルト値として貼り付け、変数をメタデータに組み込むことができます。Slackダイアログ・ペイロードでサポートされている要素タイプの詳細は、https://api.slack.com/reference/block-kit/block-elementsを参照してください。ダイアログ・ペイロードで指定する構造は、Slackのドキュメントで説明されている構造と同じである必要があります。
Slackダイアログでは、モーダルの送信時にレスポンスとしてエラー配列を返送することもできます。ただし、この機能は共通レスポンス・コンポーネント内では現在サポートされていません。かわりに、カスタム・コンポーネントの検証エラーに関連するカスタム検証およびユーザー・フィードバックを処理する必要があります。
Slackダイアログ・ウィンドウ
Slackでは、SlackダイアログのかわりにSlackモーダルを使用することをお薦めします。Slackモーダルをダイアログ・フローに組み込む方法の詳細は、Slackモーダルを、ダイアログをモーダルに変換する方法の詳細は、https://api.slack.com/block-kit/dialogs-to-modalsを参照してください。
共通レスポンス・コンポーネントでSlackダイアログを起動するボタンを作成できます。これを行うには、ボタンのactionプロパティをsystem.openDialog
に設定し、system.dialogPayload
という名前の変数を含めます。アクション・メタデータは、次のスニペットのようになります:
actions:
- label: "Edit"
type: "postback"
payload:
action: "system.openDialog"
variables:
system.dialogPayload: ${dialogPayload}
system.dialogPayload
変数を参照するFreemarker式が.value
で終わっていません。これは、変数がJSONオブジェクトを保持し、Freemarker式が常に文字列に評価される必要があるためです。式${dialogPayload.value}
を使用すると、エラーがスローされます。JSONオブジェクトから文字列への変換は、.value
を省略した場合に行われます。
system.dialogPayload
の値は通常、カスタム・コンポーネントで設定されますが、インラインで定義することも、変数の設定コンポーネントを使用して定義することもできます。
カスタム・コンポーネントに
system.dialogPayload
変数を設定する場合は、エンティティ値をオプションとしてハードコードする必要はありません。かわりに、特定のアイテムのすべてのエンティティ値を反復処理し、使用可能な値のオプション配列を使用して選択要素タイプを動的に作成できます。
ユーザーがSlackダイアログで入力を送信すると、共通レスポンス・コンポーネントは、system.dialogSubmitted
遷移を、送信された値を処理する状態に移動するように設定します。送信された値は、同名のダイアログ・フロー変数に格納されます。
送信されたフィールド値の処理方法は、ユーザーが決定します。共通レスポンス・コンポーネントでは、エンティティ値の自動更新は実行されません。値はダイアログ・フロー変数にのみ格納されます。通常、これらの値はカスタム・コンポーネントで処理するため、必要に応じて追加の検証を実行できます。最も単純な形式では、送信されたフィールド値を文字列変数に格納し、エンティティの照合コンポーネントを使用してエンティティ値を更新できます。
Slackダイアログ・ペイロードでサポートされている他のプロパティおよび要素タイプに関するドキュメントは、https://api.slack.com/dialogs#top-level_dialog_attributesを参照してください。ダイアログ・ペイロードの構造は、Slackのドキュメントで説明されている構造と同じである必要があります。
Slackダイアログでは、ダイアログの送信時にレスポンスとしてエラー配列を送り返すこともできます。ただし、この機能は共通レスポンス・コンポーネント内では現在サポートされていません。かわりに、カスタム・コンポーネントの検証エラーに関連するカスタム検証およびユーザー・フィードバックを処理する必要があります。