Known Issues

Cortana Skills Kit is currently in preview. This document lists known issues, and if available, workarounds and solutions.

Cortana skills only work when language is set to English (United States)

The public preview for Cortana is available for the U.S. English (en-US) market only.

Cortana does not display all cards when using SendActivitiesAsync

Using SendActivitiesAsync to show multiple cards in Cortana will not work. Cortana will display the first card, but none of the others on the list will be shown.

As a workaround, you should use SendActivityAsync with a list of cards, as shown in the sample code below. Set the AttachmentLayout property to "list" or to "carousel". If the channel does not support carousel format, it will display the rich cards in list format, even if the AttachmentLayout property specifies "carousel".

var cardAttachmentl = CreateAdaptiveCardAttachment(_cards[0]);
var cardAttachment2 = CreateAdaptiveCardAttachment(_cards[l]);

var activity = MessageFactory.Text("Testing a list of adaptive cards.");
activity.AttachmentLayout = AttachmentLayoutTypes.List;
activity.Attachments = new List<Attachment>();


await stepContext.Context.SendActivityAsync(activity, cancellationToken);

Cortana stops talking after 15 seconds, or displays the message, "Unfortunately this skill won't work on this version of Windows"

Cortana in the Windows 10 Anniversary update (version 1607) limits speech to 15 seconds. This limit has been removed in the Windows 10 Creators update (version 1703). A workaround is to break your speech text into multiple responses. You can send multiple replies to a single user invocation, as long as the input hint of the first N-1 replies is IgnoringInput. The last reply must set the input hint to ExpectingInput (which automatically turns the microphone on), or AcceptingInput (which doesn't).

Long repetitive sentences without appropriate punctuation become garbled when spoken in the Windows 10 Creators Update (version 1703)

If you have long text that is repetitive, the speech output from Cortana may be garbled. For example:

This is a very long sentence this is a very long sentence this is a very long sentence this is a very long sentence this is a very long sentence this is a very long sentence this is a very long sentence this is a very long sentence this is a very long sentence this is a very long sentence this is a very long sentence this is a very long sentence.

Windows 10 Fall Creators Update (Version 1709) resolves this issue. To work around it, ensure your SSML contains proper punctuation, such as commas and periods.

When a skill is deployed to self or group, the privacy and terms of use links in the permission card don't work. The reason for this is that you are not required to specify these links until you publish your skill to world.

Spoken utterances sometimes have punctuation appended

Cortana will sometimes append punctuation, such as a period, to the end of a user's utterance. The speech recognition engine is capable of understanding multiple sentences in a single speech request. The engine may add a period to an utterance depending on how the utterance is spoken. Make sure that your language model is designed to handle this.

Unable to interrupt Cortana

Currently Cortana does not support user's interrupting her when she is speaking. She also ignores clicking on her canvas while she is speaking.

Windows Phone does not support login

Currently, Cortana does not support logging into skills on Windows Phone. Log in using any other supported device first before using the skill on Windows Phone.

Cortana doesn't return to the previous volume level

In Windows, iOS, and Android versions, if your message includes speech along with the audio attachment, Cortana plays the audio stream at a reduced volume in the background until she finishes speaking. The audio volume does not reset to normal levels.

Cortana commands to control streaming don't work

Users may try to control streaming by using Cortana commands, such as pause, resume, next, or previous. This is not supported on Windows, iOS, or Android.

LuisDialog fails on skill launch

When Cortana launches a skill without an utterance (for example, "Open <invocation name>" or "Ask <invocation name>"), the activity.Text value is null. Passing the null text to LuisDialog throws an error. To work around this issue, override the MessageReceived method and add a null check as shown in the following example:

// V3
protected override async Task MessageReceived(IDialogContext context, IAwaitable<IMessageActivity> item)
    // Check for empty query
    var message = await item;
    if (string.isNullOrEmpty(message.Text))
        // Return the Help/Welcome
        await Help(context, null);
        await base.MessageReceived(context, item);

For javascript, you can create a customer recognizer that maps an empty string to a help intent.

Bot created from the QnA (V3) template fails when invoked without an intent

When you create a QnA V3 bot from the template, an invocation without intent (for example, "Open MySkill") will cause the default BasicQnA dialog to do nothing. This results in Cortana timing out. This issue can be fixed using the code from LuisDialog fails on skill launch.

Also, the default behavior is not just single turn but single shot, which means the conversation is closed after the bot returns a result.

Skill invocation name is not recognized when changing between accounts

There's a bug in switching between Microsoft (personal) Accounts (MSAs) and Azure Active Directory (AAD) Accounts due to cached credentials. Invocation grammars are tied to the user identity. Some identity information is cached by Cortana's agent and doesn't get cleared when you switch between MSA and AAD accounts. This information is not cleared by rebooting if fast start is enabled.

Until this is fixed, there is a workaround.

  1. Start Microsoft Task Manager.

  2. Click on More details.
    Task Manager default

  3. Click the details tab.
    Task Manager default

  4. Find the SearchUI.exe process (which is the Cortana agent), click on it, and kill the process with the End task button.

The next invocation to Cortana will restart the agent with a clear identity cache, and load the correct grammars to recognize unique invocation names. Subsequent invocations to Cortana should work as expected.