agentforce-architectur…
Declared architecture snapshot for one Agentforce agent: planner, topics, actions, flows, Apex, prompt templates, and NGA…
**INTERNAL USE ONLY — invoked by `service-de-headless-channel-configure`.** Insert an Enhanced messaging `MessagingChannel` (plus child `MessagingChannelUsage` as a free side-effect) of any type — WhatsApp, LINE, Apple Business Chat, Facebook, or SMS. Given a `{MESSAGE_TYPE}`
Claude Code
$ npx -y skills add forcedotcom/sf-skills --skill service-de-channel-create --agent claude-code
Codex
$ npx skills add forcedotcom/sf-skills --skill service-de-channel-create -a codex -y
Cursor
$ npx skills add forcedotcom/sf-skills --skill service-de-channel-create -a cursor -y
Gemini CLI
$ npx skills add forcedotcom/sf-skills --skill service-de-channel-create -a gemini-cli -y
GitHub Copilot
$ npx skills add forcedotcom/sf-skills --skill service-de-channel-create -a github-copilot -y
OpenCode
$ npx skills add forcedotcom/sf-skills --skill service-de-channel-create -a opencode -y
Windsurf
$ npx skills add forcedotcom/sf-skills --skill service-de-channel-create -a windsurf -y
name: service-de-channel-create
description: "**INTERNAL USE ONLY — invoked by `service-de-headless-channel-configure`.** Insert an Enhanced messaging `MessagingChannel` (plus child `MessagingChannelUsage` as a free side-effect) of any type — WhatsApp, LINE, Apple Business Chat, Facebook, or SMS. Given a `{MESSAGE_TYPE}` and its inputs, runs the shared preflight → Connect-insert → verify flow, branching only where a type differs. Uses `POST /services/data/v{V}/connect/livemessage/channels` — no Aura session, no shell-stored token. **Invoke `service-de-headless-channel-configure` instead** — it handles insert → route → activate in one flow; replaces the four former per-type creation skills."
metadata:
version: "1.0"
minApiVersion: "67.0"
domains: ["Service"]
cliTools:
- tool: ["curl"]
semver: ">=7.0.0"
- tool: ["jq"]
semver: ">=1.6.0"
- tool: ["sf"]
semver: ">=2.0.0"
relatedSkills:
- "service-de-channel-activate"
- "service-de-channel-routing-configure"
- "service-de-channel-settings-configure"
- "service-de-headless-channel-configure"
- "service-de-waba-integrate"| Reference file | Load when | | --- | --- | | `references/whatsapp.md` | `MESSAGE_TYPE=WhatsApp` — WABA partnership (Stage 2) + SF-side manage-WABA (Stage 3) prereqs, request body, WhatsApp gotchas. | | `references/line.md` | `MESSAGE_TYPE=Line` — optional token verify, `authDetails` body shape, LINE gotchas. | | `references/apple.md` | `MESSAGE_TYPE=AppleBusinessChat` — empty-config body, Apple-precondition errors, Apple gotchas. | | `references/facebook.md` | `MESSAGE_TYPE=Facebook` — browser OAuth → page-selection flow, Facebook gotchas. | | `references/sms.md` | `MESSAGE_TYPE=Text` — phone-number platform key, present-but-unvalidated `smsProvider`, number-provisioning prerequisite (caller's), SMS gotchas. | | `references/connect-insert.md` | Shared authProviderId lookup + Connect POST + response-classification detail (Stage 4). | | `references/worked-examples.md` | End-to-end traces per type (fresh insert, preflight short-circuit, OAuth). |
Given a `{MESSAGE_TYPE}` and its inputs, creates a `MessagingChannel` record with `PlatformType=Enhanced`, `IsActive=false`. The same server-side path (`LiveMessageSetupServiceImpl.addChannel` → `LiveMessageChannelsUtil.findOrCreateCsotMessagingChannel`) also inserts a `MessagingChannelUsage` row (`DeploymentType=Conversation`, `DeploymentStatus=New` on fresh insert — `Disabled` on a channel that was previously activated then deactivated) — we get it for free.
**One primary path for every type: Connect REST API.** `POST /services/data/v{V}/connect/livemessage/channels` with an org OAuth session managed by `sf api request rest`. Public, sanctioned, live since API v66+. No Aura session, no token extracted into shell state.
**Idempotent** on `(MessagingPlatformKey, MessageType)` — re-firing with the same platform key returns the existing channel's id. This matters because `MessagingChannel` records are not deletable via standard means, so the preflight (Stage 1) is the practical idempotency guard.
All types return the **same envelope shape**, so callers don't branch on type after insert: `{ok, channelId, mcuId, developerName, isActive:false, messageType, messagingPlatformKey, path, created, durationMs}`.
| `{MESSAGE_TYPE}` | Platform key (`messagingPlatformKey`) | Prerequisite (caller supplies) | Body extras | Ref | | --- | --- | --- | --- | --- | | `WhatsApp` | Phone Number ID | `service-de-waba-integrate` (run in Stage 2-3) | `externalAccountId`, `isoCountryCode` | `whatsapp.md` | | `Line` | LINE channel id | LINE id + secret + token (LINE Developers Console) | `authDetails.{client_secret,access_token}` | `line.md` | | `AppleBusinessChat` | Apple BC Account ID (GUID) | Apple BC Account ID (register.apple.com/business-chat) | *(none — empty config)* | `apple.md` | | `Facebook` | Facebook Page ID | *OAuth handled internally* | `authDetails: {}` (OAuth-derived) | `facebook.md` | | `Text` | Phone number / short code | number already provisioned (caller supplies) | `smsProvider` (key required, value may be `""`), `isoCountryCode` | `sms.md` |
Unsupported (would need their own leaf logic, not yet built): `WeChat`, `MsCopilot`, `Alexa`. For these, emit the `unsupported-type` envelope (Stage 0).
`service-de-headless-channel-configure` — it orchestrates this skill plus routing, consent, and activation. This skill only handles the insertion step (see Stage 0).
call `service-de-channel-routing-configure` / `service-de-channel-activate` with the existing `channelId`.
Case-sensitive (matches the SF picklist). `Text` is the enum value for SMS — there is no `SMS` type.
(`sf org display --json | jq -r '.result.apiVersion'`). Always use the org's native version to avoid 404s.
`AppleBusinessChat` (no phone/screen-name fallback); prompted if omitted for others.
Type-specific inputs:
key — **must differ from WABA_ID**), `{ISO_COUNTRY_CODE}` (optional, default `US`).
`{VERIFY_TOKEN_FIRST}` (optional, default `true`).
This repository provides Salesforce agent skills, plugins, and sample apps for building applications.
Declared architecture snapshot for one Agentforce agent: planner, topics, actions, flows, Apex, prompt templates, and NGA…
Use this skill to Upgrade Einstein Bots into Agentforce agents end-to-end in a single pass, orchestrating per-bot Agent Spec…
Data Cloud 360° view of a single Agentforce session. TRIGGER when user asks to trace, inspect, summarize, or describe a specific…
Build, modify, audit, repair, optimize, debug, and deploy agents with Agentforce Agent Script. TRIGGER when: user creates,…
Analyze production Agentforce agent behavior using session traces and Data Cloud, and manage Agent Health Monitoring (AHM)…
Use to design an AI agent persona — identity, voice, tone, behavioral style, guardrails — and encode it into Agent Script (.agent…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.