BotForge

Resources

Troubleshooting

Common integration problems, grounded in real failure modes — not hypothetical ones.

Webhook signature verification keeps failing

Cause

The most common cause is verifying against a parsed/re-serialized body instead of the exact raw request bytes — JSON.stringify(JSON.parse(body)) does not always reproduce the original byte string. A second common cause is comparing signatures with === instead of a timing-safe comparison, or using the wrong endpoint secret (each endpoint has its own).

Fix

Verify against req.text() (the raw body) before any JSON parsing, use crypto.timingSafeEqual, and confirm you're using the secret shown for that specific endpoint. See the Verification section on the Webhooks page.

Getting 429 Too Many Requests

Cause

You've exceeded your plan's per-minute or per-day request limit on the REST API.

Fix

Check the Retry-After header and back off accordingly. If you're consistently hitting the limit, batch reads with pagination (limit=100) instead of one request per record, or upgrade your plan — limits scale with plan tier.

Module submission won't leave DRAFT

Cause

Validation runs automatically before a submission can enter the review queue — the most common failures are a moduleKey that isn't lowercase kebab-case, a description under 50 characters, a workflowTrigger not in entity.event format, or a reserved key prefix (botforge_, official_, platform_, bf_, admin_, system_).

Fix

Check the specific validation error returned by createSubmission()/submitForReview() — it names the failing field. Full rules are on the SDK page's Validation Rules.

"Continue with SSO" doesn't appear on login

Cause

The domain-discovery banner only appears when the email's domain matches a VERIFIED OrganizationDomain whose organization has an ACTIVE IdentityProvider. An unverified domain, or an IdentityProvider left in a non-ACTIVE state, silently suppresses the banner rather than erroring.

Fix

In the Enterprise Identity page, confirm the domain shows VERIFIED and the identity provider shows ACTIVE. Domain verification (DNS TXT record) must complete before SSO discovery activates for that domain.

A channel adapter isn't sending or receiving messages

Cause

Some platforms (Reddit today) are registered but their adapter is a stub — isAdapterReady() returns false and no webhook parsing/outbound sending is implemented yet, regardless of any credentials you provide.

Fix

Check the platform's status on the Channels reference — only platforms marked Live have a working adapter. Coming Soon / Planned platforms have no functional connection yet.

A workflow never fires

Cause

The trigger type doesn't match what's actually emitted — either a typo in a custom module's workflowTriggers declaration, or the workflow is still Disabled.

Fix

Confirm the workflow is enabled, and that its trigger type exactly matches one in the merged trigger list (built-in + your installed modules' declarations) shown in the Workflow Builder's palette — that list is always the authoritative set of what can actually fire.