2016-08-02 2 views
1

TLDR; @ BodenWie verhindert man in der Facebook Messenger-API, dass Postback-Payload-Text im Chat-Fenster beim Klick protokolliert wird?

fragte ich die folgende Frage im Abschnitt Bugs Facebook

Hinweis: Dies ist eher ein Plattform-Design-Vorschlag als ein Fehler, als ich Zeit ein Chat-API-Feedback-Portal zu finden gescheitert Ich bin Erstellen eines Chat-Bot, mit dem der Benutzer ein Ziel verfolgen kann. Es wird etwas wie "Warst du am 12. Juli 2016 spazieren gehen?" und haben unten Ja/Nein-Tasten.
Derzeit, um die Absicht, den Tag und die Leistung boolean zu übergeben, muss ich eine Zeichenfolge wie diese "== GOAL == erreicht < < < {goal_achieved} >>>, Datum verfolgt [[[{date_tracked} ]]] "und verwenden Sie regex, um die Begrenzungsvariablen zu erfassen. Dies ist in anderen Fällen, in denen die templateten Zeichenfolgen in der Nutzlast Benutzereingabevariablen sind, anfällig für Parsing-Fehler. Wenn beispielsweise '{goal_achieved}' durch die Zielvariable 'meditiert' ersetzt wurde, kann die Regex, die die templatete Variable erfasst, fehlschlagen
Man könnte die Postback-Payload verwenden, um eine JSON-codierte Zeichenfolge zu speichern, aber das Problem dabei ist, dass die Payload-Zeichenfolge in der Benutzerausgabe protokolliert wird und JSON-Strings etwas hässlich und verwirrend sind wenn die Nutzlast nicht an den Benutzer stattdessen den Text einloggen für die Schaltfläche protokolliert wurde der Benutzer zu helfen, bestätigt die Schaltfläche geklickt wurde.
wenn das nicht möglich ist, gibt es eine andere Beratung für Daten in Schaltfläche Nutzlast kodiert?

Th Die folgende Antwort wurde angeboten (Mark Wiltse)

Hallo Justin, Leider unterstützt unsere Payload-Struktur derzeit nicht die Funktionalität, die Sie implementieren möchten. Nach meinem Verständnis möchten Sie die Payload verwenden, um Ihr Backend zu informieren, wenn der Benutzer sein "Ziel" an diesem bestimmten Datum erreicht hat. Ich würde vorschlagen, dass Sie Ihre Payload-Antwort für den Button an Ihrem Ende erstellen, bevor Sie es an uns weitergeben, was im Grunde die JSON-Idee ist, die Sie ursprünglich hatten. Ich weiß, das ist ein wenig umständlich zu handhaben, aber die zurückgegebene Payload-Antwort ist unabhängig von dem Text, der mit dem Messenger-Thread bereitgestellt wurde. Ich würde vorschlagen, dass Sie auch versuchen, Ihre Zeichenfolgen zu bereinigen, wenn Sie sich Sorgen machen, dass ein Benutzer Ihnen zuvor ein Problem mit Ihrer Regex verursacht hat. Sie sollten in der Lage sein, diese Funktionalität zu implementieren, wenn die Daten des vorherigen Benutzers bereinigt werden, um Probleme mit dem Regex/Json-Parsing zu vermeiden. Da dies eine Implementierungsfrage ist, muss ich diesen Bericht als ungültig abbrechen. Wenn Sie noch weitere Einblicke und konkrete Tipps für die Implementierung dieses Flow suchen, schreiben Sie bitte an unseren Stack-Overflow, wo wir Facebook-Ingenieure und eine breite Palette von Community-Mitgliedern haben, die ebenfalls dazu beitragen. http://facebook.stackoverflow.com/ Kümmern Sie sich um die besten Wünsche mit Ihrem Messenger-Bot. Mark

Dieser Satz war besonders unklar:

Ich weiß, dass dies ein wenig umständlich zu handhaben, aber die Nutzlast Antwort zurückgeleitet ist unabhängig von dem Text, der mit dem messenger Gewinde versehen wurde.

TLDR; Kann mir jemand mitteilen, wie verhindert werden kann, dass die Schaltfläche die Payload-Zeichenfolge protokolliert, damit ich JSON an meine App übergeben kann, ohne dass der Benutzer sie sieht?

Antwort

1

Von meinem Verständnis her sagen Sie, dass wenn Sie einen Knopf drücken, der PAYLOAD anstelle des Textes der Schaltfläche angezeigt wird.

Definieren Sie Ihre Tasten so?

{ 
     type: "postback", 
     title: "View Details", 
     payload: "details:12345" 
    } 

Ich würde empfehlen, alle Sonderzeichen zu entfernen, die sich mit dem Parsen Ihrer Payload befassen würden. Solange die Sonderzeichen für die Benutzererfahrung nicht entscheidend sind, ist dies wahrscheinlich eine feine Lösung.

Wenn dies nicht Ihr Problem lösen:

Können Sie einen Screenshot hinzufügen, welche die Taste Sie drücken, und die Protokollnachricht Sie sprechen werden? Von meinem Verständnis her sagt man, dass wenn man einen Knopf drückt, der PAYLOAD statt des Textes der Taste erscheint. Das ist bei mir nicht der Fall, mein Knopftext erscheint, wenn ich einen Knopf drücke.

+0

Seltsam, so scheint es, die Taste Text protokolliert wird, nicht die Nutzlast ... vielleicht beobachtete ich früher ein Fehler, der wurde behoben ... oder vielleicht habe ich gerade einen Fehler gemacht, danke für die Bestätigung –

2

Stellen Sie sicher, sendTextMessage() in Ihrem receivedPostback() Aufruf auszukommen:

function receivedPostback(event){ 
    sendTextMessage(senderID, event.postback.payload); 
} 
Verwandte Themen