Microsoft Bot Frameworkでテキストメッセージではなく、添付ファイルを使用する

公開日: : 最終更新日:2016/07/16 Blog, Microsoft , , ,

activity.Attachmentsに添付ファイル入っている。
ContentTypeで画像か判断してMLで画像解析してみた。
AzureML側についてはここでは触れない。

public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
    if (activity.Type == ActivityTypes.Message)
    {
        ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));

        //メッセージレスポンス用
        Func<string, Task> doReplyAsync = async x =>
        {
            await connector.Conversations.ReplyToActivityAsync(activity.CreateReply(x));
        };

        if (activity.Attachments.Any())
        {
            try
            {
                await doReplyAsync("添付ファイルを受信しました。");
                foreach (var currentAttachment in activity.Attachments)
                {
                    if (!currentAttachment.ContentType.Contains("image"))
                    {
                        await doReplyAsync($"添付ファイル[{currentAttachment.Name}]は画像ではなかったためスキップされました。");
                        continue;
                    }
                    using (WebClient client = new WebClient())
                    using (Stream imageFileStream = client.OpenRead(HttpUtility.UrlDecode(currentAttachment.ContentUrl)))
                    {
                        string result;
                        try
                        {
                            //MLで数値解析
                            result = await GetResponseAsyncFromML(imageFileStream);
                            await doReplyAsync($"数値は、{result} と判断されました。");
                        }
                        catch (Exception e)
                        {
                            result = e.Message;
                            await doReplyAsync(result);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                await doReplyAsync("エラーが発生したため中断しました。");
                await doReplyAsync(ex.Message);
                await doReplyAsync(ex.StackTrace);
                throw;
            }
        }
        else
        {
            await doReplyAsync("画像を添付してください。");
        }
    }
    else
    {
        HandleSystemMessage(activity);
    }
    var response = Request.CreateResponse(HttpStatusCode.OK);
    return response;
}

数字の画像ファイルを渡すとなんの数字か答えてくれる。
数字画像の判定はAzureMLのサンプルモデルを使用。

SkypeとSlackとWebChatで試してみた。
Slackはよく動いている。
Skypeは内部エラーが発生している。
下のやつがWebChatです。動くかなー。(動かなかった…)

関連記事

Docker for Windows で ドライブ共有が出来ない

Shared Drives タブで Cドライブにチェックをして Apply を押す。 認証ダイ

記事を読む

【.NET】16進数文字列から色を設定する

文字列→Colorクラスへの変換メモ プログラム上でFromArgbメソッドに16

記事を読む

no image

【Cocos2d-x】Cocos2d-xセットアップ

メモ。Xcodeはインストール済、OSはMac10.9.5 必要なものをダウンロード&解凍

記事を読む

【ストアアプリ】画面遷移の基本①

こんにちは。 Windowsストアアプリをぼちぼち触り始めています。 WindowsRuntim

記事を読む

no image

【解決】Visual Studio 2015 Update1 の Xamarin.Forms でインテリセンスを使いたい

前回保留になっていた問題が解決したのでメモっときます。 Visual Studio 2015 Up

記事を読む

IntelliTestはどこまでカバーしてくれるのか

私はレガシーな開発環境・案件が多かったのですが、 この頃、ユニットテストを利用する機会が増えてきま

記事を読む

no image

【ストアアプリ】資格情報の保存と読み込み

こんにちは。 Windowsストアアプリで資格情報をセキュアに保存する方法について。

記事を読む

no image

属性を使って、列挙型の列挙子を並び替え、フィルタリングする

メモだよ

記事を読む

【WPF/XAML】チェックボックスのデザイン変更

[xml] <Window x:Class="Sample"

記事を読む

[UWP]Releaseビルド時に、OData.ClientでSystem.Reflection.MissingMetadataExceptionが発生する

UWPでDebugビルドでは問題ないけど、Releaseビルドにすると、Microsoft.ODat

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