Skip to content

Bot Framework SDK 4.9

Compare
Choose a tag to compare
@cleemullins cleemullins released this 12 May 19:09

November 2021 (version 4.9.7)

This release introduces a global flag called "Templates.EnableFromFile" that indicates whether the Adaptive Expression fromFile function is allowed in LG templates. If an application had previously made use of this function, it is now required to add the line "Templates.EnableFromFile = true;" to the Startup.cs code.

May 2020 (version 4.9.0)

Welcome to the May 2020 release of the Bot Framework SDK. There are a number of updates in this version that we hope you will like; some of the key highlights include:

  • Skills - Skills now support adaptive dialogs and all activity types, and have improved support for SSO and OAuth. The v2.1 skill manifest is now GA. We also added Bot Framework Composer support for building and consuming Skills.
  • Microsoft Teams - Improvements in Microsoft Teams API support, including support in Java!
  • Bot Telemetry - Mapping of Dialogs into Azure AppInsights Page View Events.
  • Health Check APIs - Quickly verify a bot is running.
  • Adaptive Dialogs - A more flexible, event driven dialog system for implementing multi-turn conversational patterns.
  • CLI tools for Adaptive Dialogs - new ability to merge and validate adaptive schema assets.
  • Language Generation - Add language and personality responses to your bot conversations.
  • Adaptive Expressions - Use bot aware expressions to react to user input and drive bot functionality.
  • Authentication Improvements - SSO between Bots and Skills and improvements to X.509 auth.
  • Generated Dialogs (Early Preview) - Automatically create robust Bot Framework Composer assets from JSON or JSON Schema that leverage Adaptive Dialogs.
  • VS Code debugger for Adaptive Dialogs (Early Preview) - Create & validate .lu and .lg documents as well as debug declaratively defined adaptive dialogs.

