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です。動くかなー。(動かなかった…)

関連記事

no image

TFS2013ExpressでService Unavailable 503

【現象】 TFSつながらない。ブラウザからのホームもVisualStudioのチームエクスプローラ

記事を読む

no image

【C#, WPF】XMLデータをListViewに表示し、チェック項目のみXML保存させる

前回の続きというか、WPF版。 <Window x:Class="MyWP

記事を読む

【iPhoneアプリ】多言語対応させる1

iPhoneアプリを多言語対応(iPhone端末の言語設定によってアプリケーションの言語も切り替える

記事を読む

【ストアアプリ】タイル通知(TileUpdateManager)について

こんにちは。 ストアアプリでタイル通知を行う方法を調べました。 前回のトースト通知と

記事を読む

no image

KeyboardNavigation以外でFocusVisualStyleを表示させる

WPFです。 結論としてはリフレクションで無理やりやれなくはなさそうという感じ。 元ネタはMSDN

記事を読む

no image

Microsoft.Expression.Encoderで動画のフレーム画像を取得

動画ファイルから指定したフレーム画像を取得する。 Microsoft.Expression.Enco

記事を読む

no image

Xamarin.UITest, Xamarin Test Cloud にて iPhone 6 Plus, 6S Plus, 7 Plus などで app.Tap が効かない

動作しないというか、app.Tapがどうしても反応しない。 app.ScreenShotなどは動作す

記事を読む

no image

‘System.Windows.Navigation.BaseUriHelper’ のタイプ初期化子が例外をスローしました。

作成した.NETアプリケーション(WPF)が起動しない。 今回は構成ファイル(app.config)

記事を読む

Xcode標準テンプレート

Xcodeで新規Projectを作成した時にテンプレートを選ぶことが出来る。 「Choose a

記事を読む

no image

Windows10 IoT CoreでWindowsアップデートの自動実行を停止する

Manage IoT Core device updates このリンクにアップデートコントロール

記事を読む

Message

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

PAGE TOP ↑