FlowRunner
PricingContact
Theme
Start Free

BulkGate

Messaging

Connect AI agents to BulkGate, a Czech multichannel messaging platform covering SMS, Viber, RCS, and WhatsApp. Agents send transactional and promotional messages, verify one-time passwords, and manage contacts and blacklists so customer notifications reach every channel from one workflow.

Verified 29 actions API key available
BulkGate website ↗ Platform Documentation ↗ Capability data verified 2026-08-12
An order changes state and the customer is owed a notification
Agent calls Check Blacklist for the recipient on the transactional route, since suppression is per route
Agent assembles the message and attaches a WhatsApp channel object so the cascade tries the rich channel first
Agent calls Send Transactional Message and reads the per-recipient status block rather than treating HTTP 200 as delivery
Agent compares the per-recipient statuses against the recipients submitted and raises the mismatches as exceptions
Agent posts the invalid numbers and the remaining balance from Get Credit Balance into the operations channel
Before any promotional send is pointed at an address book group, a person confirms the group is the audience they meant

What This Integration Enables

The catalog word for BulkGate is "SMS gateway" and it undersells the product. TOPefekt has been running this out of Sumperk since 2012, and the Advanced v2 API this connector is built on treats SMS as the fallback rather than the offering. A single send carries optional WhatsApp, RCS and Viber channel objects, BulkGate tries them in the order they appear, and SMS catches whatever the rich channels could not reach. There is no priority field in the API, so order is the only signal, and this connector always emits the same one: WhatsApp, then RCS, then Viber, then SMS. That matters because BulkGate publishes four overlapping generations of its send API and the older ones are SMS only. An operator who reached a v1 or Simple route would lose the rich channels with no error at all, and the message would simply go out as plain text. This connector builds Advanced v2 and nothing else.

Two behaviors change how you design flows here. First, delivery is reported per recipient inside an HTTP 200: a send in which some numbers were invalid, blacklisted or rejected still resolves successfully, and the response carries a status for each number plus a total.status summary. Reading that block is not optional bookkeeping, it is how you learn what actually happened. Second, the transactional and promotional routes are genuinely separate products with separate rules, and BulkGate prohibits marketing traffic on the transactional route. Around those sit the operational pieces that make a messaging program defensible. A consent record with a timestamp. A suppression list that distinguishes a block you applied from an opt-out the recipient asked for. A one-time password flow with a per-country allow list, and a link shortener that keeps a URL from pushing a message into a second billed part. BulkGate configures delivery reporting through a single global slot in its portal rather than any subscription API, so this connector ships no triggers and the read actions are the polling path.

Without FlowRunner

One channel, take it or leave it Every notification goes out as SMS whether or not the customer reads messages somewhere better
A 200 means delivered A partly rejected batch resolves as success and the rejected numbers are never chased
Consent lives in a spreadsheet Whether someone agreed to marketing is a fact somebody remembers rather than a timestamp anyone can produce

With FlowRunner

The cascade does the choosing WhatsApp, RCS and Viber are tried ahead of SMS, and SMS is the floor rather than the plan
Per-recipient truth is read The status block is parsed, and invalid numbers become named exceptions with an owner
Consent is a dated record Add Contact Consent stamps the moment agreement was given, and Show Contact Consent produces it on demand

Use Case Scenarios

A shipping notice that finds the customer where they already are

An order in Shopify moves to fulfilled. The agent calls Check Blacklist on the transactional route for that number, then calls Send Transactional Message with a WhatsApp channel object carrying the approved template and an RCS object behind it. BulkGate tries WhatsApp, falls back through RCS to SMS, and answers with a per-recipient status. The agent reads that status, writes the resolved channel onto the order, and only escalates the numbers that came back invalid. Over a season this turns a single delivery channel into a preference the customer never had to state.

Consent recorded at the moment it is given

A checkout page offers a marketing opt-in. When the box is ticked, the agent calls Add Contact Consent for that number immediately, which stamps the time of the call and adds the contact to the address book if it is not already there. Later, before a promotional run, the agent calls Show Contact Consent on any number whose status is uncertain and drops the ones that return null. When someone objects, Remove Contact Consent clears the basis for messaging them and Add To Blacklist with an Opt-Out entry type blocks the number outright, with a Source ID that groups the batch. The distinction between a suppression you applied and an opt-out the recipient requested survives into the exported list, which is what makes it evidence rather than a note.

A one-time password flow with the abuse ceiling set in advance

A login flow needs a verification code. The agent calls Send One-Time Password with a Requester Identification that scopes the per-minute quota, a verification limit, a resend limit and a country daily limit list. That last parameter is the interesting one, because setting it also forbids every country not listed, which turns it from a cap into an allow list. When the user types the code, Verify One-Time Password reports a wrong code as verified: false on a successful call rather than as an error, so the flow branches on the field instead of on whether the action threw. A "did not get it" button calls Resend One-Time Password against the same request rather than issuing a fresh one, which would invalidate the code already in the user's hand.

