Wenn mein Bot verschiedene Fragen stellt und der Benutzer sie beantwortet, wie finde ich heraus, welche Antwort sich auf welche Frage bezieht. Es gibt ein Feld namens metadata, das Sie an die sendTextMessage-API anhängen können, aber wenn der Benutzer antwortet, werden diese Metadaten als undefiniert angezeigt. Verwenden Sie einen Knoten-Cache für die Verfolgung von Status oder eine FSM wie machina.js? Wie kann ich herausfinden, worum es bei der Konversation geht, in der wir gerade stecken?
Wenn Ihre App eine Nachricht empfängt, sind keine Nutzdaten oder Metadaten damit verknüpft. Dies ist im Gegensatz zu einer schnellen Antwort oder Post-Back, die eine Nutzlast haben kann. Die einzige Möglichkeit, eine Antwort mit einer Frage zu verknüpfen, ist die manuelle Verfolgung des Konversationsstatus in Ihrer App, wie von @ anshuman-dhamoon vorgeschlagen.
Um dies zu tun, ist es am besten, einen Status für jeden Benutzer sowie den nächsten Status für jeden Status zu pflegen.
%Vor% Hinweis Wenn Sie möchten, können Sie die Werte von nextStates
sogar in aufrufbare Funktionen umwandeln, die die Antwort des aktuellen Status annehmen und in verschiedene Konversationsabläufe verzweigen, indem Sie den Benutzer an einen anderen übergeben Zustand abhängig von seiner / ihrer Antwort.
Sie können einen Statuscode in Ihrem Code haben, um zu verfolgen, wo sich die Benutzer mit dem Bot unterhalten.
Für z. Wenn Sie 10 Fragen haben, halten Sie zunächst statuscode = 0 und stellen Sie die erste Frage. Wenn Sie eine Nachricht an Ihren Webhook erhalten, überprüfen Sie, ob statuscode == 0 ist, und speichern Sie diese Benutzernachricht als Antwort auf Ihre erste Frage. Erhöhen Sie dann statusCode = 1 und stellen Sie die nächste Frage.
Sie können mehrere Flags und statusCodes verwenden, um mit verschiedenen Konversationsflüssen umzugehen.
Nach meinem Wissen können Sie im Facebook-Chatbot Daten von einem Benutzer an Chatbot senden, indem Sie Nutzlast über die Postback-Schaltflächen festlegen, wie sie in API Referenz .
Und Chatbot speichert Ihre Sitzung oder Status / Flags nicht. Sie können Status oder Flags oder Arrays setzen, aber alle gehen verloren, wenn Sie Ihre Anwendung aktualisieren oder Ihren Server neu starten.
>Wenn Sie also wirklich den Status setzen möchten, sollten Sie Datenbank dafür verwenden. und senderID bleibt immer gleich, so dass Sie Daten aus der Datenbank mit dieser bestimmten ID behandeln können für bestimmte Benutzer.
Weitere Details finden Sie hier Technische Referenz .
Ich hoffe, dass Ihnen das weiterhilft. Wenn ja, dann markieren Sie es bitte als Antwort.
Ich stoße selbst auf dieses Problem. Obwohl es in ihrer Dokumentation nicht erwähnt wurde, glaube ich nicht, dass das Hinzufügen einer In-Memory-Datenbank nicht in Frage kommt. Es scheint, dass user_id
gleich ist, unabhängig davon, wann die Konversation initiiert wird.
Ein API-Aufruf jedes Mal, wenn der Benutzer der Sitzung beitritt, würde wahrscheinlich die Leistung des Bot verlangsamen. Außerdem habe ich festgestellt, dass Sie nicht wirklich eine "pseudoverteilte Datenbank" konstruieren können, indem Sie den Metadatenschlüssel in der API verwenden, wenn Sie das vorschlagen. Das Metadaten-Tag kann von Server gesendet werden - & gt; Client (Messenger) aber nicht vom Client - & gt; Server aus was die Dokumentation sagt.
Ich habe einige Zeit damit verbracht, damit zu arbeiten. Die beste Lösung besteht darin, eine Datenbank zu verwenden, um den Konversationsfluss des Benutzers zu verfolgen. Das POST-Objekt enthält die Absender-ID. Sie können diese ID verwenden, um eine Zeile in der Datenbank zu erstellen, in der Sie diese ID definitiv speichern müssen, sowie alle Antworten auf die Fragen und ein Feld, um zu verfolgen, welcher Schritt in der Konversation stattfindet.
Dann können Sie if-Anweisungen in Ihrem Code verwenden, um die richtigen Antworten zurückzugeben. Ein Beispielcode unten:
%Vor%Tags und Links bots chatbot facebook-chatbot