Azure Bot添加成员时无法获取除ID外的成员信息问题求助
核心问题原因
TeamsInfo.GetMemberAsync是微软Teams渠道专属API,仅在机器人接入Teams渠道时可正常返回完整用户信息,你当前使用的Direct Line + WebChat渠道不支持该接口,调用后仅能获取到用户ID。- 你当前的WebChat初始化配置写法存在错误,用户信息没有按照要求格式传入,导致服务端无法接收到姓名、角色等字段。
解决方案
步骤1:修正WebChat端配置
修正语法错误,同时将用户信息统一放入user配置项中透传给服务端,正确代码如下:
(async function() { const secret = 'XXX'; const res = await fetch('https://directline.botframework.com/v3/directline/tokens/generate', { headers: { Authorization: `Bearer ${secret}` }, method: 'POST' }); const {token} = await res.json(); window.WebChat.renderWebChat( { directLine: window.WebChat.createDirectLine({ token }), user: { id: 'WebChat_UserId', name: 'Web Chat User', role: 'user' }, locale: 'en-US' }, document.getElementById('webchat') ); document.querySelector('#webchat > *').focus(); })().catch(err => console.error(err));
步骤2:调整服务端获取用户信息的逻辑
删除TeamsInfo.GetMemberAsync调用,直接从membersAdded列表的ChannelAccount对象中读取透传过来的用户信息,调整后代码如下:
protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken){ foreach (var member in membersAdded) { if (member.Id != turnContext.Activity.Recipient.Id) { // 直接读取member对象属性即可拿到WebChat传入的用户信息 var userName = member.Name; var userRole = member.Role; var userId = member.Id; var welcomeCard = CreateAdaptiveCardAttachment(); var response = MessageFactory.Attachment(welcomeCard, ssml: "Welcome to Bot Framework!"); await turnContext.SendActivityAsync(response, cancellationToken); await Dialog.RunAsync(turnContext, ConversationState.CreateProperty<DialogState>("DialogState"), cancellationToken); } } }
补充说明
如果需要传递更多自定义用户属性,可直接在WebChat的user配置项中新增字段,服务端可从ChannelAccount.Properties属性中读取对应值。Direct Line渠道默认不会同步第三方身份体系的用户信息,所有用户属性都需要在前端初始化WebChat时主动传入。
内容的提问来源于stack exchange,提问作者Gianluca R
相关产品推荐
相关产品推荐

