kintone과 Google Apps Script를 사용하여 간편한 대화 채팅 Bot을 만들어 보았습니다.

14394 단어 Webhookbot금과gas
조금 전부터 자신 속에서 웹 서비스라든지, Bot의 관심도가 높아지고 있어요. LINE Bot도 튜토리얼을 보면서 만들어 보았지만, 이마이치 LINE의 설정 근처나 번역을 모르기 때문에, kintone으로 Bot를 만들면 이해가 진행되는 것은 아니라고 생각하고, 간단한 회귀 채팅 Bot을 만들어 보았습니다. 프런트의 디자인은 kintone의 아레인 채이므로, 이것을 채팅 Bot라고 하는 것은 무리한 느낌입니다만, 그 근처는 용서해 주세요.

전제 조건이나 지식 등


  • kintone 앱을 만들 수 있습니다
  • JavaScript를 작성할 수 있습니다
  • Google Apps Script를 작성할 수 있습니다

  • 동작 이미지



    미안해. 내 안의 이미지입니다. 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에서 Bot 앱을 만듭니다.
  • Google Apps Script에서 웹 앱을 만듭니다.
  • Google Apps Script의 공개 URL을 kintone Bot 앱의 Webhook으로 설정합니다.

  • 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으로 설정합니다.





    미래 전개


  • LINE의 Messaging API 설정 주위를 정리합니다
  • LINE LIFF를 사용하여 kintone과 상호 작용

  • 그리고, 좀 더 채팅 Bot의 이미지의 UI는 준비하고 싶네요.

    참고



    나중에.
  • Google Spreadsheet htps : //에서 ゔぇぺぺrs. 오, ぇ. 코 m / 아 ps-sc 리 pt / 레후 렌세 / sp 레 d t / sp r d
  • Simple Triggers htps : //에서 ゔぇぺぺrs. 오, ぇ. 코 m / 아 ps-sc 리 pt / 구이 s / t ring rs
  • UrlFetchApp htps : //에서 ゔぇぺぺrs. 오, ぇ. 코 m / 아 ps-sc 리 pt / 레후 렌세 / 우 r 루 ぇ tch / u r 루 ぇ t ch - p # 후 t ch (St ring, 오 b ぇ ct)
  • V8 Runtime Overview htps : //에서 ゔぇぺぺrs. 오, ぇ. 이 m / 아 ps-sc 리 pt / 구이로 s / v8 - 룬치메 # v8_s
  • kintone 레코드 얻기 htps : //로 ゔぇぺぺr. cy 흐림. 이오/hc/쟈/아르치 cぇs/202331474
  • kintone 레코드 등록 htps : //에서 ゔぇぺぺr. cy 흐림. 이오/hc/쟈/아르치 cぇs/202166160
  • LINE Messaging API htps : //에서 ゔぇぺぺrs. 네. 비 · 자 / 세 r ゔ ぃ 세 s / 메사 긴 g 아피 /
  • 좋은 웹페이지 즐겨찾기