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”

 

 

 

 

 

 

 

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

 

 

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 :

 

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                   

REMEMBER: these articles are REPUBLISHED. Your best bet to get a reply is to follow the link at the top of the post to the ORIGINAL post! BUT you're more than welcome to start discussions here:

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