2016-04-16 43 views
2

我試圖用NodeJS,Express和Heroku服務器創建Facebook chatbot。試圖創建Facebook Chatbot時獲取和「錯誤,錯誤的驗證令牌」

我在heroku上創建了我的webhook,並通過facebook驗證並保存。然後我開始添加能夠回覆傳入消息的代碼,但似乎無法連接。當我嘗試在我的瀏覽器中加載我的webhook時,它總是說「錯誤,錯誤的驗證令牌」。當我嘗試向我的機器人發送消息時,我無法回覆。儘管我已經驗證過它,並沒有更改代碼。

這裏是我的代碼:

var express = require('express'); 
var bodyParser = require('body-parser'); 

var app = express(); 
var port = process.env.PORT || 3000; 

// body parser middleware 
app.use(bodyParser.urlencoded({ extended: true })); 

// test route 
//app.get('/', function (req, res) { res.status(200).send('Hello world!') }); 

app.get('/', function (req, res) { 
    if (req.query['hub.verify_token'] === '8FKU9XWeSjnZN4ae') { 
    res.send(req.query['hub.challenge']); 
    } 
    res.send('Error, wrong validation token'); 
}) 

app.post('/', function (req, res) { 
    messaging_events = req.body.entry[0].messaging; 
    for (i = 0; i < messaging_events.length; i++) { 
    event = req.body.entry[0].messaging[i]; 
    sender = event.sender.id; 
    if (event.message && event.message.text) { 
     text = event.message.text; 
     sendTextMessage(sender, "Text received, echo: "+ text.substring(0, 200)); 
    } 
    } 
    res.sendStatus(200); 
}); 

// error handler 
app.use(function (err, req, res, next) { 
    console.error(err.stack); 
    res.status(400).send(err.message); 
}); 

app.listen(port, function() { 
    console.log('Listening on port ' + port); 
}); 

var token = <myToken>; 

function sendTextMessage(sender, text) { 
    messageData = { 
    text:text 
    } 
    request({ 
    url: 'https://graph.facebook.com/v2.6/me/messages', 
    qs: {access_token:token}, 
    method: 'POST', 
    json: { 
     recipient: {id:sender}, 
     message: messageData, 
    } 
    }, function(error, response, body) { 
    if (error) { 
     console.log('Error sending message: ', error); 
    } else if (response.body.error) { 
     console.log('Error: ', response.body.error); 
    } 
    }); 
} 

所以我很困惑,爲什麼什麼也沒有發生,爲什麼我收到錯誤。我覺得我錯過了一整步。順便說一句,我正在關注本教程:https://developers.facebook.com/docs/messenger-platform/quickstart

任何幫助表示讚賞。謝謝!

編輯:這是我的Heroku的日誌

Heroku Logs

+0

我有同樣的問題。基本上我得到一個500錯誤。而已! – helicopter

+0

我希望有更好的文檔。我明白,因爲它是如此新 –

回答

0
  1. 不要在這裏發佈您的完整權限令牌!
  2. 您是否測試了挑戰的輸出?由於它只是一個GET,你知道所有的值你可以自己嘗試:your-app-domain.com/your-callback-url?hub_mode=subscribe&hub_verify_token=the_token_you_set_in_your_app_config&hub_challenge=ping如果一切正常,它可以打印'ping'。
  3. 請確保您將sendStatus(200)添加到集線器質詢響應。
  4. 您需要首先將您的頁面訂閱到應用程序。爲此,請向/ your-page-id/subscribed_apps發送POST請求,該請求應返回「成功」。你可以做一個GET請求到同一個端點後要仔細檢查你的應用程序訂閱了網頁
  5. 你沒有提到你訂閱的事件(必須message_deliveries,消息,messaging_optins,messaging_postbacks)
  6. 確保在您的應用程序儀表板的網絡掛接選項卡現在說「完成」
  7. 再次測試
+0

嘿,感謝您的幫助。儘管問題很快。會「https://graph.facebook.com/v2。6/me「是第2步的回調URL還是我的路 –

+0

回調URL是你在Webhooks> Page Subscriptions中指定的URL,那個/ me endpoint是檢索用戶的URL第一個名字,所以你可以使用它的「你好xy」消息 –

0

你實際使用的是「請求」,但你永遠不會進口任何地方。以下是如何解決這個問題:

var request = require("request") 

一旦你還說,你index.js或app.js文件(基本上不管這個文件),你一定要做:

npm install request --save 

這應該修理它。不幸的是,Heroku並沒有錯誤,並且說它不知道「請求」是什麼,這就是爲什麼要首先解決這個問題的原因!

+0

試過這個後,我仍然得到錯誤,沒有從我的機器人反應。 –

+0

@EricWalier它是一樣的錯誤嗎?你能發送你的錯誤日誌消息嗎?您還可以使用heroku日誌 - tail實時查看日誌。 – helicopter

+0

是的是一樣的錯誤。我添加了一個編輯我的文章與日誌的圖片 –