microsoft / microsoft/BotFramework-DirectLineJS
Multiple Continuous API Requests Issue
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- TypeScript
- Sterne
- 199
- Forks
- 133
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
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
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginnen Sie damit, das Verhalten mit dem bereitgestellten React-Abonnementcode zu reproduzieren, und untersuchen Sie, wie oft subscribeToBotMessages aufgerufen wird und wie activity$-Abonnements erstellt werden. Vergleichen Sie die resultierenden Netzwerkanfragen mit den activity$-Emissionen und bestätigen Sie, dass Anfragen nur gestellt werden, wenn neue Nachrichten empfangen werden, ohne doppelte Abonnements.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- react, typescript
- Bereich
- frontend
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100