Human-in-Loop Highlight

Send Promotional Message To Groups reaches every contact in one or more address book groups in a single call, bills for all of them, and cannot be recalled. What makes it the gate on this connector is not the blast radius on its own. It is that BulkGate publishes no route that lists address book groups, and no route that lists or searches contacts either, so the group id is free text that nothing in the API can verify. An agent handed the id 4412 cannot ask how many people are in it, what they consented to, or when the group was last edited by a person in the portal. Worse, the one listing route that does exist, Get Subscriber Groups, returns a completely different id space: those are opt-in chat channel audiences, and an id that looks perfectly plausible in the parameter will target an audience the campaign was never meant for. So the agent builds the campaign, runs Get Price List for the destination countries so the cost is on the table, runs Check Blacklist across whatever numbers it does hold, and then stops: "This will send the spring promotion to address book group 4412. I cannot read that group's membership or size through the API, and BulkGate group ids are not the same as the subscription group ids I can list. Confirm 4412 is the correct address book group, or give me a different id." A marketing owner opens the portal, confirms the group, and answers. Ninety seconds of a person's attention, spent on the one fact the connector cannot supply. That is human-in-the-loop working the way it should, targeted at a specific gap rather than draped over the whole workflow as a blanket approval step.

Agent processes routinely
Detects exception requiring judgment
Clear match Continues automatically
Ambiguous Routes to human via preferred channel
Human decides
Agent resumes with decision

Agent Capabilities

29 actions

Messaging

5
  • Send Transactional Message Sends a notification to one or more numbers over the multichannel cascade, with SMS as the guaranteed fallback and optional WhatsApp, RCS and Viber objects tried ahead of it in that order. Reserved by the vendor for notifications only, never marketing. Text is limited to 612 characters, or 268 with Unicode on. The response reports a status per recipient inside an HTTP 200, so a partly rejected send must be read rather than assumed.
  • Send Transactional Message To Admin Sends a notification to one BulkGate notification administrator, addressed by administrator number rather than phone number, so the message follows whoever currently holds that role. The text can carry placeholders that BulkGate fills from the administrator's own record. Used for internal alerting that should survive a change of on call owner without a flow edit.
  • Send Promotional Message Sends a marketing message to a list of numbers over the same cascade. Recipients can be plain numbers or per-recipient records each carrying their own text and variables, and exactly one of the two forms is required. Use this rather than the transactional route for anything promotional, because BulkGate separates the two and prohibits marketing traffic on the transactional path.
  • Send Promotional Message To Groups Sends a marketing message to every contact in one or more BulkGate address book groups, with contact placeholders filled per recipient from the address book's own fields. Group ids come from the portal and there is no API route that lists them, which is exactly why this action belongs behind a human confirmation rather than inside an unattended branch.
  • Send Promotional Message To Admins Sends a marketing message to several notification administrators at once, addressed by administrator number, with placeholders filled from each administrator's record. Used for internal broadcasts to role holders rather than to customers.

One-Time Passwords

3
  • Send One-Time Password Generates a verification code, delivers it over the cascade and returns the request id used to verify it later. BulkGate generates and stores the code itself, so it never enters the flow. Requester Identification is mandatory and scopes the per-minute quota, and setting country daily limits also forbids every country not listed, which makes that parameter an allow list and the main brake on a leaked integration.
  • Verify One-Time Password Checks a code the user typed against the request it belongs to. A wrong code is not an error: the call succeeds and reports verified as false, so branch on the field rather than on whether the action threw. Each call consumes one of the attempts allowed by the verification limit set when the code was sent.
  • Resend One-Time Password Sends the same code again for an existing request over the same cascade. Use this behind a "did not get the code" button rather than issuing a fresh request, which would invalidate the code the user may already be holding. Each call consumes one of the allowed resends.

Account

1
  • Get Credit Balance Returns the wallet balance, its currency and the number of free messages left on the account. This is the cheapest call that proves the application ID and token are valid, which makes it the natural first step in a flow that later sends. Note that credits are a currency in their own right on BulkGate accounts, distinct from a EUR or CZK balance.

Pricing

1
  • Get Price List Returns per-operator pricing for the countries asked about: price and currency, which sender types are available, whether the route supports Unicode and two-way messaging, and any registration fee, delay or monthly charge attached to it. This is how a flow learns before sending that a destination requires sender registration, rather than after the campaign fails. Limited to 20 requests a minute.

Address Book

