C# 如何让机器人启动对话

C# 如何让机器人启动对话,c#,botframework,qnamaker,C#,Botframework,Qnamaker,我已经创建了一个QnABot,它与新的多匝QnAmaker功能一起工作。当与仿真器一起使用时,BOT会启动对话,但在Iframe或Azure测试环境中使用时,BOT不会启动对话。任何人都可以帮助我理解我需要在代码中添加或更改什么来启动它。为了澄清这一点,当我在本地运行代码时,它可以工作。它在iFrame或类似的环境中不起作用 protected override async Task OnMembersAddedAsync(IList<ChannelAccount> memb

我已经创建了一个QnABot,它与新的多匝QnAmaker功能一起工作。当与仿真器一起使用时,BOT会启动对话,但在Iframe或Azure测试环境中使用时,BOT不会启动对话。任何人都可以帮助我理解我需要在代码中添加或更改什么来启动它。为了澄清这一点,当我在本地运行代码时,它可以工作。它在iFrame或类似的环境中不起作用

    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'