https://developers.google.com/chat/api/guides/message-formats/cards?hl=ko
{
"cardsV2": [
{
"cardId": "unique-card-id",
"card": {
"header": {
"title": "Sasha",
"subtitle": "Software Engineer",
"imageUrl":
"https://developers.google.com/chat/images/quickstart-app-avatar.png",
"imageType": "CIRCLE",
"imageAltText": "Avatar for Sasha",
},
"sections": [
{
"header": "Contact Info",
"collapsible": true,
"uncollapsibleWidgetsCount": 1,
"widgets": [
{
"decoratedText": {
"startIcon": {
"knownIcon": "EMAIL",
},
"text": "sasha@example.com",
}
},
{
"decoratedText": {
"startIcon": {
"knownIcon": "PERSON",
},
"text": "<font color=\"#80e27e\">Online</font>",
},
},
{
"decoratedText": {
"startIcon": {
"knownIcon": "PHONE",
},
"text": "+1 (555) 555-1234",
}
},
{
"buttonList": {
"buttons": [
{
"text": "Share",
"onClick": {
"openLink": {
"url": "https://example.com/share",
}
}
},
{
"text": "Edit",
"onClick": {
"action": {
"function": "goToView",
"parameters": [
{
"key": "viewType",
"value": "EDIT",
}
],
}
}
},
],
}
},
],
},
],
},
}
],
}
이런식으로 카드를 만들 수 있다.
버튼은 현재 필요 없어 보이고, playground에서 response가 200이 오면 메뉴 추천을 해주는 방식으로 구현
(사실 onClick.action을 어떻게 추가해야될 지 잘 모르겠음)
슬래쉬(’/’)도 추가하려면 google cloud console에서 api를 추가해서 해야 하는 것으로 보여
cron을 이용해서 스케쥴링 하려고 한다.
cron이 한국 시간인지 확인하기 위해 테스트 해본 결과 한국 시간으로 잘 나오는 것을 확인.
import axios from "axios";
import { CronJob } from "cron";
async function sendTestCard() {
const url =
"https://chat.googleapis.com/v1/spaces/AAAA7b2njxQ/messages?key=AIzaSyDdI0hCZtE6vySjMm-WEfRq3CPzqKqqsHI&token=MswzAG2Rz24qXe0N_NDFhahCZkJBdvZQkoWo-j4Cxyk";
const header = {
"Content-Type": "application/json",
};
const message = {
cardsV2: [
[
{
cardId: "test",
card: {
header: {
title: "오늘 뭐먹지?",
subtitle: "먹을 것을 골라줘라 BOT",
},
},
},
],
],
};
// 카드형 메세지는 text가 아니라 message로 보낸다.
const response = await axios.post(url, message, header);
if (response.status === 200) {
const menu = [
"다옴",
"공복식당",
"두부두루치기",
"한양돈까스",
"명동칼국수",
"오제볶음",
"맥도날드",
"쌀국수",
"중식",
"콩나물국밥",
];
const message = menu[Math.floor(Math.random() * menu.length)];
await axios.post(url, { text: message }, header);
}
}
const job = new CronJob("30 11 * * 1-5", sendTestCard); // 평일 오전 11시 30분
job.start();
// sendTestCard();
console.log("스케쥴러가 시작됐습니다.");
response에 따라서 다시 메세지를 구현하는 것으로 작업했으나 굳이 오늘 뭐먹지? 카드와 메뉴 추천 카드를 분리 시킬 필요는 없어 보여서 수정이 필요함.
menu[Math.floor(Math.random() * menu.length)];
랜덤하게 메뉴를 가져오게 하는 방법은 이렇게 사용
'TIL' 카테고리의 다른 글
supertest시 :id가 500으로 떨어진다면? (0) | 2024.08.19 |
---|---|
mysql typeorm으로 한방에 generate하기 (0) | 2024.08.19 |
E2E cypress 테스트 코드 짜기 (0) | 2024.08.19 |
jest로 로그인 폼 테스트 코드 짜기 (0) | 2024.08.19 |
MAC 터미널에서 MySQL 사용하기 (0) | 2023.01.04 |