티스토리 뷰
학교 프로젝트에서 Go 언어로 API 서버와 hangout chatbot server를 만들고 있다.
여기서 hangout은 일반적인 hangout 이 아니라 G suite 에서 제공하는 hangout 이다.
아직도 뭐가 다른지 잘 모르겠다.
아무튼, chatbot api를 만들어야 하는데, hangout chat 이 slack 같이 major 한 플랫폼이 아니라는게 문제였다.
거기다가 Go 언어로 해야하니깐, 수집할 수 있는 한국어 자료는 정말 하나도 없었다. 이게 최초의
Go언어 + hangout chat API 한글 자료일듯..
아무튼, request body로 들어오는 message를 parsing 을 해야하는데(참고로 gin-gonic을 쓰고있다)
어.. 그런데 무슨 struct 에 parsing 을 해야하지?? 라는 의문이 들었다.
다행히 없지는 않았다.
https://godoc.org/google.golang.org/api/chat/v1
DeprecatedEvent 라는 struct에다가 embedding 을 하면 된다. 처음에 도대체 사용자가 보내는 chat을
embedding 해야하는 struct가 어떤 struct인지 한참 찾아 헤맸다. DeprecatedEvent 라는 struct는
Deprecated 라는 심상치않은 이름이 붙어있어서 처음부터 후보에서 제외하였지만, DeprecatedEevent가
내가 원하는 역할을 하는 그 struct 였다 ㄱㅇㄴ
이름에 Deprecated 붙은거 봤지? 이거 가져다 쓰면 니 챗봇 데이터를 개 박살내줄께
라는 무언의 메세지를 읽고서 믿고 걸렀는데..
안 DeperecatedEvent 도 있지 않을까 해서 찾아봤는데 없다
그런데, DeperecatedEvent의 Field 로 User field가 있는데 이게 메세지 전송자의 json 을 담고있는 것이다.
메세지를 보낼때 분명히 email이 request body에 포함되서 날아가는데 DeprecatedEvent에 embedding 하면
없어지는 것이다.
음.. 보니깐 Email field가 struct에 없다(이래서 Deprecated 인가?)
없으면 직접 추가해주는 방법밖에 없기 때문에
package hangout
import "google.golang.org/api/chat/v1"
type DquizDeprecatedEvent struct {
Action *chat.FormAction `json:"action,omitempty"`
// ConfigCompleteRedirectUrl: The URL the bot should redirect the user
// to after they have completed an
// authorization or configuration flow outside of Hangouts Chat. See
// the
// [Authorizing access to 3p services
// guide](/hangouts/chat/how-tos/auth-3p)
// for more information.
ConfigCompleteRedirectUrl string `json:"configCompleteRedirectUrl,omitempty"`
// EventTime: The timestamp indicating when the event was dispatched.
EventTime string `json:"eventTime,omitempty"`
// Message: The message that triggered the event, if applicable.
Message *chat.Message `json:"message,omitempty"`
// Space: The room or DM in which the event occurred.
Space *chat.Space `json:"space,omitempty"`
// ThreadKey: The bot-defined key for the thread related to the event.
// See the
// thread_key field of the
// `spaces.message.create` request for more information.
ThreadKey string `json:"threadKey,omitempty"`
// Token: A secret value that bots can use to verify if a request is
// from Google. The
// token is randomly generated by Google, remains static, and can be
// obtained
// from the Hangouts Chat API configuration page in the Cloud
// Console.
// Developers can revoke/regenerate it if needed from the same page.
Token string `json:"token,omitempty"`
// Type: The type of the event.
//
// Possible values:
// "UNSPECIFIED" - Default value for the enum. DO NOT USE.
// "MESSAGE" - A message was sent in a room or direct message.
// "ADDED_TO_SPACE" - The bot was added to a room or DM.
// "REMOVED_FROM_SPACE" - The bot was removed from a room or DM.
// "CARD_CLICKED" - The bot's interactive card was clicked.
Type string `json:"type,omitempty"`
// User: The user that triggered the event.
User *DquizUser `json:"user,omitempty"`
// ForceSendFields is a list of field names (e.g. "Action") to
// unconditionally include in API requests. By default, fields with
// empty values are omitted from API requests. However, any non-pointer,
// non-interface field appearing in ForceSendFields will be sent to the
// server regardless of whether the field is empty or not. This may be
// used to include empty fields in Patch requests.
ForceSendFields []string `json:"-"`
// NullFields is a list of field names (e.g. "Action") to include in API
// requests with the JSON null value. By default, fields with empty
// values are omitted from API requests. However, any field with an
// empty value appearing in NullFields will be sent to the server as
// null. It is an error if a field in this list has a non-empty value.
// This may be used to include null fields in Patch requests.
NullFields []string `json:"-"`
}
type DquizUser struct {
DisplayName string `json:"displayName,omitempty"`
DomainId string `json:"domainId,omitempty"`
Name string `json:"name,omitempty"`
Email string `json:"email,omitempty"`
Type string `json:"type,omitempty"`
ForceSendFields []string `json:"-"`
NullFields []string `json:"-"`
}
이렇게 재정의 해주었다.
완료!
- Total
- Today
- Yesterday
- CMake 반복문
- review reminder
- buffer-over-flow
- function pointer overflow
- 14714 review
- react-native
- CMake for문
- get_filename_component
- 복습 어플
- CMAke 파일이름 추출
- 함수포인터 오버라이트
- 14714 복습법
- 복습 계획어플
- CMake probouf
- CMake 강좌
- CMake get_filename_Component
- 14714 공부법 어플리케이션
- aws 프리티어 요금청구
- CMake run protoc
- 14714 공부법
- CMake run proto compiler
- CMake for
- 14714 앱
- 토리파 공부법
- CMake get file name
- 14714 어플리케이션
- 14714 플래너
- aws 청구문의
- CMake 기초
- 14714 어플
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |