Bot Framework の IMessageActivity.From プロパティで取得できるユーザー情報 #cogbot

本稿は、Cogbot Advent Calendar 2017 に参加しています。

Bot Framework ではユーザーとの対話(Convesation)を管理しているので、対話しているユーザーの情報ももちろん取得できます。

実際に何が取得できるか、Dialog クラスのスケルトン実装をこんな風に変更して確認してみます。

public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
    var message = await argument;

    await context.PostAsync($"From Id: {message.From.Id}, " +
        $"From Name: {message.From.Name}, " +
        $"Channel Id: {message.ChannelId}");
    context.Wait(MessageReceivedAsync);
}

ユーザーが何を入力してもそのユーザーの情報を返すだけの処理ですが、対話しているユーザーの情報は message.From プロパティで取得します。

Bot Framework の テスト画面で実行するとこうなります。

bf_testclient

From Id: 3WBkTMj1lY2, From Name: You, Channel Id: webchat

Id プロパティはユーザーごとに一意の値、Name プロパティはユーザーの名前、ChannelId プロパティはチャットアプリケーションに対応する値です。

Bot Framework の長所の一つが、ユーザーが使用するアプリケーションに Bot のロジックが依存しないということがあります(Bot Framework では チャットアプリケーションの種類は Channel に抽象化されています)。
が、実際に試してみると、これらのユーザー情報はチャットアプリケーションごとに少しずつ意味合いが異なっています。
Bot の処理ではユーザー情報がほしいこともあるので、場合によっては Channel ごとに処理の分岐が必要になります。

本稿では、チャットアプリケーションごとに取得できるユーザー情報の違いを紹介します。


Bot アプリケーションを Azure に配置して、チャットアプリケーション各種でチャットするとどうなるか、今回は以下の 7 つで確認してみます。

bot_channels

  • Skype
  • Microsoft Teams
  • Skype for Business
  • Slack
  • Facebook Messenger
  • Email
  • Web Chat

■Skype

Bot Framework では定番の Skype から。しっかりユーザー情報が取れるかと思いきや、意外な落とし穴があります。

skype_from_property

Id “29:” で始まるユーザーに一意の値
Name (空)
ChannelId skype

Skype の場合は、Idは “29:” で始まる値になります。”29:” というプレフィックスは Skype 固定。Id の値はSkype アカウントごとに一意の値です。同じユーザーであれば、いったんサインアウトしたり、PC を変えたりしても、必ず同じ値になります。
Name は(意外なことに)空文字列です。表示名 (Display Name) のようなものは取得できません。
ChannelId は見た通りです。


■Microsoft Teams

Office 365 を利用している企業で、今後広がっていくであろう Teams です。MS 版 Slack ですね。Skype for Business の代替としても、今後はこちらを使ってくださいねという流れになっています。

teams_from_property

Id “29:” で始まるユーザーに一意の値
Name Office 365 の表示名
ChannelId msteams

ちょっと面白いのが Id です。Teams はインフラとしてコンシューマー Skype を使っているんですね。
Name では Office 365 の表示名が取れます。便利な場面もあると思いますが、メールアドレスとか SIP とかがほしいこともあるはず。これが取れません。ちょっと作戦を考える必要がありますね。


■Skype for Business

Office 365 を使っている企業で、今までよく使われていた(現在も使われている)Skype for Business。「これからもサービスを提供しますよ。でも、できるだけ Teams 使ってね」という流れですが、Bot Framework でユーザー情報を取得するという点では現時点では一番優秀(=痒い所に手が届く)なアプリケーションです。

sfb_from_property

Id SIP (ユーザーの主メールアドレス)
Name Office 365 の表示名
ChannelId skypeforbusiness

SIP (メールアドレス) も表示名も取れるので使いやすいですね。Teams もこうなってくれることを期待します。

Skype for Business のちょっと残念な点は、終息の方向に向かっていること、プレゼンスが不明となること、そして Bot からテキストしか返せないことです。ボタンやカードが返せないのはちょっと辛いですね。ということで、社内の Bot アプリもなんとか Teams に持っていきたいところです。


■Slack

Teams がお手本にしたコミュニケーションツールですね。業務でも、チーム単位では Slack を使っているというケースも多いのでは。

slack_from_property

Id ユーザーに一意の値
Name Slack の表示名 (Slack の設定によって、短い表示名か氏名のどちらか)
ChannelId skack

分かりやすい値ですが、Slack 側の個人の設定によって、短い表示名(@なんとか で指定するアカウント名)になったり氏名になったりするのがちょっとだけ扱いづらい感じがします。


■Facebook Messenger

業務 Bot として使うことは少なくて、基本的にプライベート利用や業務でも本当の意味でのチャットに使うと思いますが、念のため取得できるユーザー情報を見てみます。

facebook_from_property

Id ユーザーに一意の値
Name 英語の表示名
ChannelId facebook

これもわかりやすい値ですが、今回は日本語での表示名の取り方が分かりませんでした。「こんにちは、誰々さん」と言いたいこともあると思いますので、ちょっと困りますね。


■Email

Bot Framework の Channel でなかなか面白いのがメールではないでしょうか。連続して対話をするような用途には向かないと思いますが、例えば、Q&A とか乗換案内のように一往復で会話が終了するような場合は面白そうです。

email_from_property

Id ユーザーのメールアドレス
Name (空)
ChannelId email

Id にメールアドレスが入っています。これを元に Graph API で社内の情報を引き出すような Bot が作れそうです。Bot の Channel としては万能ではないですが、使い道を考えてみたいです。


■Web Chat

SSO で認証済みの Web ページだと動きが変わりそうですが、認証なしの場合は以下のようになりました。

webchat_from_property

Id ユーザーに一意の値
Name You 固定
ChannelId webchat

認証していないので当然ですが、Id に一意の値が入っているものの誰だかわかりませんし、Name も “You” 固定です。そんなものです。
認証済みだとどうなるか、どうするかは改めて。

参考までに、Bot Framework の Channel 設定ページに載っている IFrame には認証情報を渡せないので、SharePoint のページに貼り付けたとしても結果は同じです。

sharepoint_from_property


ユーザーを特定できるだけではなくて、ユーザー情報が取れれば、Bot の利用範囲が広がると思います。
現状ではどのように動作するのか、課題を解消するには Channel ごとにどうすればいいかを考える必要があります。それについては改めて紹介できればと思います。

広告
カテゴリー: Bot Framework, Bot Service, Cogbot タグ: , , パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

w

%s と連携中