ごった煮

色々な事を書いてます

Bot Connectorのメッセージタイプについて

Bot Connectorで使用するメッセージタイプの概要についてざっくりとまとめます。

メッセージタイプ

規定されているメッセージタイプは、全部で8つあります。

メッセージの中身を定義しているMessage型のTypeフィールドにセットします。

ライブラリにEnum型で定義されているといった部分が見当たらないので本当にこれらが必要なのかは若干よくわからなん感じです。

ちなみにMessageタイプだけあれば大概どうにかなるような印象もあります。

Message

Botとユーザがメッセージをやり取りするときにセットするタイプです。

基本的に通常やり取りするMessageのTypeには、これをセットします。

Ping

システムが生きているかの確認などに使いましょうって定義されているタイプです。

Pingの場合、レスポンスメッセージのTypeもPingをセットする必要があります。

DeleteUserData

ユーザからの要求によってユーザ情報を削除するために使いましょうと定義されているタイプです。

通常, Botはユーザとの会話情報へのアクセス権を持っていますが、コンプライアンス的にそれを常に保持し続けることがまずい場合が多々あります。

そのためこのTypeを受け取った場合は、ユーザの個人情報を削除する必要が発生します。

レスポンス内容は、DeleteUserDataをセットしたメッセージで、データを適切に削除した旨などを通知する必要が発生します。

BotAddedToConversation

Botを会話に追加する際に投げるためと定義されているタイプです。

任意のメッセージなしにBotを会話に追加する場合、追加時にこのメッセージが送信されるようです。

BotRemovedFromConversation

Botを会話から外す際のメッセージにセットするためのタイプです。

任意のメッセージなしに会話からBotを除外することができるチャンネルの場合、除外時にこのタイプが設定されたメッセージを送信するようです。

UserAddedToConversation

会話に新規にユーザが追加されたことを通知するためのメッセージにセットするタイプです。

任意のメッセージなしに会話にユーザを追加可能なチャンネルの場合で、ユーザ追加を検出できるチャンネルの場合、追加時にこのタイプのメッセージが送信されます。

UserRemovedFromConversation

会話からユーザが外されたことを通知するためのメッセージにセットするタイプです。

チャンネルがユーザを任意のメッセージなしで会話から除外可能な場合、除外時にこのメッセージが送信されます。

EndOfConversation

会話が終了したことを知らせるためのメッセージにセットするタイプです。

ユーザがウィンドウを閉じるなどのアクションを起こして会話を打ち切った場合などにそれを検出可能なチャンネルの場合にこのメッセージが送信されます。

コードサンプル

サンプルは、Bot Frameworkのテンプレートに実装してあります。

以下のような感じで、タイプ毎に処理を実装してやるとよいかと思われます。

        private Message HandleSystemMessage(Message message)
        {
            if (message.Type == "Ping")
            {
                Message reply = message.CreateReplyMessage();
                reply.Type = "Ping";
                return reply;
            }
            else if (message.Type == "DeleteUserData")
            {
                // Implement user deletion here
                // If we handle user deletion, return a real message
            }
            else if (message.Type == "BotAddedToConversation")
            {
            }
            else if (message.Type == "BotRemovedFromConversation")
            {
            }
            else if (message.Type == "UserAddedToConversation")
            {
            }
            else if (message.Type == "UserRemovedFromConversation")
            {
            }
            else if (message.Type == "EndOfConversation")
            {
            }

        return null;
    }

レスポンスについて

これらのメッセージのレスポンスは、同じタイプをMessage型にセットしたメッセージとして返します。

Textが何かある場合は、ユーザに対してメッセージが通知が行われます。

以下のようにCreateReplyMessageメソッドを使用すると同一タイプの返信用メッセージを生成してくれるので有効活用しましょう。

message.CreateReplyMessage();

まとめ

基本的にこれらのタイプは、そこまで厳密に考える必要もなさそうな雰囲気ですが、何かしらアクションを起こす際にこれらのメッセージタイプを返してやるとよりクライアントに対して丁寧なBotになるかと思われます。(例えばEndOfConversation時に会話をリセットするなど)