2016-09-13 3 views
4

클라우디아 JS (Claudia JS)를 사용하여 Facebook 메신저 봇을 만들고 AWS Lambda에서 호스팅 계획을 세웁니다.Facebook 봇 채팅에서 사용자의 답변을 저장하는 가장 좋은 방법은 무엇입니까?

사용자에게 일련의 질문을하고 싶습니다.

사용자가 답변으로 응답하면 나중을 위해 저장해야하고 필요한 모든 정보가 있으면 기능에 응답을 전달합니다.

이 정보를 저장하는 가장 좋은 방법은 무엇입니까?

나는 redis와 같은 캐싱 레이어를 생각하고 있었지만 RAM에 저장되어 있기 때문에 lamda 서버가 종료 될 때 잃어 버리게됩니다. Mongodb은 연결할 때 많은 오버 헤드를 가지고 있지만 적어도 지속성은 유지할 것입니다.

아마도 단순한 mySQL 서버일까요?

다른 사람들은 어떻게합니까? 제가 누락 된 간단한 해결책이있는 것 같습니다.

답변

5

나는 먼저 에 대해 대답 할 것이다. 내가 어떻게하고 있는지. : 나는 MongoDB를 사용하고있다. 나는 당신이 언급 한 아이디어를 가지고 놀았으나 똑같은 이유로 인 메모리 솔루션 (Memcached, Redis)을 빠르게 넘어 섰다. 나의 최종 솔루션은 MongoDB와 같은 관계형 DB 또는 noSQL 중 하나로 내려갔습니다. 솔직히 말해서, 내 프로젝트의 규모에서 DB 유형 간의 성능을 견고하게 비교하는 것에 대해서는 생각하지 않았습니다.

"로드맵"과 관련하여 Mongo의 정규화 된 구조 덕분에 사용자 클래스를 명시 적으로 정의 할 필요없이 사용자 "객체"를 다룰 때 Mongo와 더 가까워지기로 결정했습니다. . 나는 MySQL을 위해서도 마찬가지 일 수 있다는 것을 이해한다. json 데이터는 나를 위해 더 "객체와 같은"것이며, ​​flask 즉, user = getUserFromMongo인데, 이는 나에게 파이썬에서 dict을 준다. 그러면 나는 단지 user['first_name']을 할 수있다. user

MongoDB를 에

내 사용자 개체 데이터 (이 SQL이 레일에서 간단한 데이터베이스 상호 작용 명령을 작성할 필요 ... 좋아하지 느끼고 있었다 어떻게 든)

Interact with MongoDB : 코드는 belows로이 간단하게 설명 할 것

마지막으로 사용자 입력을 관리하는 방법은 이고, 나는 context이라는 Wit.ai의 개념을 채택했습니다. 나는 그들이 정확히 어떻게하는지 모르지만, 나에게 context은 대화 목적의 유형입니다. 스택처럼 사용하고, 현재 컨텍스트가 완료 되 자마자 사용자의 컨텍스트 데이터에서 팝핑합니다. 봇이받는 모든 메시지에 대해 프로그램은 현재 컨텍스트를 가져 와서 흐름을 지시합니다. 사용자가 로봇이 이해할 수없는 것을 말하고 있기 때문에 알 수없는 오류 (예외 처리)가 발생할 때마다 데이터도 지 웁니다.

MongoDB에 대한 좋은 점은 제가 context을 형성 할 수 있다는 것입니다. 그러나 나는 이것을 객체로 취급하고 싶습니다. 간단한 하나는 {name: yelp-search, stage:ask-for-user-location}과 같으며 복잡한 구조도 그 구조에 구축 될 수 있다고 상상합니다. 물론, context의 스택 구현은 복잡한 과거 참조와의 복잡한 대화를 처리하지 않습니다.

l put my project on Github 당신이 그것을보고 싶다면.

+0

그 해결책은 내가 끝내게 된 해결책과 매우 비슷합니다. mongo 대신 mySQL을 사용했습니다 (단지 익숙하기 때문에 새 항목을 배우는 쪽을 추적하고 싶지 않기 때문에). MongoDB는 분명히 갈 길입니다. 나는 너무 지혜로운 AI를 사용했고 답변의 컨텍스트가 대답되지 않은 질문에 답하면 사용자에 대해 저장합니다. 답변 해 주셔서 감사합니다. 당신의 코드를 체크 아웃 할 것입니다 :) – Stretch0

3

나는 또한 chatbot에 대한 MySQL을 사용했다하지만 난 매우 도움이 될 것이라고 mysql 모듈 app.For 백엔드에 대한 NodeJS을 사용했다.

당신은 질문 응답 세션 저장 사용자의 현재 상태 필요도 저장 대답 자체가 사용자로부터 그리고 당신은 전환 할 필요하거나 경우 - 다른-경우에 질문을위한 경우 사용자가 전환 (상태) 상태로 전환하고 상태를 업데이트하면 상태가 달라집니다. 사용자는 chatbot의 이벤트 객체에 사용자의 facebook-id를 가지므로 각 사용자의 데이터를 해당 상태 및 질문과 함께 개별적으로 저장할 수 있습니다. 다른 테이블에 답하십시오.

예 : 플래그를 정의하십시오. {1,2,3}

사용자의 상태는 1이 될 것입니다. question-1 만 저장할 수 있으며 대답 -1로 저장하면 상태가 이고 확인한 후이 상태를 2로 변경하면됩니다.

이렇게하면 각 학생 질문을 그들의 상태와 대답.

정확히 똑같은 방식으로했습니다.

희망이 있으면 도움이 될 것입니다.

+0

나는이 상태를 저장하는 접근법을 아주 좋아합니다. 특히 mySQL을 사용하는 경우 모든 질문이 포함 된 별도의 테이블을 가질 수 있으며 사용자 테이블의 상태 필드는 해당 질문을 참조 할 수 있습니다. – Stretch0

관련 문제