Invokeresponse в botframework v4 - PullRequest
       10

Invokeresponse в botframework v4

0 голосов
/ 01 октября 2018

Как я могу вернуть InvokeResponse в botframework v4 для C #?Мне нужно это, чтобы ответить, чтобы составить сообщения активности расширения.В старой структуре это было сделано путем возврата в ответ объекта composeExtension из контроллера.

Как это можно сделать при реализации интерфейса IBot.

В старой структуреСуществовали расширения MS Teams, недоступные для новой версии фреймворка.

Ответы [ 3 ]

0 голосов
/ 06 октября 2018

Из кода BF SDK v4 здесь: https://github.com/Microsoft/botbuilder-dotnet/blob/4bb6b8d5faa4b252379ac331d6f5140ea27c177b/libraries/Microsoft.Bot.Builder/BotFrameworkAdapter.cs#L216 https://github.com/Microsoft/botbuilder-dotnet/blob/4bb6b8d5faa4b252379ac331d6f5140ea27c177b/libraries/Microsoft.Bot.Builder/BotFrameworkAdapter.cs#L285

вы используете ITurnContext, чтобы «ответить» с поддельным действием типа ActivityTypesEx.InvokeResponse, установив Activity.Value до InvokeResponse объекта с желаемым кодом состояния и полезной нагрузкой.

0 голосов
/ 22 октября 2018

Чтобы ответить на действие по вызову, вы должны установить "BotFrameworkAdapter.InvokeResponse" в turnContext.TurnState, как в примере ниже

public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
{
    if (turnContext.Activity.Type == ActivityTypes.Message)
    {
        // do stuff
    }
    if (turnContext.Activity.Type == ActivityTypes.Invoke)
    {
        // do stuff
        var invokeResponse = new InvokeResponse()
        {
            Body = response,
            Status = (int)HttpStatusCode.OK
        };
        var activity = new Activity();
        activity.Value = invokeResponse;
        // set the response
        turnCoontext.TurnState.Add<InvokeResponse>(InvokeReponseKey, activity);
    }
}
0 голосов
/ 03 октября 2018

Для того, что я думаю , вы спрашиваете:
В этом примере есть пример обработки ответа на вызов.В вашем OnTurnAsync вам нужно перехватить действие Invoke и делать все, что вам нужно, с действием, как в примере.

Я не уверен, какой SDK вы используете, поскольку вы не включили его в свой вопрос, но простой пример на C # (узел будет похож) может выглядеть так:

public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
{
    if (turnContext.Activity.Type == ActivityTypes.Message)
    {
        //do stuff
    }
    if (turnContext.Activity.Type == ActivityTypes.Invoke)
    {
        //do stuff
    }
}
...