如何将基于Dialogs开发的C# Form Flow机器人整合到自定义客户端
把Form Flow机器人整合到自定义客户端的步骤
嘿,我来帮你搞定把C# Form Flow机器人整合到自定义客户端这件事!核心思路是用Bot Framework的Direct Line API来建立客户端和机器人之间的通信,下面是具体的分步操作:
1. 准备可访问的Bot服务端点
首先得确保你的机器人能被外部客户端调用:
- 如果是本地开发,用
ngrok把本地Bot的默认端口(3978)暴露到公网,执行命令:ngrok http 3978,你会得到一个类似https://xxxx-xx-xx-xx-xx.ngrok.io的临时公网地址。 - 如果是生产环境,把Bot部署到Azure App Service或者其他云服务器,获取固定的HTTPS端点URL。
2. 启用Direct Line通道并获取密钥
要让客户端能和Bot安全通信,需要在Bot Framework里启用Direct Line通道:
- 登录Azure Portal,找到你的Bot资源,进入「Channels」选项卡,添加「Direct Line」通道。
- 在Direct Line配置页,创建一个新的密钥(务必妥善保存,这是客户端连接Bot的核心凭证)。
- 本地测试时,也可以用Bot Framework Emulator生成的临时测试密钥,但生产环境一定要用正式密钥。
3. 在自定义客户端集成Direct Line SDK
根据你的客户端类型(比如WPF/WinForms、Web前端、移动端)选择对应的SDK,这里以C#桌面客户端为例:
安装NuGet包
在客户端项目里安装Direct Line的官方SDK:
Install-Package Microsoft.Bot.Connector.DirectLine
或者在NuGet包管理器中搜索Microsoft.Bot.Connector.DirectLine完成安装。
编写客户端通信代码
初始化对话连接
using Microsoft.Bot.Connector.DirectLine; using Newtonsoft.Json; // 替换成你的Direct Line密钥 var directLineClient = new DirectLineClient("你的Direct Line密钥"); // 启动一个新的对话会话 var conversation = await directLineClient.Conversations.StartConversationAsync();
发送消息给Bot
// 构造用户消息对象 var userMessage = new Activity { From = new ChannelAccount { Id = "client-user-001", Name = "自定义客户端用户" }, Text = "我要使用机器人功能", Type = ActivityTypes.Message }; // 将消息发送到Bot await directLineClient.Conversations.PostActivityAsync(conversation.ConversationId, userMessage);
实时监听Bot的回复
用WebSocket流实时获取Bot的回复,适合需要即时响应的场景:
var activityStream = await directLineClient.Conversations.GetActivitiesStreamAsync(conversation.ConversationId); var streamReader = new StreamReader(activityStream); while (!streamReader.EndOfStream) { var activityJson = await streamReader.ReadLineAsync(); var botActivity = JsonConvert.DeserializeObject<Activity>(activityJson); // 过滤掉用户自己发送的消息,只处理Bot的回复 if (botActivity.Type == ActivityTypes.Message && botActivity.From.Id != "client-user-001") { // 这里把Bot的回复渲染到客户端界面,比如WPF的TextBox // myReplyTextBox.Text += $"Bot: {botActivity.Text}\n"; Console.WriteLine($"Bot回复:{botActivity.Text}"); } }
4. 适配Form Flow的多轮对话流程
你的RootDialog里的Form Flow会自动生成多轮对话(比如选择Search files或Query Knowledge Base后的表单步骤),这些对话内容都会通过Activity对象传递:
- Bot发送的选项(比如你的两个功能选项)会包含在
botActivity.SuggestedActions里,你可以把这些选项渲染成客户端的按钮,用户点击后把对应文本发回Bot即可。 - Form Flow生成的表单输入提示,直接读取
botActivity.Text显示给用户,用户输入的内容按普通消息发送给Bot就行。
关键注意事项
- 安全问题:生产环境绝对不要把Direct Line密钥硬编码在客户端里,建议通过你的后端服务代理请求,客户端只和你的后端通信,后端再和Bot的Direct Line接口交互。
- HTTPS要求:生产环境的Bot端点必须是HTTPS,Direct Line API只支持HTTPS连接。
- 本地测试:ngrok的隧道地址每次重启会变化,需要同步更新Bot的回调配置或者客户端的对话地址。
内容的提问来源于stack exchange,提问作者Sonali
相关产品推荐
相关产品推荐

