8 채널톡 API 연동
8.1 API 연동
8.1.1 API 인증키 만들기
8.1.2 Access Key와 Access Secret을 이용한 API 연동
[참고] 새 API의 경우 access token 방식으로 바뀜. 여전히 아래 방식 사용 가능
import requests
import pandas as pd
from datetime import datetime, timedelta
access_key = "xxxxxxx"
access_secret = "xxxxxxx"
# 어제와 오늘의 날짜 구하기
yesterday = datetime.now() - timedelta(days=1)
today = datetime.now()
# API 엔드포인트 및 인증 정보
url = "https://api.channel.io/open/v5/user-chats"
headers = {
"accept": "application/json",
"x-access-key": f"{access_key}",
"x-access-secret": f"{access_secret}"
}
params = {
"state": "opened",
"sortOrder": "desc",
"limit": 100,
"from": int(yesterday.timestamp() * 1000), # 어제 자정부터
"to": int(today.timestamp() * 1000) # 현재까지
}
# API 요청 보내기
response = requests.get(url, headers=headers, params=params)
# 응답 확인
if response.status_code == 200:
chats = response.json().get("messages", [])
#print(chats)
df = pd.DataFrame(chats)
df = df[['personType','plainText', 'updatedAt', 'createdAt']].rename(columns={'plainText': 'text'})
df = df[df['text'].str.strip() != '']
# updatedAt과 createdAt의 timestamp 값을 datetime 형식으로 변환
df['updatedAt'] = pd.to_datetime(df['updatedAt'], unit='ms') + pd.Timedelta(hours=9)
df['createdAt'] = pd.to_datetime(df['createdAt'], unit='ms') + pd.Timedelta(hours=9)
df_sorted = df.loc[df['personType']=="user", ['updatedAt', 'text','personType']].sort_values(by='updatedAt', ascending=False)
df_sorted.loc[:,['updatedAt','text']].dropna().head(10)
else:
print("API 요청에 실패하였습니다.")
8.2 주요 코드 분석
8.2.1 환경 변수 로드 및 인증 정보 설정
import os
from dotenv import load_dotenv
load_dotenv()
channeltalk_access_key = os.getenv('CHANNELTALK_ACCESS_KEY')
channeltalk_access_secret = os.getenv('CHANNELTALK_ACCESS_SECRET')*
- dotenv를 사용해 .env 파일에서 채널톡 API 인증 정보(CHANNELTALK_ACCESS_KEY, CHANNELTALK_ACCESS_SECRET)를 로드한다. 이를 통해 API 요청에 필요한 인증 정보를 설정한다.
8.2.2 날짜 설정
yesterday = datetime.now() - timedelta(days=1)
today = datetime.now()
- yesterday는 어제의 날짜, today는 오늘의 날짜를 나타낸다. 채팅 데이터를 검색할 기간을 설정하는 데 사용된다.
8.2.3 API 요청 파라미터 설정
params = {
"state": params_state,
"sortOrder": params_sort,
"limit": params_limit,
"from": int(yesterday.timestamp() * 1000), # 어제 자정부터
"to": int(today.timestamp() * 1000) # 현재까지
}
API 요청에 사용할 파라미터를 설정합니다.
state: 고객 지원 상태 (opened 또는 closed)
sortOrder: 정렬 순서 (desc 또는 asc)
limit: 요청할 데이터의 수 (최소 20, 최대 500)
from/to: 검색할 기간의 시작과 끝을 Unix timestamp 형식으로 변환한 값입니다.
8.2.4
API 요청 및 응답 처리
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
chats = response.json().get("messages", [])
df = pd.DataFrame(chats)
requests.get()을 사용하여 설정된 URL과 파라미터로 API 요청을 보내고, 성공하면 응답 데이터를 JSON 형식으로 받아서 처리한다.
- 응답 데이터에서 messages 키에 해당하는 데이터를 추출하여 pandas DataFrame으로 변환한다.
8.2.5 데이터 정제 및 변환
df = df[['plainText', 'updatedAt', 'createdAt']].rename(columns={'plainText': 'text'})
df['updatedAt'] = pd.to_datetime(df['updatedAt'], unit='ms') + pd.Timedelta(hours=9)
df['createdAt'] = pd.to_datetime(df['createdAt'], unit='ms') + pd.Timedelta(hours=9)
df_sorted = df.loc[:, ['updatedAt', 'text']].sort_values(by='updatedAt', ascending=sort_status)
API에서 받은 데이터를 plainText, updatedAt, createdAt 컬럼만 추출하고, 이를 적절하게 이름 변경(text)하고 정렬한다.
타임스탬프 값을 datetime 형식으로 변환한 후, 시간대를 고려해 9시간을 더한다. (한국 시간 기준)