You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:17:45