繁体   English   中英

Bot Framework-Bot在Skype上发起对话

[英]Bot Framework - Bot initiates the conversation on Skype

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

鉴于这种情况,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联系人添加示例

我的用户FromRecipient是“机器人”。 您可以看到Action值是add

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM