如果我的機器人問了不同的問題,並且用戶回答了每個問題,我如何知道哪個答案與哪個問題有關。有一個稱爲元數據的字段,您可以將其附加到sendTextMessage API,但當用戶響應時,此元數據未定義。你們是否使用任何節點緩存來跟蹤狀態或FSM,如machina.js?我怎樣才能最好地弄清楚我們目前陷入的對話是什麼?在Facebook Messenger機器人內保存/跟蹤狀態的正確方法是什麼?
回答
你可以在你的代碼中有一個狀態碼,以跟蹤用戶與機器人對話的位置。
例如,如果你有10個問題,最初保持statuscode = 0,並提出第一個問題。當你收到一條消息給你的webhook時,請檢查statuscode == 0,並將該用戶消息存儲爲對第一個問題的迴應。然後增加statusCode = 1並提出下一個問題。
您可以有多個標誌和statusCodes來處理不同的對話流。
我正在自己遇到這個問題。儘管在他們的文檔中沒有提到它,但我不認爲附加內存數據庫是不可能的。看起來user_id
是相同的,無論何時開始通話。
每次用戶重新加入會話時進行API調用都可能會降低bot的性能。另外,我注意到,如果這是您的建議,則您無法通過在API中使用元數據密鑰來構建「僞分佈式數據庫」。可以從服務器 - >客戶端(Messenger)發送元數據標籤,但不能從客戶端 - >服務器發送文檔說明的內容。
按我的知識,Facebook的聊天機器人你可以通過設置自回傳按鈕有效載荷,因爲他們在API reference給了與用戶的數據發送到聊天機器人。
而聊天機器人不會存儲您的會話或任何州/標誌。您可以設置狀態或旗或數組,但一切都將失去,當你更新你的應用程序或重新啓動服務器。
所以,如果你真的想設置的狀態,你應該使用數據庫爲that.and senderID將保持同樣每次這樣你就可以通過爲特定用戶的特定ID處理來自數據庫的數據。
欲瞭解更多詳情結賬technical referance here。
我希望這會幫助你。如果是這樣,請將其標記爲答案。
當您的應用程序收到消息時,沒有與其關聯的有效內容或元數據。這與可以具有有效載荷的快速回復或回傳相反。將回答與問題關聯起來的唯一方法就是按照@ anshuman-dhamoon建議的方式手動跟蹤應用程序中的對話狀態。爲此,最好爲每個用戶維護一個狀態,以及每個狀態的下一個狀態。
// optionally store this in a database
const users = {}
// an object of state constants
const states = {
question1: 'question1',
question2: 'question2',
closing: 'closing',
}
// mapping of each to state to the message associated with each state
const messages = {
[states.question1]: 'How are you today?',
[states.question2]: 'Where are you from?',
[states.closing]: 'That\'s cool. It\'s nice to meet you!',
}
// mapping of each state to the next state
const nextStates = {
[states.question1]: states.question2,
[states.question2]: states.closing,
}
const receivedMessage = (event) => {
// keep track of each user by their senderId
const senderId = event.sender.id
if (!users[senderId].currentState){
// set the initial state
users[senderId].currentState = states.question1
} else {
// store the answer and update the state
users[senderId][users[senderId].currentState] = event.message.text
users[senderId].currentState = nextStates[users[senderId.currentState]]
}
// send a message to the user via the Messenger API
sendTextMessage(senderId, messages[users[senderId].currentState])
}
注意如果你願意,你甚至可以使nextStates
值成利用目前狀態的回答和分支成不同的談話用戶傳遞到根據不同的狀態流可調用的函數他/她的迴應。
我花了一些時間處理這個問題。最好的解決方案是使用數據庫來跟蹤用戶的對話流程。 POST對象包含發件人ID。您可以使用此ID在數據庫中創建一行,您肯定需要存儲此ID,問題的任何答案以及跟蹤對話中哪個步驟的字段。
然後,您可以在代碼中使用if語句來返回正確的響應。下面的一些示例代碼:
if($currentStep == '1'){
// Ask Next Question
$message_to_reply = "Thank you! What's your name?";
$message_to_reply = '"text":"'.$message_to_reply.'"';
} elseif($currentStep == '2'){
// Ask Next Question
$message_to_reply = "Thank you! What's your email address?";
$message_to_reply = '"text":"'.$message_to_reply.'"';
} elseif($currentStep == '3'){
// Ask Next Question
$message_to_reply = "Thank you! What's your address?";
$message_to_reply = '"text":"'.$message_to_reply.'"';
}
- 1. 什麼是保存活動狀態的正確方法
- 2. 什麼是狀態跟蹤器?
- 3. 在python中跟蹤索引的正確方法是什麼?
- 4. 處理非跟蹤自我跟蹤實體的正確方法是什麼?
- 5. 在AngularJS中將狀態保存回數據庫的正確方法是什麼?
- 6. 跟蹤Swing組件的正確方法是什麼?
- 7. 保存活動的狀態 - 機器人
- 8. 庫存系統 - 正確的方法來跟蹤的狀態和部分
- 9. 透過Facebook Messenger機器人在Node.js的
- 10. 跟蹤視圖狀態信息的推薦方式是什麼?
- 11. 什麼是調用Obspy跟蹤過濾器函數的正確方法?
- 12. 保持我的機器人和Facebook之間的信息一致的正確方法是什麼?
- 13. 在Facebook Messenger bot中處理對話狀態的最佳方式是什麼?
- 14. 跟蹤國家的「正確」方式是什麼?
- 15. 這是存儲網站跟蹤信息的正確方法嗎?
- 16. 什麼是正確的Google Analytics事件跟蹤語法?
- 17. 在表格中保存數據的正確方法是什麼
- 18. 線跟蹤機器人
- 19. 爲什麼我的Facebook轉換跟蹤像素值不正確?
- 20. Facebook Messenger Chatbot自定義事件跟蹤
- 21. 在C中釋放內存的正確方法是什麼?#
- 22. 跟蹤iOS版Google Analytics2中的事件的正確方法是什麼
- 23. 公衆透過Facebook Messenger機器人
- 24. 使用MondoDB跟蹤更新過程的正確方法是什麼?
- 25. 有什麼方法可以在git中跟蹤文件的不變狀態嗎?
- 26. 什麼是使用Apache Storm保存數據的正確方法
- 27. 從.db文件保存信息的正確方法是什麼?
- 28. 保存Hibernate JPA子實體的正確方法是什麼
- 29. 將圖像保存爲Django,正確的方法是什麼?
- 30. 什麼是保存數據的正確方法?
確實,到目前爲止運氣還不錯? db是保存狀態的唯一方法嗎? – Rusty