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

Bot Framework Direct Line:基于自定义字段存储与获取userData及conversationData

实现基于电话号码存储与检索Bot Framework用户数据的方案

我来帮你搞定这个需求——这在表单类机器人场景里非常典型,核心就是要把电话号码作为核心检索标识,打通用户数据、会话数据和手机号的关联。下面分步骤拆解实现:

1. 核心思路:建立手机号与Bot数据的映射

Bot Framework默认的userData和conversationData是和userId/conversationId绑定的,但我们需要用手机号作为检索键,所以必须额外维护一个手机号 ↔ 用户/会话ID的映射表,同时确保收集到手机号后,把对应的用户数据、会话数据和这个映射关联存储。

2. 收集表单时的存储实现

当机器人收集到用户的电话号码后,需要做两件事:

  • 把userData(姓名、邮箱、电话等)和conversationData(会话上下文)存储到你的数据库(比如SQL Server、Cosmos DB)
  • 单独存储一条映射记录,以电话号码为唯一键,关联对应的userId和conversationId

代码示例(Node.js Bot Framework v4)

假设你用Cosmos DB作为存储,在收集到手机号后的处理逻辑:

async onMessage(context) {
  // 假设已经通过表单收集到用户信息,存在context.activity.value里
  const userFormData = context.activity.value;
  const phoneNumber = userFormData.phone;

  // 1. 获取当前用户和会话ID
  const userId = context.activity.from.id;
  const conversationId = context.activity.conversation.id;

  // 2. 存储用户数据和会话数据到Bot自带状态管理
  await this.userState.saveChanges(context);
  await this.conversationState.saveChanges(context);

  // 3. 存储手机号-用户/会话ID映射(自定义数据库操作)
  await this.customDatabase.savePhoneMapping({
    phone: phoneNumber,
    userId: userId,
    conversationId: conversationId,
    userData: this.userState.get(context),
    conversationData: this.conversationState.get(context)
  });
}

关键注意点

  • 手机号唯一性校验:收集阶段要做重复校验,避免同一个手机号对应多条用户记录
  • 敏感数据加密:手机号、邮箱属于敏感信息,存储时必须加密(比如AES加密或数据库自带加密功能)

3. 通过电话号码检索数据的逻辑

当需要通过手机号查询时,直接查询映射表,拿到对应的用户数据和会话数据即可:

检索代码示例

async getUserDataByPhone(phoneNumber) {
  // 从映射表查询对应记录
  const mappingRecord = await this.customDatabase.getPhoneMapping(phoneNumber);
  if (mappingRecord) {
    return {
      userData: mappingRecord.userData,
      conversationData: mappingRecord.conversationData
    };
  }
  return null;
}

4. Direct Line前端集成的额外优化

如果前端在初始化会话时就能获取用户手机号,可以提前把手机号传递给机器人,避免后续重复收集:

const directLine = window.WebChat.createDirectLine({ token: 'YOUR_DIRECT_LINE_TOKEN' });
// 发送自定义事件传递手机号
directLine.postActivity({
  type: 'event',
  name: 'preProvidePhone',
  channelData: { phone: '138xxxxxxxxx' },
  from: { id: 'CUSTOM_USER_ID' }
}).subscribe();

机器人需要监听这个自定义事件,提前完成手机号的映射存储,让流程更顺畅。

内容的提问来源于stack exchange,提问作者Sajal Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:37:12