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

Raspberry Pi 3 Model B 各OS、動画プレイヤーでの再生比較

ベンチマークではなく、ただ感想をメモしただけ。 Windows 10 IoT Core C#

記事を読む

Visual Studio 2015 + PHP Tools for Visual Studio で App Service for Linux へデプロイ

発端はこれ。 https://social.msdn.microsoft.com/Forums/ja

記事を読む

no image

【iPhoneアプリ】背景画像を設定する

ImageResourceにBg.pngという背景画像を登録しておく 背景を設定するタイミング

記事を読む

no image

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

MSDNフォーラムの以下についてサンプルを組んだので掲載。 ListViewでチェックされた値

記事を読む

拡張メソッドは、非ジェネリック静的クラスで定義される必要があります

単純にメッセージどおり。 public static class BaseExtensi

記事を読む

Xamarin Studio から Visual Studio for Mac へ変更してから、”The “XamlCTask” task failed unexpectedly.” が発生。

Visual Studio for Mac がGAしたので、インストールしてみた。 それまで開発して

記事を読む

no image

Microsoft.OData.Clientでフォーム認証を行う

構成 サーバー ** Azure API Apps ** ASP.NET Web API クライ

記事を読む

no image

Windows 10 IoT 系の概要、エディション、入手方法などを一度整理

Windows 10 IoT にここ最近振り回されているので、ここまで解釈した内容にて、まとメモ 正

記事を読む

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

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

記事を読む

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

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

記事を読む

Message

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

PAGE TOP ↑