SMSFactor
MessagingConnect AI agents to SMSFactor, a French SMS gateway operated by Commify. Agents send messages and campaigns, react to replies, delivery reports, and opt-outs as they arrive, and manage contact lists, blacklists, and sub-accounts so French-market messaging runs as a closed loop.
What This Integration Enables
SMSFactor is the French gateway operated by Commify France SAS in Lyon, and it is the one connector in this category that closes the loop properly. Most SMS platforms document their callback payloads and then offer a single global slot in a dashboard to point them at, which is why so many of them ship without triggers. SMSFactor exposes a genuine webhook collection instead: creating one returns a durable per-item identifier, the listing is paginated, and each entry carries its own live or paused status and its last delivery code. That structural difference is why this connector has five real triggers that register and remove their own subscriptions, rather than a polling loop pretending to be one.
The second design decision worth the price of admission is the simulation surface. Simulate SMS, Simulate Campaign, and Simulate Campaign To Lists run the same validation, filtering, and pricing path as their sending counterparts with nothing dispatched and no credits consumed, and they are separate actions rather than a flag. A dry run on this platform cannot be turned into a real billed send by a mistyped boolean, because there is no boolean. What comes back is the full filtering breakdown: how many numbers were dropped as blacklisted, duplicated, invalid, NPAI, caught by the anti-flood filter, or outside an allowed country, plus the exact credit cost. That is a campaign you can present to somebody before it exists.
French market rules are enforced by the platform rather than by your copy deck, and a flow should be built knowing where the edges are. Marketing SMS in France is restricted to 08:00 to 20:00 Monday to Saturday and must carry an opt-out mention, which the <-stop-> tag inserts in the country-appropriate wording. Scheduling dates are interpreted in Europe/Paris, not UTC and not the account timezone. An anti-flood filter caps how many messages one number may receive per hour and deducts no credit when it blocks. One response code deserves special mention: status -8 means the campaign was accepted and queued for anti-fraud moderation, and the vendor states the SMS will still be sent. The connector treats it as success on purpose, because raising it as an error would invite a retry, and a retry sends the same campaign twice. Replies require a non-personalized sender and are available only where SMSFactor supports inbound traffic, which the vendor names as France, Belgium, and Switzerland.
Without FlowRunner
With FlowRunner
Use Case Scenarios
A campaign presented before it exists
A French retailer wants a Saturday morning campaign to three saved contact lists. The agent calls Simulate Campaign To Lists, which runs the whole validation and pricing path without dispatching anything. Back comes the real recipient count after de-duplication, the numbers dropped as blacklisted or NPAI, the ones the anti-flood filter would block, the credit cost, and the resulting balance. The agent formats that into a single summary in Slack with the rendered body and the <-stop-> wording that will be appended. Nobody is guessing at reach or spend. When the campaign is approved, Send Campaign To Lists runs the identical path for real, and a status of -8 on the response means it went into anti-fraud moderation and will still send, so the flow records it and does not retry.
Opt-outs mirrored into the systems that need to know
A recipient replies STOP. SMSFactor adds the number to the account blacklist itself, so the suppression is already handled at the gateway. What is not handled is everywhere else. On Opt-Out Received fires with the text, the number, the message identifier the original send carried, and the four contact fields. The agent uses that to close the loop outward: the contact is marked in HubSpot, removed from the segment that will build next month's campaign, and annotated with the campaign that triggered it. Because a reply and an opt-out have identical payload shapes on this vendor, each trigger registers its own callback URL carrying the event type, which is the only reason the two can be told apart at all.
A list that stops costing money for nobody
Operators report dead numbers as NPAI, and a list that accumulates them is a list that bills for messages nobody receives. After each campaign the agent calls Get Campaign NPAI Numbers, then Blacklist Campaign NPAI Numbers so later campaigns stop spending credits on them, and Clear List NPAI Contacts to remove them from the saved list itself. Deduplicate Contact List handles the other quiet cost, since a repeated number is billed separately every time it appears. None of this needs a human, because every step reduces spend and reduces contact. The step that does need one is Delete Contact List, which the agent proposes as an automation exception rather than executing when a cleanup leaves a list empty.
Human-in-Loop Highlight
The gate on SMSFactor is Update Data Retention, and it is the sharpest gate on this connector precisely because it does not send anything. Retention here is a single policy covering six classes of data at once: messages, contact-list inactivity, surveys, campaigns, replies, and HLR lookups, with ceilings of 14 months for most and 26 months for surveys and campaigns. The vendor is explicit that shortening a period deletes older data and cannot be undone. So an agent handed a policy change and asked to apply it is not adjusting a setting. It is issuing a permanent deletion across the account's entire history in one call, and among the things it deletes are the replies and the opt-out records that constitute the evidence a customer asked you to stop.
The agent's blind spot makes this worse in a way worth stating out loud. SMSFactor documents that campaigns created on its web platform use a separate internal API and cannot be retrieved, which means List Campaigns cannot enumerate everything a retention change will destroy. The agent can count what it can see and it cannot count the rest. So it reads Get Data Retention for the current policy, List Campaigns and List Messages against the proposed cutoff to size the visible loss, Get Campaign Opt-Outs across the affected window to count the consent records in scope, and then it states the limit of its own view. What it posts is a question with the arithmetic and the gap both on the table: "Retention change requested from 14m to 6m on messages and replies. Visible impact: 214 campaigns, roughly 1.1M message records, and 3,847 opt-out records older than the new cutoff would be permanently deleted. Campaigns created on the SMSFactor web platform are not visible to the API, so the real total is higher than this. Apply, or export first?" A person answers that in the Flow conversation, and the answer is what runs Update Data Retention.
That is the shape human-in-the-loop takes under Orchestration as a Service. The judgment is not whether the policy is correct, which somebody in legal already settled. It is whether this account is ready to lose the records that prove it complied, and whether an export should come first. Three neighboring actions belong behind the same treatment for their own reasons. Create Account creates a real billable account, which is a procurement event dressed as an API call. Delete API Token revokes a credential whose value SMSFactor showed exactly once and will never show again, so anything still holding it stops working and cannot be restored from the platform. Register Sender submits a name for manual operator registration in a country, a process that moves through in-progress, filed, and validated over days and can come back rejected.
Agent Capabilities
68 actionsSending
7- Send SMS Sends one message to one recipient. Returns the campaign ticket, credit cost, resulting balance, and a breakdown of numbers filtered as blacklisted, duplicated, invalid, NPAI, anti-flood, or outside an allowed country.
- Simulate SMS Runs the same validation, filtering, and pricing path as Send SMS with nothing dispatched and no credits consumed. A separate action rather than a flag, so a rehearsal cannot become a billed send.
- Send Campaign Sends one message to an explicit list of recipients, each optionally carrying its own message identifier for delivery-report matching. Supports Unicode mode and tracked short links.
- Simulate Campaign The dry run of Send Campaign. A simulated campaign is not created and never appears in the campaign history, so it leaves no record to clean up afterwards.
- Send Campaign To Lists Sends one message to every contact of one or more saved lists, substituting the `[info1]` to `[info4]` personalization fields per contact.
- Simulate Campaign To Lists The dry run of Send Campaign To Lists, returning the post-deduplication recipient count and full cost before anyone commits to it.
- Cancel Campaign Cancels a scheduled campaign that has not started sending. The only recall on this platform, and it works only while the campaign is still queued.
Campaign Reporting
6- List Campaigns Returns campaign history with per-campaign cost, delivery rate, and status counters, filterable by date range, size, destination, and message content. Note that campaigns created on the SMSFactor web platform use a separate internal API and do not appear here.
- Get Campaign Returns one campaign with its full delivery breakdown. Status is one of Sent, Waiting, In progress, In moderation, or Denied.
- Get Campaign NPAI Numbers Returns the operator-reported dead numbers from one campaign. The input to a cleanup that stops the account paying for messages nobody receives.
- Get Campaign Replies Returns the inbound replies to one campaign. Useful for reconciliation even when the reply trigger is already running, because it is scoped to a single send.
- Get Campaign Opt-Outs Returns the STOP opt-outs generated by one campaign. These records are the account's evidence of what a recipient asked for and when.
- Blacklist Campaign NPAI Numbers Adds a campaign's NPAI numbers to the account blacklist so later campaigns stop spending credits on them. Purely cost-reducing, which is why an agent can run it unattended.
Messages
2- List Messages Returns individual inbound and outbound messages in a date range, with cost, country, delivery-report date, and status. The date range is mandatory, and results can be filtered by direction, destination, content, country, and delivery status.
- List Replies Returns every inbound reply across the account in a date range, rather than scoped to one campaign.
Contact Lists
9- Create Contact List Creates a list with its contacts, accepting either full contact objects with four information fields or a plain list of phone numbers. Reports how many were stored, invalid, or duplicate.
- Add Contacts To List Appends contacts to an existing list, with the same reporting on stored, invalid, and duplicate entries.
- List Contact Lists Returns the saved lists on the account.
- Get Contact List Returns one list with the per-contact identifiers that Update Contact and Delete Contact take.
- Delete Contact List Deletes a list and its contents. There is no undelete, and any campaign built to address it loses its audience.
- Clear List NPAI Contacts Removes operator-reported dead numbers from a list. Named after its route rather than the vendor's navigation label, because it clears NPAI entries rather than emptying the list.
- Deduplicate Contact List Removes repeated numbers from a list. A repeated number is billed separately on every appearance, so this is a direct cost reduction.
- Update Contact Maintains one contact by its per-contact identifier, including the four information fields that personalization substitutes.
- Delete Contact Removes one contact from a list by its per-contact identifier.
Suppression Lists
5- Get Blacklist Returns the numbers excluded from every future campaign, with their entry identifiers.
- Add To Blacklist Suppresses a number. SMSFactor adds STOP repliers automatically, so this action is for opt-outs collected through your own channels.
- Remove From Blacklist Removes a blacklist entry by its entry identifier, not by the phone number. This restores contactability, which makes it a consent decision rather than data maintenance.
- Get NPAI List Returns the numbers operators have reported as unassigned.
- Add To NPAI List Adds numbers to the NPAI suppression list. SMSFactor documents no route for removing an NPAI entry, so this direction is one way.
SMS Templates
5- Create SMS Template Creates a reusable message model with `<-short->` link placeholders and `<-file->` placeholders bound to uploaded files.
- List SMS Templates Returns the account's templates.
- Get SMS Template Reads one template by identifier. The vendor returns its single object under the plural `templates` key, which is passed through unchanged.
- Update SMS Template Rewrites a template's model, name, or links. Unicode cannot be changed after creation, because the update route accepts only those three fields.
- Delete SMS Template Removes a template. Anything that names it has nothing left to render.
Mail To SMS
2- Get Mail To SMS Configuration Reads the email-to-SMS setup: sender, fixed destinations, IP and email allowlists, and the gateway addresses to send to. The feature is configured on the SMSFactor platform and the API only reads it.
- List Mail To SMS Events Returns the conversion log, including failures with their reason. The place a silently dropped email-to-SMS message becomes visible.
Number Lookup and Files
2- Look Up Numbers Runs an HLR lookup returning network, country, ported and roaming flags, reachability status, and an error code per number. This consumes credits and the response reports the cost and resulting balance, and it delivers no message to the handset.
- Upload File Fetches a file from a URL and uploads it to SMSFactor, returning the file identifier that a template's `<-file->` placeholder binds to.
Account
13- Get Credits Returns the credit balance, the postpaid balance, and, for a sub-account, whether it draws on the parent's credits.
- Get Account Returns the full account profile.
- Create Account Creates a main account or a sub-account. This creates a real billable account, so it is a procurement decision rather than a provisioning convenience.
- List Sub-Accounts Returns sub-accounts with their current and previous month consumption.
- Get Sub-Account Reads one sub-account and its consumption.
- Lock Sub-Account Locks a sub-account, stopping its sends without destroying it. The right lever when spending needs to stop today and the question of what happens next is unresolved.
- Unlock Sub-Account Restores a locked sub-account's ability to send.
- Transfer Credits Moves credits from the parent balance to a sub-account. Real money changes hands between balances, so it belongs in a flow with a spend policy behind it.
- Get Data Retention Reads how long messages, lists, surveys, campaigns, replies, and lookups are kept. Always read this before proposing a change to it.
- Update Data Retention Sets those retention periods. Shortening any of them deletes older data permanently and cannot be undone, across every data class the change touches.
- Get Consumption Metrics Returns SMS volume by country for the account and each sub-account.
- Get Balance Alert Reads the low-credit threshold and the email and SMS channels it notifies.
- Update Balance Alert Sets that threshold. The same value drives the On Balance Alert trigger, so changing it changes when the flow hears about a low balance.
Invoices
3- List Invoices Returns invoices with amounts, VAT, currency, payment status, and line items.
- Get Invoice Reads one invoice in full.
- Download Invoice Returns whatever the download route returns. The vendor publishes no response body for it, so the response is passed through unchanged rather than reshaped into a structure that was never specified.
API Tokens
5- Create API Token Creates a token, optionally with a time to live and an IP allowlist covering IPv4, IPv6, and CIDR. SMSFactor shows the token value once only.
- Create Sub-Account API Token Creates a token scoped to a sub-account, with the same one-time value disclosure.
- List API Tokens Returns token metadata. The values themselves are never returned by the API.
- Get API Token Reads one token's metadata, including its allowlist and expiry.
- Delete API Token Revokes a token. Anything still holding the value stops working immediately, and the value cannot be recovered from the platform.
Senders
3- Register Sender Submits a sender name for operator registration in a country. Registration is manual and moves through in-progress, filed with the operator, and validated, and it can come back rejected or canceled.
- List Senders Returns sender registrations and their status.
- Get Sender Reads one registration and its current state.
Webhooks
6- Create Webhook Registers a webhook subscription directly, for an endpoint consumed outside FlowRunner. The triggers on this connector manage their own subscriptions and do not need this.
- List Webhooks Returns the account's webhook subscriptions with their live or paused status and last delivery code, paginated up to 1000 entries.
- Get Webhook Reads one subscription.
- Update Webhook Changes an existing subscription's endpoint or event type.
- Set Webhook Status Pauses or resumes a subscription without deleting it. The right move when a downstream listener is being redeployed.
- Delete Webhook Removes a subscription entirely.
Triggers
5 triggersEvent Triggers
5- On Reply Received Fires when a recipient replies to a message sent from the account. The event carries the reply text, the originating number, the identifier passed as Your Message ID on the original send, and the four contact information fields when the recipient came from a contact list. Replies require a non-personalized sender and are available only where SMSFactor supports inbound traffic, which the vendor names as France, Belgium, and Switzerland. Optional filters restrict it to one sender number or to replies containing a given text.
- On Delivery Report Fires when an operator delivery report arrives. The event carries the numeric status and its label, the destination number, the message identifier, the campaign, the recipient's country code, and the report date. The documented statuses run from NOT_SENT through DELIVERED to EXPIRED. Optional filters restrict it to one status, one campaign, or one country.
- On Opt-Out Received Fires when a recipient replies STOP. SMSFactor blacklists the number itself, so this trigger exists to mirror the opt-out into your own systems rather than to enforce it. Its payload is identical in shape to a reply, which is exactly why each trigger registers its own callback URL carrying the event type.
- On Short Link Clicked Fires when a recipient opens a tracked short link, carrying the campaign, the original and shortened URLs, the running click count, the four contact information fields, and the brand, model, and operating system of the device. Only campaigns sent with the Links parameter produce these events.
- On Balance Alert Fires when the account's credit balance falls to the threshold set by Update Balance Alert. Use it to top up or pause campaigns before a send starts failing for want of credits, rather than after.
Frequently Asked Questions
What can FlowRunner do with SMSFactor?
FlowRunner agents can run Send SMS, Simulate SMS, and Send Campaign in SMSFactor, plus 65 more actions.
Does connecting SMSFactor to FlowRunner require OAuth?
No. SMSFactor connects to FlowRunner with an API key, no OAuth flow required.
Can SMSFactor trigger a FlowRunner workflow automatically?
Yes. SMSFactor supports 5 triggers that can start a FlowRunner workflow automatically.
Start building with SMSFactor
$100 in credits. No card required. Connect in minutes.