我希望我的机器人在用户开始新对话时显示介绍性消息。我已经看到这与Skype中的机器人一起工作,机器人在用户输入任何内容之前发送消息。
我使用Bot Framework Channel Emulator在MessagesController类中使用此代码:
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.Message)
{
await Conversation.SendAsync(activity, () => new Dialogs.RootDialog());
}
else
{
await this.HandleSystemMessage(activity);
}
var response = Request.CreateResponse(HttpStatusCode.OK);
return response;
}
private async Task HandleSystemMessage(Activity message)
{
if (message.Type == ActivityTypes.ConversationUpdate)
{
var reply = message.CreateReply("Hello World!");
var connector = new ConnectorClient(new Uri(message.ServiceUrl));
await connector.Conversations.SendToConversationAsync(reply);
}
}
这显示了“Hello World!&#39;在新的对话开始时。无需输入。但是在Skype上没有出现这个介绍性的消息。我在这里误会了什么?我知道这是可能的。
答案 0 :(得分:1)
根据情况,Skype正在抛出不同的ActivityType:
在联系人中添加机器人后,您将获得contactRelationUpdate
。然后我们开始与机器人交谈,没有特殊的活动
当您启动包含机器人的会话组时,您将获得conversationUpdate
因此,如果您想欢迎您的用户,您应该在测试中添加contactRelationUpdate
活动类型,例如:
private async Task HandleSystemMessage(Activity message)
{
if (message.Type == ActivityTypes.ConversationUpdate || message.Type == ActivityTypes.ContactRelationUpdate)
{
var reply = message.CreateReply("Hello World!");
var connector = new ConnectorClient(new Uri(message.ServiceUrl));
await connector.Conversations.SendToConversationAsync(reply);
}
}
添加机器人时收到的消息内容摘录:
此处From
是我的用户,Recipient
是机器人。您可以看到Action
值为add