Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/slackbot-skills-methods.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@slack/web-api": minor
---

feat(web-api): add [`admin.slackbot.skills.list`](https://docs.slack.dev/reference/methods/admin.slackbot.skills.list), [`admin.slackbot.skills.publish`](https://docs.slack.dev/reference/methods/admin.slackbot.skills.publish), [`admin.slackbot.skills.setAutoEnabled`](https://docs.slack.dev/reference/methods/admin.slackbot.skills.setAutoEnabled), [`admin.slackbot.skills.unpublish`](https://docs.slack.dev/reference/methods/admin.slackbot.skills.unpublish), [`slackbot.skills.create`](https://docs.slack.dev/reference/methods/slackbot.skills.create), [`slackbot.skills.delete`](https://docs.slack.dev/reference/methods/slackbot.skills.delete), [`slackbot.skills.info`](https://docs.slack.dev/reference/methods/slackbot.skills.info), [`slackbot.skills.library.add`](https://docs.slack.dev/reference/methods/slackbot.skills.library.add), [`slackbot.skills.library.remove`](https://docs.slack.dev/reference/methods/slackbot.skills.library.remove), [`slackbot.skills.list`](https://docs.slack.dev/reference/methods/slackbot.skills.list), and [`slackbot.skills.update`](https://docs.slack.dev/reference/methods/slackbot.skills.update) methods
109 changes: 109 additions & 0 deletions packages/web-api/src/methods.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ import type {
AdminRolesAddAssignmentsArguments,
AdminRolesListAssignmentsArguments,
AdminRolesRemoveAssignmentsArguments,
AdminSlackbotSkillsListArguments,
AdminSlackbotSkillsPublishArguments,
AdminSlackbotSkillsSetAutoEnabledArguments,
AdminSlackbotSkillsUnpublishArguments,
AdminTeamsAdminsListArguments,
AdminTeamsCreateArguments,
AdminTeamsListArguments,
Expand Down Expand Up @@ -234,6 +238,13 @@ import type {
SearchAllArguments,
SearchFilesArguments,
SearchMessagesArguments,
SlackbotSkillsCreateArguments,
SlackbotSkillsDeleteArguments,
SlackbotSkillsInfoArguments,
SlackbotSkillsLibraryAddArguments,
SlackbotSkillsLibraryRemoveArguments,
SlackbotSkillsListArguments,
SlackbotSkillsUpdateArguments,
SlackListsAccessDeleteArguments,
SlackListsAccessSetArguments,
SlackListsCreateArguments,
Expand Down Expand Up @@ -347,6 +358,10 @@ import type {
AdminRolesAddAssignmentsResponse,
AdminRolesListAssignmentsResponse,
AdminRolesRemoveAssignmentsResponse,
AdminSlackbotSkillsListResponse,
AdminSlackbotSkillsPublishResponse,
AdminSlackbotSkillsSetAutoEnabledResponse,
AdminSlackbotSkillsUnpublishResponse,
AdminTeamsAdminsListResponse,
AdminTeamsCreateResponse,
AdminTeamsListResponse,
Expand Down Expand Up @@ -518,6 +533,13 @@ import type {
SearchAllResponse,
SearchFilesResponse,
SearchMessagesResponse,
SlackbotSkillsCreateResponse,
SlackbotSkillsDeleteResponse,
SlackbotSkillsInfoResponse,
SlackbotSkillsLibraryAddResponse,
SlackbotSkillsLibraryRemoveResponse,
SlackbotSkillsListResponse,
SlackbotSkillsUpdateResponse,
SlackListsAccessDeleteResponse,
SlackListsAccessSetResponse,
SlackListsCreateResponse,
Expand Down Expand Up @@ -1118,6 +1140,42 @@ export abstract class Methods extends EventEmitter<WebClientEvent> {
'admin.roles.removeAssignments',
),
},
slackbot: {
skills: {
/**
* @description Lists metadata for Slackbot skills owned by an organization.
* @see {@link https://docs.slack.dev/reference/methods/admin.slackbot.skills.list `admin.slackbot.skills.list` API reference}.
*/
list: bindApiCallWithOptionalArgument<AdminSlackbotSkillsListArguments, AdminSlackbotSkillsListResponse>(
this,
'admin.slackbot.skills.list',
),
/**
* @description Publishes Slackbot skills to an organization's catalog.
* @see {@link https://docs.slack.dev/reference/methods/admin.slackbot.skills.publish `admin.slackbot.skills.publish` API reference}.
*/
publish: bindApiCall<AdminSlackbotSkillsPublishArguments, AdminSlackbotSkillsPublishResponse>(
this,
'admin.slackbot.skills.publish',
),
/**
* @description Sets who a Slackbot skill is automatically turned on for.
* @see {@link https://docs.slack.dev/reference/methods/admin.slackbot.skills.setAutoEnabled `admin.slackbot.skills.setAutoEnabled` API reference}.
*/
setAutoEnabled: bindApiCall<
AdminSlackbotSkillsSetAutoEnabledArguments,
AdminSlackbotSkillsSetAutoEnabledResponse
>(this, 'admin.slackbot.skills.setAutoEnabled'),
/**
* @description Removes Slackbot skills from the org catalog, preserving access, libraries, and deployments.
* @see {@link https://docs.slack.dev/reference/methods/admin.slackbot.skills.unpublish `admin.slackbot.skills.unpublish` API reference}.
*/
unpublish: bindApiCall<AdminSlackbotSkillsUnpublishArguments, AdminSlackbotSkillsUnpublishResponse>(
this,
'admin.slackbot.skills.unpublish',
),
},
},
teams: {
admins: {
/**
Expand Down Expand Up @@ -2350,6 +2408,57 @@ export abstract class Methods extends EventEmitter<WebClientEvent> {
messages: bindApiCall<SearchMessagesArguments, SearchMessagesResponse>(this, 'search.messages'),
};

public readonly slackbot = {
skills: {
/**
* @description Creates a skill from markdown instructions, or turns an existing canvas the caller owns into a skill.
* @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.create `slackbot.skills.create` API reference}.
*/
create: bindApiCall<SlackbotSkillsCreateArguments, SlackbotSkillsCreateResponse>(this, 'slackbot.skills.create'),
/**
* @description Deletes a Slackbot skill and its canvas, and removes it from every library, skill set, and the org catalog.
* @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.delete `slackbot.skills.delete` API reference}.
*/
delete: bindApiCall<SlackbotSkillsDeleteArguments, SlackbotSkillsDeleteResponse>(this, 'slackbot.skills.delete'),
/**
* @description Returns one Slackbot skill, including its instructions.
* @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.info `slackbot.skills.info` API reference}.
*/
info: bindApiCall<SlackbotSkillsInfoArguments, SlackbotSkillsInfoResponse>(this, 'slackbot.skills.info'),
library: {
/**
* @description Turns a skill on in the caller's Slackbot library.
* @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.library.add `slackbot.skills.library.add` API reference}.
*/
add: bindApiCall<SlackbotSkillsLibraryAddArguments, SlackbotSkillsLibraryAddResponse>(
this,
'slackbot.skills.library.add',
),
/**
* @description Turns a skill off in the caller's Slackbot library.
* @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.library.remove `slackbot.skills.library.remove` API reference}.
*/
remove: bindApiCall<SlackbotSkillsLibraryRemoveArguments, SlackbotSkillsLibraryRemoveResponse>(
this,
'slackbot.skills.library.remove',
),
},
/**
* @description Lists Slackbot skills from the caller's point of view. Instructions are not included.
* @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.list `slackbot.skills.list` API reference}.
*/
list: bindApiCallWithOptionalArgument<SlackbotSkillsListArguments, SlackbotSkillsListResponse>(
this,
'slackbot.skills.list',
),
/**
* @description Changes a Slackbot skill's instructions or metadata.
* @see {@link https://docs.slack.dev/reference/methods/slackbot.skills.update `slackbot.skills.update` API reference}.
*/
update: bindApiCall<SlackbotSkillsUpdateArguments, SlackbotSkillsUpdateResponse>(this, 'slackbot.skills.update'),
},
};

public readonly slackLists = {
access: {
/**
Expand Down
69 changes: 69 additions & 0 deletions packages/web-api/src/types/request/admin/slackbot.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import type { OptionalArgument } from '../../helpers';

import type { TokenOverridable } from '../common';

// https://docs.slack.dev/reference/methods/admin.slackbot.skills.list
export type AdminSlackbotSkillsListArguments = OptionalArgument<
TokenOverridable & {
/** @description Filter by org deployment, independently of publication. */
auto_enabled_status?: 'all' | 'disabled' | 'enabled';
/** @description Only return skills in this category. */
category?:
| 'communication'
| 'customer_support'
| 'data_and_analytics'
| 'engineering'
| 'other'
| 'product_management'
| 'productivity'
| 'professional_development'
| 'project_management'
| 'sales'
| 'system'
| 'team_management';
/** @description Only return skills created by these users. Accepts U or W user IDs. */
creator_ids?: string[];
/**
* @description Continuation from the previous page. Keep all filters and sorting unchanged. Pages can be empty
* while a continuation remains; continue until next_cursor is empty. Changes during traversal may move results;
* pagination is not a snapshot.
*/
cursor?: string;
/** @description The maximum number of skills to return. Fewer may be returned even when more remain. */
limit?: number;
/** @description Filter by publication to the org catalog. */
publish_status?: 'all' | 'published' | 'unpublished';
/**
* @description Sort across the inventory. Name uses case-insensitive ordering. Unedited skills use their creation
* date for date_updated sorting.
*/
sort?: 'date_updated' | 'name' | 'usage_count';
/** @description Sort direction; file ID breaks ties. */
sort_dir?: 'asc' | 'desc';
}
>;

// https://docs.slack.dev/reference/methods/admin.slackbot.skills.publish
export interface AdminSlackbotSkillsPublishArguments extends TokenOverridable {
/** @description One to 50 skill IDs. Successful items are not rolled back if other items fail. */
skill_ids: string[];
}

// https://docs.slack.dev/reference/methods/admin.slackbot.skills.setAutoEnabled
export interface AdminSlackbotSkillsSetAutoEnabledArguments extends TokenOverridable {
/** @description Deployment audience. */
permission_type: 'everyone' | 'named_entities' | 'no_one';
/** @description Canvas skill to deploy. */
skill_id: string;
/**
* @description One to 100 user groups for named_entities. Duplicates count toward the input limit and are stored
* once. Omit for other permission types.
*/
usergroup_ids?: string[];
}

// https://docs.slack.dev/reference/methods/admin.slackbot.skills.unpublish
export interface AdminSlackbotSkillsUnpublishArguments extends TokenOverridable {
/** @description One to 50 skill IDs. Successful items are not rolled back if other items fail. */
skill_ids: string[];
}
15 changes: 15 additions & 0 deletions packages/web-api/src/types/request/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,12 @@ export type {
AdminRolesListAssignmentsArguments,
AdminRolesRemoveAssignmentsArguments,
} from './admin/roles';
export type {
AdminSlackbotSkillsListArguments,
AdminSlackbotSkillsPublishArguments,
AdminSlackbotSkillsSetAutoEnabledArguments,
AdminSlackbotSkillsUnpublishArguments,
} from './admin/slackbot';
export type {
AdminTeamsAdminsListArguments,
AdminTeamsCreateArguments,
Expand Down Expand Up @@ -291,6 +297,15 @@ export type {
SearchFilesArguments,
SearchMessagesArguments,
} from './search';
export type {
SlackbotSkillsCreateArguments,
SlackbotSkillsDeleteArguments,
SlackbotSkillsInfoArguments,
SlackbotSkillsLibraryAddArguments,
SlackbotSkillsLibraryRemoveArguments,
SlackbotSkillsListArguments,
SlackbotSkillsUpdateArguments,
} from './slackbot';
export type {
SlackListsAccessDeleteArguments,
SlackListsAccessSetArguments,
Expand Down
131 changes: 131 additions & 0 deletions packages/web-api/src/types/request/slackbot.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
import type { OptionalArgument } from '../helpers';

import type { TokenOverridable } from './common';

// https://docs.slack.dev/reference/methods/slackbot.skills.create
export type SlackbotSkillsCreateArguments = TokenOverridable & {
/** @description One of the skill categories. */
category?:
| 'communication'
| 'customer_support'
| 'data_and_analytics'
| 'engineering'
| 'other'
| 'product_management'
| 'productivity'
| 'professional_development'
| 'project_management'
| 'sales'
| 'system'
| 'team_management';
/** @description When Slackbot should use the skill. Max 400 characters. */
description?: string;
/** @description Human-readable label. Max 255 characters; not unique. */
display_name: string;
/** @description Max 200 characters. May contain `{skill}`, which becomes the skill mention. */
example_prompt?: string;
/**
* @description Apps the skill needs, capped at the caller's MCP server limit. Declaring an app doesn't grant
* access to it.
*/
mcp_servers?: { app_id?: string; server_id?: string; service_type: string }[];
} & (
| {
/** @description Canvas the caller owns to turn into a skill. Send exactly one of `instructions` or `canvas_id`. */
canvas_id: string;
instructions?: never;
}
| {
canvas_id?: never;
/** @description Markdown body of the skill. Send exactly one of `instructions` or `canvas_id`. */
instructions: string;
}
);

// https://docs.slack.dev/reference/methods/slackbot.skills.delete
export interface SlackbotSkillsDeleteArguments extends TokenOverridable {
/** @description Skill to delete. */
skill_id: string;
}

// https://docs.slack.dev/reference/methods/slackbot.skills.info
export interface SlackbotSkillsInfoArguments extends TokenOverridable {
/** @description Skill to fetch: a canvas file ID or a `builtin:` reference. */
skill_id: string;
}

// https://docs.slack.dev/reference/methods/slackbot.skills.library.add
export interface SlackbotSkillsLibraryAddArguments extends TokenOverridable {
/** @description Skill to turn on for the caller. */
skill_id: string;
}

// https://docs.slack.dev/reference/methods/slackbot.skills.library.remove
export interface SlackbotSkillsLibraryRemoveArguments extends TokenOverridable {
/** @description Skill to turn off for the caller. */
skill_id: string;
}

// https://docs.slack.dev/reference/methods/slackbot.skills.list
export type SlackbotSkillsListArguments = OptionalArgument<
TokenOverridable & {
/** @description Only return skills in this category. */
category?:
| 'communication'
| 'customer_support'
| 'data_and_analytics'
| 'engineering'
| 'other'
| 'product_management'
| 'productivity'
| 'professional_development'
| 'project_management'
| 'sales'
| 'system'
| 'team_management';
/**
* @description Paginate through collections of data by setting the `cursor` parameter to a `next_cursor`
* attribute returned by a previous request's `response_metadata`. Must be used with the same `filter` and
* `category`.
*/
cursor?: string;
/**
* @description `library`: skills enabled for the caller, including auto-enabled skills and skills from skill
* sets. `owned`: skills the caller created. `catalog`: the organization's official skills.
*/
filter?: 'catalog' | 'library' | 'owned';
/** @description The maximum number of skills to return. Fewer may be returned even when more remain. */
limit?: number;
}
>;

// https://docs.slack.dev/reference/methods/slackbot.skills.update
export interface SlackbotSkillsUpdateArguments extends TokenOverridable {
/** @description One of the skill categories. Send an empty string to clear. */
category?:
| 'communication'
| 'customer_support'
| 'data_and_analytics'
| 'engineering'
| 'other'
| 'product_management'
| 'productivity'
| 'professional_development'
| 'project_management'
| 'sales'
| 'system'
| 'team_management'
| '';
/** @description When Slackbot should use the skill. Max 400 characters. Send an empty string to clear. */
description?: string;
/** @description Human-readable label. Max 255 characters. */
display_name?: string;
/** @description Max 200 characters. May contain `{skill}`. Send an empty string to clear. */
example_prompt?: string;
/** @description Markdown that replaces the whole document. */
instructions?: string;
/** @description Apps the skill needs. Replaces the whole list; send `[]` to clear. */
mcp_servers?: { app_id?: string; server_id?: string; service_type: string }[];
/** @description Skill to change. */
skill_id: string;
}
Loading
Loading