Insiders: Want to try new features as soon as possible? You can download the nightly Insiders build [C#] [JS] [Python] [CLI] and try the latest updates as soon as they are available. And for the latest Bot Framework news, updates, and content, follow us on Twitter @msbotframework!

Skills

Skills have been updated to work with adaptive dialogs, and both adaptive and traditional dialogs will now accept all types of activities.

The skill manifest schema has been updated to version 2.1. Improvements in this version include the ability to declare & share your language models, and define any type of activity that your skill can receive.

This release also includes authentication improvements with skills, including using SSO with dialogs, and OAuth without needing a magic code in WebChat and DirectLine.

Microsoft Teams

We continue to focus on making sure all the Teams-specific APIs are fully supported across our SDKs. This release brings full support for Microsoft Teams APIs in the preview Java SDK, including samples.

The OnTeamsMemberAdded event in the activity handler has been updated to use the get single member endpoint under the covers, which should significantly reduce latency and reliability of this event in large teams.

The TeamsChannelAccount object has been updated to include userRole (one of owner, member, or guest) and tenantId (for the user's tenantId).

Bot Telemetry

Bots now capture Page View events, native to Application Insights, whenever a dialog is started. This allows you to use the User Flows dashboard in Application Insights to see how users move through your bot, between dialogs and where they drop out.
Telemetry In AppInsights

Health Check APIs

Support was added for a new invoke named healthCheck that allows a sender to verify if a bot is responding to requests, and if trust can be established between the sender and the bot. The bot also has the option of overriding the response to add additional health information in the response.

Adaptive Dialogs

We’re also excited to make Adaptive Dialogs generally available in C# and as a preview release in JavaScript!

Adaptive Dialogs, which underpin the dialog design and management authoring features found in Bot Framework Composer, enable developers to dynamically update conversation flow based on context and events. This is especially useful when dealing with more sophisticated conversation requirements, such as context switches and interruptions. Bot Framework Skills can now also leverage Adaptive Dialogs.

Adaptive Dialogs also now support Telemetry. Data from Adaptive Dialogs, including triggers, actions and recognizers now flow into your Azure Application Insights instance.

CLI tools for Adaptive Dialogs

CLI tools for Adaptive Dialogs, Language Generation, QnaMaker and Luis Cross-train - new ability to merge and validate adaptive schema assets, augment qna and lu files, create/ update/ replace/ train/ publish LUIS and or QnA maker application and Language Generation templates manipulation.

New CLI Tools were added for management of Adaptive Dialogs.

  • bf-dialog supports merging dialog schema files and verify file format correctness.
  • bf-luis Adds commands to augment lu files and create/ update/ replace/ train/ publish LUIS
  • bf-qnamaker Adds commands to augment qna files and create/ update/ replace/ train/ publish QnAMaker
  • bf-lg Parse, collate, expand and translate lg files.

Language Generation

LG is Generally Available (GA) on both the C# and JS Platforms.

Language Generation (LG) enables you to define multiple variations of a phrase, execute simple expressions based on context, and refer to conversational memory. At the core of language generation lies template expansion and entity substitution. You can provide one-off variation for expansion as well as conditionally expanding a template. The output from language generation can be a simple text string or multi-line response or a complex object payload that a layer above language generation will use to construct a complete activity. The Bot Framework Composer natively supports language generation to produce output activities using the LG templating system.

You can use Language Generation to:

  • Achieve a coherent personality, tone of voice for your bot.
  • Separate business logic from presentation.
  • Include variations and sophisticated composition for any of your bot's replies.
  • Construct cards, suggested actions and attachments using a structured response template.

Language Generation is achieved through:

  • A markdown based .lg file that contains the templates and their composition.
    Full access to the current bot's memory so you can data bind language to the state of memory.
  • Parser and runtime libraries that help achieve runtime resolution.

Adaptive Expressions

Adaptive Expressions are Generally Available (GA) on both the C# and JS Platforms.

Bots use expressions to evaluate the outcome of a condition based on runtime information available in memory to the dialog or the Language Generation system. These evaluations determine how your bot reacts to user input and other factors that impact bot functionality.

Adaptive expressions were created to address this core need as well as provide an adaptive expression language that can used with the Bot Framework SDK and other conversational AI components, like Bot Framework Composer, Language Generation, Adaptive dialogs, and Adaptive Cards.

An adaptive expression can contain one or more explicit values, pre-built functions or [custom functions. Consumers of adaptive expressions also have the capability to inject additional supported functions. For example, all Language Generation templates are available as functions as well as additional functions that are only available within that component's use of adaptive expressions.

Authentication Improvements

We added support for single sign-on while using Expect Replies. This applies to SSO performed between a pair of bots: host and a skill.

For Bot Identification we've added the ability to specify sendx5c parameter for certificate authentication. This feature was requested by customers and allows for more flexibility when using cert auth.

Additional Sovereign Clouds are supported.

Generated Dialogs - Early Preview

The Bot Framework has a rich collection of conversational building blocks, but
creating a bot that feels natural to converse with requires understanding and
coordinating across language understanding, language generation and dialog
management. To simplify this process and capture best practices, we've created
the bf-generate plugin for the BotFramework CLI tool. The
generated dialogs make use of event-driven adaptive dialogs with a rich and
evolving set of capabilities including:

  • Handle out of order and multiple responses for simple and array properties.
  • Add, remove, clear and show properties.
  • Support for choosing between ambiguous entity values and entity property mappings.
  • Recognizing and mapping for all LUIS prebuilt entities.
  • Help function, including auto-help on multiple retries.
  • Cancel
  • Confirmation

VS Code Debugger - Early Preview

Adaptive tools is a brand new Visual studio code extension you can use to create/ validate .lu and .lg documents as well as debug declaratively defined adaptive dialogs. This extension provides rich authoring & editing capabilities for .lu and .lg file formats including syntax highlighting, auto-suggest and auto-complete.

We anticipate adding an early preview to the VS Marketplace shortly after this release.

Bot Builder Community

During this release, the Bot Builder Community has further raised the bar by adding more features, more adapters, and fixing more bugs.

  1. A revised C# Alexa Adapter and Google Home Adapter Re-built from the ground up, starting with Alexa, to allow the adapters to be consumed by Azure Bot Service and made available as channels. Improvements include better native activity type mapping, improved markdown rendering and support for more complex scenarios (such as merging multiple outgoing activities).

  2. A new C# Zoom Adapter. Currently supports Zoom 1:1 and channel chat capabilities, being converted to native BF activity types. Also supports the subscribing to any event a Zoom as supports (translated into Event activities), with full support for Zoom interactive messages and rich message templates.

  3. A RingCentral Adapter. The RingCentral Engage adapter allows you to add an additional endpoint to your bot for RingCentral Engage Digital Platform integration. The RingCentral endpoint can be used in conjunction with other channels meaning, for example, you can have a bot exposed on out of the box channels such as Facebook and Teams, but also integrated as an RingCentral Engage Digital Source SDK into RingCentral.

Changelog for v4.9.0:

  • Update project files for release [PR 3870]
  • SkillDialogUpdates for ConnectionName. [PR 3866]
  • Improve disconnect test so it actually tests disconnect. [PR 3865]
  • Remove $id from schema to prevent tests from changing assets. [PR 3863]
  • Replace UseState() with UseBotState() [PR 3862]
  • [Expression] change naming of timex functions [PR 3858]
  • Adaptive: Detect and load graph cycles during type loading [PR 3857]
  • Fix WaterfallStepContext to use parent dc properly [PR 3855]
  • Update schemas for dialog:merge [PR 3851]
  • Fix signature of LanguageGenerator base class [PR 3850]
  • added debug signature to recognizers [PR 3849]
  • Add tenantId and userRole to TeamsChannelAccount [PR 3847]
  • Clm/fix utf8 bom [PR 3846]
  • Adds serialization fix for #3833 [PR 3845]
  • Cleanup Component Registration [PR 3838]
  • SkillDialog activity type handling updates [PR 3834]
  • Drop OnCustomEvent, it's a duplicate of OnDialogEvent [PR 3832]
  • Move LuisAdaptiveRecognizer into LUIS assembly [PR 3830]
  • OAuthInput: create parity with OAuthPrompt [PR 3827]
  • add null string support in StringUtils [PR 3826]
  • Update ESRP authenticode JSON per SHA1 Digest Deprecation requirement. [PR 3824]
  • Skills use the right connector client when receiving tokens from TokenService [PR 3822]
  • Add StringUtils class to BotBuilder [PR 3820]
  • Check for null on Activity.From when logging telemetry [PR 3819]
  • Support SSO with skill dialog and expected replies [PR 3818]
  • Set CI trigger to batch changes [PR 3817]
  • make running storage emulators disabled on build server [PR 3815]
  • Replace resource interfaces with abstract base classes [PR 3811]
  • Support empty LG file [PR 3810]
  • move base interface schema files to declarative assembly [PR 3808]
  • bump assembly version 4.8 => 4.9 [PR 3807]
  • [PORT] Bot Change Detection [PR 3804]
  • Add experimental dummy .yml build [PR 3803]
  • [LG] Inject LG templates as a global expression function [PR 3802]
  • Update Microsoft.BeginDialog.schema [PR 3801]
  • make converters internal [PR 3800]
  • Change onTeamsMemberAdded for Teams to use getMember() [PR 3798]
  • healthcheck feature [PR 3796]
  • tweaks to schema per feedback from composer team [PR 3794]
  • Update AdaptiveSkillDialog to use ActivityProcessed [PR 3789]
  • Fix for Issue3767 (scoped services not working correctly) [PR 3788]
  • [QnAMaker] Volitile LowScoreVariation and Active Learning Issue fix [PR 3786]
  • Create CancelDialog action [PR 3785]
  • Revert the reusing of json converters [PR 3783]
  • Rename updateHandlers to deleteHandlers [PR 3782]
  • add recipient in BotFrameworkHttpClient.PostActivityAsync if value is null [PR 3781]
  • Timex function for hasFullDate and hasValidHour builtin-functions [PR 3780]
  • add allowloop to repeat dialog and test [PR 3778]
  • set recognized properties even if interruption is off [PR 3777]
  • Make ValueRecognizer internal [PR 3776]
  • Move QnAMaker Dialog/Recognizer out of Adaptive and into QnA assembly [PR 3775]
  • [Expression] Enable setProperty function creating object handling null correctly [PR 3771]
  • Fix typo in code owners [PR 3770]
  • Change Comparisons to ReturnType of 'template' function use bit operators [PR 3766]
  • [LG] disable datetime parsing in json() [PR 3765]
  • [LG] fix null check in expression [PR 3763]
  • Schema cleanup and validation [PR 3758]
  • Add custom endpoint property to the LuisService class [PR 3754]
  • Updates for CallerId [PR 3753]
  • [LG] re-do multiLingualLg [PR 3752]
  • MetadataBoost dead code cleanup [PR 3751]
  • Code owner update for LG & expression library [PR 3750]
  • Add initial code owners to packages [PR 3746]
  • Slack adapter updates for dialog interactions [PR 3744]
  • [LG] Improve LG Options for replace null and markdown rendering [PR 3743]
  • [Certificate Authentication] Expose sendX5c parameter [PR 3741]
  • Update Microsoft.ContinueLoop.schema [PR 3740]
  • Locale Fixes [PR 3739]
  • Update telemetry logger to include attachments [PR 3737]
  • fix foreach empty and add test case [PR 3736]
  • Updated RunAsync to avoid sending EoC from the RootBot to the channel [PR 3735]
  • [Authentication] updates to support Arlington [PR 3734]
  • Add state to AppBasedLinkQuery for OAuth flow [PR 3732]
  • [LG] Robust Template CRUD with Two-phase parsing of LG [PR 3731]
  • [LowScoreVariation]For first item with score more than MaxScoreForLow� [PR 3730]
  • Ensure BOM is not written to response body in HttpHelper [PR 3728]
  • Fix bot state so that the context service key is used consistently to access the cached state [PR 3727]
  • Add/Edit /// comments. Fix some code smell. [PR 3718]
  • Replace null check with string.IsNullOrWhiteSpace() [PR 3717]
  • Fixes for QnA / Recognizer Adaptive telemetry [PR 3715]
  • refactor expander [PR 3713]
  • [LG] Remove dash in identifier to make sure arithmetic expressions can be parsed correctly [PR 3712]
  • Some cleanup of internals [PR 3711]
  • Updates DialogManager to work with skills [PR 3709]
  • TestGetChannelsAsync was testing the same thing as TestGetTeamDetails� [PR 3707]
  • Fix foreach issue and update some schema examples [PR 3704]
  • Ensured all Activities stored in transcript have Ids [PR 3701]
  • [Expression] Add array return type [PR 3697]
  • [Expression] Add support of create object via {key: value} syntax [PR 3694]
  • fix repeat option [PR 3693]
  • [QnA Maker] header change for adding "Ocp-Apim-Subscription-Key" [PR 3690]
  • Make expression support long [PR 3676]
  • [Expression] Support byte array input for base64 function [PR 3675]
  • [LG] Refine Error message and remove duplicate code [PR 3670]
  • Add support for operations on arrays [PR 3669]
  • remove extraneous space in property name [PR 3668]
  • Fix OAuth bug [PR 3664]
  • Get AzureDeploymentPassword from new key vault. [PR 3662]
  • [LG] Fix missing trailing line break with String.Readline() [PR 3655]
  • [LG] Loose grammar to make Structure LG more torrent [PR 3654]
  • use inner most dc for sending Bot State [PR 3653]
  • Add doc XML to the QnAMakerDialog class [PR 3651]
  • DCR: Change .dialog file string resource lookup to fallback to non-dialog files. [PR 3640]
  • Debugger: preserve optional designer identifiers with source map range [PR 3637]
  • Update IMemory interface and tryEvaluate for expression [PR 3635]
  • Fix the interface name in the error message. [PR 3633]
  • [DCR] Add support for declarative custom dialogs [PR 3632]
  • Fix local culture info changes the result of parsing number and datetime [PR 3631]
  • Debugger: Clean up on Disconnection and Identifier Thread Safety [PR 3629]
  • Add extension for default languagePolicy [PR 3624]
  • Make the CRUD of the template consistent [PR 3622]
  • cache Antlr parse result [PR 3621]
  • fix Antler Parser build warnings [PR 3618]
  • update LG escape [PR 3614]
  • [Exprssion] Add method for create an array by square bracket expression [PR 3613]
  • Disambiguation of �!� mark in expression [PR 3608]
  • [Expression] Support escape in regex [PR 3607]
  • [Expression] drop dynamic type [PR 3603]
  • Replace interfaces with Abstract base classes [PR 3602]
  • add title to choices and confirmChoices schema [PR 3601]
  • Remove unnecessary restrication on memory path [PR 3597]
  • make custom function easier [PR 3595]
  • Add Push/Pop services to TurnContextStateCollection. [PR 3594]
  • Updates appId argument check in GetAppCredentialsAsync #3590 [PR 3591]
  • Add support of multi line definition of expression in LG [PR 3589]
  • Move DeepEquals and References from extensions to Expression class [PR 3588]
  • Fix AdapterExtensions' ambiguous references [PR 3587]
  • Fix for Issue #3525 [PR 3584]
  • Debug Adapter Protocol Support for variablesReference in OutputEvent [PR 3582]
  • Improve Expression with adding type checking functions [PR 3581]
  • update expression escape [PR 3580]
  • [activityfactory] Improve missing type error [PR 3575]
  • Move DialogStateManager/Memory/Scope into dialogs dialogContext.State [PR 3570]
  • [OAuth]do not set signInLink to empty when OAuthAppCredentials is set [PR 3564]
  • Dialog Debug Adapter improvements [PR 3563]
  • fix index access bug caused by Access Modifiers of C# class [PR 3554]
  • Fix path resolver not working when alias in middle [PR 3544]
  • EoC should only be handled when coming from parent in RunAsync [PR 3540]
  • fix lack of a generic typed method for posting activities to skills [PR 3539]
  • Add unit test for CancelAllDialogs and fix eventName and eventValue null [PR 3536]
  • Proactive auth: trust incoming token url conditionally [PR 3532]
  • Microsoft.Bot.Builder.Dialogs.Adaptive.Testing had release labels for creating nuget [PR 3529]