Skip to content
This repository was archived by the owner on Jun 30, 2022. It is now read-only.

Commit bc68f15

Browse files
authored
Hospitality skill (#1797)
* add hospitality skill files * checkout dialog * finish checkout dialog * fix build error * fix build error again * check out dialog updates * Add late checkout dialog and mock hotel service for api calls * change name HospitalitySkillLuis to HospitalityLuis * Add initial ExtendStay dialog files * Update deployment scripts * update ExtendStay dialog * adding to ExtendStay dialog * add GetReservation dialog and update reservation adaptive card title formats * Add more validation for date inputs in ExtendStayDialog * Add datetime prebuilt entity to extendstaydialog * add use of prebuilt number entity and composite entity to ExtendStayDialog * small changes * add dialog switch to LateCheckoutDialog from ExtendStayDialog * manifest update * handle if user has already checked out or requested a late check out and re-requests * small changes in validation methods * Remove AutoSaveStateMiddleware and update DialogBot * Update deployment scripts to 0.5 release * Delete HospitalitySkill.sln * update versions in HospitalitySkill.csproj
1 parent d43b0d7 commit bc68f15

File tree

73 files changed

+5639
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+5639
-0
lines changed

skills/src/csharp/Skills.sln

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WeatherSkill", "experimenta
3737
EndProject
3838
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BingSearchSkill", "experimental\bingsearchskill\bingsearchskill\BingSearchSkill.csproj", "{8CB101FA-B496-4507-80A2-151FAB7E8ED1}"
3939
EndProject
40+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalitySkill", "experimental\hospitalityskill\HospitalitySkill.csproj", "{0EFEA4F2-DC7E-436E-B951-E9B566AFF7F0}"
41+
EndProject
4042
Global
4143
GlobalSection(SolutionConfigurationPlatforms) = preSolution
4244
Debug - NuGet Packages|Any CPU = Debug - NuGet Packages|Any CPU
@@ -157,6 +159,14 @@ Global
157159
{8CB101FA-B496-4507-80A2-151FAB7E8ED1}.Documentation|Any CPU.Build.0 = Debug|Any CPU
158160
{8CB101FA-B496-4507-80A2-151FAB7E8ED1}.Release|Any CPU.ActiveCfg = Release|Any CPU
159161
{8CB101FA-B496-4507-80A2-151FAB7E8ED1}.Release|Any CPU.Build.0 = Release|Any CPU
162+
{0EFEA4F2-DC7E-436E-B951-E9B566AFF7F0}.Debug - NuGet Packages|Any CPU.ActiveCfg = Debug|Any CPU
163+
{0EFEA4F2-DC7E-436E-B951-E9B566AFF7F0}.Debug - NuGet Packages|Any CPU.Build.0 = Debug|Any CPU
164+
{0EFEA4F2-DC7E-436E-B951-E9B566AFF7F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
165+
{0EFEA4F2-DC7E-436E-B951-E9B566AFF7F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
166+
{0EFEA4F2-DC7E-436E-B951-E9B566AFF7F0}.Documentation|Any CPU.ActiveCfg = Debug|Any CPU
167+
{0EFEA4F2-DC7E-436E-B951-E9B566AFF7F0}.Documentation|Any CPU.Build.0 = Debug|Any CPU
168+
{0EFEA4F2-DC7E-436E-B951-E9B566AFF7F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
169+
{0EFEA4F2-DC7E-436E-B951-E9B566AFF7F0}.Release|Any CPU.Build.0 = Release|Any CPU
160170
EndGlobalSection
161171
GlobalSection(SolutionProperties) = preSolution
162172
HideSolutionNode = FALSE
@@ -176,6 +186,7 @@ Global
176186
{9A2677E6-21E5-47EE-A42F-9D25079496D8} = {15B08548-1311-4749-8816-186C3268386E}
177187
{4A057581-2435-4E19-BA1B-30CE1E8AD504} = {3665D242-1A88-4860-B148-BAB695B7B5E4}
178188
{8CB101FA-B496-4507-80A2-151FAB7E8ED1} = {3665D242-1A88-4860-B148-BAB695B7B5E4}
189+
{0EFEA4F2-DC7E-436E-B951-E9B566AFF7F0} = {3665D242-1A88-4860-B148-BAB695B7B5E4}
179190
EndGlobalSection
180191
GlobalSection(ExtensibilityGlobals) = postSolution
181192
SolutionGuid = {7B849B7E-CCF5-4031-91F7-CA835433B457}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"help": "https://go.microsoft.com/fwlink/?linkid=866610",
3+
"dependentFileProviders": {
4+
"add": {
5+
"pathSegment": {
6+
"add": {
7+
".*": [
8+
".json",
9+
".resx"
10+
]
11+
}
12+
}
13+
}
14+
}
15+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
using System.Globalization;
5+
using HospitalitySkill.Responses.Shared;
6+
using HospitalitySkill.Services;
7+
using Microsoft.Bot.Builder;
8+
using Microsoft.Bot.Builder.Azure;
9+
using Microsoft.Bot.Builder.Integration.AspNet.Core;
10+
using Microsoft.Bot.Builder.Solutions.Middleware;
11+
using Microsoft.Bot.Builder.Solutions.Responses;
12+
using Microsoft.Bot.Connector.Authentication;
13+
using Microsoft.Bot.Schema;
14+
15+
namespace HospitalitySkill.Bots
16+
{
17+
public class DefaultAdapter : BotFrameworkHttpAdapter
18+
{
19+
public DefaultAdapter(
20+
BotSettings settings,
21+
ICredentialProvider credentialProvider,
22+
IBotTelemetryClient telemetryClient,
23+
ResponseManager responseManager)
24+
: base(credentialProvider)
25+
{
26+
OnTurnError = async (context, exception) =>
27+
{
28+
CultureInfo.CurrentUICulture = new CultureInfo(context.Activity.Locale);
29+
await context.SendActivityAsync(responseManager.GetResponse(SharedResponses.ErrorMessage));
30+
await context.SendActivityAsync(new Activity(type: ActivityTypes.Trace, text: $"Skill Error: {exception.Message} | {exception.StackTrace}"));
31+
telemetryClient.TrackException(exception);
32+
};
33+
34+
Use(new TranscriptLoggerMiddleware(new AzureBlobTranscriptStore(settings.BlobStorage.ConnectionString, settings.BlobStorage.Container)));
35+
Use(new TelemetryLoggerMiddleware(telemetryClient, logPersonalInformation: true));
36+
Use(new ShowTypingMiddleware());
37+
Use(new SetLocaleMiddleware(settings.DefaultLocale ?? "en-us"));
38+
Use(new EventDebuggerMiddleware());
39+
}
40+
}
41+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
using System.Globalization;
5+
using HospitalitySkill.Responses.Shared;
6+
using HospitalitySkill.Services;
7+
using Microsoft.Bot.Builder;
8+
using Microsoft.Bot.Builder.Azure;
9+
using Microsoft.Bot.Builder.Dialogs;
10+
using Microsoft.Bot.Builder.Skills;
11+
using Microsoft.Bot.Builder.Solutions.Middleware;
12+
using Microsoft.Bot.Builder.Solutions.Responses;
13+
using Microsoft.Bot.Schema;
14+
15+
namespace HospitalitySkill.Adapters
16+
{
17+
public class HospitalitySkillAdapter : SkillWebSocketBotAdapter
18+
{
19+
public HospitalitySkillAdapter(
20+
BotSettings settings,
21+
UserState userState,
22+
ConversationState conversationState,
23+
ResponseManager responseManager,
24+
IBotTelemetryClient telemetryClient)
25+
{
26+
OnTurnError = async (context, exception) =>
27+
{
28+
CultureInfo.CurrentUICulture = new CultureInfo(context.Activity.Locale);
29+
await context.SendActivityAsync(responseManager.GetResponse(SharedResponses.ErrorMessage));
30+
await context.SendActivityAsync(new Activity(type: ActivityTypes.Trace, text: $"Skill Error: {exception.Message} | {exception.StackTrace}"));
31+
telemetryClient.TrackException(exception);
32+
};
33+
34+
Use(new TranscriptLoggerMiddleware(new AzureBlobTranscriptStore(settings.BlobStorage.ConnectionString, settings.BlobStorage.Container)));
35+
Use(new TelemetryLoggerMiddleware(telemetryClient, logPersonalInformation: true));
36+
Use(new SetLocaleMiddleware(settings.DefaultLocale ?? "en-us"));
37+
Use(new EventDebuggerMiddleware());
38+
Use(new SkillMiddleware(userState, conversationState, conversationState.CreateProperty<DialogState>(nameof(HospitalitySkill))));
39+
}
40+
}
41+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
using System;
5+
using System.Threading;
6+
using System.Threading.Tasks;
7+
using Microsoft.Bot.Builder;
8+
using Microsoft.Bot.Builder.Dialogs;
9+
using Microsoft.Bot.Schema;
10+
using Microsoft.Extensions.DependencyInjection;
11+
12+
namespace HospitalitySkill.Bots
13+
{
14+
public class DialogBot<T> : IBot
15+
where T : Dialog
16+
{
17+
private readonly Dialog _dialog;
18+
private readonly BotState _conversationState;
19+
private readonly BotState _userState;
20+
private readonly IBotTelemetryClient _telemetryClient;
21+
22+
public DialogBot(IServiceProvider serviceProvider, T dialog)
23+
{
24+
_dialog = dialog;
25+
_conversationState = serviceProvider.GetService<ConversationState>();
26+
_userState = serviceProvider.GetService<UserState>();
27+
_telemetryClient = serviceProvider.GetService<IBotTelemetryClient>();
28+
}
29+
30+
public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
31+
{
32+
// Client notifying this bot took to long to respond (timed out)
33+
if (turnContext.Activity.Code == EndOfConversationCodes.BotTimedOut)
34+
{
35+
_telemetryClient.TrackTrace($"Timeout in {turnContext.Activity.ChannelId} channel: Bot took too long to respond.", Severity.Information, null);
36+
return;
37+
}
38+
39+
await _dialog.RunAsync(turnContext, _conversationState.CreateProperty<DialogState>(nameof(DialogState)), cancellationToken);
40+
41+
// Save any state changes that might have occured during the turn.
42+
await _conversationState.SaveChangesAsync(turnContext, false, cancellationToken);
43+
await _userState.SaveChangesAsync(turnContext, false, cancellationToken);
44+
}
45+
}
46+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"ProviderId": "Microsoft.ApplicationInsights.ConnectedService.ConnectedServiceProvider",
3+
"Version": "8.13.10627.1",
4+
"GettingStartedDocument": {
5+
"Uri": "https://go.microsoft.com/fwlink/?LinkID=798432"
6+
}
7+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
{
2+
"type": "AdaptiveCard",
3+
"id": "ReservationDetails",
4+
"body": [
5+
{
6+
"type": "Container",
7+
"backgroundImage": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAmwAAADVCAIAAABlrTvmAAAACXBIWXMAABYlAAAWJQFJUiTwAAAG0mlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTktMDMtMjJUMTc6MDM6NDAtMDc6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAzLTIyVDE3OjE2OjU2LTA3OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE5LTAzLTIyVDE3OjE2OjU2LTA3OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY0ZGY4YjdiLTM2MTYtNDRkNy04MTI3LTgyNzk4NmUyODk3ZSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmExNDU0NmE3LWZhODMtMjc0Mi1hNWU0LWIxMzYzNjQ2NWU5NyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjhlMDlmYmE5LTE2ZjktNGZiNC05MzdhLThkOTYzMGMxOTQyNiI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OGUwOWZiYTktMTZmOS00ZmI0LTkzN2EtOGQ5NjMwYzE5NDI2IiBzdEV2dDp3aGVuPSIyMDE5LTAzLTIyVDE3OjAzOjQwLTA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Yzc5ODg2ZTQtZTg3Zi00MmMzLWI5ZjYtN2FkMDg3YTlkOTg4IiBzdEV2dDp3aGVuPSIyMDE5LTAzLTIyVDE3OjE2OjU2LTA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NjRkZjhiN2ItMzYxNi00NGQ3LTgxMjctODI3OTg2ZTI4OTdlIiBzdEV2dDp3aGVuPSIyMDE5LTAzLTIyVDE3OjE2OjU2LTA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7bJaRFAAAIbUlEQVR4nO3dy27bSAKGUZKWFCfuLKYH6N712/XzzTvNE8ykJzfHkmZRhpN2ZItkFVkXnrOUNj9AgB9IkVD/57/+3QHQuk9fvv33w6fcK6Z5ux/2N/3Fry5/uroh9wAAFtdYQcshogCNU9DliChAyxR0USIK0CwFXZqIArRJQVcgogANUtB1iChAaxR0NSIK0BQFXZOIArRDQVcmogCNUND1iShACxQ0CxEFqJ6C5iKiAHVT0IxEFKBiCpqXiALUSkGzE1GAKtVY0Nu2CtqJKECNKi3ooa2CdiIKUB0FLYeIAtREQYsiogDVUNDSiChAHRS0QCIKUAEFLZOIApROQYslogBFU9CSiShAuRS0cCIKUCgFLZ+IApTo/ttDjQXdDxsqaCeiAAU6nc//+fA594ppNljQTkQBCvTx0/3xeMq9YoJtFrQTUYACff5yn3vCBJstaCeiAKX59nCs6DJ0ywXtRBSgNF++PuSeMNbGC9qJKEBparkMVdBORAFKczxVEFEFDUQUgGkU9ImIAjCBgv5IRAHKctjvck94kYI+I6IAZdnvCj0zK+jPCj1UAJt1OJR4JaqgF4koQFmGvn97e8i94m8U9CUiClCc93dvck/4TkFfIaIAxbm5GX65u829ousU9BoRBSjR+7s3u91N3g0KepWIAhTqn/+4y9hRBR1DRAEKNfR9ro4q6EgiClCuLB1V0PFEFKBoK3dUQScRUYDSrdbR2/2wU9ApRBSgAit0VEFnEFGAOizaUQWdR0QBqrFQRxV0NhEFqEnyjnqSKIaIAlQmYUcVNJKIAtQnSUcVNJ6IAlQpsqMKmoSIAtRqdkcVNBURBajYjI4qaEIiClC3SR1V0LREFKB6IzvqfdDkRBSgBVc7qqBLEFGARrzSUQVdiIgCtONiRxV0OSIK0JRnHVXQRYkoQGueOqqgSxNRgAYNff/H7+/fHXa5hzRORAEadHcYbnfDb7/eHZb8H29EFKA1d4fhcNN3XTcMvY4uSkQBmvJU0EBHFyWiAO14VtBAR5cjogCNuFjQQEcXIqIALXi3f7GggY4uQUQBqvduP7zZXX8fVEeTE1GAuo0saKCjaYkoQMUmFTTQ0YREFKBWMwoa6GgqIgpQpdkFDXQ0CREFqE9kQQMdjSeiAJVJUtBARyOJKEBNrr4POpWOxhBRgGokL2igo7OJKEAdFipooKPziChABRYtaKCjM4goQOlWKGigo1OJKEDRVitooKOTiChAuVYuaKCj44koQKGyFDTQ0ZFEFKBEGQsa6OgYIgpQnOwFDXT0KhEFKEshBQ109HUiClCQogoa6OgrRBSgFAUWNNDRl4goQBGKLWigoxeJKEB+hRc00NGfiShAZlUUNNDRZ0QUIKeKChro6I9EFCCb6goa6OgTEQXIo9KCBjoaiChABlUXNNDRTkQB1tdAQQMdFVGAVTVT0GDjHRVRgPU0VtBgyx0VUYCVNFnQYLMdFVGANTRc0GCbHRVRgMU1X9Bggx0VUYBlbaSgwdY6KqIAC9pUQYNNdVREAZaywYIG2+moiAIsYrMFDYah/+3XX5rvqIgCpLfxggZb6KiIAiR2u+sVNGi+oyIKkNJu6G93Tq3ftd1RRxogpbd759XnGu6ogw2QzOGmdx/3olY7KqIAyewl9GVNdlREAdLo+24/iOhr2uuoiAKkcdMr6HWNdVREAdJwK3ekljoqogBpuBAdr5mOiigAGbTRUREFSON4zr2gNg10VEQB0jiJ6HS1d1REAdI4ns6n3BtqVHVHRRQgmQe3dGept6MiCpDMVxGdq9KOiihAMsfT+V5H56qxoyIKkNLnh5NfRmerrqMiCpDS+dx9vNfR+erqqIgCJHY8nXU0RkUdFVGA9HQ0Ui0dFVGARehopCo6KqIAS3nsqMd15yq/oyIKsKDj6fzxm47OV3hHRRRgWToaqeSOiijA4nQ0UrEdFVGANYSOyuhsZXZURAFWcjyd/3evo/MV2FERBViPjkYqraMiCrAqHY0UOrovo6MiCrA2HY00DP3vZXRURAEy0NFIhXRURAHy0NFIJXRURAGy0dFI2TsqogA56WikvB0VUYDMdDRSxo6KKEB+OhopV0dFFKAIOhopS0dFFKAUOhpp/Y6KKEBBdDTSyh0VUYCy6GikNTsqogDF0dFIq3VURAFKpKOR1umoiAIUKnQ094qKrdBREQUo1/F0/ktHIyzdUREFKJqORlq0oyIKUDodjfTY0X36joooQAV0NNJCHRVRgDroaKQlOiqiANXQ0UjJOyqiADUJHT17gXSutB0VUYDK6GikhB0VUYD66GikVB0VUYAq6Wik0NFDXEdFFKBWOhopvqMiClAxHY0U2VERBaibjkaK6aiIAlRPRyPNfs5IRAFaoKOR5nVURAEaoaORZnRURAHaoaORpv4+KqIATTmezn991dH5JnVURAFaczzraJTxHRVRgAbpaKSRHRVRgDbpaKQxHRVRgGbpaKSrHRVRgJbpaKTXOyqiAI3T0UivdFREAdqno5Fe6qiIAmyCjka62FERBdiK0NGTjs71c0dFFGBDdDTSs46KKMC26GikHzsqogCbo6ORnjoqogBbpKORQkdFFGCjdDTSMPQiCrBdOhpJRAE2zfujMUQUYOt0dDYRBUBHZxJRALpOR2cRUQAePXY094yKiCgA3+noJCIKwN88nHR0LBEF4DkdHUlEAbhAR8cQUQAu09GrRBSAF+no60QUgNfo6CtEFIArdPQlIgrAdTp6kYgCMIqO/kxEARhLR58RUQAm0NEfiSgA0+joExEFYDIdDUQUgDl0tBNRAGbTUREFYL6Nd1REAYiy5Y6KKACxNttREQUggW12VEQBSOOxo1sKqYgCkMzD6fxhSx39P2CJeSCLm9hfAAAAAElFTkSuQmCC",
8+
"items": [
9+
{
10+
"type": "ColumnSet",
11+
"columns": [
12+
{
13+
"type": "Column",
14+
"items": [
15+
{
16+
"type": "ColumnSet",
17+
"columns": [
18+
{
19+
"type": "Column",
20+
"items": [
21+
{
22+
"type": "Image",
23+
"id": "icon",
24+
"horizontalAlignment": "Center",
25+
"url": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyNCAyMSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI0IDEyVjIxSDIyLjVWMTkuNUgxLjVWMjFIMFYxMkgxLjVWMTMuMzI0Mkw0LjUgNy4zMjQyMlYwSDZWMS41SDE4VjBIMTkuNVY0LjVDMTkuNzEwOSA0LjUgMTkuOTA2MiA0LjUzOTA2IDIwLjA4NTkgNC42MTcxOUMyMC4yNjU2IDQuNjk1MzEgMjAuNDIxOSA0LjgwNDY5IDIwLjU1NDcgNC45NDUzMUMyMC42OTUzIDUuMDc4MTIgMjAuODA0NyA1LjIzNDM4IDIwLjg4MjggNS40MTQwNkMyMC45NjA5IDUuNTkzNzUgMjEgNS43ODkwNiAyMSA2VjlDMjEgOS4zMDQ2OSAyMC45MTggOS41NzgxMiAyMC43NTM5IDkuODIwMzFMMjIuNSAxMy4zMjQyVjEySDI0Wk0xMy41IDZWOUgxOS41VjZIMTMuNVpNNiAzVjcuNUgxMlY2QzEyIDUuNzg5MDYgMTIuMDM5MSA1LjU5Mzc1IDEyLjExNzIgNS40MTQwNkMxMi4xOTUzIDUuMjM0MzggMTIuMzAwOCA1LjA3ODEyIDEyLjQzMzYgNC45NDUzMUMxMi41NzQyIDQuODA0NjkgMTIuNzM0NCA0LjY5NTMxIDEyLjkxNDEgNC42MTcxOUMxMy4wOTM4IDQuNTM5MDYgMTMuMjg5MSA0LjUgMTMuNSA0LjVIMThWM0g2Wk0zLjA5Mzc1IDEzLjVIMjAuOTA2MkwxOS40MDYyIDEwLjVIMTMuNUMxMy4yODkxIDEwLjUgMTMuMDkzOCAxMC40NjA5IDEyLjkxNDEgMTAuMzgyOEMxMi43MzQ0IDEwLjMwNDcgMTIuNTc0MiAxMC4xOTkyIDEyLjQzMzYgMTAuMDY2NEMxMi4zMDA4IDkuOTI1NzggMTIuMTk1MyA5Ljc2NTYyIDEyLjExNzIgOS41ODU5NEMxMi4wMzkxIDkuNDA2MjUgMTIgOS4yMTA5NCAxMiA5SDUuMzMyMDNMMy4wOTM3NSAxMy41Wk0yMi41IDE4VjE1SDEuNVYxOEgyMi41WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
26+
"size": "Small",
27+
"width": "30px",
28+
"height": "30px"
29+
}
30+
],
31+
"width": "auto"
32+
},
33+
{
34+
"type": "Column",
35+
"verticalContentAlignment": "Center",
36+
"items": [
37+
{
38+
"type": "TextBlock",
39+
"id": "title",
40+
"size": "Large",
41+
"weight": "Bolder",
42+
"color": "Light",
43+
"text": "{Title}"
44+
}
45+
],
46+
"width": "stretch"
47+
}
48+
]
49+
}
50+
],
51+
"width": "stretch"
52+
}
53+
]
54+
}
55+
]
56+
},
57+
{
58+
"type": "Container",
59+
"id": "items",
60+
"items": [
61+
{
62+
"type": "FactSet",
63+
"facts": [
64+
{
65+
"title": "Check-in Date",
66+
"value": "{CheckInDate}"
67+
},
68+
{
69+
"title": "Check-out Date",
70+
"value": "{CheckOutDate}"
71+
},
72+
{
73+
"title": "Check-out Time",
74+
"value": "{CheckOutTime}"
75+
}
76+
]
77+
}
78+
]
79+
}
80+
],
81+
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
82+
"version": "1.0",
83+
"speak": "{Speak}"
84+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
using Microsoft.AspNetCore.Mvc;
5+
using Microsoft.Bot.Builder;
6+
using Microsoft.Bot.Builder.Integration.AspNet.Core;
7+
using Microsoft.Bot.Builder.Skills;
8+
using Microsoft.Bot.Builder.Solutions;
9+
10+
namespace HospitalitySkill.Controllers
11+
{
12+
[ApiController]
13+
public class BotController : SkillController
14+
{
15+
public BotController(
16+
IBot bot,
17+
BotSettingsBase botSettings,
18+
IBotFrameworkHttpAdapter botFrameworkHttpAdapter,
19+
SkillWebSocketAdapter skillWebSocketAdapter)
20+
: base(bot, botSettings, botFrameworkHttpAdapter, skillWebSocketAdapter)
21+
{
22+
}
23+
}
24+
}

0 commit comments

Comments
 (0)