C# 如何让机器人启动对话
我已经创建了一个QnABot,它与新的多匝QnAmaker功能一起工作。当与仿真器一起使用时,BOT会启动对话,但在Iframe或Azure测试环境中使用时,BOT不会启动对话。任何人都可以帮助我理解我需要在代码中添加或更改什么来启动它。为了澄清这一点,当我在本地运行代码时,它可以工作。它在iFrame或类似的环境中不起作用C# 如何让机器人启动对话,c#,botframework,qnamaker,C#,Botframework,Qnamaker,我已经创建了一个QnABot,它与新的多匝QnAmaker功能一起工作。当与仿真器一起使用时,BOT会启动对话,但在Iframe或Azure测试环境中使用时,BOT不会启动对话。任何人都可以帮助我理解我需要在代码中添加或更改什么来启动它。为了澄清这一点,当我在本地运行代码时,它可以工作。它在iFrame或类似的环境中不起作用 protected override async Task OnMembersAddedAsync(IList<ChannelAccount> memb
protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
foreach (var member in membersAdded)
{
// Greet anyone that was not the target (recipient) of this message.
if (member.Id != turnContext.Activity.Recipient.Id)
{
await turnContext.SendActivityAsync(MessageFactory.Text($"Welcome to the IBC Leave Bot, I can help you answer questions about your leave.\n\n Type HELP to get some ideas about what to ask me"), cancellationToken);
}
}
}
}
受保护的覆盖MemberSaddedAsync上的异步任务(IList membersAdded、iTunesContext turnContext、CancellationToken CancellationToken)
{
foreach(membersAdded中的var成员)
{
//问候不是此邮件目标(收件人)的任何人。
if(member.Id!=turnContext.Activity.Recipient.Id)
{
Wait turnContext.SendActivityAsync(MessageFactory.Text($“欢迎使用IBC请假机器人,我可以帮助您回答有关请假的问题。\n\n键入help以了解如何询问我”)、cancellationToken);
}
}
}
}
}您不能从服务器端执行任何操作,您必须从客户端启动对话。在Azure测试环境或Iframe(directline)上,它在您发送第一条消息时完成 下面是一个嵌入机器人的html页面示例
<!DOCTYPE html>
<html>
<head>
<title>
chatbot
</title>
<meta charset="UTF-8">
<link href="https://cdn.botframework.com/botframework-webchat/latest/botchat.css" rel="stylesheet" />
</head>
<body>
<div id="bot" />
<script src="https://cdn.botframework.com/botframework-webchat/latest/botchat.js"></script>
<script>
function guid() {
return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4() + s4() + s4();
}
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
var userId = guid().toUpperCase();
var userName = 'User-' + Math.floor((1 + Math.random()) * 10000);
var secret = 'XXXXXX-BotSecret-XXXXXXX';
var user = {
id: userId,
name: userName
};
var bot = {
id: 'Demo-WebAppBot',
name: ' Demo ChatBot'
};
var botConnection = new BotChat.DirectLine({
secret: secret,
webSocket: true
});
console.log("Init bot component");
BotChat.App({
botConnection: botConnection,
user: user,
bot: bot,
resize: 'detect'
}, document.getElementById("bot"));
<!-- Conversation is initiated here by sending a dummy message to the bot -->
botConnection.postActivity({ type: "event", from: user, name: "firstMessage", value: "ping" }).subscribe(id => console.log("Conversation updated"));
</script>
</body>
</html>
聊天机器人
函数guid(){
返回s4()+s4()+'-'+s4()+'-'+s4()+'-''+
s4()+'-'+s4()+s4()+s4()+s4();
}
函数s4(){
返回Math.floor((1+Math.random())*0x10000)
.toString(16)
.子串(1);
}
var userId=guid().toUpperCase();
var userName='User-'+Math.floor((1+Math.random())*10000);
var secret='XXXXXX-BotSecret-XXXXXXX';
变量用户={
id:userId,
姓名:用户名
};
var bot={
id:“演示WebAppBot”,
名称:“演示聊天机器人”
};
var botConnection=new BotChat.DirectLine({
秘密:秘密,
webSocket:对
});
log(“初始化bot组件”);
BotChat.App({
botConnection:botConnection,
用户:用户,,
机器人:机器人,
调整大小:“检测”
},document.getElementById(“bot”);
postActivity({type:“event”,from:user,name:“firstMessage”,value:“ping”}).subscribe(id=>console.log(“对话更新”);
hi@B.Lec谢谢您的回复。我将尝试一下HTML。这似乎与此相关。基本上,每个频道(Emulator、Web聊天、Web聊天中的测试、团队等)都有自己处理添加成员和发送欢迎消息的方式。例如,Azure Portal中的Web聊天测试只会在用户先发送消息时才向用户发送消息。嗨,B。Lec我对此没有深入了解,我认为我不知道如何使用代码。我所要做的就是将bot放到iframe@Chris在你的azure门户上激活你的机器人的“直连”频道,使用我提供的示例创建一个html页面,替换var secret='XXXXXX-BotSecret-XXXXXXX'通过一个直连密钥,测试它,如果它有效,在iframe src中调用它。不确定我是否清晰,在网页中工作良好-仍在使用iframe元素-非常感谢