首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有BotFramework ReactWebChat的DirectLineAppServiceExtension在特定时间间隔上得到重复的欢迎消息

问带有BotFramework ReactWebChat的DirectLineAppServiceExtension在特定时间间隔上得到重复的欢迎消息
EN

Stack Overflow用户
提问于 2022-03-29 17:04:12
回答 1查看 273关注 0票数 1

我已经开发和部署了基于C# SDK的azure机器人,该机器人使用语言(自定义问答)服务来回答用户的问题。

前端部分是sharepoint,它应该是另一个sharepoint站点的The部分。

该机器人在模拟器或测试webchat (在门户中)中运行良好,但在从运行它时,我面临着重复欢迎消息的问题。

响应网络聊天的过程如下:

  1. 在componentDidmount()钩子上,我请求直接行的令牌: 公共异步componentDidMount() { this.fetchToken(); } 私有异步fetchToken() { var myToken =‘<--秘密密钥->’;const myToken=等待获取(‘https://xxxx.azurewebsites.net/api/GetLRToken',{方法:'GET',标头:{'accept':'application/json'} });var {myToken}=等待res.json();console.log(令牌);this.setState({ directLine:等待createDirectLineAppServiceExtension({域:'https://xxxx.azurewebsites.net/.bot/v3/directline',令牌,}),});this.state.directLine.postActivity({ id:"serId",名称:"USER_NAME“},名称:"requestWelcomeDialog",类型:”requestWelcomeDialog“,值:”令牌“}).subscribe( id => console.log(Posted activity, assigned ID ${id}),error => console.log(Error posting activity ${error}) )};

它成功地获取了令牌。

  1. 在public render(): React.ReactElement方法中,我加载包装在面板(Office面板)下的<ReactWebChat directLine={this.state.directLine}
  2. 在OnMembersAddedAsync方法的Bot源代码中,我将添加的成员id与turnContext收件人id进行比较,如下所示,如果不是相同,则显示欢迎卡(自适应卡): 保护覆盖异步任务OnMembersAddedAsync(IList membersAdded,ITurnContext turnContext,CancellationToken cancellationToken) { membersAdded中的var成员){ if (member.Id != turnContext.Activity.Recipient.Id) {等待SendWelcomeMessageAsync(turnContext,cancellationToken);}}

这整个过程和与bot的沟通都很好,但是我无法追踪为什么欢迎屏幕会反复加载我们的周期性时间。

我在调试期间发现的一个观察是,member.id是我在令牌生成过程中生成的GUID,而转储上下文接收id与member.id类似,它似乎是一个应用服务@一些随机id,我真的不知道它是如何生成的。

因此,比较案例总是失败并显示欢迎卡的原因是可能的。

任何帮助,以简化流程高度赞赏,因为我是新的SPFX和特别的反应,我不知道如何控制客户端代码。

作为参考,我在这里附上了截图。提前谢谢你。

​

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-14 08:10:08

根据微软的说法,230秒的超时是应用服务负载均衡器配置的一部分,它不能被改变。同样的超时窗口也适用于WebSocket连接。它既适用于HTTP触发功能,也适用于Azure应用服务。

Azure负载均衡器的默认空闲超时设置为4分钟。此设置通常是web请求的合理响应时间限制。因此,如果应用程序在大约240秒内不返回响应,app将返回一个超时( Windows应用程序为230秒,Linux应用程序为240秒)

正式文件:为什么我的请求在230秒后超时?

所以下面的代码会对你有帮助,

代码语言:javascript
复制
let activity: EventActivity = { type: 'event', name: 'eventName', value: null, from: null };
setInterval(() => { this.directLine.postActivity(activity).subscribe() }, 200000);

这基本上会在每200秒之后发送一个空白/虚拟活动,从而防止超时。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71666114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档