LINE Bot (LINE MESSAGING API)의 개인 개발 7Tips
소개
이 기사는, 9/23 실시의 한 몬 Lightning Talk에 대한 기사입니다.
이 기사에서 쓰기
이 기사에 쓰지 않는 것
이 글을 읽을 수 있을 것 같은 사람
개발에 필요한 것
LINE Bot (LINE MESSAGING API)이란?
기본적으로 오른쪽에서 왼쪽으로 흐르는 무디 승산적인 존재
할 수있는 일은 크게 다음 두 가지
리플라이 (← 이번 설명 대상)
메시지를 받고 그대로 자작 프로그램에 맡긴다.
자체 제작 프로그램에서 실행 결과를 받고 사용자에게 메시지로 보냅니다.
→ 복잡한 것 같은 처리는 모두 뒷면을 자작할 필요가 있다
푸시 알림
사용자에게 일방적으로 메시지 보내기
단, 무료/저가 플랜의 경우, 횟수 제한 있음
LINE Bot의 기본 구성
등장 인물들의 해설
LINE Bot (LINE MESSAGING API)
Google Apps Script(GAS)
Firebase Realtime Database/Firestore
개발 흐름
무엇을 할 수 있는지 (= 갖고 싶은 기능) 생각
처리 흐름을 철저히 생각한다.
환경 준비
세세한 메시지 타입이라고 생각하면서, 개발→배포→테스트의 사이클을 돌린다
0. 사례 연구의 전좌 - '투자왕'을 예로
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집에 기재.
(참고) 리치 메뉴·메시지 타입에 대해서
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: 메시지 유형을 구분
Reference
이 문제에 관하여(LINE Bot (LINE MESSAGING API)의 개인 개발 7Tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kodomoEBINA/items/89f5ece2d6cd97267453
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(LINE Bot (LINE MESSAGING API)의 개인 개발 7Tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kodomoEBINA/items/89f5ece2d6cd97267453텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)