アクティビティ ハンドラーとダイアログを実装する

完了

アクティビティを処理するロジックは、複数の方法で実装できます。 Bot Framework SDK により、以下のものを使用して会話を管理するボットを構築するのに役立つクラスが提供されています。

  • アクティビティ ハンドラー: さまざまな種類のアクティビティを処理するためにオーバーライドできるイベント メソッド。
  • ダイアログ: ステートフルなマルチターン会話を処理するためのより複雑なパターン。

アクティビティ ハンドラー

短くてステートレスな対話を行う簡単なボットの場合は、アクティビティ ハンドラーを使用して、イベント ドリブンの会話モデルを実装できます。このモデルでは、会話へのユーザーの参加やメッセージの受信といったアクティビティによって、イベントがトリガーされます。 チャンネルでアクティビティが発生すると、Bot Framework Service によってボット アダプターのプロセス アクティビティ関数が呼び出され、アクティビティの詳細が渡されます。 アダプターにより、アクティビティのターン コンテキストが作成されて、ボットの "ターン ハンドラー" にそれが渡され、そこで個々のイベント固有のアクティビティ ハンドラーが呼び出されます。

A bot uses activity handlers to handle turns in a conversation

ActivityHandler 基底クラスには、次のようなさまざまな種類の一般的なアクティビティのためのイベント メソッドが含まれます。

  • 受信したメッセージ
  • メンバーが会話に参加した
  • メンバーが会話から退出した
  • メッセージの応答を受け取った
  • ボットがインストールされた
  • その他...

カスタム ロジックを実装したい任意のアクティビティ ハンドラーをオーバーライドできます。

turn context

アクティビティは、ユーザーとボットの間の単一の双方向交換を表す "ターン" のコンテキスト内で発生します。 アクティビティ ハンドラー メソッドには "ターン コンテキスト" 用のパラメーターが含まれており、それを使用して関連する情報にアクセスできます。 たとえば、メッセージ受信アクティビティのアクティビティ ハンドラーには、メッセージのテキストが含まれます。

詳細情報

アクティビティ ハンドラーの詳細については、Bot Framework SDK のドキュメントを参照してください。

ダイアログ

"マルチターン会話" を可能にするためにターンとターンの間で "状態" を格納する必要がある複雑な会話フローの場合は、"ダイアログ" を実装できます。 Bot Framework SDK のダイアログ ライブラリで提供されている複数のダイアログ クラスを組み合わせて、ボットに必要な会話フローを実装できます。

ダイアログを使用してボットの会話を作成するには、2 つの一般的なパターンがあります。

コンポーネント ダイアログ

"コンポーネント" ダイアログは、その "ダイアログ セット" で定義されている他のダイアログを格納できるダイアログです。 多くの場合、コンポーネント ダイアログの最初のダイアログは "ウォーターフォール" ダイアログであり、会話を誘導するための一連の手順が順番に定義されています。 会話フローがユーザーから入力データを順番に収集することで構成されるよう、通常、各ステップは "プロンプト" ダイアログになります。 各ステップが完了してから、次のステップに出力が渡される必要があります

ピザ注文ボットの例のウォーターフォール ダイアログは、ピザのサイズの選択、次にトッピングの選択、最後に支払いをユーザーに求めるように、定義されています。

A component dialog contains a waterfall dialog for ordering a pizza

アダプティブ ダイアログ

"適応型" ダイアログは、フローの柔軟性が高く、会話の任意の時点で中断、キャンセル、コンテキストの切り替えが可能な、もう 1 つの種類のコンテナー ダイアログです。 このスタイルの会話では、ボットによって "ルート" ダイアログが開始されます。そこには、"アクション" のフロー (分岐とループを含むことができます) と、アクションまたは "認識エンジン" によって開始できる "トリガー" が含まれています。 認識エンジンによって自然言語入力 (通常は、Language Understanding サービスを使用) が分析され、意図が検出されます。意図は、会話のフローを変更するトリガーにマップできます。多くの場合、それは、独自のアクション、トリガー、認識エンジンを含む新しい子ダイアログを開始することによって行われます。

たとえば、ピザ注文ボットは、ユーザーを歓迎するだけのルート ダイアログで開始するかもしれません。 ピザを注文したいことを示すメッセージをユーザーが入力すると、認識エンジンによってこの意図が検出され、トリガーを使用して、ピザの注文に関する情報を収集するために必要なアクションのフローを含む別のダイアログが開始されます。 ピザ注文ダイアログの任意の時点で、ユーザーが他の操作 (注文の取り消しなど) の実行を望むことを示すメッセージを入力する可能性があり、ピザ注文ダイアログ (またはその親ダイアログ) の認識エンジンを使用して、会話フローで適切な変更をトリガーすることができます。

An adaptive dialog for ordering a pizza

Note

ダイアログを使用すると、アクティビティ ハンドラーだけを基にしたボットの場合より柔軟性が向上しますが、プログラミングがより複雑になる可能性があります。 Bot Framework SDK を使用してコードでダイアログを実装することもできますが、Bot Framework Composer のビジュアル デザイン インターフェイスを利用して、複雑なダイアログでボットを構築することを検討することもできます。