본문으로 건너뛰기

함수 (Functions)

서버리스 함수 호출 API입니다. 함수 ID(fn_xxx)는 콘솔에서 함수를 만들면 발급됩니다.

invoke (전체 응답)

함수 실행 결과와 메타데이터를 모두 반환합니다.

typescript
// cb.functions.invoke(functionId, payload?, timeout?)
const response = await cb.functions.invoke('fn_send_email', {
  to: '[email protected]',
  subject: '안녕하세요',
  body: '메일 내용입니다.'
})

console.log(response.success)        // boolean
console.log(response.execution_id)   // 실행 ID
console.log(response.status)         // 'success' | 'error' | 'timeout'
console.log(response.result)         // 함수가 return 한 값 (Record<string, unknown>)
console.log(response.duration)       // 실행 시간 (밀리초)
console.log(response.error)          // 실패 시 에러 메시지 (선택)

call (결과만)

응답에서 result 만 추출하는 경량 래퍼입니다.

typescript
// 타입 지정 가능
interface EmailResult {
  message_id: string
  status: 'sent' | 'failed'
}

const data = await cb.functions.call<EmailResult>('fn_send_email', {
  to: '[email protected]',
  subject: '안녕하세요'
})

console.log(data.message_id, data.status)

타임아웃 설정

세 번째 인자에 초 단위 타임아웃을 전달합니다.

typescript
// 60초 타임아웃
const response = await cb.functions.invoke('fn_long_task', { id: 1 }, 60)

에러 처리

typescript
import { ApiError } from 'connectbase-client'

try {
  const data = await cb.functions.call('fn_xxx', { input: 'test' })
} catch (e) {
  if (e instanceof ApiError) {
    if (e.statusCode === 404) console.error('함수를 찾을 수 없음')
    else if (e.statusCode === 408) console.error('실행 타임아웃')
    else console.error('함수 에러:', e.statusCode, e.message)
  }
}