Azure чат-бот, использующий QnAMaker - должен приветствовать пользователей относительно часового пояса текущего пользователя - PullRequest
2 голосов
/ 10 февраля 2020

Я разрабатываю чат-бот в C# с использованием Azure Bot Framework (v4), в настоящее время у меня есть настройка для отображения текста приветствия, который используется для приветствия пользователя.

Текущий привет / приветствие: - Привет, пользователь, я бот. Как я могу помочь вам сегодня.

текущий код:

protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
    {

        foreach (var member in membersAdded)
        {
           if (member.Id != turnContext.Activity.Recipient.Id)
         {
                await turnContext.SendActivityAsync(MessageFactory.Text($"Hi  **{member.Name**. I am Bot." {welcomeText}), cancellationToken);

           }
        }

    }

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

Ожидаемый текст приветствия / приветствия: (когда пользователь общается по утрам) Привет, доброе утро! Я бот. Как я могу помочь вам сегодня.

Ожидаемый текст приветствия / приветствия: (когда пользователь беседует вечером) Привет, добрый вечер.! Я бот. Как я могу помочь вам сегодня.

Я хочу использовать QnAmker или текст приветствия по умолчанию, используемый в боте.

Ответы [ 2 ]

2 голосов
/ 10 февраля 2020

Кажется, вы пытаетесь получить user local time, и на основании этого вы бы хотели, чтобы ваш bot приветствовал пользователя. Вы можете попробовать следующий фрагмент кода:

protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
        {
            foreach (var member in membersAdded)
            {
                if (member.Id != turnContext.Activity.Recipient.Id)
                {
                    DateTime dateTime = DateTime.Now;

                    DateTime utcTime = dateTime.ToUniversalTime();

                    TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time");

                    DateTime yourLocalTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, cstZone);


                    if (yourLocalTime.Hour <= 12)
                    {

                        await turnContext.SendActivityAsync(MessageFactory.Text($"Hello {member.Name}, good morning"), cancellationToken);
                    }
                    else if (yourLocalTime.Hour > 12)
                    {

                        await turnContext.SendActivityAsync(MessageFactory.Text($"Hello {member.Name}, good afternoon"), cancellationToken);
                    }
                    else if (yourLocalTime.Hour > 17)
                    {

                        await turnContext.SendActivityAsync(MessageFactory.Text($"Hello {member.Name}, good evening"), cancellationToken);
                    }
                    else
                    {                      
                        await turnContext.SendActivityAsync(MessageFactory.Text($"Hello {member.Name} " + yourLocalTime), cancellationToken);
                    }


                }
            }
        }

Примечание: Как вы знаете, у каждой зоны есть свой временной интервал, поэтому вы можете сослаться на этот официальный документ для дальнейшей настройки. Я показал China Standard Time например. Вы можете настроить в соответствии с вашими требованиями.

Для дальнейшей настройки вы можете следовать ниже interface на снимке экрана. Просто исследуйте его, нажав F12 на FindSystemTimeZoneById на вышеуказанном коде.

enter image description here

Надеюсь, это поможет.

0 голосов
/ 10 февраля 2020

Эта информация указана для канала c. Он передается в свойстве Activity ChannelData

...