我正在尝试创建一个聊天机器人,为了避免用户打开聊天窗口而不知道可用选项,我想在用户打开聊天窗口时给出一些基本说明。
用户打开聊天窗口时是否有可用的触发器?也许那时我可以检查一下,如果没有正在进行的对话,我可以提供基本说明。
我做了一些谷歌搜索,并没有发现任何关于此的内容。是否有可能做这样的事情,如果没有,有没有办法缓解这个问题,并为用户提供有关聊天机器人功能和支持说明的信息?
我正在尝试创建一个聊天机器人,为了避免用户打开聊天窗口而不知道可用选项,我想在用户打开聊天窗口时给出一些基本说明。
用户打开聊天窗口时是否有可用的触发器?也许那时我可以检查一下,如果没有正在进行的对话,我可以提供基本说明。
我做了一些谷歌搜索,并没有发现任何关于此的内容。是否有可能做这样的事情,如果没有,有没有办法缓解这个问题,并为用户提供有关聊天机器人功能和支持说明的信息?
与 Skype 或其他平台不同,Facebook 不允许机器人发起对话。您仍然可以做一些技巧:
结果将如下所示:
您可以监视两种事件类型:ConversationUpdate 和 ContactRelationUpdate。
第一个 (ConversationUpdate) 在会话中添加或删除用户时调用。所以,有一个地方可以介绍可用的选项。它将是新对话开始的每种类型。因此,它可能会变得烦人,您可以添加一个检查 - 如果用户已经使用该机器人一段时间,请不要显示它。
第二个(ContactRelationUpdate)在用户向联系人添加或删除机器人时调用。通常,每个用户操作只调用一次。
以下是 Bot-Frameworks 示例的摘录:
对于 Node.Js
bot.on('conversationUpdate', function (message) {
// Check for group conversations
if (message.address.conversation.isGroup) {
// Send a hello message when bot is added
if (message.membersAdded) {
message.membersAdded.forEach(function (identity) {
if (identity.id === message.address.bot.id) {
var reply = new builder.Message()
.address(message.address)
.text("Hello everyone!");
bot.send(reply);
}
});
}
// Send a goodbye message when bot is removed
if (message.membersRemoved) {
message.membersRemoved.forEach(function (identity) {
if (identity.id === message.address.bot.id) {
var reply = new builder.Message()
.address(message.address)
.text("Goodbye");
bot.send(reply);
}
});
}
}
});
bot.on('contactRelationUpdate', function (message) {
if (message.action === 'add') {
var name = message.user ? message.user.name : null;
var reply = new builder.Message()
.address(message.address)
.text("Hello %s... Thanks for adding me. Say 'hello' to see some great demos.", name || 'there');
bot.send(reply);
} else {
// delete their data
}
});
对于 C#
private void HandleMessage(Activity message)
{
if (message.Type == ActivityTypes.ConversationUpdate)
{
if (activity.MembersAdded.Any(m => m.Id == activity.Recipient.Id))
{
var connector = new ConnectorClient(new Uri(activity.ServiceUrl));
var response = activity.CreateReply();
response.Text = "Hi! I am Bot. Here's what you can do...";
await connector.Conversations.ReplyToActivityAsync(response);
}
}
else if (message.Type == ActivityTypes.ContactRelationUpdate)
{
if (Activity.AsContactRelationUpdateActivity().Action == ContactRelationUpdateActionTypes.Add)
{
var connector = new ConnectorClient(new Uri(activity.ServiceUrl));
var response = activity.CreateReply();
response.Text = "Hi! I am Bot. Thanks for adding me. Here's what you can do...";
}
}
return null;
}
我认为酸的答案不是。
但是您可以拦截IConversationUpdateActivity类型的消息以了解用户是否已将机器人添加到对话中。在 C# 项目模板中,您可以找到一个要求此消息类型但不执行任何操作的代码块。