LINE Bot (LINE MESSAGING API)의 개인 개발 7Tips

소개



이 기사는, 9/23 실시의 한 몬 Lightning Talk에 대한 기사입니다.

  • 이 기사에서 쓰기
  • LINE Bot을 몇개 개발해 생각한 Tips(거의 당연한 것)의 소개
  • (사례 연구로서) 실제로 @ 아이 새우이 만든 LINE Bot 소개


  • 이 기사에 쓰지 않는 것
  • LINE Bot의 핸즈온 개발 절차 설명
  • push 통지 구현 등 (모든 다른 기사에서)


  • 이 글을 읽을 수 있을 것 같은 사람
  • LINE Bot에서 어떤 일을 할 수 있는지의 이미지가 솟지 않은 사람
  • LINE Bot 개발하고 싶지만, 어떻게 하면 좋은지 이미지가 끓지 않는 사람
  • LINE Bot 개발 달리기 사람


  • 개발에 필요한 것



    LINE Bot (LINE MESSAGING API)이란? 기본적으로 오른쪽에서 왼쪽으로 흐르는 무디 승산적인 존재 할 수있는 일은 크게 다음 두 가지 리플라이 (← 이번 설명 대상) 메시지를 받고 그대로 자작 프로그램에 맡긴다. 자체 제작 프로그램에서 실행 결과를 받고 사용자에게 메시지로 보냅니다.  → 복잡한 것 같은 처리는 모두 뒷면을 자작할 필요가 있다 푸시 알림 사용자에게 일방적으로 메시지 보내기 단, 무료/저가 플랜의 경우, 횟수 제한 있음 LINE Bot의 기본 구성

    등장 인물들의 해설



  • LINE Bot (LINE MESSAGING API)
  • 메시지를 오로지 받아들이는
  • 개설에는 LINE 공식 계정 등록이 필요합니다
  • 만드는 방법은 LINE BOT 만드는 법(외부 링크) 참조


  • Google Apps Script(GAS)
  • 메시지를 받고 처리하기위한 자작 프로그램
  • Google Cloud Functions (GCF), Lambda 등에서도 대체 가능
  • 참고로, GAS의 경우 언어는 Javascript (node.js)


  • Firebase Realtime Database/Firestore
  • 사용자 등록 등에서 필요
  • 하나의 처리에 복수회 왕복이 필요한 경우에는 필요(=거의 절대 필요)
  • 다른 DB에서도 물론 대용 가능. 이번에는 GAS와의 친 화성 높이에 중점을 둡니다


  • 개발 흐름



    무엇을 할 수 있는지 (= 갖고 싶은 기능) 생각 처리 흐름을 철저히 생각한다. 환경 준비 세세한 메시지 타입이라고 생각하면서, 개발→배포→테스트의 사이클을 돌린다 0. 사례 연구의 전좌 - '투자왕'을 예로
  • 「투자왕」이란 무엇인가?
  • 한마디로 "가상화폐/투자신탁 매매 시뮬레이션 LINEbot"
  • 기능 개요 등록하면, 의사적으로 100만엔이 선물된다 가상화폐는 30분에 1회, 투자신탁은 하루에 1회 차트가 변동 매매마다 매매수수료도 받는다 라고 하는 중에서 금융상품(가상화폐/투자신탁)을 매매를 의사 체험하는 것
  • 자세한 설명은 여기
  • 실제로 만져보고 싶은 분은 여기 부터

  • 「투자왕」의 구성 개요

  • 1. 무엇을 할 수 있을까(=가지고 싶은 기능)를 생각한다



    세세하게는 할애 투자왕의 기능 목록 사용자 등록 금융 상품의 현재 가격 표시(요청 기준) 금융상품 매매 판매시 타이머:특정 상품이 어느 가격보다 뛰어났을 때의 알림 기능 2. 처리 흐름을 흠뻑 생각한다 '투자왕'의 예와 같이 어떤 상호작용을 하는지 시나리오를 이미지화 사용 예 → <처리 내용> : 사용자에서 Bot으로 ← <처리 내용>    :Bot에서 유저로 (-- <처리 내용> --) :Bot내 처리 예 1: 금융 상품의 현재 가격 표시 → 금융 상품의 현재 가격 표시 요청 (---가격 정보가 타고 있는 DB의 정보를 취득---) ← 가격 일람을 돌려준다 예 2: 사용자 등록 → 등록 요청 ← 등록명을 듣는다 →등록명 입력/응답 (--DB에 정보를 등록&소지금으로 100만엔을 부여--) ← 등록 완료의 취지를 리플라이 예 3: 금융상품 매매 →판매/매입 요청 ← 매매 대상을 듣는다 → 대상을 회답 ← 수량 듣기 → 수량을 대답 (-- 매매 처리 --) ← 처리 결과를 돌려준다 3. 환경 준비 Tips 참조를 위해, 할애 4. 세세한 메시지 타입이라고 생각하면서 개발한다

    sample.js
    function doPost(e) {
      var replyToken= JSON.parse(e.postData.contents).events[0].replyToken;
      if (typeof replyToken === 'undefined') {
        return;
      }
    
      var url = 'https://api.line.me/v2/bot/message/reply';
      var channelToken = 'ここにアクセストークン(ロングターム)を貼り付け';
    
      var messages = [{
        'type': 'text',
        'text': 'こんにちは',
      }];
    
      UrlFetchApp.fetch(url, {
        'headers': {
          'Content-Type': 'application/json; charset=UTF-8',
          'Authorization': 'Bearer ' + channelToken,
        },
        'method': 'post',
        'payload': JSON.stringify({
          'replyToken': replyToken,
          'messages': messages,
        }),
      });
      return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
    }
    

    우선, doPost(e)e 의 내용을 이해한다.
    {
      "destination": "xxxxxxxxxx",
      "events": [
        {
          "replyToken": "0f3779fba3b349968c5d07db31eab56f",
          "type": "message",
          "mode": "active",
          "timestamp": 1462629479859,
          "source": {
            "type": "user",
            "userId": "U4af4980629..."
          },
          "message": {
            "id": "325708",
            "type": "text",
            "text": "Hello, world"
          }
        },
        {
          "replyToken": "8cf9239d56244f4197887e939187e19e",
          "type": "follow",
          "mode": "active",
          "timestamp": 1462629479859,
          "source": {
            "type": "user",
            "userId": "U4af4980629..."
          }
        }
      ]
    }
    

    기본적으로,
  • 사용자 식별자 : e.events.source.userID
  • 메시지 : e.events.message.text

  • 근처를 유지하는 것이 좋습니다.

    각 상호 작용에서 사용자 조작을 생각합니다.



    bot에게 메시지를 보내는 방법은 몇 가지 있으므로 선택.
    세세하게는 Tips집에 기재.
  • 텍스트 입력
  • 리치 메뉴에서 선택
  • 빠른 응답에서 선택
  • 템플릿 메시지에서 선택

  • (참고) 리치 메뉴·메시지 타입에 대해서


  • 좌학: 전달되는 메시지의 체형 이해 우선, 다음 소스를 GAS에 붙이고 그대로 배포하면 무슨 말을 해도 '안녕하세요'로 돌려주는 Bot을 만들 수 있다.

  • Tips집



    LINE BOT 만드는 법(외부 링크) 리치 메뉴 이미지를 만드는 방법부터 설정 방법까지 공식 참조: 템플릿 메시지 빠른 응답 Qiita : LINE의 빠른 응답 기능을 사용해 보았습니다. Tips1:복수 "교환"정리하여 1처리의 구현

    예 : 상호 작용은 기본적으로 빠른 응답을 활용합니다.


    Tips4:PC판은 생각하지 않는다



    LINE MESSAGING API는 기본적으로 하나의 메시지에 대해 하나의 처리로 인해 예 2 · 예 3과 같은 "종전 대화를 근거로 한 처리"는 자작이 필요 해결 방법의 예: 이전 상호작용을 DB에 저장 맨처음에 전회의 교환을 확인하는 처리를 넣는다 이전 교환의 결과를 바탕으로 받은 내용을 처리 Tips2:bot 환경은 프로덕션/개발의 2개를 준비 이유 개발용이있는 편이 기능 추가 / 수정시 편리하기 때문에 오히려 개발용이 아니라면 별로 아니지만 수정할 수 없기 때문에 구현 포인트 개발 / 프로덕션은 기본 소스는 동일 액세스 토큰(=API 키)을 프로덕션/개발로 구분하기만 합니다. 주의점 액세스 토큰을 수정하는 것을 잊으면 bot가 아무 것도 작동하지 않습니다. 배포 후 반드시 기본적인 움직임을 확인 Tips3: 텍스트 입력 최소 사용자 조작의 "기점"은 리치 메뉴에서 선택 "교환"은 빠른 응답 또는 템플릿 메시지입니다. 이유 · 장점 직관적이고 이해하기 쉬운 사용성 일련의 "교환"에서 오류가 발생하기 어렵습니다. === "투자 왕"의 예 : 사는 작업 ===

    Tips6:리치 메뉴에는 「취소」・「도움말」을



    예: 리치 메뉴에서 선택 이유 : PC 버전에서는 다음 기능을 사용할 수 없기 때문에 리치 메뉴 빠른 응답 →결국 텍스트 베이스가 되어 버리기 때문에, 설계도 번거롭고 사용하기 어려운 bot가 된다 Tips5: 메시지 유형을 구분

    좋은 웹페이지 즐겨찾기