如何使用 QnA maker 实现我的 REST API?获取 OnMessageActivityAsync 错误

How to implement my REST API with the QnA maker? Getting OnMessageActivityAsync error

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken) { //I have code here that works fine. }

第二种方法

public QnABot(IConfiguration configuration, ILogger<QnABot> logger, IHttpClientFactory httpClientFactory)
    {
        _configuration = configuration;
        _logger = logger;
        _httpClientFactory = httpClientFactory;
    }


    protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
        var httpClient = _httpClientFactory.CreateClient();

        var qnaMaker = new QnAMaker(new QnAMakerEndpoint
        {
            KnowledgeBaseId = _configuration["QnAKnowledgebaseId"],
            EndpointKey = _configuration["QnAAuthKey"],
            Host = GetHostname()
        },
        null,
        httpClient);

        _logger.LogInformation("Calling QnA Maker");

        // The actual call to the QnA Maker service.
        var response = await qnaMaker.GetAnswersAsync(turnContext);
        if (response != null && response.Length > 0)
        {
            await turnContext.SendActivityAsync(MessageFactory.Text(response[0].Answer), cancellationToken);
        }
        else
        {
            await turnContext.SendActivityAsync(MessageFactory.Text("No QnA Maker answers were found."), cancellationToken);
        }
    }

错误:'Type QnABot' 已经用相同的参数类型定义了名为 'OnMessageActivityAsync' 的成员。

我使用第三方 API 和我的机器人使用 HTTP 客户端。现在,我想将 QnA maker 添加到我的机器人中。 问题是我只希望用户在需要时使用 API 而 QnA 制造商出于不同的原因。 基本上,QnA 制造商拥有我们在我公司使用的特定应用程序的信息。 然而,API 知识库回答自然语言问题,例如“如何在我的 iPhone 上安装 outlook?”所以这是用户能够选择是否需要来自 QnA 的特定应用程序信息的问题制造商或从 API.

询问“如何做”的问题

我也已经制作了一个 QnA 机器人。我有 QnA maker 的代码,现在我正在尝试同时实现我的网络 api 代码和 qna maker 代码。我已将 API 中的逻辑用于我的 QnAbot.cs 文件,但我收到此 OnMessageActivityAsync 错误。显然是因为我有其中两个,而程序不知道何时访问哪个方法。那么如何区分这两种方法呢?

出现 "OnMessageActivityAsync" 错误,因为我有其中两种方法,但我不知道如何区分这两种方法。我需要机器人能够查询 API 或 QnA 制造商,而不是一起查询。This is my first OnMessageActivityAsync second on messageactivity which gives me an error

消息很清楚。您两次使用相同的参数获得相同的函数。那是不允许的。允许具有相同名称区域的多个函数,但仅限于 overloading rules - 这要求参数不同,因此编译器可以使它们保持一致。

根据名称,这些是事件处理程序,签名是固定的。这意味着他们需要改变名称。

我看到了这些选项:

1) 您手动定义并注册两者之一。这样你就可以定义名称

2) 两者都删除,给你注册的元素在设计器中命名。然后尝试再次实现它们 - 元素的名称应该用作前缀。

3) 此处不可用,因为这些事件不遵循正确的事件处理程序模式。

我建议学习如何手动进行事件注册和定义。您不能永远依赖设计师的帮助。