docs/platform/integrations/sms.mdx
The SMS channel delivers messages to your subscribers’ mobile devices through your configured SMS provider integrations.
<Note> **SMS is outbound-only in Novu.** You can send SMS through workflows, but Novu does not receive or route inbound SMS replies. For two-way messaging, use a supported [agent channel](/agents/get-started/agents-and-providers) (Slack, Teams, WhatsApp, Telegram, or email) or handle inbound SMS with your provider's webhooks directly. </Note>Here’s the typical flow for sending an SMS notification through Novu:
<Steps> <Step>Start by adding an SMS provider in the Integration Store on your Novu dashboard. You can connect one or more integrations for the different or the same providers.
To learn how to add an SMS provider, refer to the guide for that provider.
</Step> <Step> ### Add the SMS channel to your workflowNext, include an SMS step in your workflow. This step defines when and how an SMS should be sent as part of your notification workflow. </Step> <Step>
Within the SMS step editor, write the message body. The editor supports dynamic data for personalized content.
</Step> <Step> ### Store subscriber phone numberNovu automatically sends the notification to the phone number stored on the subscriber's profile. You must ensure that this field is set for any subscriber who needs to receive SMS messages. You can store subscribers phone number using the Novu API, or SDK. </Step> <Step>
Trigger the workflow from your application code by sending an event to Novu. Novu automatically:
To add an SMS provider from the Integration Store, you must configure settings and credentials that are specific to that SMS provider.
The From field, which is displayed as the sender of the SMS, is a required default setting for any SMS provider that you connect. You can override this field during trigger if necessary.
You must provide credentials specific to your SMS provider, such as:
Each provider has different requirements.
<Note> Refer to the [supported SMS providers](/platform/integrations/sms#supported-providers) list for detailed setup guides for each provider integration. </Note>You can override the SMS settings when triggerring a notification by passing the overrides object. The overrides object field supports an sms property and from, to, and content field overrides. This lets you send a message to a different recipient, from a different sender, or with a different content.
const novu = new Novu({ secretKey: "<NOVU_SECRET_KEY>", // Required if using EU region // serverURL: "https://eu.api.novu.co", });
await novu.trigger({ workflowId: "workflowId", to: { subscriberId: "subscriberId", }, overrides: { sms: { to: '+123012345678', from: 'Novu Team', content: 'This SMS message is from overrides', }, }, });
</Tab>
<Tab title="Python">
```python
import os
import novu_py
from novu_py import Novu
with Novu(secret_key=os.getenv("NOVU_SECRET_KEY", "")) as novu:
novu.trigger(trigger_event_request_dto=novu_py.TriggerEventRequestDto(
workflow_id="workflowId",
to={"subscriber_id": "subscriberId"},
overrides={
"sms": {
"to": "+123012345678",
"from": "Novu Team",
"content": "This SMS message is from overrides",
},
},
))
novugo "github.com/novuhq/novu-go"
"github.com/novuhq/novu-go/models/components"
)
s := novugo.New(novugo.WithSecurity(os.Getenv("NOVU_SECRET_KEY")))
_, err := s.Trigger(context.Background(), components.TriggerEventRequestDto{ WorkflowID: "workflowId", To: components.CreateToSubscriberPayloadDto(components.SubscriberPayloadDto{ SubscriberID: "subscriberId", }), Overrides: map[string]map[string]any{ "sms": { "to": "+123012345678", "from": "Novu Team", "content": "This SMS message is from overrides", }, }, }, nil)
</Tab>
<Tab title="PHP">
```php
use novu;
use novu\Models\Components;
$sdk = novu\Novu::builder()
->setSecurity('<NOVU_SECRET_KEY>')
->build();
$sdk->trigger(
triggerEventRequestDto: new Components\TriggerEventRequestDto(
workflowId: 'workflowId',
to: new Components\SubscriberPayloadDto(subscriberId: 'subscriberId'),
overrides: [
'sms' => [
'to' => '+123012345678',
'from' => 'Novu Team',
'content' => 'This SMS message is from overrides',
],
],
),
);
var sdk = new NovuSDK(secretKey: "<NOVU_SECRET_KEY>");
await sdk.TriggerAsync(triggerEventRequestDto: new TriggerEventRequestDto() { WorkflowId = "workflowId", To = To.CreateSubscriberPayloadDto(new SubscriberPayloadDto() { SubscriberId = "subscriberId", }), Overrides = new Overrides() { Sms = new Dictionary<string, object>() { { "to", "+123012345678" }, { "from", "Novu Team" }, { "content", "This SMS message is from overrides" }, }, }, });
</Tab>
<Tab title="Java">
```java
import co.novu.Novu;
import co.novu.models.components.*;
import java.util.Map;
Novu novu = Novu.builder()
.secretKey("<NOVU_SECRET_KEY>")
.build();
novu.trigger()
.body(TriggerEventRequestDto.builder()
.workflowId("workflowId")
.to(To2.of(SubscriberPayloadDto.builder()
.subscriberId("subscriberId")
.build()))
.overrides(TriggerEventRequestDtoOverrides.builder()
.sms(Map.of(
"to", "+123012345678",
"from", "Novu Team",
"content", "This SMS message is from overrides"))
.build())
.build())
.call();
By default, Novu uses your primary SMS provider. If you want to bypass this and force a specific, active integration for a trigger, then use the integrationIdentifier.
This is useful if you have multiple active integrations for different purposes. For example, you might have one integration for transactional SMS and one for security SMS. You can find the integrationIdentifier in the Integration Store of the Novu dashboard.
const novu = new Novu({ secretKey: "<NOVU_SECRET_KEY>", // Required if using EU region // serverURL: "https://eu.api.novu.co", });
await novu.trigger({ workflowId: "workflowId", to: { subscriberId: "subscriberId", }, overrides: { sms: { integrationIdentifier: 'infobip-abcdef', }, }, });
</Tab>
<Tab title="Python">
```python
import os
import novu_py
from novu_py import Novu
with Novu(secret_key=os.getenv("NOVU_SECRET_KEY", "")) as novu:
novu.trigger(trigger_event_request_dto=novu_py.TriggerEventRequestDto(
workflow_id="workflowId",
to={"subscriber_id": "subscriberId"},
overrides={
"sms": {
"integrationIdentifier": "infobip-abcdef",
},
},
))
novugo "github.com/novuhq/novu-go"
"github.com/novuhq/novu-go/models/components"
)
s := novugo.New(novugo.WithSecurity(os.Getenv("NOVU_SECRET_KEY")))
_, err := s.Trigger(context.Background(), components.TriggerEventRequestDto{ WorkflowID: "workflowId", To: components.CreateToSubscriberPayloadDto(components.SubscriberPayloadDto{ SubscriberID: "subscriberId", }), Overrides: map[string]map[string]any{ "sms": { "integrationIdentifier": "infobip-abcdef", }, }, }, nil)
</Tab>
<Tab title="PHP">
```php
use novu;
use novu\Models\Components;
$sdk = novu\Novu::builder()
->setSecurity('<NOVU_SECRET_KEY>')
->build();
$sdk->trigger(
triggerEventRequestDto: new Components\TriggerEventRequestDto(
workflowId: 'workflowId',
to: new Components\SubscriberPayloadDto(subscriberId: 'subscriberId'),
overrides: [
'sms' => [
'integrationIdentifier' => 'infobip-abcdef',
],
],
),
);
var sdk = new NovuSDK(secretKey: "<NOVU_SECRET_KEY>");
await sdk.TriggerAsync(triggerEventRequestDto: new TriggerEventRequestDto() { WorkflowId = "workflowId", To = To.CreateSubscriberPayloadDto(new SubscriberPayloadDto() { SubscriberId = "subscriberId", }), Overrides = new Overrides() { Sms = new Dictionary<string, object>() { { "integrationIdentifier", "infobip-abcdef" }, }, }, });
</Tab>
<Tab title="Java">
```java
import co.novu.Novu;
import co.novu.models.components.*;
import java.util.Map;
Novu novu = Novu.builder()
.secretKey("<NOVU_SECRET_KEY>")
.build();
novu.trigger()
.body(TriggerEventRequestDto.builder()
.workflowId("workflowId")
.to(To2.of(SubscriberPayloadDto.builder()
.subscriberId("subscriberId")
.build()))
.overrides(TriggerEventRequestDtoOverrides.builder()
.sms(Map.of("integrationIdentifier", "infobip-abcdef"))
.build())
.build())
.call();
Here are the SMS providers that are currently supported by Novu. Select any provider to see its detailed setup guide.
<Columns cols={2}> <Card title="46elks" href="/platform/integrations/sms/46elks"> Learn how to use the 46elks provider to send SMS notifications using Novu.</Card> <Card title="Africa's Talking" href="/platform/integrations/sms/africas-talking"> Learn how to use the Africa's Talking provider to send SMS notifications using Novu.</Card> <Card title="AWS SNS" href="/platform/integrations/sms/aws-sns"> Learn how to use the AWS SNS provider to send SMS notifications using Novu.</Card> <Card title="Azure SMS" href="/platform/integrations/sms/azure"> Learn how to use the Azure SMS provider to send SMS notifications using Novu.</Card> <Card title="BulkSMS" href="/platform/integrations/sms/bulk-sms"> Learn how to use the BulkSMS provider to send SMS notifications using Novu.</Card> <Card title="Clickatell" href="/platform/integrations/sms/clickatell"> Learn how to use the Clickatell provider to send SMS notifications using Novu.</Card> <Card title="Clicksend" href="/platform/integrations/sms/clicksend"> Learn how to use the Clicksend provider to send SMS notifications using Novu.</Card> <Card title="Firetext" href="/platform/integrations/sms/firetext"> Learn how to use the Firetext provider to send SMS notifications using Novu.</Card> <Card title="Gupshup" href="/platform/integrations/sms/gupshup"> Learn how to use the Gupshup provider to send SMS notifications using Novu.</Card> <Card title="Infobip - SMS" href="/platform/integrations/sms/infobip"> Learn how to use the Infobip - SMS provider to send SMS notifications using Novu.</Card> <Card title="Kannel" href="/platform/integrations/sms/kannel"> Learn how to use the Kannel provider to send SMS notifications using Novu.</Card> <Card title="Kudosity" href="/platform/integrations/sms/kudosity"> Learn how to use the Kudosity provider to send SMS notifications using Novu.</Card> <Card title="MessageBird" href="/platform/integrations/sms/messagebird"> Learn how to use the MessageBird provider to send SMS notifications using Novu.</Card> <Card title="Nexmo" href="/platform/integrations/sms/nexmo"> Learn how to use the Nexmo provider to send SMS notifications using Novu.</Card> <Card title="Plivo" href="/platform/integrations/sms/plivo"> Learn how to use the Plivo provider to send SMS notifications using Novu.</Card> <Card title="Sendchamp" href="/platform/integrations/sms/sendchamp"> Learn how to use the Sendchamp provider to send SMS notifications using Novu.</Card> <Card title="SimpleTexting" href="/platform/integrations/sms/simpletexting"> Learn how to use the SimpleTexting provider to send SMS notifications using Novu.</Card> <Card title="SMS Central" href="/platform/integrations/sms/sms-central"> Learn how to use the SMS Central provider to send SMS notifications using Novu.</Card> <Card title="SMS Webhook" href="/platform/integrations/sms/sms-webhook"> Learn how to send SMS through your own HTTP API using Novu.</Card> <Card title="SMS77" href="/platform/integrations/sms/sms77"> Learn how to use the SMS77 provider to send SMS notifications using Novu.</Card> <Card title="SNS" href="/platform/integrations/sms/sns"> Learn how to use the SNS provider to send SMS notifications using Novu.</Card> <Card title="Telnyx" href="/platform/integrations/sms/telnyx"> Learn how to use the Telnyx provider to send SMS notifications using Novu.</Card> <Card title="Termii" href="/platform/integrations/sms/termii"> Learn how to use the Termii provider to send SMS notifications using Novu.</Card> <Card title="Twilio" href="/platform/integrations/sms/twilio"> Learn how to use the Twilio provider to send SMS notifications using Novu.</Card> </Columns>