2017-05-25 18 views
3

チャットボットにネストされた永続メニューを追加しようとしています。 Facebookには3つのボタンの制限がありますが、最大5つのボタンで入れ子になったボタンを持つことができます。Facebook Messenger Nested Persistent Menu Error

この私がここに私のコード

response body error

type: 'OAuthException',

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

を実行したときに私が手にエラーが私のコードです:

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

私は、ネストされたボタンを削除すると、永続的なメニューは、そう私はありません表示されますエラーが何であるか確かめてください。私のコードは、persistent menu docでFacebookに投稿されたサンプルとかなり似ています。私はherokuでホストされているnode.jsを使ってプログラミングしています。私はthe code found hereの後にメニュー機能をモデル化しました。

質問:npmリクエストパッケージを使用してnodejs webhookを使ってメッセンジャーにリクエストを送信した人はいますか?入れ子になった永続メニューを追加するにはどうすればいいですか?このエラーは何を意味しますか?

編集: 永続的なメニュー文書のexactコマンドを使用して端末経由で直接CURL POSTを使用すると、ネストされた永続メニューが追加されます。私はそれを動作させるために、このリクエストのnodejs webhookバージョンに何を追加するか分からない。

これは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" 

答えて

4

のFacebook MessengerのAPIは、ネストされた永続的なメニューのために更新されています。 'call_to_actions'スタイルは、ネストされていないメニューでも動作するように見えます。

ただし、ネストされたメニューには別のAPI呼び出しが必要です。違いは、URLは 'thread_settings'ではなく 'messenger_profile'でなければならないようです。何らかの理由で 'get_started'ハンドラも必要です。最後に、json配列の名前は 'persistent_menu'です。

私はgitubの例botを更新しました。 'add menu'と 'remove menu'と入力すると、永続的なメニューが表示/非表示になります。一部のブラウザではページの再読み込みが必要になる場合があります。

ここでは、このトリックを行う必要のある汚れたnodejsコードを示します。

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

} 
+0

ありがとうございます!私はノードのjsコードを試して、私はもはやスタートボタンが表示されない、またはメニューです。私はもうエラーメッセージが出ることはありません。送信されたJSONレスポンスは、{"result": "new_threadのCTAを正常に追加しました"}の代わりに{"object": "Object"}を表示します。 –

+0

もう一度試してみてください。変更を加えなかったちょうど前に追加しようとしたメニューを開始ボタンとメニューを削除しました。出来た。 –

+0

私は、永続的なメニューがその状態をキャッシュしていることに気付きました。ページの再読み込みやアプリの再起動を繰り返す場合があります。 –

関連する問題