Channels
Connect, pause, update, the web widget, WhatsApp templates and Telegram bot settings
All of these need CHANNELS_MANAGE. See Channels.
channelTelegramBotSettings
ScopeCHANNELS_MANAGE
Cached bot settings of a Telegram channel (null if never synced). Unknown, foreign and non-Telegram channel ids are the same NotFound.
Arguments
integrationIdString!RequiredReturns
nameString!descriptionString!shortDescriptionString!commands[TelegramBotCommand!]!menuButtonTelegramMenuButton!syncedAtString!query {
channelTelegramBotSettings(integrationId: "…") { name description shortDescription commands menuButton }
}channels
ScopeCHANNELS_MANAGE
List the calling organisation's messaging channels with their status.
Arguments
providerIntegrationProviderReturns
createdAtDateTime!updatedAtDateTime!_idString!categoryIntegrationCategory!providerIntegrationProvidernameStringaiAutoReplyIntegrationAiAutoReplystatusIntegrationStatus!errorIntegrationErrororganisationIdString!lastTestedAtDateTimedisconnectedAtDateTimecommentWebhookStatusCommentWebhookStatusquery {
channels(provider: OPENAI) { createdAt updatedAt _id category provider }
}connectInstagramChannel
ScopeCHANNELS_MANAGE
Connect an Instagram account using an Instagram User Access Token already obtained via Meta Business Login.
Arguments
accessTokenString!RequiredReturns
createdAtDateTime!updatedAtDateTime!_idString!categoryIntegrationCategory!providerIntegrationProvidernameStringaiAutoReplyIntegrationAiAutoReplystatusIntegrationStatus!errorIntegrationErrororganisationIdString!lastTestedAtDateTimedisconnectedAtDateTimecommentWebhookStatusCommentWebhookStatusmutation {
connectInstagramChannel(accessToken: "…") { createdAt updatedAt _id category provider }
}connectTelegramChannel
ScopeCHANNELS_MANAGE
Connect a Telegram bot (BotFather token) to the calling organisation.
Arguments
botTokenString!RequiredReturns
createdAtDateTime!updatedAtDateTime!_idString!categoryIntegrationCategory!providerIntegrationProvidernameStringaiAutoReplyIntegrationAiAutoReplystatusIntegrationStatus!errorIntegrationErrororganisationIdString!lastTestedAtDateTimedisconnectedAtDateTimecommentWebhookStatusCommentWebhookStatusmutation {
connectTelegramChannel(botToken: "…") { createdAt updatedAt _id category provider }
}connectViberChannel
ScopeCHANNELS_MANAGE
Connect a Viber bot (Admin Panel auth token) to the calling organisation.
Arguments
authTokenString!RequiredReturns
createdAtDateTime!updatedAtDateTime!_idString!categoryIntegrationCategory!providerIntegrationProvidernameStringaiAutoReplyIntegrationAiAutoReplystatusIntegrationStatus!errorIntegrationErrororganisationIdString!lastTestedAtDateTimedisconnectedAtDateTimecommentWebhookStatusCommentWebhookStatusmutation {
connectViberChannel(authToken: "…") { createdAt updatedAt _id category provider }
}connectWhatsAppChannel
ScopeCHANNELS_MANAGE
Connect a WhatsApp number using credentials already obtained via Meta embedded signup (access token + WABA id + phone number id). Does not run the Meta OAuth flow.
Arguments
ConnectWhatsAppChannelInput
accessTokenString!RequiredwabaIdString!RequiredphoneNumberIdString!RequiredtokenExpiresInIntReturns
createdAtDateTime!updatedAtDateTime!_idString!categoryIntegrationCategory!providerIntegrationProvidernameStringaiAutoReplyIntegrationAiAutoReplystatusIntegrationStatus!errorIntegrationErrororganisationIdString!lastTestedAtDateTimedisconnectedAtDateTimecommentWebhookStatusCommentWebhookStatusmutation {
connectWhatsAppChannel(input: { … }) { createdAt updatedAt _id category provider }
}createWebIntegration
ScopeCHANNELS_MANAGE
Create the web messenger integration for the current organisation. Returns the integration row plus the plaintext sharedSecret - the ONLY response that surfaces the secret. Copy it into your backend now; subsequent queries won't expose it.
Arguments
CreateWebIntegrationInput
nameString!RequiredallowedOrigins[String!]!RequiredaiAutoReplyAssistantIdIDaiAutoReplyRules[AiAutoReplyRuleInput!]Returns
mutation {
createWebIntegration(input: { … }) { integration sharedSecret }
}createWhatsAppTemplate
ScopeCHANNELS_MANAGE
Create a new WhatsApp template and submit to Meta for approval. API keys have a per-organisation daily create cap (default 20).
Arguments
CreateWhatsAppTemplateInput
integrationIdString!RequirednameString!RequireddisplayNameStringlanguageString!RequiredReturns
successBoolean!templateWhatsAppTemplateerrorStringexternalTemplateIdStringmutation {
createWhatsAppTemplate(input: { … }) { success template error externalTemplateId }
}deleteChannelTelegramBotCommands
ScopeCHANNELS_MANAGE
Delete all Telegram bot commands. Unknown, foreign and non-Telegram channel ids are the same NotFound.
Arguments
integrationIdString!RequiredReturns
nameString!descriptionString!shortDescriptionString!commands[TelegramBotCommand!]!menuButtonTelegramMenuButton!syncedAtString!mutation {
deleteChannelTelegramBotCommands(integrationId: "…") { name description shortDescription commands menuButton }
}deleteWebIntegration
ScopeCHANNELS_MANAGE
Hard-delete the integration. Active visitor sessions become orphans and clean up via existing People retention sweeps. Visitor-facing endpoints start returning 503 immediately.
Arguments
idID!RequiredReturns
Boolean!mutation {
deleteWebIntegration(id: "…")
}deleteWhatsAppTemplate
ScopeCHANNELS_MANAGE
Delete a WhatsApp template. On Meta this deletes ALL language variants of the template name (other local language rows drop on the next sync), and Meta blocks reusing the name for several weeks.
Arguments
idString!RequiredReturns
mutation {
deleteWhatsAppTemplate(id: "…") { success error }
}disconnectChannel
ScopeCHANNELS_MANAGE
Disconnect a messaging channel of the calling organisation (stops the bot, reconciles chats/conversations). Unknown / foreign ids are NotFound.
Arguments
integrationIdString!RequireddeletePeopleBooleanfalse.Returns
integrationIdString!organisationIdString!dryRunBoolean!deletedPeopleInt!deletedPeopleFieldValuesInt!deletedChatsInt!deletedMessagesInt!deletedMessageReactionsInt!deletedMediaInt!deletedCollectionsInt!deletedTemplatesInt!updatedFlowsInt!errors[String!]!mutation {
disconnectChannel(integrationId: "…", deletePeople: false) { integrationId organisationId dryRun deletedPeople deletedPeopleFieldValues }
}partnerChannelConnectUrl
ScopeCHANNELS_MANAGE
Start a hosted WhatsApp/Instagram connect for one of the partner's MANAGED client orgs. Returns the Meta OAuth URL to send the customer to; after consent the browser is 302ed to `returnUrl` with ?status=connected|error&provider=..&reason=..
Arguments
Returns
String!mutation {
partnerChannelConnectUrl(childOrganisationId: "…", channel: WHATSAPP, returnUrl: "…")
}pauseChannel
ScopeCHANNELS_MANAGE
Pause a messaging channel of the calling organisation (stops inbound processing). Unknown / foreign ids are NotFound.
Arguments
integrationIdString!RequiredReturns
createdAtDateTime!updatedAtDateTime!_idString!categoryIntegrationCategory!providerIntegrationProvidernameStringaiAutoReplyIntegrationAiAutoReplystatusIntegrationStatus!errorIntegrationErrororganisationIdString!lastTestedAtDateTimedisconnectedAtDateTimecommentWebhookStatusCommentWebhookStatusmutation {
pauseChannel(integrationId: "…") { createdAt updatedAt _id category provider }
}resumeChannel
ScopeCHANNELS_MANAGE
Resume a paused messaging channel of the calling organisation. Unknown / foreign ids are NotFound.
Arguments
integrationIdString!RequiredReturns
createdAtDateTime!updatedAtDateTime!_idString!categoryIntegrationCategory!providerIntegrationProvidernameStringaiAutoReplyIntegrationAiAutoReplystatusIntegrationStatus!errorIntegrationErrororganisationIdString!lastTestedAtDateTimedisconnectedAtDateTimecommentWebhookStatusCommentWebhookStatusmutation {
resumeChannel(integrationId: "…") { createdAt updatedAt _id category provider }
}rotateWebIntegrationSecret
ScopeCHANNELS_MANAGE
Mint a new sharedSecret for the integration. The old secret stops verifying user_hash IMMEDIATELY - stage the new secret in your backend BEFORE calling this mutation if you need zero-downtime rotation. Returns the plaintext exactly once.
Arguments
idID!RequiredReturns
mutation {
rotateWebIntegrationSecret(id: "…") { integration sharedSecret }
}setChannelTelegramBotCommands
ScopeCHANNELS_MANAGE
Replace the Telegram bot command list (max 100). Unknown, foreign and non-Telegram channel ids are the same NotFound.
Arguments
SetTelegramBotCommandsInput
integrationIdString!RequiredReturns
nameString!descriptionString!shortDescriptionString!commands[TelegramBotCommand!]!menuButtonTelegramMenuButton!syncedAtString!mutation {
setChannelTelegramBotCommands(input: { … }) { name description shortDescription commands menuButton }
}setChannelTelegramBotDescription
ScopeCHANNELS_MANAGE
Set the Telegram bot description (up to 512 chars; empty clears). Unknown, foreign and non-Telegram channel ids are the same NotFound.
Arguments
SetTelegramBotDescriptionInput
integrationIdString!RequireddescriptionString!RequiredReturns
nameString!descriptionString!shortDescriptionString!commands[TelegramBotCommand!]!menuButtonTelegramMenuButton!syncedAtString!mutation {
setChannelTelegramBotDescription(input: { … }) { name description shortDescription commands menuButton }
}setChannelTelegramBotName
ScopeCHANNELS_MANAGE
Set the Telegram bot display name (up to 64 chars; empty resets). Unknown, foreign and non-Telegram channel ids are the same NotFound.
Arguments
SetTelegramBotNameInput
integrationIdString!RequirednameString!RequiredReturns
nameString!descriptionString!shortDescriptionString!commands[TelegramBotCommand!]!menuButtonTelegramMenuButton!syncedAtString!mutation {
setChannelTelegramBotName(input: { … }) { name description shortDescription commands menuButton }
}setChannelTelegramBotShortDescription
ScopeCHANNELS_MANAGE
Set the Telegram bot short description (up to 120 chars; empty clears). Unknown, foreign and non-Telegram channel ids are the same NotFound.
Arguments
SetTelegramBotShortDescriptionInput
integrationIdString!RequiredshortDescriptionString!RequiredReturns
nameString!descriptionString!shortDescriptionString!commands[TelegramBotCommand!]!menuButtonTelegramMenuButton!syncedAtString!mutation {
setChannelTelegramBotShortDescription(input: { … }) { name description shortDescription commands menuButton }
}setChannelTelegramMenuButton
ScopeCHANNELS_MANAGE
Set the Telegram chat menu button (DEFAULT, COMMANDS, or WEB_APP with text + HTTPS URL). Unknown, foreign and non-Telegram channel ids are the same NotFound.
Arguments
SetTelegramMenuButtonInput
integrationIdString!RequiredReturns
nameString!descriptionString!shortDescriptionString!commands[TelegramBotCommand!]!menuButtonTelegramMenuButton!syncedAtString!mutation {
setChannelTelegramMenuButton(input: { … }) { name description shortDescription commands menuButton }
}syncChannelTelegramBotSettings
ScopeCHANNELS_MANAGE
Pull all bot settings of a Telegram channel from Telegram and cache them. Unknown, foreign and non-Telegram channel ids are the same NotFound.
Arguments
integrationIdString!RequiredReturns
nameString!descriptionString!shortDescriptionString!commands[TelegramBotCommand!]!menuButtonTelegramMenuButton!syncedAtString!mutation {
syncChannelTelegramBotSettings(integrationId: "…") { name description shortDescription commands menuButton }
}syncWhatsAppTemplates
ScopeCHANNELS_MANAGE
Sync templates from Meta for a WhatsApp integration
Arguments
integrationIdString!RequiredReturns
mutation {
syncWhatsAppTemplates(integrationId: "…") { synced created updated deleted errors }
}updateChannel
ScopeCHANNELS_MANAGE
Rename a messaging channel and/or set its AI auto-reply default. Credentials, provider and category cannot be changed here. Unknown / foreign ids are NotFound.
Arguments
integrationIdString!RequiredUpdateChannelInput
nameStringaiAutoReplyIntegrationAiAutoReplyInputReturns
createdAtDateTime!updatedAtDateTime!_idString!categoryIntegrationCategory!providerIntegrationProvidernameStringaiAutoReplyIntegrationAiAutoReplystatusIntegrationStatus!errorIntegrationErrororganisationIdString!lastTestedAtDateTimedisconnectedAtDateTimecommentWebhookStatusCommentWebhookStatusmutation {
updateChannel(integrationId: "…", input: { … }) { createdAt updatedAt _id category provider }
}updateWebIntegration
ScopeCHANNELS_MANAGE
Patch operator-mutable fields on the web integration. publicKey is immutable (would break embedded loader snippets); use rotateWebIntegrationSecret to spin a new sharedSecret.
Arguments
idID!RequiredUpdateWebIntegrationInput
nameStringallowedOrigins[String!]defaultLocaleStringsupportedLocales[String!]contentLocaleFallbackBooleanlocaleStrategyWebLocaleStrategysecurityWebSecurityInputgreetingI18nJSONmessengerI18nJSONprechatFormI18nJSONhomeLayoutI18nJSONaiAutoReplyModeAiAutoReplyModeaiAutoReplyAssistantIdIDaiAutoReplyRules[AiAutoReplyRuleInput!]themeWebThemeInputdefaultTabWebDefaultTabhomeLayoutJSONfeaturesWebFeaturesInputtrackingWebTrackingInputprechatFormWebPrechatFormInputdisabledBooleanlogoWebLogoInputoperatorAvatars[WebOperatorAvatarInput!]greetingWebGreetingInputsoundsWebSoundsInputbrandingWebBrandingInputbotProtectionWebBotProtectionInputmessengerWebMessengerConfigInputReturns
_idID!nameString!defaultLocaleString!supportedLocales[String!]!contentLocaleFallbackBoolean!localeStrategyWebLocaleStrategy!securityWebIntegrationSecurity!greetingI18nJSONmessengerI18nJSONprechatFormI18nJSONhomeLayoutI18nJSONpublicKeyString!allowedOrigins[String!]!aiAutoReplyWebIntegrationAiAutoReply!themeWebIntegrationThemeshowLogoInLauncherBooleanoperatorAvatars[WebIntegrationOperatorAvatar!]!greetingWebIntegrationGreetingsoundsWebIntegrationSounds!brandingWebIntegrationBranding!botProtectionWebIntegrationBotProtection!featuresWebIntegrationFeatures!trackingWebIntegrationTracking!mutation {
updateWebIntegration(id: "…", input: { … }) { _id name defaultLocale supportedLocales contentLocaleFallback }
}updateWhatsAppTemplate
ScopeCHANNELS_MANAGE
Update local metadata for a WhatsApp template (variableMappings, defaultMedia)
Arguments
UpdateWhatsAppTemplateInput
templateIdString!Requiredcomponents[UpdateWhatsAppTemplateComponentInput!]Returns
mutation {
updateWhatsAppTemplate(input: { … }) { success error template }
}webIntegration
ScopeCHANNELS_MANAGE
The web messenger integration for the current organisation, or null when none is configured. At most one per org by design.
Returns
_idID!nameString!defaultLocaleString!supportedLocales[String!]!contentLocaleFallbackBoolean!localeStrategyWebLocaleStrategy!securityWebIntegrationSecurity!greetingI18nJSONmessengerI18nJSONprechatFormI18nJSONhomeLayoutI18nJSONpublicKeyString!allowedOrigins[String!]!aiAutoReplyWebIntegrationAiAutoReply!themeWebIntegrationThemeshowLogoInLauncherBooleanoperatorAvatars[WebIntegrationOperatorAvatar!]!greetingWebIntegrationGreetingsoundsWebIntegrationSounds!brandingWebIntegrationBranding!botProtectionWebIntegrationBotProtection!featuresWebIntegrationFeatures!trackingWebIntegrationTracking!query {
webIntegration { _id name defaultLocale supportedLocales contentLocaleFallback }
}webIntegrationById
ScopeCHANNELS_MANAGE
Look up a web integration by _id (scoped to the operator org).
Arguments
idID!RequiredReturns
_idID!nameString!defaultLocaleString!supportedLocales[String!]!contentLocaleFallbackBoolean!localeStrategyWebLocaleStrategy!securityWebIntegrationSecurity!greetingI18nJSONmessengerI18nJSONprechatFormI18nJSONhomeLayoutI18nJSONpublicKeyString!allowedOrigins[String!]!aiAutoReplyWebIntegrationAiAutoReply!themeWebIntegrationThemeshowLogoInLauncherBooleanoperatorAvatars[WebIntegrationOperatorAvatar!]!greetingWebIntegrationGreetingsoundsWebIntegrationSounds!brandingWebIntegrationBranding!botProtectionWebIntegrationBotProtection!featuresWebIntegrationFeatures!trackingWebIntegrationTracking!query {
webIntegrationById(id: "…") { _id name defaultLocale supportedLocales contentLocaleFallback }
}whatsAppTemplate
ScopeCHANNELS_MANAGE
Get a specific WhatsApp template by ID
Arguments
idString!RequiredReturns
_idString!organisationString!integrationString!nameString!displayNameStringlanguageString!categoryWhatsAppTemplateCategory!statusWhatsAppTemplateStatus!components[WhatsAppTemplateComponent!]!externalTemplateIdStringrejectionReasonStringqualityScoreStringvariableCountFloatlastSyncedAtDateTimecreatedAtDateTimeupdatedAtDateTimequery {
whatsAppTemplate(id: "…") { _id organisation integration name displayName }
}whatsAppTemplates
ScopeCHANNELS_MANAGE
Get all WhatsApp templates for the organisation with filtering and pagination
Arguments
WhatsAppTemplateFilterInput
integrationIds[String!]categories[WhatsAppTemplateCategory!]statuses[WhatsAppTemplateStatus!]languages[String!]searchStringskipIntlimitIntsortOrderSortOrderReturns
query {
whatsAppTemplates(filter: { … }) { items totalCount hasNextPage hasPreviousPage }
}