Channel Developers

thumbnail

Function 등록

이 문서는 Channel App SDK와 함께 관리합니다. 최신 패키지와 전체 문서 순서는 SDK README를 먼저 확인하세요. 이 Document의 기준 원문은 GitHub 원문입니다.

Function은 Channel 또는 다른 앱이 앱 서버에 요청하는 typed RPC입니다. 요청의 method가 Function의 전체 이름이고 params가 입력입니다. 앱 고유 Function은 orders.get처럼 standalone으로 등록하고, 표준 Extension Function은 Extension 이름과 relative name으로 전체 이름을 만듭니다.

수신 요청은 다음 JSON-RPC-like envelope를 사용합니다.

JSON
  • method: discovery에 공개된 정확한 전체 Function 이름

  • params: schema로 검증할 입력

  • context: caller, Channel, language, auth/config처럼 호출 surface가 제공하는 문맥

  • systemVersion: Extension 계약 version이 필요한 경우 사용

공개 JSON field는 TypeScript와 Go 모두 camelCase를 사용합니다. context는 raw body 기반 x-signature 검증이 성공한 요청에서만 신뢰하세요.

성공은 result, 예상 가능한 실패는 구조화된 error를 반환합니다.

JSON
JSON

대표 code는 처리할 수 없는 입력 1, bad request 2, not found 3, unauthorized 4, method not found -32601, internal error -32603입니다. type은 programmatic handling에 쓸 수 있게 안정적으로 유지하고, error에 credential이나 고객 데이터를 넣지 마세요. 전체 envelope는 공통 protocol을 기준으로 합니다.

Developer portal에는 Function root를 등록하고 AppStore는 system version이 붙은 route를 호출합니다.

SDK가 route, dispatch, schema validation, error envelope와 extension.core.function.getFunctions discovery를 처리합니다. Raw JSON-RPC router나 수동 discovery 응답을 만들지 마세요. TypeScript는 SignatureGuardrawBody: true, Go는 server.WithSignature로 정확한 request bytes의 HMAC-SHA256 signature를 검증합니다.

TypeScript 앱은 decorator API와 Zod schema를 사용합니다.

@Extension({ name: "command" })이 있는 provider에서 @Func("metadata.getCommands")를 등록하면 전체 이름은 extension.command.metadata.getCommands가 됩니다. Standalone Function provider에는 가짜 @Extension을 붙이지 마세요. 모든 decorated class를 NestJS module의 providers에 추가해야 discovery됩니다.

Go는 builder와 generic handler를 사용합니다.

Go

appsdk.Registerappsdk.MustRegister는 Go struct에서 schema를 만들고, 입력이 Validate() error를 구현하면 자동으로 호출합니다. 명시적인 계약에는 appsdk.InputSchema, appsdk.OutputSchema, proto helper를 사용하세요.

Native Function은 반대 방향으로 앱이 Channel 기능을 호출합니다. App token이나 channel token을 TokenManager에서 얻고 typed proxy/client를 우선 사용하세요. 지원 목록은 고정된 문서 표가 아니라 현재 SDK의 TypeScript NativeFunctionTypeMap과 Go native.Client export가 기준입니다.

다른 앱 또는 자신의 등록된 Function을 AppStore를 통해 호출할 때는 SDK의 app-function client를 사용합니다.

Go

Access token이 있다고 business authorization이 생기는 것은 아닙니다. Target app, 설치 Channel, caller와 요청 대상의 관계를 handler에서 다시 검증하세요. 자세한 내용은 TypeScript Native Function 레퍼런스Go Native Function 레퍼런스를 확인하세요.

표준 Extension은 SDK schema와 Function 이름을 제공하는 전용 helper를 우선 사용합니다. Go에는 extension/config, extension/oauth, extension/calendar, extension/command, extension/widget, extension/customtab, extension/hook, extension/polling, extension/store, extension/messaging, extension/alftask, extension/wms 등이 있습니다. SDK helper가 없는 standalone Function만 generic registration으로 격리하세요.

다음으로 Command 가이드, WAM 가이드, Extension 전체 가이드, 프로덕션 준비 가이드를 확인하세요.