kintone과 Google Apps Script를 사용하여 간편한 대화 채팅 Bot을 만들어 보았습니다.
전제 조건이나 지식 등
동작 이미지
미안해. 내 안의 이미지입니다. LINE과의 대비이지만 LINE은 Bot을 만드는데 LINE Messaging API를 이용합니다. LINE Platform이라는 기반 위에서 Bot용 채널을 만들고 그 Bot 채널을 통해 외부 Bot 서버와 연결하는 느낌입니다. (아마)
kintone은 Bot 앱을 만들고 앱의 Webhook을 통해 외부 서버와 연결하면 Bot을 할 수 있다는 상태입니다. 이번 Bot 서버에는 Google Apps Script를 웹 앱 모드로 동작시키는 느낌입니다.
새 레코드를 만들고
목록으로 돌아가면 Bot 서버에서 회귀가 반환됩니다.
개요
kintone은 Webhook이라는 앱 입력을 트리거로 외부 서버 (예 : Bot 서버)에 데이터를 전송하는 메커니즘이 있습니다. Bot을 만들려면이 메커니즘을 사용합니다.
만드는 방법은 아래와 같습니다.
kintone은 Webhook이라는 앱 입력을 트리거로 외부 서버 (예 : Bot 서버)에 데이터를 전송하는 메커니즘이 있습니다. Bot을 만들려면이 메커니즘을 사용합니다.
만드는 방법은 아래와 같습니다.
1. kintone으로 Bot 앱을 만듭니다.
메시지 입력을 위한 필드와 Bot 서버 응답을 위한 필드를 제공합니다.
서버 응답 필드에는 Bot 서버가 응답할 때 메시지와 함께 무언가 플래그를 설정합니다.
이렇게 하면 새 메시지 게시물과 서버의 응답인지 확인합니다.
이것이 없으면 무한 루프하므로주의하십시오.
2. Google Apps Script에서 웹 앱을 만듭니다.
일단 코드를 올려 둡니다만, 기본은 kintone으로부터의 레코드를 취득해, 메세지 필드의 내용을 돌려주고 있을 뿐입니다.
디버깅을 위해, Spreadsheet에 로그를 토하고 있습니다만 그 처리는 제외해 OK입니다.
function doPost(e) {
// 環境変数のセット
const scriptProperties = PropertiesService.getScriptProperties();
const DOMAIN = scriptProperties.getProperty('DOMAIN'); // kintone ドメイン名
const APP_ID = scriptProperties.getProperty('APP_ID'); // kintone アプリID
const API_TOKEN = scriptProperties.getProperty('API_TOKEN'); // kintone APIトークン
const SHEET_ID = scriptProperties.getProperty('SHEET_ID'); // デバッグ用 Spreadsheet ID
appendLogToSpreadsheet('--- debug start', SHEET_ID)
appendLogToSpreadsheet(JSON.stringify(e), SHEET_ID)
appendLogToSpreadsheet(JSON.stringify(JSON.parse(e.postData.contents)), SHEET_ID)
const contents = JSON.parse(e.postData.contents)
const record = contents.record
// BOTサーバーからの返信の時は何もしない
if (record.botServerReplyMessage.value) {
appendLogToSpreadsheet('BOTサーバーからの返信の時', SHEET_ID)
return
} else {
appendLogToSpreadsheet('新規メッセージの時', SHEET_ID)
}
const payload = {
app: APP_ID,
record: { 'message':
{'value': record.message.value},
'botServerReplyMessage':
{'value': contents.id},
}
}
const option = {
method: "post",
contentType: "application/json",
headers: { "X-Cybozu-API-Token": API_TOKEN },
muteHttpExceptions: true,
payload: JSON.stringify(payload)
};
appendLogToSpreadsheet('option', SHEET_ID)
appendLogToSpreadsheet(option, SHEET_ID)
let response = ''
// kintoneにレコード追加
response = UrlFetchApp.fetch(
`https://${DOMAIN}/k/v1/record.json`,
option
)
appendLogToSpreadsheet('response', SHEET_ID)
appendLogToSpreadsheet(response, SHEET_ID)
// Spreadsheetにログを書き出す
function appendLogToSpreadsheet(log, sheetId, sheetName = 'sheet1') {
const spreadSheet = SpreadsheetApp.openById(sheetId)
spreadSheet.getSheetByName(sheetName).appendRow(
[new Date(), log]
);
SpreadsheetApp.flush()
}
return response
}
kintone의 API 토큰과 같은 환경 변수는 프로젝트 속성에 설정됩니다.
코드를 작성한 후 웹 앱으로 게시하도록 설정합니다.
3. Google Apps Script의 공개 URL을 kintone Bot 앱의 Webhook으로 설정합니다.
미래 전개
일단 코드를 올려 둡니다만, 기본은 kintone으로부터의 레코드를 취득해, 메세지 필드의 내용을 돌려주고 있을 뿐입니다.
디버깅을 위해, Spreadsheet에 로그를 토하고 있습니다만 그 처리는 제외해 OK입니다.
function doPost(e) {
// 環境変数のセット
const scriptProperties = PropertiesService.getScriptProperties();
const DOMAIN = scriptProperties.getProperty('DOMAIN'); // kintone ドメイン名
const APP_ID = scriptProperties.getProperty('APP_ID'); // kintone アプリID
const API_TOKEN = scriptProperties.getProperty('API_TOKEN'); // kintone APIトークン
const SHEET_ID = scriptProperties.getProperty('SHEET_ID'); // デバッグ用 Spreadsheet ID
appendLogToSpreadsheet('--- debug start', SHEET_ID)
appendLogToSpreadsheet(JSON.stringify(e), SHEET_ID)
appendLogToSpreadsheet(JSON.stringify(JSON.parse(e.postData.contents)), SHEET_ID)
const contents = JSON.parse(e.postData.contents)
const record = contents.record
// BOTサーバーからの返信の時は何もしない
if (record.botServerReplyMessage.value) {
appendLogToSpreadsheet('BOTサーバーからの返信の時', SHEET_ID)
return
} else {
appendLogToSpreadsheet('新規メッセージの時', SHEET_ID)
}
const payload = {
app: APP_ID,
record: { 'message':
{'value': record.message.value},
'botServerReplyMessage':
{'value': contents.id},
}
}
const option = {
method: "post",
contentType: "application/json",
headers: { "X-Cybozu-API-Token": API_TOKEN },
muteHttpExceptions: true,
payload: JSON.stringify(payload)
};
appendLogToSpreadsheet('option', SHEET_ID)
appendLogToSpreadsheet(option, SHEET_ID)
let response = ''
// kintoneにレコード追加
response = UrlFetchApp.fetch(
`https://${DOMAIN}/k/v1/record.json`,
option
)
appendLogToSpreadsheet('response', SHEET_ID)
appendLogToSpreadsheet(response, SHEET_ID)
// Spreadsheetにログを書き出す
function appendLogToSpreadsheet(log, sheetId, sheetName = 'sheet1') {
const spreadSheet = SpreadsheetApp.openById(sheetId)
spreadSheet.getSheetByName(sheetName).appendRow(
[new Date(), log]
);
SpreadsheetApp.flush()
}
return response
}
kintone의 API 토큰과 같은 환경 변수는 프로젝트 속성에 설정됩니다.
코드를 작성한 후 웹 앱으로 게시하도록 설정합니다.
3. Google Apps Script의 공개 URL을 kintone Bot 앱의 Webhook으로 설정합니다.
미래 전개
그리고, 좀 더 채팅 Bot의 이미지의 UI는 준비하고 싶네요.
참고
나중에.
Reference
이 문제에 관하여(kintone과 Google Apps Script를 사용하여 간편한 대화 채팅 Bot을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sy250f/items/5c03125f85a24402afea텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)