Отправьте одну адаптивную карточку в качестве приветствия, а затем примите меры. отправьте данные и завершите беседу

#c# #botframework

#c# #botframework

Вопрос:

итак, у меня есть этот код ниже, я адаптировал его для использования только одной карточки, я хотел бы, чтобы мне помогли удалить функцию случайного выбора, так как когда я нажимаю action.submit на карточке, она снова отображает ту же карточку, я бы хотел, чтобы эта карточка отображалась только один раз и заканчивала разговор словами спасибо при нажатии action.submit.

Я ознакомился с большим количеством документации и руководств, но некоторые из них устарели, а некоторые не объясняют метод полностью. Я действительно устал и просто хотел бы немного поучиться, спасибо вам за любую помощь.

 public class AdaptiveCardsBot : IBot
{
    private const string WelcomeText = @"Type anything to see the prototype.";

    // This array contains the file location of our adaptive cards
    private readonly string[] _cards =
    {
        Path.Combine(".", "Resources", "card.json"),
    };

    public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
    {
        if (turnContext == null)
        {
            throw new ArgumentNullException(nameof(turnContext));
        }

        if (turnContext.Activity.Type == ActivityTypes.Message)
        {
            Random r = new Random();
            var cardAttachment = CreateAdaptiveCardAttachment(this._cards[r.Next(this._cards.Length)]);
            var reply = turnContext.Activity.CreateReply();
            reply.Attachments = new List<Attachment>() { cardAttachment };
            await turnContext.SendActivityAsync(reply, cancellationToken);
        }
        else if (turnContext.Activity.Type == ActivityTypes.ConversationUpdate)
        {
            if (turnContext.Activity.MembersAdded != null)
            {
                await SendWelcomeMessageAsync(turnContext, cancellationToken);
            }
        }
        else
        {
            await turnContext.SendActivityAsync($"{turnContext.Activity.Type} activity detected", cancellationToken: cancellationToken);
        }
    }

    private static async Task SendWelcomeMessageAsync(ITurnContext turnContext, CancellationToken cancellationToken)
    {
        foreach (var member in turnContext.Activity.MembersAdded)
        {
            if (member.Id != turnContext.Activity.Recipient.Id)
            {
                await turnContext.SendActivityAsync(
                    $"Welcome to This Adaptive card Prototype. {WelcomeText}",
                    cancellationToken: cancellationToken);
            }
        }
    }

    private static Attachment CreateAdaptiveCardAttachment(string filePath)
    {
        var adaptiveCardJson = File.ReadAllText(filePath);
        var adaptiveCardAttachment = new Attachment()
        {
            ContentType = "application/vnd.microsoft.card.adaptive",
            Content = JsonConvert.DeserializeObject(adaptiveCardJson),
        };
        return adaptiveCardAttachment;
    }
}
  

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

Комментарии:

1. Приемлем ли ответ Алехандро?

2. Вы все еще работаете над этим?

3. Я перешел на другой метод для выполнения того, что мне нужно было сделать, и это было не так уж полезно, поскольку я уже знал, какую информацию он мне сообщил.

4. Вы хотели бы опубликовать свое решение в качестве ответа?

5. Хорошо, я пометил это как правильное, поскольку это может помочь другим, кто не знает этой информации.

Ответ №1:

Вы можете исключить случайную функцию, удалив эту инструкцию.

 r.Next(this._cards.Length) 
  

В строке:

 var cardAttachment = CreateAdaptiveCardAttachment(this._cards[r.Next(this._cards.Length)]);
  

Это массив карточки:

 private readonly string[] _cards =
        {
            Path.Combine(".", "Resources", "FlightItineraryCard.json"),
            Path.Combine(".", "Resources", "ImageGalleryCard.json"),
            Path.Combine(".", "Resources", "LargeWeatherCard.json"),
            Path.Combine(".", "Resources", "RestaurantCard.json"),
            Path.Combine(".", "Resources", "SolitaireCard.json"),
        };