Bot框架 - Bot在Skype上发起对话

时间:2017-07-12 21:46:31

标签: c# botframework

我希望我的机器人在用户开始新对话时显示介绍性消息。我已经看到这与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上没有出现这个介绍性的消息。我在这里误会了什么?我知道这是可能的。

1 个答案:

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

添加机器人时收到的消息内容摘录:

Skype contact added sample

此处From是我的用户,Recipient是机器人。您可以看到Action值为add