Botframework v4中的Invokeresponse

时间:2018-10-01 20:31:59

标签: botframework microsoft-teams

如何在botframework v4中为C#返回InvokeResponse?我需要它来撰写扩展活动消息。在旧框架中,这是通过从控制器中返回一个composeExtension对象来完成的。

在实现IBot接口时该怎么做。

在旧框架中,有MS Teams扩展,不适用于新框架版本。

3 个答案:

答案 0 :(得分:0)

认为的问题是:
this sample中有一个处理调用响应的示例。在您的OnTurnAsync中,您需要捕获Invoke activity并执行与示例中的活动相同的操作。

我不确定您使用的是哪个SDK,因为您没有将其包含在问题中,但是C#中的一个简单示例(Node类似于)可能看起来像这样:

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
    }
}

答案 1 :(得分:0)

来自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对象

答案 2 :(得分:0)

要响应调用活动,您必须像以下示例中那样在turnContext.TurnState中设置“ BotFrameworkAdapter.InvokeResponse”

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);
    }
}