Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Vishwac Sena Kannan
committed
Apr 17, 2019
1 parent
7e00173
commit fe15fe9
Showing
37 changed files
with
2,951 additions
and
0 deletions.
There are no files selected for viewing
42 changes: 42 additions & 0 deletions
42
...tal/language-generation/csharp_dotnetcore/05.multi-turn-prompt/AdapterWithErrorHandler.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
// Copyright (c) Microsoft Corporation. All rights reserved. | ||
// Licensed under the MIT License. | ||
|
||
using System; | ||
using Microsoft.Bot.Builder; | ||
using Microsoft.Bot.Builder.Integration.AspNet.Core; | ||
using Microsoft.Bot.Connector.Authentication; | ||
using Microsoft.Extensions.Logging; | ||
|
||
namespace Microsoft.BotBuilderSamples | ||
{ | ||
public class AdapterWithErrorHandler : BotFrameworkHttpAdapter | ||
{ | ||
public AdapterWithErrorHandler(ICredentialProvider credentialProvider, ILogger<BotFrameworkHttpAdapter> logger, ConversationState conversationState = null) | ||
: base(credentialProvider) | ||
{ | ||
OnTurnError = async (turnContext, exception) => | ||
{ | ||
// Log any leaked exception from the application. | ||
logger.LogError($"Exception caught : {exception.Message}"); | ||
// Send a catch-all apology to the user. | ||
await turnContext.SendActivityAsync("Sorry, it looks like something went wrong."); | ||
if (conversationState != null) | ||
{ | ||
try | ||
{ | ||
// Delete the conversationState for the current conversation to prevent the | ||
// bot from getting stuck in a error-loop caused by being in a bad state. | ||
// ConversationState should be thought of as similar to "cookie-state" in a Web pages. | ||
await conversationState.DeleteAsync(turnContext); | ||
} | ||
catch (Exception e) | ||
{ | ||
logger.LogError($"Exception caught on attempting to Delete ConversationState : {e.Message}"); | ||
} | ||
} | ||
}; | ||
} | ||
} | ||
} |
50 changes: 50 additions & 0 deletions
50
experimental/language-generation/csharp_dotnetcore/05.multi-turn-prompt/Bots/DialogBot.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
// Copyright (c) Microsoft Corporation. All rights reserved. | ||
// Licensed under the MIT License. | ||
|
||
using System.Threading; | ||
using System.Threading.Tasks; | ||
using Microsoft.Bot.Builder; | ||
using Microsoft.Bot.Builder.Dialogs; | ||
using Microsoft.Bot.Schema; | ||
using Microsoft.Extensions.Logging; | ||
|
||
namespace Microsoft.BotBuilderSamples | ||
{ | ||
// This IBot implementation can run any type of Dialog. The use of type parameterization is to allows multiple different bots | ||
// to be run at different endpoints within the same project. This can be achieved by defining distinct Controller types | ||
// each with dependency on distinct IBot types, this way ASP Dependency Injection can glue everything together without ambiguity. | ||
// The ConversationState is used by the Dialog system. The UserState isn't, however, it might have been used in a Dialog implementation, | ||
// and the requirement is that all BotState objects are saved at the end of a turn. | ||
public class DialogBot<T> : ActivityHandler where T : Dialog | ||
{ | ||
protected readonly Dialog Dialog; | ||
protected readonly BotState ConversationState; | ||
protected readonly BotState UserState; | ||
protected readonly ILogger Logger; | ||
|
||
public DialogBot(ConversationState conversationState, UserState userState, T dialog, ILogger<DialogBot<T>> logger) | ||
{ | ||
ConversationState = conversationState; | ||
UserState = userState; | ||
Dialog = dialog; | ||
Logger = logger; | ||
} | ||
|
||
public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken)) | ||
{ | ||
await base.OnTurnAsync(turnContext, cancellationToken); | ||
|
||
// Save any state changes that might have occured during the turn. | ||
await ConversationState.SaveChangesAsync(turnContext, false, cancellationToken); | ||
await UserState.SaveChangesAsync(turnContext, false, cancellationToken); | ||
} | ||
|
||
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken) | ||
{ | ||
Logger.LogInformation("Running dialog with Message Activity."); | ||
|
||
// Run the Dialog with the new message Activity. | ||
await Dialog.Run(turnContext, ConversationState.CreateProperty<DialogState>(nameof(DialogState)), cancellationToken); | ||
} | ||
} | ||
} |
16 changes: 16 additions & 0 deletions
16
...uage-generation/csharp_dotnetcore/05.multi-turn-prompt/ConfigurationCredentialProvider.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// Copyright (c) Microsoft Corporation. All rights reserved. | ||
// Licensed under the MIT License. | ||
|
||
using Microsoft.Bot.Connector.Authentication; | ||
using Microsoft.Extensions.Configuration; | ||
|
||
namespace Microsoft.BotBuilderSamples | ||
{ | ||
public class ConfigurationCredentialProvider : SimpleCredentialProvider | ||
{ | ||
public ConfigurationCredentialProvider(IConfiguration configuration) | ||
: base(configuration["MicrosoftAppId"], configuration["MicrosoftAppPassword"]) | ||
{ | ||
} | ||
} | ||
} |
35 changes: 35 additions & 0 deletions
35
...l/language-generation/csharp_dotnetcore/05.multi-turn-prompt/Controllers/BotController.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
// Copyright (c) Microsoft Corporation. All rights reserved. | ||
// Licensed under the MIT License. | ||
|
||
using System.Threading.Tasks; | ||
using Microsoft.AspNetCore.Mvc; | ||
using Microsoft.Bot.Builder; | ||
using Microsoft.Bot.Builder.Integration.AspNet.Core; | ||
|
||
namespace Microsoft.BotBuilderSamples | ||
{ | ||
// This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot | ||
// implementation at runtime. Multiple different IBot implementations running at different endpoints can be | ||
// achieved by specifying a more specific type for the bot constructor argument. | ||
[Route("api/messages")] | ||
[ApiController] | ||
public class BotController : ControllerBase | ||
{ | ||
private IBotFrameworkHttpAdapter _adapter; | ||
private IBot _bot; | ||
|
||
public BotController(IBotFrameworkHttpAdapter adapter, IBot bot) | ||
{ | ||
_adapter = adapter; | ||
_bot = bot; | ||
} | ||
|
||
[HttpPost] | ||
public async Task PostAsync() | ||
{ | ||
// Delegate the processing of the HTTP POST to the adapter. | ||
// The adapter will invoke the bot. | ||
await _adapter.ProcessAsync(Request, Response, _bot); | ||
} | ||
} | ||
} |
183 changes: 183 additions & 0 deletions
183
...tion/csharp_dotnetcore/05.multi-turn-prompt/DeploymentTemplates/template-with-new-rg.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,183 @@ | ||
{ | ||
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", | ||
"contentVersion": "1.0.0.0", | ||
"parameters": { | ||
"groupLocation": { | ||
"type": "string", | ||
"metadata": { | ||
"description": "Specifies the location of the Resource Group." | ||
} | ||
}, | ||
"groupName": { | ||
"type": "string", | ||
"metadata": { | ||
"description": "Specifies the name of the Resource Group." | ||
} | ||
}, | ||
"appId": { | ||
"type": "string", | ||
"metadata": { | ||
"description": "Active Directory App ID, set as MicrosoftAppId in the Web App's Application Settings." | ||
} | ||
}, | ||
"appSecret": { | ||
"type": "string", | ||
"metadata": { | ||
"description": "Active Directory App Password, set as MicrosoftAppPassword in the Web App's Application Settings." | ||
} | ||
}, | ||
"botId": { | ||
"type": "string", | ||
"metadata": { | ||
"description": "The globally unique and immutable bot ID. Also used to configure the displayName of the bot, which is mutable." | ||
} | ||
}, | ||
"botSku": { | ||
"type": "string", | ||
"metadata": { | ||
"description": "The pricing tier of the Bot Service Registration. Acceptable values are F0 and S1." | ||
} | ||
}, | ||
"newAppServicePlanName": { | ||
"type": "string", | ||
"metadata": { | ||
"description": "The name of the App Service Plan." | ||
} | ||
}, | ||
"newAppServicePlanSku": { | ||
"type": "object", | ||
"defaultValue": { | ||
"name": "S1", | ||
"tier": "Standard", | ||
"size": "S1", | ||
"family": "S", | ||
"capacity": 1 | ||
}, | ||
"metadata": { | ||
"description": "The SKU of the App Service Plan. Defaults to Standard values." | ||
} | ||
}, | ||
"newAppServicePlanLocation": { | ||
"type": "string", | ||
"metadata": { | ||
"description": "The location of the App Service Plan. Defaults to \"westus\"." | ||
} | ||
}, | ||
"newWebAppName": { | ||
"type": "string", | ||
"defaultValue": "", | ||
"metadata": { | ||
"description": "The globally unique name of the Web App. Defaults to the value passed in for \"botId\"." | ||
} | ||
} | ||
}, | ||
"variables": { | ||
"appServicePlanName": "[parameters('newAppServicePlanName')]", | ||
"resourcesLocation": "[parameters('newAppServicePlanLocation')]", | ||
"webAppName": "[if(empty(parameters('newWebAppName')), parameters('botId'), parameters('newWebAppName'))]", | ||
"siteHost": "[concat(variables('webAppName'), '.azurewebsites.net')]", | ||
"botEndpoint": "[concat('https://', variables('siteHost'), '/api/messages')]" | ||
}, | ||
"resources": [ | ||
{ | ||
"name": "[parameters('groupName')]", | ||
"type": "Microsoft.Resources/resourceGroups", | ||
"apiVersion": "2018-05-01", | ||
"location": "[parameters('groupLocation')]", | ||
"properties": { | ||
} | ||
}, | ||
{ | ||
"type": "Microsoft.Resources/deployments", | ||
"apiVersion": "2018-05-01", | ||
"name": "storageDeployment", | ||
"resourceGroup": "[parameters('groupName')]", | ||
"dependsOn": [ | ||
"[resourceId('Microsoft.Resources/resourceGroups/', parameters('groupName'))]" | ||
], | ||
"properties": { | ||
"mode": "Incremental", | ||
"template": { | ||
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", | ||
"contentVersion": "1.0.0.0", | ||
"parameters": {}, | ||
"variables": {}, | ||
"resources": [ | ||
{ | ||
"comments": "Create a new App Service Plan", | ||
"type": "Microsoft.Web/serverfarms", | ||
"name": "[variables('appServicePlanName')]", | ||
"apiVersion": "2018-02-01", | ||
"location": "[variables('resourcesLocation')]", | ||
"sku": "[parameters('newAppServicePlanSku')]", | ||
"properties": { | ||
"name": "[variables('appServicePlanName')]" | ||
} | ||
}, | ||
{ | ||
"comments": "Create a Web App using the new App Service Plan", | ||
"type": "Microsoft.Web/sites", | ||
"apiVersion": "2015-08-01", | ||
"location": "[variables('resourcesLocation')]", | ||
"kind": "app", | ||
"dependsOn": [ | ||
"[resourceId('Microsoft.Web/serverfarms/', variables('appServicePlanName'))]" | ||
], | ||
"name": "[variables('webAppName')]", | ||
"properties": { | ||
"name": "[variables('webAppName')]", | ||
"serverFarmId": "[variables('appServicePlanName')]", | ||
"siteConfig": { | ||
"appSettings": [ | ||
{ | ||
"name": "WEBSITE_NODE_DEFAULT_VERSION", | ||
"value": "10.14.1" | ||
}, | ||
{ | ||
"name": "MicrosoftAppId", | ||
"value": "[parameters('appId')]" | ||
}, | ||
{ | ||
"name": "MicrosoftAppPassword", | ||
"value": "[parameters('appSecret')]" | ||
} | ||
], | ||
"cors": { | ||
"allowedOrigins": [ | ||
"https://botservice.hosting.portal.azure.net", | ||
"https://hosting.onecloud.azure-test.net/" | ||
] | ||
} | ||
} | ||
} | ||
}, | ||
{ | ||
"apiVersion": "2017-12-01", | ||
"type": "Microsoft.BotService/botServices", | ||
"name": "[parameters('botId')]", | ||
"location": "global", | ||
"kind": "bot", | ||
"sku": { | ||
"name": "[parameters('botSku')]" | ||
}, | ||
"properties": { | ||
"name": "[parameters('botId')]", | ||
"displayName": "[parameters('botId')]", | ||
"endpoint": "[variables('botEndpoint')]", | ||
"msaAppId": "[parameters('appId')]", | ||
"developerAppInsightsApplicationId": null, | ||
"developerAppInsightKey": null, | ||
"publishingCredentials": null, | ||
"storageResourceId": null | ||
}, | ||
"dependsOn": [ | ||
"[resourceId('Microsoft.Web/sites/', variables('webAppName'))]" | ||
] | ||
} | ||
], | ||
"outputs": {} | ||
} | ||
} | ||
} | ||
] | ||
} |
Oops, something went wrong.