技能机器人向用户发送主动消息

时间:2020-04-21 19:20:22

标签: botframework

  1. 我开发了一种向用户发送主动消息的机器人
  2. 我也创造了触发技能的机器人。 我正在尝试编写一些内容,使技能bot / Dialog能够将通过webhooks接收的主动消息发送给用户,并继续现有的Skill对话框。 我不太明白。如果有人可以在那帮我。

我使用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框架学习的新手。

1 个答案:

答案 0 :(得分:0)

我的问题通过使用ClaimsIdentity的ContinueConversation()重载并为受众,appid等设置正确的声明而得到解决。这基本上是身份验证问题。

public virtual Task ContinueConversationAsync(ClaimsIdentity claimsIdentity, ConversationReference reference, string audience, BotCallbackHandler callback, CancellationToken cancellationToken);