我使用here中的示例创建了一个简单的Skill机器人,该机器人保存了当前活动的ConversationReference
,并在OnMessageActivityReceived()
中调用了服务
// Save ConversationReference
var conversationReference = activity.GetConversationReference();
_conversationReferences.AddOrUpdate(conversationReference.User.Id, conversationReference, (key, newValue) => conversationReference);
// Calling external service
HttpResponseMessage responsemMsg = await client.PostAsync(RequestURI, stringContent);
if (responsemMsg.IsSuccessStatusCode)
{
var apiResponse = await responsemMsg.Content.ReadAsStringAsync();
//Post the API response to bot again
await turnContext.SendActivityAsync(MessageFactory.Text($"Message Sent {turnContext.Activity.Text}"), cancellationToken);
}
被调用的服务最终会发出一个事件,该事件会调用我的技能机器人中NotifyController
中的一个动作。它尝试获取ConverstaionReference
并使用TurnContext
发送活动。
//I am using the Skill Bot Id for _appId parameter
await ((BotAdapter)_adapter).ContinueConversationAsync(_appId, conversationReference, async (context, token) =>
{
await context.SendActivityAsync(proMsg.eventName);
await context.SendActivityAsync(proMsg.context.ToString());
}, new System.Threading.CancellationToken());
此SendActivity失败,Skill Bot中的OnTurnError处理异常。 我不确定我哪里错了。我是Bot框架学习的新手。
答案 0 :(得分:0)
我的问题通过使用ClaimsIdentity的ContinueConversation()重载并为受众,appid等设置正确的声明而得到解决。这基本上是身份验证问题。
public virtual Task ContinueConversationAsync(ClaimsIdentity claimsIdentity, ConversationReference reference, string audience, BotCallbackHandler callback, CancellationToken cancellationToken);