Facebook 메신저 채팅 봇 및 NodeJS를 사용한 약속 예약

게시물에서는 Facebook Messenger API를 사용하여 약속 예약이 통합된 Chat Bot을 만든 방법을 설명합니다. 이것은 NodeJS 구현이지만 다른 최신 언어로 쉽게 재현할 수 있습니다.

Facebook은 매우 유연하며 많은 멋진 기능을 제공합니다. 메신저는 자신의 Facebook 페이지에 추가할 수 있지만 자신의 웹사이트나 앱에 직접 삽입할 수도 있습니다. 교육 목적으로 Facebook 페이지에서 사용할 것입니다. 전체 코드는 이 게시물 하단의 GitHub 저장소에 있습니다.

작동 방식에 대한 기본 데모는 다음과 같습니다.



API 자격 증명 얻기



Facebook Messenger API를 시작하려면 an official guide을 팔로우하십시오. App Secret Key , Page Access TokenCallback user token 의 세 가지 중요한 자격 증명을 얻어야 합니다. 마지막 토큰은 사용자 정의 값입니다.

구현



단계 중 하나에서 웹후크 URL을 서버에 제공해야 합니다. 이렇게 하면 Facebook이 연결을 확인하고 사용자 정의 토큰의 유효성을 검사할 수 있습니다.

// GET request
router.get('/spurwing-fbbot/', (req, res) => {
  // verify token and send back the challenge
});


Facebook 앱이 생성되고 웹후크가 Facebook에서 성공적으로 확인되면 페이지의 메신저 및 채팅 봇 구현 및 테스트를 시작할 수 있습니다.

// POST request
router.post('/spurwing-fbbot/', async (req, res) => {

  verifyRequestSignature(req, res) // make sure it really is Facebook's message

  for (const e of req.body.entry) {
    if (e.messaging)
      for (const m of e.messaging) {
        await fb_msg_process(m.sender.id, m.message)
      }
  }

  res.send({success:1})
});


위의 코드는 메신저를 통해 사용자 메시지를 수신하기 위한 매우 간단한 라우터 구현입니다. 다음으로 사용자 텍스트를 처리하고 적절하게 회신해야 합니다.

async function fb_msg_process(senderId, msg) {

  // default fall-back message
  let resp = {text: "I don't know what you mean :("}

  if (msg && msg.text) {
    let text = msg.text.toLowerCase();
    if (msg.quick_reply && msg.quick_reply.payload)
      text = msg.quick_reply.payload;

    switch(true) {
      case /^book$/.test(text):
        resp = await fb_msg_process_funcs.book(text);
        break;
      case /^book_day:.+$/.test(text):
        resp = await fb_msg_process_funcs.book_day(text);
        break;
      case /^book_slot:.+$/.test(text):
        resp = await fb_msg_process_funcs.book_slot(text);
        break;
    }  
  }

  fb_msg_reply(senderId, resp) // send a reply back

}


위의 코드는 컨텍스트에 따라 수신된 메시지를 구문 분석하고 처리합니다. 상단의 애니메이션 gif는 이 정확한 논리를 보여줍니다.

약속 예약 및 예약 논리는 Spurwing API(NodeJS library)에서 제공합니다. 사용 가능한 모든 날짜를 나열한 다음 지정된 날짜에 사용 가능한 모든 시간 슬롯을 나열하고 마지막으로 선택한 시간 슬롯에 약속을 예약할 수 있습니다. 이 구현의 전체 코드는 GitHub repository hereindex.js에 있습니다.

결론



이것은 Facebook Messenger API를 사용한 매우 간단하면서도 효과적인 챗봇 구현입니다. 그러나 다음과 같은 몇 가지 주요 세부 정보가 누락되었습니다.
  • 모든 날짜와 시간은 사용자의 시간대가 아니라 서버를 기준으로 합니다. Facebook에는 사용자의 실제 시간대를 수신할 수 있는 고급 메시징 기능이 있습니다.
  • 또는 채팅에서 사용자의 시간대를 직접 물어볼 수 있습니다.
  • 빠른 응답 버튼의 수가 제한됩니다. 그러나 사용 가능한 날짜 및/또는 시간 슬롯의 수는 이 제한을 초과할 수 있습니다. 보다 유연한 일정 옵션을 제공하려면 사용자 지정 논리를 구현해야 합니다.

  • 사용자의 시간대와 빠른 답장 입력을 처리하는 방법을 결정하는 것은 개발자의 몫입니다. 후자는 시간 슬롯을 수동으로 입력하고 가용성에 대한 피드백을 제공하여 달성할 수 있으며, 더 복잡한 언어 구문 분석을 위해 NLP 전략에 도달할 수도 있습니다. 그러나 초보자 프로그래머라면 간단하고 쉽게 유지하십시오.

    더 많은 예약 및 캘린더 솔루션을 보려면 Github account을 방문하십시오.

    좋은 웹페이지 즐겨찾기