グループ・チャット
Microsoft TeamsおよびSlackのチャネルでは、スキルおよびデジタル・アシスタントをグループ・チャットで使用できるようにすることが可能です。グループ・チャットでは、複数の人間の参加者が同一の会話でデジタル・アシスタントとコラボレートできます。
グループチャットは、人間の参加者のグループに対して、スキルがアクションを実行したり情報を提供したりする必要がある状況に適しています。グループ・チャットでは:
- 会話のすべての内容がすべての参加者に表示されます。
- スキルが応答するメッセージは、スキルを表すMicrosoftボットまたはSlackアプリケーションのメンションをユーザーが含めたもののみです。つまり、グループ・チャットの人間の参加者は、スキルを介さずに参加者のみでメッセージを交換できます。たとえば、スキルに何をリクエストするかについてディスカッションで合意してから、リクエストを行う場合があります。
- デフォルトでは、スキルがユーザーを仲裁することはありません。入力は、すべて同一ユーザーからのものであるかのように、受け取った順に応答します。つまり、あるユーザーが別のユーザーと矛盾していても、ボットは両者を調整しようとはしません。そのためになんらかのロジックがカスタム・コンポーネントにプログラミングされている場合を除きます(ただし、その場合、ボットが明示的にトラッキングできるログイン・ユーザーであることがおそらく必要になります)。
- グループ・チャット内でスキルに対して行われる問合せは、問合せを行ったグループ・チャット内のユーザーのアイデンティティ(および認証を必要とするスキルの場合は対応する資格証明)に基づきます。
グループ・チャットのすべての参加者の認証が必要になるようにスキルを設定することもできます。
グループチャットが機能するには、Microsoft TeamsまたはSlackのチャネルを設定する必要があります。
Microsoft Teamsチャネルを使用している場合は、グループ・チャットを有効にするために適切なボット・スコープを選択していることを確認します。「チーム」または「グループ・チャット」(あるいはその両方)を選択できます(後者はユーザー定義グループです)。
Slackをチャネルとして使用している場合は、Slackアプリケーションに次のイベント・サブスクリプションがあることを確認します:
message.im
app_mention
message.mpim
message.channels
グループ・チャットでスキルまたはデジタル・アシスタントが使用されるようにチャネルを設定しておくと、ユーザーが、対応するMicrosoftボットまたはSlackアプリケーションをグループに追加できます。会話では、ユーザー・メンションを使用してボットまたはアプリケーションを起動できます。
グループ・チャットでのユーザー認可 🔗
グループ・チャットをターゲットにするスキルでは、ユーザーがメッセージを送信するための認可が必要になる場合があります。複数のユーザーが1セッション内でスキルにアクセスする可能性があるため、最初に認可状態が生成されるユーザーのみでなく、各ユーザーの認可を適切に処理するようにスキルを構成する必要があります。次を使用してこれを行います:
- 認可を実施する必要がある状態。これにより、ユーザーがそのような状態にあるときは、認可されないかぎりチャットにメッセージを入力できなくなります。
- 未認可のユーザーが、保護された状態でチャットにメッセージを入力しようとしたときに、ユーザーを適切な認可状態に導く「ユーザーの認可」イベント。
- 未認可のユーザーがチャットでメッセージを入力する状態を示す
skill.system.event.value.authorizeUser.requestedState
変数(つまり、認可が正常に行われた後でリダイレクトする状態)。 - 会話がグループ・チャットかどうかを判別する必要があるときに参照できる
system.message.channelConversation.groupConversation
ブール型プロパティ。
グループ・チャットでのユーザー認可の実施 🔗
次に、グループ・チャットで各ユーザーに認可を強制する一般的なステップを示します:
- スキルの状態の大部分に対して認証を実施する必要があると仮定して、デフォルトで認可を必要とするようにスキル全体を構成します。手順は次のとおりです:
をクリックしてサイド・メニューを開き、「開発」→「スキル」を選択して、スキルを選択します。
- スキルの左側のナビゲーションで、
をクリックします。
- 「構成」タブをクリックします。
- 「認可が必要」プロパティを
true
に設定します。
これを行うと、ダイアログ・フローのすべての状態の「認可が必要」プロパティのデフォルト値が設定されます。この値は、個々の状態についてオーバーライドできます。
- 認可を必要としない状態の場合は、「認可が必要」プロパティを
false
に設定します。例:ノート
または、スキルの「認可が必要」プロパティをfalse
に設定してから、個々の状態に対する「認可が必要」プロパティをtrue
に設定できます。 - ユーザー認証用のダイアログ・フローにOAuthアカウント・リンクまたはOAuth 2.0アカウント・リンク・コンポーネントを追加します。
ユーザー・スコープ変数を使用して、アクセス・トークンおよび認証済ユーザーIDを格納します。そうしないと、ユーザーがチャットに参加するたびに、その認可情報によって、チャットに参加した直前のユーザーの認可情報がオーバーライドされます。
pass
遷移では、skill.system.event.value.authorizeUser.requestedState
システム変数を使用して、ユーザーを会話に入ろうとしていた状態に戻します。 - 認可失敗の状態を追加します。たとえば、次の場合に別々の状態になることがあります。
- 認可の失敗がグループ・チャットで発生する場所。このケースでは、該当ユーザーは認証されない可能性がありますが、他の参加者の会話は続行できます。
- 認可の失敗が個々のチャットで行われる場合、会話を単に終了できます。
ノート
この場合、ephemeral
カスタム・チャネル・プロパティを使用して、そのレスポンスをトリガーしているユーザーにのみメッセージを表示できます。responseItems: - type: "text" text: "Sorry ${profile.firstName}, you are not authorized to use this skill" channelCustomProperties: - channel: "slack" properties: ephemeral: true
- フローの構成の「イベント・マッピング」セクションで、「ユーザーの認可」イベントをユーザー認証状態にマッピングします。
このイベントは、まだ認可されていないユーザーが会話に参加しようとしたときにトリガーされ、認可が必要な状態に到達します。
Slackグループ・チャットでのユーザー指定のないメッセージの有効化 🔗
Slackチャネルを構成して、Slackアプリケーションのユーザー・メンションなしでSlackアプリケーションにメッセージを送信できます。この動作は、多くのユーザーがいるSlackチャネルに特に役立つ可能性があり、Slackアプリケーションの応答にユーザー・メンションが必要であることをすべてのユーザーが知らない場合があります。ユーザーサポートチャネルはその一例です。
ユーザーのメンションなしでメッセージをSlackグループ・チャットでデジタル・アシスタントに渡すことができるようにするには:
- チャネルを作成するか、後でチャネルの構成を変更する場合は、「グループ・チャットでのアプリケーション・メンションのないメッセージの許可」スイッチをONに設定します。
ユーザーがSlackアプリケーションへのメッセージの送信を停止できるようにします 🔗
ユーザーがデジタル・アシスタントに送信されるSlackアプリケーションについて言及せずにメッセージを有効にしたSlackチャネルでは、ユーザーがこれらのメッセージをデジタル・アシスタントに送信することを停止する場合があります。この場合、アンビエント・モードを開始して、Slackアプリケーションを介してメッセージがデジタル・アシスタントに送信されないようにできます。これを行うには、ダイアログ・フロー定義でsystem.startAmbientMode
ポストバック・アクションを指定します。
アンビエントモードを開始するためのポストバックは次のようになります。
responseItems:
- type: "text"
text: "Do you want to stop chatting with the skill?"
name: "stopMessages"
actions:
- label: "Stop chatting with the skill"
type: "postback"
payload:
action: "system.startAmbientMode"
name: "stop"
ユーザーがこのオプションを選択すると、ユーザーがSlackアプリケーションのユーザー・メンションをメッセージに再度入力するまで、ユーザーの次のメッセージはデジタル・アシスタントに送信されません。
同様に、ダイアログ・フロー定義にsystem.stopAmbientMode
ポストバック・アクションを追加して、アンビエント・モードを終了できます。
グループ・チャットに関するユーザーのための注意事項 🔗
グループ・チャットで機能するスキルを作成する際には、スキルのユーザーが次のことを認識するようにしてください:
- グループ・チャットでスキル(またはデジタル・アシスタント)を使用するには、対応するMicrosoft TeamsボットまたはSlackアプリケーションにユーザー・メンション(
@bot_name
)で対処します。ノート
Slackチャネルの場合、ユーザー・メンションなしでSlackアプリケーションにメッセージを送信するオプションもあります。Slackグループ・チャットでのユーザー・メンションなしのメッセージの有効化を参照してください。 - ボットからのレスポンスを予期してメッセージを入力する際は、常にボットのユーザー・メンションを含める必要があります。
- メッセージが他の人間の参加者のみを対象としている場合は、ボットのユーザー・メンションを含めないでください。ボットはそのようなメッセージを無視します。
- Slackグループ・チャットでは、ボットが最初に会話に導入されたスレッドでチャットを保持する必要があります。他のユーザーがその会話のスレッド外で応答すると、前の会話から独立した新しい会話が作成されます。
- グループ・チャットの参加者がボットをリクエストすると、ボットはどのユーザーがリクエストを行ったかを認識します。したがって、該当する場合、リクエストに対するレスポンスは要求者のアイデンティティおよび資格証明に基づきます。その後、別の参加者がリクエストを行うと、そのリクエストに対するレスポンスは、その参加者のアイデンティティと資格証明に基づきます。
- グループ・チャットに参加できたすべてのユーザーは、ボットのすべてのレスポンスを見ることができます。グループ・チャットの参加者は、他の参加者が見るべきでないボットの情報を明らかにしてはなりません。