如何在botframework v4中为C#返回InvokeResponse?我需要它来撰写扩展活动消息。在旧框架中,这是通过从控制器中返回一个composeExtension
对象来完成的。
在实现IBot
接口时该怎么做。
在旧框架中,有MS Teams扩展,不适用于新框架版本。
答案 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);
}
}