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

関連記事

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

Xamarinを触り始めました。 チュートリアルということで、Xamarin.Forms Quick

記事を読む

Xcode標準テンプレート

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

記事を読む

no image

Xamarin.Android フルスクリーン

自分用メモです。

記事を読む

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

[crayon-5bf1d41d48ce1732883980/] [vb] Public

記事を読む

no image

FixedDocumentの印刷およびXPS形式での保存

こんにちは。 以前、XAMLファイルを帳票テンプレートとして動的ロードする記事を掲載しました。

記事を読む

【ストアアプリ】トースト通知の基本

Windowsストアアプリ開発での基本。 トースト通知について投稿します。 Pack

記事を読む

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

今回はコード内の文字列を多言語化する ファイルを追加する。  

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

【iPhoneアプリ】リリース手順〜iTunesConnect登録〜

AppStoreに有料アプリ、iAdアプリを公開するためには、 iTunes Connectで

記事を読む

Message

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

PAGE TOP ↑