речь к тексту в Microsoft Botframework с помощью C # - PullRequest
0 голосов
/ 20 ноября 2018

Я создал бота, используя Microsoft Botframework в C #.Теперь я использую распознавание речи, в котором я хочу знать одну вещь: можем ли мы включать и выключать микрофон вместо того, чтобы нажимать на него для каждого вопроса в веб-чате, если это невозможно, тогда, пожалуйста, скажите мне, как мы можем дать речь как ввод и получитьвыходной ответ в тексте от бота.Теперь он дает текст как ответ, когда я даю текст как ввод, и речь как ответ, когда я даю речь как ввод, но я хочу, чтобы он отвечал в тексте, когда я даю речь как ввод.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Если вы хотите, чтобы микрофон включался после того, как бот говорит с вами, вам нужно установить inputHint на активности на ExpectingInput.Если вы всегда этого хотите и не отправляете несколько сообщений одновременно, вы можете установить его с помощью ActivityMapper (v3) или Middleware (v4).Просто обратите внимание, что с v3 ExpectingInput ломается на ios.Я не уверен насчет v4.Ниже приведен пример промежуточного программного обеспечения (v4), которое устанавливает inputHint на ExpectingInput, если текст или вложение заканчиваются на «?».

public class TextToSpeechMiddleware : IMiddleware
{
    public Task OnTurnAsync(ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken = default(CancellationToken))
    {
        turnContext.OnSendActivities(OnSendActivities);
        turnContext.OnUpdateActivity(OnUpdateActivity);

        return next(cancellationToken);
    }

    private Task<ResourceResponse> OnUpdateActivity(ITurnContext turnContext, Activity activity, Func<Task<ResourceResponse>> next)
    {
        ConvertTextToSpeech(activity);
        return next();
    }

    private Task<ResourceResponse[]> OnSendActivities(ITurnContext turnContext, List<Activity> activities, Func<Task<ResourceResponse[]>> next)
    {
        foreach (Activity currentActivity in activities.Where(a => a.Type == ActivityTypes.Message))
        {
            ConvertTextToSpeech(currentActivity);
        }

        return next();
    }

    private void ConvertTextToSpeech(Activity message)
    {
        Activity initialMessage = message;

        try
        {
            if (message.Type == ActivityTypes.Message)
            {
                if (string.IsNullOrEmpty(message.Speak))
                {
                    if (string.IsNullOrEmpty(message.Text))
                    {
                        if (message.Attachments[0].Content is HeroCard attachment)
                        {
                            message.Speak = TextToSpeechHelper.ConvertTextToSpeechText(attachment.Text);
                        }
                    }
                    else
                    {
                        message.Speak = TextToSpeechHelper.ConvertTextToSpeechText(message.Text);
                    }

                    message.Speak = message.Speak.Trim();

                    if (ignoreList.Where(i => message.Speak.ToLower().StartsWith(i.ToLower())).Count() != 0)
                    {
                        message.Speak = null;
                        ignoredSpeak = true;
                    }
                }
                else if (string.IsNullOrWhiteSpace(message.Speak))
                {
                    message.Speak = null;
                }

                if ((!string.IsNullOrEmpty(message.Speak) && (message.Speak.EndsWith("?") || message.Speak.StartsWith("Is this correct?")))
                     || (!string.IsNullOrEmpty(message.Text) && message.Text.EndsWith("?")))
                {
                    message.InputHint = InputHints.ExpectingInput;
                }

                // IOs won't work with expecting input
                if (message.Recipient.Name.EndsWith(":ios"))
                {
                    message.InputHint = InputHints.AcceptingInput;
                }
            }
        }
        catch (Exception)
        {
            message = initialMessage;
        }
    }
}
0 голосов
/ 20 ноября 2018

Это зависит от используемой версии SDK.

Для версии 3 нет готовых решений, которые можно использовать.Как упомянуто в этом обсуждении , вам может потребоваться самостоятельно написать собственное решение для удовлетворения ваших потребностей.Однако это обсуждение предполагает, что уже может быть решение, которое вы могли бы адаптировать к вашим потребностям.

Для версии 4 в настоящее время не существует готового решения,но это находится в стадии рассмотрения с некоторой разработкой, уже выполненной.Прочитайте это обсуждение здесь .

Надежда на помощь!

...