8
  • Get Contact Looks up one contact by phone number and returns its full record including all ten custom fields. BulkGate publishes no route that lists or searches contacts, so this by-number lookup is the only way to read the address book through the API, which is why contact parameters elsewhere are free text rather than pickers.
  • Add Contact Creates one contact and optionally files it into existing groups, a new group, or both. BulkGate rejects a number already present, so this creates rather than upserts. Contacts added here become reachable by Send Promotional Message To Groups, which is worth remembering before an import widens an audience nobody reviewed.
  • Edit Contact Updates the contact identified by Phone Number with the fields supplied. The identifying number and the Mobile Phone inside the record are separate: changing Mobile Phone renumbers the contact, while Phone Number always says which record to act on. An unknown number is reported rather than created.
  • Import Contacts Adds many contacts in one request, optionally filing them into existing groups or a new one. BulkGate skips records it cannot use and reports how many were imported, so a flow should compare that count against what was sent instead of reading success as "all of them".
  • Remove Contact Deletes a contact by phone number, removing it from every group it belonged to. This deletes the record; it does not record an objection to being contacted. To stop messaging someone while keeping the record, use Add To Blacklist or Remove Contact Consent.
  • Show Contact Consent Returns the timestamp at which a contact gave marketing consent, or null if consent was never given or has been withdrawn. Read this before a promotional send to any number whose status is uncertain, and treat null as a stop rather than as an unknown.
  • Add Contact Consent Records that a contact has given marketing consent, stamped with the time of the call, adding the number to the address book if it is not already there. Call it at the moment the person actually agreed, because the timestamp it writes is what later evidences that consent.
  • Remove Contact Consent Withdraws a contact's marketing consent and clears the stored timestamp, keeping the record and its history while removing the basis for messaging them. Blacklisting the number as well is what stops sends that do not consult the address book.

Blacklist

4
  • Load Blacklist Downloads blacklist entries added within a date range, with the wallet, campaign, source and stated reason for each. Used to mirror the suppression list into another system or to audit who opted out of a campaign. BulkGate limits this route to 20 requests a day and refuses a range longer than 30 days, so treat it as periodic synchronization and never as a per-message check.
  • Check Blacklist Tests numbers against the blacklist and returns true or false for each, keyed by number. Suppression is per route, so a number blocked for promotional traffic may still be reachable transactionally and the Route parameter decides which list is consulted. Batch the numbers rather than looping one call per recipient, because the route is limited to 20 requests a minute.
  • Add To Blacklist Blocks numbers from receiving further messages on a wallet. The entry type records why: a suppression you applied, or an opt-out the recipient asked for, and that distinction survives into the exported list as the evidence of the request. A Source ID groups the numbers so a whole batch can be lifted at once later.
  • Remove From Blacklist Lifts a block, either for one number or for every number sharing a Source ID, and exactly one of the two is required. Removing a block makes the number reachable again, so lifting an opt-out entry undoes something the recipient specifically asked for and should only follow genuine re-established consent.

URL Shortener

3
  • Shorten URL Shortens a URL on one of BulkGate's own short domains so a link fits inside a message without pushing it into a second billed part. Returns the short URL along with the destination it resolved to and that page's title, which doubles as a check that the link works before an audience sees it.
  • Change Short URL Repoints an existing short URL at a new destination while leaving the short link itself unchanged. This takes effect for messages already delivered, so it can rescue a campaign whose landing page broke, and for exactly the same reason it can redirect an audience that trusted the original link.
  • Remove Short URL Deletes a short URL from the account. Links already delivered stop resolving, so removing one that went out in a campaign breaks it for every recipient still holding the message.

Subscriptions

4
  • Get Subscriber Groups Lists the account's subscription groups by id and name. These are opt-in audiences on chat channels such as [Telegram](/integrations/telegram) and they are not address book groups: the ids here address subscription lists, and mixing them with address book group ids targets the wrong audience entirely.
  • Get Subscribers Lists the people subscribed to one subscription group with their names and the channel identification that addresses them. That identification is what the unsubscribe action takes, so this is the route to read before removing anyone and the only way to see who a subscription broadcast will reach.
  • Send Subscription Message Broadcasts a message to everyone in a subscription group, optionally with an image and a button. It reaches the whole group in one call and cannot be undone, so confirm the audience with Get Subscribers first rather than after.
  • Unsubscribe Subscribers Removes subscribers from a subscription group by their channel identification, as returned by Get Subscribers. Used to honor an opt-out on a chat channel. BulkGate refuses batches it considers too large, so remove in reasonable chunks.

Frequently Asked Questions

What can FlowRunner do with BulkGate?

FlowRunner agents can run Send Transactional Message, Send Transactional Message To Admin, and Send Promotional Message in BulkGate, plus 26 more actions.

Does connecting BulkGate to FlowRunner require OAuth?

No. BulkGate connects to FlowRunner with an API key, no OAuth flow required.

Can BulkGate trigger a FlowRunner workflow automatically?

BulkGate doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.

Start building with BulkGate

$100 in credits. No card required. Connect in minutes.