[英]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);
}
}
添加自动程序时收到的消息内容的摘录:
我的用户From
, Recipient
是“机器人”。 您可以看到Action
值是add
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.