Skip to content

Channels

Show:

The Channels API lets you connect Schift to messaging platforms such as KakaoTalk. You can receive user messages via webhook, run RAG queries against a bucket, and send notifications back to users.

Note: All endpoints that mutate or list channel configurations require API key authentication via Authorization: Bearer $SCHIFT_API_KEY. The Kakao webhook instead matches the top-level bot.id to a channel configuration and checks the static x-api-key header against that configuration’s secret.

Receive a user message from KakaoTalk via a Kakao i Open Builder skill callback. This endpoint performs RAG: it embeds the user’s message, searches the bucket linked to the channel configuration, and returns the results in KakaoTalk simpleText format.

Set up the webhook with the same static value in Schift and Kakao Open Builder:

  1. Register the Kakao channel configuration with the Open Builder bot ID in bot_id and a private random value in secret.
  2. In Kakao Open Builder, open the skill and add an x-api-key header whose value exactly matches secret.
  3. After you add or change this header, deploy the bot again. Saving the skill alone does not apply the header to live requests.
HeaderDescription
x-api-keyStatic secret configured on the Open Builder skill. It must exactly match the channel configuration’s secret.

A missing header, an unconfigured secret, or a mismatched value returns 403 Invalid webhook API key.

FieldTypeRequiredDescription
bot.idstringYesTop-level Open Builder bot identifier registered as bot_id in the channel configuration.
userRequest.user.idstringYesKakaoTalk user identifier scoped to the bot.
userRequest.utterancestringYesUser’s message text.
intentobjectNoMatched Open Builder block information.
actionobjectNoSkill action and extracted parameters.

Returns a KakaoTalk simpleText response:

{
"version": "2.0",
"template": {
"outputs": [
{
"simpleText": {
"text": "Search results..."
}
}
]
}
}
StatusDescription
400Invalid JSON body.
403Missing or unknown bot.id, missing channel secret, or missing/mismatched x-api-key.

Rate-limited requests (more than 30 requests per 60 seconds per bot_id) receive a 200 KakaoTalk-format message asking the user to retry later.

Terminal window
curl -X POST https://api.schift.io/v1/channels/kakao/webhook \
-H "Content-Type: application/json" \
-H "x-api-key: $KAKAO_WEBHOOK_SECRET" \
-d '{
"bot": {
"id": "bot-abc123",
"name": "Legal RAG Bot"
},
"userRequest": {
"block": {
"id": "block-abc123",
"name": "법인세 질문"
},
"user": {
"id": "user-xyz789",
"type": "botUserKey"
},
"utterance": "법인세 계산 방법",
"lang": "ko",
"timezone": "Asia/Seoul"
},
"intent": {
"id": "intent-abc123",
"name": "문서 검색"
},
"action": {
"id": "action-abc123",
"name": "Schift 검색",
"params": {}
}
}'

Response:

{
"version": "2.0",
"template": {
"outputs": [
{
"simpleText": {
"text": "1. (score: 0.92)\n법인세는 기업의 순이익에 대해 부과되는 세금입니다.\n\n2. (score: 0.88)\n기본세율은 정상기업 기준 22%입니다."
}
}
]
}
}

Send an alimtalk (KakaoTalk notification) to a user. Requires API key authentication.

FieldTypeRequiredDescription
channel_config_idstringYesChannel configuration ID from POST /v1/channels/configs.
phonestringYesRecipient’s phone number.
template_codestringYesKakao template code from the Kakao Business dashboard.
template_argsobjectNoTemplate variables as key-value strings.
user_idstringNoKakaoTalk user ID (alternative to phone for direct messaging).
messagestringNoFree-form message text when not using a template.
FieldTypeDescription
statusstring"sent" on success.
resultobjectKakao API response details, including message_id and sent_at.
StatusDescription
400Missing template_code or phone.
404Channel configuration not found.
Terminal window
curl -X POST ${API_BASE_URL:-https://api.example.com}/v1/channels/kakao/send \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-d '{
"channel_config_id": "config-abc123",
"phone": "01012345678",
"template_code": "template_001",
"template_args": {
"product_name": "Schift API",
"discount_percent": "20%"
}
}'

Response:

{
"status": "sent",
"result": {
"message_id": "msg-abc123",
"sent_at": 1609459200000
}
}

Register a new channel configuration that stores provider-specific credentials and settings.

FieldTypeRequiredDescription
namestringYesDisplay name for the configuration.
providerstringYesProvider type, such as "kakao", "slack", or "discord".
configobjectYesProvider-specific configuration object.

For Kakao, the config object should contain:

FieldTypeRequiredDescription
rest_api_keystringYesKakao REST API key.
channel_idstringYesKakao channel ID.
admin_keystringNoKakao admin key.
collectionstringYesBucket name used for RAG queries.
bot_idstringYesBot ID used for webhook authentication.
secretstringYesPrivate static value that the Open Builder skill sends in x-api-key. Webhook calls without an exact match are rejected with 403.
FieldTypeDescription
idstringUnique configuration ID.
namestringConfiguration name.
providerstringProvider type.
StatusDescription
400Invalid or missing required fields.
401Missing or invalid API key.
Terminal window
curl -X POST ${API_BASE_URL:-https://api.example.com}/v1/channels/configs \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-d '{
"name": "Legal RAG Bot",
"provider": "kakao",
"config": {
"rest_api_key": "xxxxxxxxxxxxxxxx",
"channel_id": "channel-123",
"bot_id": "bot-abc123",
"collection": "legal-docs",
"secret": "kakao_skill_xxxxxxxxxxxxxxxx"
}
}'

Response:

{
"id": "config-abc123",
"name": "Legal RAG Bot",
"provider": "kakao"
}

Retrieve all channel configurations for your organization. API secrets are masked in the response.

Returns an array of configuration objects:

[
{
"id": "config-abc123",
"name": "Legal RAG Bot",
"provider": "kakao",
"config": {
"rest_api_key": "xxxxxx...xxxx",
"channel_id": "channel-123",
"collection": "legal-docs"
}
}
]
StatusDescription
401Missing or invalid API key.
Terminal window
curl ${API_BASE_URL:-https://api.example.com}/v1/channels/configs \
-H "Authorization: Bearer $SCHIFT_API_KEY"

Remove a channel configuration permanently.

ParameterTypeDescription
config_idstringUnique configuration ID.
FieldTypeDescription
deletedbooleantrue if deletion succeeded.
StatusDescription
401Missing or invalid API key.
404Configuration not found.
Terminal window
curl -X DELETE ${API_BASE_URL:-https://api.example.com}/v1/channels/configs/config-abc123 \
-H "Authorization: Bearer $SCHIFT_API_KEY"

Response:

{
"deleted": true
}

All endpoints in this document are part of the v1 Channels API. There is no v2 version at this time.