Azure Government Bot through Bot Composer

This post has been republished via RSS; it originally appeared at: IIS Support Blog articles.

I was recently troubleshooting an issue with Bot Composer 1.2 to create and publish the bot on Azure government cloud. But even after performing all the steps correctly we end up getting a 401 unauthorized error when the bot is tested on web chat.

 

Below are the things that need to be added to bot for making it work on Azure Gov cloud.

 

https://docs.microsoft.com/en-us/azure/bot-service/bot-service-resources-faq-ecosystem?view=azure-bot-service-4.0#how-do-i-create-a-bot-that-uses-the-us-government-data-center

 

Just to isolate the problem more, we deployed the exact same bot from composer on Normal App service and (not azure government one) and everything works smoothly there. So we got to know that the issue only happens when the deployment happens on the Azure government cloud.

 

We eventually figured out the following steps that are needed to make it work properly over azure government cloud.

 

** We need to make a code change for this to work and for making the code change, we would have to eject the run time otherwise composer will never be able to incorporate the change.

 

Create the bot using Composer.

Click on the “Project Settings” and then make sure you select “Custom Runtime” and then click on “get a new copy of runtime code”

 

ParagHurkat_4-1611254716503.jpeg

 

 

 

ParagHurkat_5-1611254716530.jpeg

 

 

 

 Once you do that, a folder called as “runtime” will be created in the project location for this composer bot.

 

ParagHurkat_6-1611254716535.jpeg

 

In the runtime, go to the azurewebapp folder and then open the .csproj file in Visual Studio and make the following changes (the following changes are required for the Azure government cloud)

 

  • Add below line in startup.cs :
services.AddSingleton<IChannelProvider, ConfigurationChannelProvider>()
  • Modify BotFrameworkHttpAdapter creation to take channelProvider in startup.cs as follows.
var adapter = IsSkill(settings) ? new BotFrameworkHttpAdapter(new ConfigurationCredentialProvider(this.Configuration), s.GetService<AuthenticationConfiguration>(), channelProvider: s.GetService<IChannelProvider>()) : new BotFrameworkHttpAdapter(new ConfigurationCredentialProvider(this.Configuration), channelProvider: s.GetService<IChannelProvider>());
  • Add a setting as following in your appsettings.json (this can be added from composer as well)
"ChannelService": "https://botframework.azure.us"

 

Build the ejected web app as follows :

 

C:\SampleTest\Composer\TestComposer1\runtime\azurewebapp>dotnet build

 

Now we need to build the schema by using the given script : (from powershell)

 

PS C:\SampleTest\Composer\TestComposer1\schemas> .\update-schema.ps1 -runtime azurewebapp

 

Next we need to publish this bot to Azure app service, we will make use of az webapp deployment command. Firstly create the zip of contents within the ".netcoreapp3.1" folder (not the folder itself) which is inside the runtime/azurewebapp/bin/release :

 

ParagHurkat_7-1611254716542.jpeg

Now we will use the command as follows :

 

Az webapp deployment source config-zip –resource-group “resource group name” –name “app service name” –src “The zip file you created”

 

This will publish the bot correctly to Azure and you can go ahead and do a test in web chat.

 

In short we had to make few changes from code perspective to get things working in Azure government cloud and for making those changes to a bot created via composer we need to eject the runtime and then make those code changes, build and update the schema and finally publish.

 

References :

 

Pre-requisites for Bot on Azure government cloud : Bot Framework Frequently Asked Questions Ecosystem - Bot Service | Microsoft Docs

Exporting runtime in Composer : Customize actions - Bot Composer | Microsoft Docs                   

Leave a Reply

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.