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 endpoint uses bot_id authentication instead.

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.

This endpoint is authenticated with the bot_id included in the request body. The bot_id must match a registered channel configuration. When a secret is configured, the request must also include valid x-kakao-timestamp and x-kakao-signature headers.

FieldTypeRequiredDescription
bot_idstringYesBot identifier registered in a channel configuration.
user_idstringYesKakaoTalk user ID.
utterancestringYesUser’s message text.

Returns a KakaoTalk simpleText response:

{
"version": "2.0",
"template": {
"outputs": [
{
"simpleText": {
"text": "Search results..."
}
}
]
}
}
StatusDescription
400Invalid JSON body.
403Invalid or missing bot_id, unknown channel configuration, or invalid webhook signature.
429Rate limit exceeded (30 requests per 60 seconds per bot_id).
Terminal window
curl -X POST ${API_BASE_URL:-https://api.example.com}/v1/channels/kakao/webhook \
-H "Content-Type: application/json" \
-d '{
"bot_id": "bot-abc123",
"user_id": "user-xyz789",
"utterance": "법인세 계산 방법"
}'

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.
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"
}
}'

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.