microsoft / microsoft/BotFramework-DirectLineJS
Multiple Continuous API Requests Issue
还没有人认领这个 Issue。
- 主要语言
- TypeScript
- 星标
- 199
- 派生
- 133
- PR 合并指标
- 30 天内没有已合并 PR
描述
I have created a WebChat UI in React using the botframework-directlinejs package. While subscribing to messages, the application is continuously sending multiple API requests. This is leading to performance issues and unnecessary load on the server.
Expected Behavior:
The application should only send API requests when necessary, such as when new messages are received.
Actual Behavior:
The application is continuously sending multiple API requests, as shown in the attached screenshot.
my code :
const subscribeToBotMessages = useCallback(() => {
if (!directLine) return;
directLine.connectionStatus$.subscribe((status) => {
if (status === 2 && !conversationId) {
localStorage.setItem("conversationId", directLine.conversationId);
localStorage.setItem("token", directLine.token);
localStorage.setItem("watermark", directLine.watermark);
}
});
directLine.activity$
.filter(
(activity) =>
activity.type === "message" && activity.from.id !== "myUserId"
)
.subscribe((message) => {
const timestamp = new Date().toLocaleTimeString([], {
hour: "2-digit",
minute: "2-digit",
});
const newBotMessage = {
from: "bot",
botMessage: message,
timestamp,
liked: false,
disliked: false,
attachment:
message.attachments && message.attachments.length > 0
? message.attachments.length === 1 && message.attachments[0]
: null,
carousel:
message.attachments && message.attachments.length > 0
? message.attachments.length > 1 && message.attachments
: null,
};
setLoading(false);
if (message.text) {
try {
receiveAudioRef.current.play();
} catch (error) {
console.log("failed to play", error);
}
}
setMessages((prevMessages) => [...prevMessages, newBotMessage]);
});
directLine.activity$
.filter(
(activity) =>
activity.type === "message" && activity.from.id === "myUserId"
)
.subscribe((message) => {
const timestamp = new Date().toLocaleTimeString([], {
hour: "2-digit",
minute: "2-digit",
});
const newUserMessage = {
from: "user",
userMessage: message,
timestamp,
attachment: filePreview,
};
setMessages((prevMessages) => {
// Check if the user message already exists
if (
prevMessages.some(
(msg) => msg.timestamp === timestamp && msg.from === "user"
)
) {
return prevMessages;
}
return [...prevMessages, newUserMessage];
});
});
}, [directLine, conversationId]);
@billba
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
首先,使用提供的 React 订阅代码复现该行为,并检查 subscribeToBotMessages 被调用的频率以及 activity$ 订阅是如何创建的。将产生的网络请求与 activity$ 的发射进行比较,并确认只有在收到新消息时才会发生请求,且不存在重复订阅。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- react, typescript
- 领域
- frontend
- Issue 类型
- 缺陷
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100