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

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

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

記事を読む

【.NET】【WPF/XAML】ローカルPDFを画面に表示する

[crayon-5c40f68173bdd886616825/] [vb] Public

記事を読む

AdMob,Nendメディエーション時の優先順位

先日リリースしたアプリでは勉強を兼ねて、 AdMob+Nendでのメディエーション広告を実装し

記事を読む

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

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

記事を読む

Xamarin.Forms で NavigationPage を PushModalAsync すると例外が発生するときがある

Forms 2.3.4.231 Mapコントロールがあるページで、NavigationPage

記事を読む

Hardware assisted virtualization and data execution protection must be enabled in the BIOS

MacBook Pro + Bootcamp + Windows10 で Docker for Wi

記事を読む

no image

Xamarin.Forms で ScrollView の中に Map を配置したとき、Androidで地図のスクロールが出来なくなる

iOSは問題ないけど、AndroidはScrollViewにタッチを持ってかれてる感じ。 カスタ

記事を読む

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

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

記事を読む

no image

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

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

記事を読む

no image

【ストアアプリ】基本的な印刷手順

Windowsストアアプリにて印刷を行う方法を紹介します。 印刷を行うには印刷コントラ

記事を読む

Message

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

PAGE TOP ↑