2017-05-25 2 views
3

Ich versuche, ein NESTED beständiges Menü zu meinem Chatbot hinzuzufügen. Facebook hat eine Grenze von 3 Tasten, aber Sie können eine verschachtelte Taste mit maximal 5 Tasten haben.Facebook Messenger Nested Persistent Menü Fehler

Dies ist der Fehler, den ich bekomme, wenn ich meinen Code ausführen ist

response body error

type: 'OAuthException',

Error: { message: '(#100) Invalid keys "call_to_actions" were found in param "call_to_actions[0]".', code: 100}

Hier mein Code:

function addPersistentMenu(){ 
    request({ 
    url: "https://graph.facebook.com/v2.6/me/thread_settings", 
    qs: {access_token: token}, 
    method: "POST", 
    json:{ 
     setting_type : "call_to_actions", 
     thread_state : "existing_thread", 
     call_to_actions : [ 
     { 
      type: "nested", 
      title: "Menu Item One", 
      call_to_actions: [ 
      { 
       type: "postback", 
       title: "Nested Item One", 
       payload: "NESTED_ONE" 
      }, 
      { 
       type: "postback", 
       title: "Nested Item Two", 
       payload: "NESTED_TWO" 
      } 
      ] 
     }, 
     { 
      type: "postback", 
      title: "Menu Item Two", 
      payload: "TWO" 
     }, 
     { 
      type: "postback", 
      title: "Menu Item Three", 
      payload: "THREE" 
     } 
     ] 
    } 
    }, function(error, response, body) { 
     if(error){ 
     console.log('sending error') 
     console.log('Error sending messages: ', error) 
     }else if(response.body.error){ 
     console.log('response body error') 
     console.log('Error: ', response.body.error) 
     } 
    }); 
} 

Wenn ich die verschachtelte Taste, die persistent Menü zu entfernen, erscheint Ich bin so nicht sicher, was der Fehler ist. Mein Code ist dem von Facebook geposteten Beispiel in ihrem persistent menu doc ziemlich ähnlich. Ich programmiere mit node.js, gehostet auf Heroku und ich modellierte meine Menüfunktion nach the code found here.

Frage: Hat jemand dies mit einem nodejs Webhook mit dem npm Anfragepaket getan, um Anfragen an Messenger zu senden? Wie füge ich mein verschachteltes persistentes Menü hinzu und was bedeutet dieser Fehler?

Bearbeiten: Wenn ich einen direkten CURL POST über das Terminal mit dem genauen Befehl in der persistenten Menü-Dokumentation verwenden, wird das verschachtelte persistente Menü hinzugefügt. Ich bin mir nicht sicher, was ich meiner Nodejs-Webhook-Version dieser Anfrage hinzufügen soll, damit es funktioniert.

Dies ist der ROTATION-Befehl:

curl -X POST -H "Content-Type: application/json" -d '{ 
    "persistent_menu":[ 
    { 
     "locale":"default", 
     "composer_input_disabled":true, 
     "call_to_actions":[ 
     { 
      "title":"My Account", 
      "type":"nested", 
      "call_to_actions":[ 
      { 
       "title":"Pay Bill", 
       "type":"postback", 
       "payload":"PAYBILL_PAYLOAD" 
      }, 
      { 
       "title":"History", 
       "type":"postback", 
       "payload":"HISTORY_PAYLOAD" 
      }, 
      { 
       "title":"Contact Info", 
       "type":"postback", 
       "payload":"CONTACT_INFO_PAYLOAD" 
      } 
      ] 
     }, 
     { 
      "type":"web_url", 
      "title":"Latest News", 
      "url":"http://petershats.parseapp.com/hat-news", 
      "webview_height_ratio":"full" 
     } 
     ] 
    }, 
    { 
     "locale":"zh_CN", 
     "composer_input_disabled":false 
    } 
    ] 
}' "https://graph.facebook.com/v2.6/me/messenger_profile?access_token=YOUR_ACCESS_TOKEN_HERE" 

Antwort

4

Die Facebook-Messenger-API für verschachtelte persistent Menüs aktualisiert wurde. Der Stil 'call_to_actions' scheint immer noch für ein nicht verschachteltes Menü zu funktionieren.

Ein verschachteltes Menü benötigt jedoch einen anderen API-Aufruf. Der Unterschied scheint zu sein, dass die URL zu "Messenger_profile" und nicht zu "thread_settings" gehört. Ein "get_started" -Handler ist auch aus irgendeinem Grund erforderlich. Schließlich wird das json-Array 'persistant_menu' genannt.

Ich aktualisierte das Beispiel bot auf gitub. Geben Sie 'add menu' und 'remove menu' ein, um zu sehen, wie das persistente Menü erscheint/verschwindet. In einigen Browsern kann ein Reload der Seite erforderlich sein.

Hier ist einige schlampig Nodejs Code, der den Trick tun sollte.

+0

Vielen Dank! Ich habe versucht, den Knoten Js-Code und ich sehe nicht meine Schaltfläche "Los geht's" oder das Menü. Ich bekomme diese Fehlermeldung nicht mehr. und die gesendete JSON-Antwort zeigt nur {"object": "Object"} anstelle von {"result": "Erfolgreich die CTAs von new_thread hinzugefügt"} –

+0

Erneut versucht. Keine Änderungen vorgenommen. Nur entfernt die Schaltfläche "Erste Schritte" und Menü-ID versucht, zuvor hinzuzufügen. Es funktionierte. –

+0

Ich habe bemerkt, dass das persistente Menü seinen Zustand zwischenspeichert. Wenn Sie die Seite erneut laden oder die App neu starten, müssen Sie manchmal Updates sehen –