[GAS] google 양식의 답변을 바탕으로 ChatWork의 룸 만들기

하고 싶었던 일



제목의 만마입니다.

왜 만들려고 생각했는가



회사에서 ChatWork를 사용하고 있어 점점 룸이 작성되는 것은 좋지만 룸의 명명 규칙 등이 없게 보기 힘들었다.
규칙을 만들면 좋지만 지키지 않는 사람도 나올 것이라고 생각했기 때문에, google 폼으로부터 만들어 주면 제한도 걸릴 것 같다고 생각하지.

흐름



1. google 양식에 만들려는 방의 정보를 입력하고 답변
2.google apps script에서 답변 내용을 바탕으로 chatwork에 룸 작성 요청을 던지기
3.ChatWork에 방이 만들어진다

바로 만들어보자



0. 사전 확인



문서 을 읽으면 룸의 작성에 필수적인 정보는 다음과 같다.
· members_admin_ids (관리자 권한 사용자)
 - 참가 멤버 중 관리자 권한으로 하고 싶은 사용자 계정의 ID. 복수 지정 가능
· name (그룹 채팅 이름)

필수가 아닌 항목은 다음과 같습니다.
・description(채팅 개요)
· icon_preset (그룹 채팅 아이콘 유형)
・link(초대 링크 작성)
 - 초대 링크를 만들지 여부.
· link_code (링크 문자열)
· link_need_acceptance (승인 필요 없음)
・members_member_ids(멤버 권한의 사용자)
・members_readonly_ids(열람만 권한의 사용자)

회사에서는 작성한 룸에의 사용자 추가는 팀 기능을 이용하고 있지만, 준비되어 있지 않았기 때문에 룸 작성 후에 수동으로 팀 추가해 주는 운용을 상정.

우선↓의 4개만으로 실장해 본다
· members_admin_ids (관리자 권한 사용자)
· name (그룹 채팅 이름)
・description(채팅 개요)
· icon_preset (그룹 채팅 아이콘 유형)

1.google 양식 준비



우선 간단한 양식을 작성.
손님의 이름을 입력받는 것과 작성자(담당자)의 이름을 선택해 주는 질문을 작성.


2.google apps script에서 답변 내용을 바탕으로 chatwork에 룸 작성 요청을 던지기



관리자 권한의 사용자 ID가 필요하므로 이름과 ID를 관리하는 스프레드시트를 만듭니다.
양식에서 작성자에게 입력한 사람을 관리자로 만듭니다.


sample.gas
function createChatRoom(e) {
  const formdata = e.response.getItemResponses();
  let companyName;
  let createUser;
  for (let i = 0; i < formdata.length; i++) {
    if (formdata[i].getItem().getTitle() === '顧客名') {
      companyName = formdata[i].getResponse();
    } else if (formdata[i].getItem().getTitle() === '作成者') {
      createUser = formdata[i].getResponse();
    }
  }
  const userCwId = getUserInfo(createUser); //スプレッドシートからフォーム回答者のChatWorkIDを取得する関数を実行
  const token = PropertiesService.getScriptProperties().getProperty('CW_TOKEN')
  const headers = {
    'X-ChatWorkToken': token
  };
  const payload = {
    'description': '概要だよ',
    'icon_preset': 'star',
    'members_admin_ids': `${userCwId}, 複数の場合はカンマ区切りで指定`,
    'name': `【A会社】${companyName}様`
  };
  const options = {
    'headers': headers,
    'method': 'post',
    'payload': payload,
  };

  const url = 'https://api.chatwork.com/v2/rooms';
  const res = UrlFetchApp.fetch(url, options);
  console.log(res.getContentText())
  console.log(res.getResponseCode())
}

function getUserInfo(name) {
  const userInfoSpreadsheet = SpreadsheetApp.openById('ID情報を管理してるスプレッドシートのID');
  const userInfoSheet = userInfoSpreadsheet.getSheets()[0];
  const names = userInfoSheet.getRange(1, 1, userInfoSheet.getLastRow()).getValues().flat();
  const userRowNum = names.indexOf(name) + 1;
  const userCwId = userInfoSheet.getRange('B' + userRowNum).getValue();
  return userCwId;
}


3.ChatWork에 방이 만들어진다



할 수 있었다.


실제로 사용하는지는 놓아두고 일단 움직였기 때문에 좋다.
그리고는 폼의 구성을 어떻게 할까 생각하자.

좋은 웹페이지 즐겨찾기