diff --git a/CSharp/cards-AdaptiveCards/AdaptiveCards.csproj b/CSharp/cards-AdaptiveCards/AdaptiveCards.csproj
new file mode 100644
index 0000000000..9ae867218a
--- /dev/null
+++ b/CSharp/cards-AdaptiveCards/AdaptiveCards.csproj
@@ -0,0 +1,178 @@
+
+
+
+
+ Debug
+ AnyCPU
+
+
+ 2.0
+ {A8BA1066-5695-4D71-ABB4-65E5A5E0C3D4}
+ {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}
+ Library
+ Properties
+ BotBuilder.Samples.AdaptiveCards
+ BotBuilder.Samples.AdaptiveCards
+ v4.6
+ true
+
+
+
+
+
+
+
+
+
+
+ true
+ full
+ false
+ bin\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\
+ TRACE
+ prompt
+ 4
+
+
+
+ packages\Microsoft.AdaptiveCards.0.5.0\lib\net452\AdaptiveCards.dll
+
+
+ packages\Autofac.4.6.0\lib\net45\Autofac.dll
+
+
+ packages\Chronic.Signed.0.3.2\lib\net40\Chronic.dll
+ True
+
+
+ packages\Microsoft.Bot.Builder.3.8.1.0\lib\net46\Microsoft.Bot.Builder.dll
+
+
+ packages\Microsoft.Bot.Builder.3.8.1.0\lib\net46\Microsoft.Bot.Builder.Autofac.dll
+
+
+ packages\Microsoft.Bot.Builder.3.8.1.0\lib\net46\Microsoft.Bot.Connector.dll
+
+
+
+ packages\Microsoft.IdentityModel.Protocol.Extensions.1.0.4.403061554\lib\net45\Microsoft.IdentityModel.Protocol.Extensions.dll
+
+
+ packages\Microsoft.Rest.ClientRuntime.2.3.8\lib\net452\Microsoft.Rest.ClientRuntime.dll
+
+
+ packages\Microsoft.WindowsAzure.ConfigurationManager.3.2.3\lib\net40\Microsoft.WindowsAzure.Configuration.dll
+ True
+
+
+ packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll
+
+
+
+ packages\System.IdentityModel.Tokens.Jwt.4.0.4.403061554\lib\net45\System.IdentityModel.Tokens.Jwt.dll
+
+
+
+
+ packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+ packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll
+ True
+
+
+ packages\Microsoft.AspNet.WebApi.WebHost.5.2.3\lib\net45\System.Web.Http.WebHost.dll
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+ Designer
+
+
+
+
+
+
+
+
+
+ Global.asax
+
+
+
+
+
+
+
+
+ Web.config
+
+
+ Web.config
+
+
+
+ 10.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+ true
+
+
+
+
+
+
+
+
+ True
+ True
+ 3979
+ /
+ http://localhost:3979/
+ False
+ False
+
+
+ False
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CSharp/cards-AdaptiveCards/AdaptiveCards.sln b/CSharp/cards-AdaptiveCards/AdaptiveCards.sln
new file mode 100644
index 0000000000..371778d3f0
--- /dev/null
+++ b/CSharp/cards-AdaptiveCards/AdaptiveCards.sln
@@ -0,0 +1,27 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.26430.6
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AdaptiveCards", "AdaptiveCards.csproj", "{A8BA1066-5695-4D71-ABB4-65E5A5E0C3D4}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "README", "README", "{09798947-D0A9-49B0-8D28-1CB803484712}"
+ ProjectSection(SolutionItems) = preProject
+ README.md = README.md
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A8BA1066-5695-4D71-ABB4-65E5A5E0C3D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A8BA1066-5695-4D71-ABB4-65E5A5E0C3D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A8BA1066-5695-4D71-ABB4-65E5A5E0C3D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A8BA1066-5695-4D71-ABB4-65E5A5E0C3D4}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/CSharp/cards-AdaptiveCards/App_Start/WebApiConfig.cs b/CSharp/cards-AdaptiveCards/App_Start/WebApiConfig.cs
new file mode 100644
index 0000000000..739f95c88c
--- /dev/null
+++ b/CSharp/cards-AdaptiveCards/App_Start/WebApiConfig.cs
@@ -0,0 +1,33 @@
+namespace BotBuilder.Samples.AdaptiveCards
+{
+ using System.Web.Http;
+ using Newtonsoft.Json;
+ using Newtonsoft.Json.Serialization;
+
+ public static class WebApiConfig
+ {
+ public static void Register(HttpConfiguration config)
+ {
+ // Json settings
+ config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
+ config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
+ config.Formatters.JsonFormatter.SerializerSettings.Formatting = Formatting.Indented;
+ JsonConvert.DefaultSettings = () => new JsonSerializerSettings()
+ {
+ ContractResolver = new CamelCasePropertyNamesContractResolver(),
+ Formatting = Newtonsoft.Json.Formatting.Indented,
+ NullValueHandling = NullValueHandling.Ignore,
+ };
+
+ // Web API configuration and services
+
+ // Web API routes
+ config.MapHttpAttributeRoutes();
+
+ config.Routes.MapHttpRoute(
+ name: "DefaultApi",
+ routeTemplate: "api/{controller}/{id}",
+ defaults: new { id = RouteParameter.Optional });
+ }
+ }
+}
diff --git a/CSharp/cards-AdaptiveCards/Controllers/MessagesController.cs b/CSharp/cards-AdaptiveCards/Controllers/MessagesController.cs
new file mode 100644
index 0000000000..ec3f16d86d
--- /dev/null
+++ b/CSharp/cards-AdaptiveCards/Controllers/MessagesController.cs
@@ -0,0 +1,61 @@
+namespace BotBuilder.Samples.AdaptiveCards
+{
+ using System.Net;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System.Web.Http;
+ using Microsoft.Bot.Builder.Dialogs;
+ using Microsoft.Bot.Connector;
+
+ [BotAuthentication]
+ public class MessagesController : ApiController
+ {
+ ///
+ /// POST: api/Messages
+ /// Receive a message from a user and reply to it
+ ///
+ public async Task Post([FromBody]Activity activity)
+ {
+ if (activity.Type == ActivityTypes.Message)
+ {
+ await Conversation.SendAsync(activity, () => new RootDialog());
+ }
+ else
+ {
+ this.HandleSystemMessage(activity);
+ }
+
+ var response = Request.CreateResponse(HttpStatusCode.OK);
+ return response;
+ }
+
+ private Activity HandleSystemMessage(Activity message)
+ {
+ if (message.Type == ActivityTypes.DeleteUserData)
+ {
+ // Implement user deletion here
+ // If we handle user deletion, return a real message
+ }
+ else if (message.Type == ActivityTypes.ConversationUpdate)
+ {
+ // Handle conversation state changes, like members being added and removed
+ // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info
+ // Not available in all channels
+ }
+ else if (message.Type == ActivityTypes.ContactRelationUpdate)
+ {
+ // Handle add/remove from contact lists
+ // Activity.From + Activity.Action represent what happened
+ }
+ else if (message.Type == ActivityTypes.Typing)
+ {
+ // Handle knowing tha the user is typing
+ }
+ else if (message.Type == ActivityTypes.Ping)
+ {
+ }
+
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/CSharp/cards-AdaptiveCards/Dialogs/HotelsDialog.cs b/CSharp/cards-AdaptiveCards/Dialogs/HotelsDialog.cs
new file mode 100644
index 0000000000..f4c63eec25
--- /dev/null
+++ b/CSharp/cards-AdaptiveCards/Dialogs/HotelsDialog.cs
@@ -0,0 +1,143 @@
+namespace BotBuilder.Samples.AdaptiveCards
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+ using System.Threading.Tasks;
+ using global::AdaptiveCards;
+ using Microsoft.Bot.Builder.Dialogs;
+ using Microsoft.Bot.Builder.FormFlow;
+ using Microsoft.Bot.Connector;
+ using Newtonsoft.Json.Linq;
+
+ [Serializable]
+ public class HotelsDialog : IDialog
+
+
diff --git a/CSharp/cards-AdaptiveCards/images/bot_icon.png b/CSharp/cards-AdaptiveCards/images/bot_icon.png
new file mode 100644
index 0000000000..ace66f9b5a
Binary files /dev/null and b/CSharp/cards-AdaptiveCards/images/bot_icon.png differ
diff --git a/CSharp/cards-AdaptiveCards/images/outcome-1.png b/CSharp/cards-AdaptiveCards/images/outcome-1.png
new file mode 100644
index 0000000000..52992c6ccb
Binary files /dev/null and b/CSharp/cards-AdaptiveCards/images/outcome-1.png differ
diff --git a/CSharp/cards-AdaptiveCards/images/outcome-2.png b/CSharp/cards-AdaptiveCards/images/outcome-2.png
new file mode 100644
index 0000000000..063eb5c128
Binary files /dev/null and b/CSharp/cards-AdaptiveCards/images/outcome-2.png differ
diff --git a/CSharp/cards-AdaptiveCards/images/search-form-card.png b/CSharp/cards-AdaptiveCards/images/search-form-card.png
new file mode 100644
index 0000000000..720b558b7f
Binary files /dev/null and b/CSharp/cards-AdaptiveCards/images/search-form-card.png differ
diff --git a/CSharp/cards-AdaptiveCards/images/search-form-submit.png b/CSharp/cards-AdaptiveCards/images/search-form-submit.png
new file mode 100644
index 0000000000..c6dc7c352f
Binary files /dev/null and b/CSharp/cards-AdaptiveCards/images/search-form-submit.png differ
diff --git a/CSharp/cards-AdaptiveCards/images/search-results-layout.png b/CSharp/cards-AdaptiveCards/images/search-results-layout.png
new file mode 100644
index 0000000000..284d228dd7
Binary files /dev/null and b/CSharp/cards-AdaptiveCards/images/search-results-layout.png differ
diff --git a/CSharp/cards-AdaptiveCards/images/welcome-card.png b/CSharp/cards-AdaptiveCards/images/welcome-card.png
new file mode 100644
index 0000000000..ed52367136
Binary files /dev/null and b/CSharp/cards-AdaptiveCards/images/welcome-card.png differ
diff --git a/CSharp/cards-AdaptiveCards/packages.config b/CSharp/cards-AdaptiveCards/packages.config
new file mode 100644
index 0000000000..d662f1cca3
--- /dev/null
+++ b/CSharp/cards-AdaptiveCards/packages.config
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file