2016-08-16 10 views
1

facebook messenger apiとwit.aiアクションを使用してサンプルのエコーメッセージボットを書きました。facebook messenger botエンコーディングエラー

facebookページからのメッセージが受信され、wit apiを使用して定義された適切なアクション関数も呼び出されます。しかし、 応答を返している間、私は次のようなエラーを受けています -

おっと!エラー:(#100)Paramメッセージ[text]はUTF-8でエンコードされた文字列でなければなりません fetch.then.then.json(/app/index.js:106:13) process._tickCallbackで(内部/プロセス/ next_tick.js:103:7) -

const fbMessage = (id, text) => { 
    const body = JSON.stringify({ 
    recipient: { id }, 
    message: { text }, 
    }); 
    const qs = 'access_token=' + encodeURIComponent(FB_PAGE_ACCESS_TOKEN); 
    return fetch('https://graph.facebook.com/v2.6/me/messages?' + qs, { 
    method: 'POST', 
    headers: {'Content-Type': 'application/json; charset=UTF-8'}, 
    body 
    }) 
    .then(rsp => rsp.json()) 
    .then(json => { 
    if (json.error && json.error.message) { 
     throw new Error(json.error.message);`enter code here` 
    } 
    return json; 
    }); 
}; 

Iはmessenger.jsからこの関数をコピーした

ここで応答を返すために使用される関数であります私はPOCを試しているので、ドキュメントからファイルを削除してください。 この関数でtextとidの値をチェックし、console.logステートメントを使用して検証しています。

このエラーの解決に役立つ専門家がいますか?

注 - text.toString( "utf8")を使用してテキストをエンコードしようとしました。それは[オブジェクトオブジェクト]としてエンコーディング文字列を返し、私はロボットから得た 応答です。だからそれは働かない。

答えて

0

のFacebookによると、FacebookのIDの使用状況に変更がある、

node-witから最新のコードを取得する:

On Tue May 17 format of user and page ids delivered via webhooks will change from an int to a string to better support default json encoder in js (that trims long ints). Please make sure your app works with string ids returned from webhooks as well as with ints.

それでもあなたは、APIの問題を得ているようif(event.message && !event.message.is_echo)条件を追加しよう下記のコードに示されています。

// Message handler 
app.post('/webhook', (req, res) => { 
    const data = req.body; 
    if (data.object === 'page') { 
     data.entry.forEach(entry => { 
     entry.messaging.forEach(event => { 
     if (event.message && !event.message.is_echo) { 
      const sender = event.sender.id; 
      const sessionId = findOrCreateSession(sender); 
      const {text, attachments} = event.message; 
      if (attachments) { 
      fbMessage(sender, 'Sorry I can only process text messages for now.') 
      .catch(console.error); 
      } else if (text) { 
      wit.runActions(
       sessionId, // the user's current session 
       text, // the user's message 
       sessions[sessionId].context // the user's current session state 
      ).then((context) => { 
       console.log('Waiting for next user messages'); 
       sessions[sessionId].context = context; 
      }) 
      .catch((err) => { 
       console.error('Oops! Got an error from Wit: ', err.stack || err); 
      }) 
      } 
     } else { 
      console.log('received event', JSON.stringify(event)); 
     } 
     }); 
    }); 
    } 
    res.sendStatus(200); 
}); 

参考:
no matching user bug
no matching user fix

関連する問題