Bot Framework .Net Core получает строковую переменную из IFrame - PullRequest
0 голосов
/ 07 марта 2019

Проблема заключается в создании приложения Bot через Bot Framework с использованием .Net Core.В .Net Framework я использовал API для создания приложения для ботов.При первоначальном методе я передаю строковый параметр и получаю это значение из IFrame Url, но в .Net Core я использую метод OnTurnAsync и не могу переопределить этот метод для передачи строкового параметра как «userName».Я делюсь между .Net core и .Net framework начальными методами ниже.

Я вызываю приложение бота через IFrame, например;https://webchat.botframework.com/...&userName=test' style = "width: 600px; высота: 600px;">

Так как я могу передать параметр в метод OnTurnAsync?

.Net Framework

   public async Task<HttpResponseMessage> Post([FromBody]Activity activity, string userName)
    {
        if (activity.Type == ActivityTypes.Message)
        {                
            var keyword = activity.Text.ToLower().ToEnglish();
            var responseAttachment = KeywordHelper.GetAttachmentResult(keyword);
            if (responseAttachment != null)
            {
                var answer = ((HeroCard)responseAttachment.Content).Title.ToString();
                conversation.Response = answer;
                this.conversationService.InsertToConversation(conversation);
                var connector = new ConnectorClient(new Uri(activity.ServiceUrl));
                var reply = activity.CreateReply();
                reply.Attachments.Add(responseAttachment);
                await connector.Conversations.ReplyToActivityAsync(reply);

                activity.Type = ActivityTypes.Message;
            }
        }
    }

.Net Core

        public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
    {
            if (turnContext.Activity.Type == ActivityTypes.Message)
            {
                var userName = "userName";

                var keyword = turnContext.Activity.Text.ToLower().ToEnglish();
                var responseAttachment = KeywordHelper.GetAttachmentResult(keyword);

                if (responseAttachment != null)
                {
                    var answer = ((HeroCard)responseAttachment.Content).Title.ToString();
                    conversation.Response = answer;
                    this.conversationService.InsertToConversation(conversation);
                    var connector = new ConnectorClient(new Uri(turnContext.Activity.ServiceUrl));


                    var reply = turnContext.Activity.CreateReply();
                }

            }
    }

1 Ответ

0 голосов
/ 04 апреля 2019

Вы все еще можете использовать контроллер Web Api с BotBuilder V4, как показано в этом примере: https://github.com/Microsoft/BotBuilder-Samples/blob/samples-work-in-progress/samples/csharp_dotnetcore/13.core-bot/Controllers/BotController.cs

[Route("api/messages")]
[ApiController]
public class BotController : ControllerBase
{
    private readonly IBotFrameworkHttpAdapter Adapter;
    private readonly IBot Bot;

    public BotController(IBotFrameworkHttpAdapter adapter, IBot bot)
    {
        Adapter = adapter;
        Bot = bot;
    }

    [HttpPost]
    public async Task PostAsync()
    {
        // Delegate the processing of the HTTP POST to the adapter.
        // The adapter will invoke the bot.
        await Adapter.ProcessAsync(Request, Response, Bot);
    }
}

Однако, если вы передаете идентификатор пользователя и имя пользователя в качестве параметров строки запроса в WebChat iframeтогда вы можете получить имя пользователя из activity.From.Name

...