Error de menú persistente nested de Facebook Messenger

Estoy tratando de agregar un menú persistente NESTED a mi chatbot. Facebook tiene un límite de 3 botones, pero puede tener un botón nested con un máximo de 5 botones.

Este es el error que recibo cuando ejecuto mi código

respuesta cuerpo error

tipo: ‘OAuthException’,

Error: {mensaje: ‘(# 100) Se encontraron claves no válidas “call_to_actions” en el parámetro “call_to_actions [0]”.’, Código: 100}

Aquí está mi código:

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) } }); } 

Cuando quito el botón nested, aparece el menú persistente, así que no estoy seguro de cuál es el error. Mi código es bastante similar al ejemplo publicado por Facebook en su documento de menú persistente . Estoy progtwigndo usando node.js, alojado en heroku y modelamos mi función de menú según el código que se encuentra aquí .

Pregunta: ¿Alguien ha hecho esto usando un webhook de nodejs usando el paquete de solicitud npm para enviar solicitudes a messenger? ¿Cómo agrego mi menú persistente nested y qué significa este error?

Editar: Cuando uso un CURL POST directo a través del terminal usando el comando exacto en la documentación del menú persistente, se agrega el menú persistente nested. No estoy seguro de qué agregar a la versión webhook de mi solicitud para que funcione.

Este es el comando CURL:

 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" 

La API de Facebook Messenger se ha actualizado para los menús persistentes nesteds. El estilo ‘call_to_actions’ parece seguir funcionando para un menú no nested.

Sin embargo, un menú nested necesita una llamada a API diferente. La diferencia parece ser que la URL debe ser el ‘messenger_profile’ en lugar de ‘thread_settings’. También se requiere un controlador ‘get_started’ por alguna razón. Finalmente, la matriz json se llama ‘persistent_menu’.

Actualicé el bot de ejemplo en gitub. Escriba ‘agregar menú’ y ‘quitar menú’ para ver que el menú persistente aparezca / desaparezca. Es posible que se requiera una recarga de la página o dos en algunos navegadores.

Aquí hay un código de nodejs descuidado que debería hacer el truco.

  function addPersistentMenu(){ request({ url: 'https://graph.facebook.com/v2.6/me/messenger_profile', qs: { access_token: PAGE_ACCESS_TOKEN }, method: 'POST', json:{ "get_started":{ "payload":"GET_STARTED_PAYLOAD" } } }, function(error, response, body) { console.log(response) if (error) { console.log('Error sending messages: ', error) } else if (response.body.error) { console.log('Error: ', response.body.error) } }) request({ url: 'https://graph.facebook.com/v2.6/me/messenger_profile', qs: { access_token: PAGE_ACCESS_TOKEN }, method: 'POST', json:{ "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://foxnews.com", "webview_height_ratio":"full" } ] }, { "locale":"zh_CN", "composer_input_disabled":false } ] } }, function(error, response, body) { console.log(response) if (error) { console.log('Error sending messages: ', error) } else if (response.body.error) { console.log('Error: ', response.body.error) } }) }