docs/platform/integrations/sms/twilio.mdx
You can utilize the Twilio API to communicate with your customers using SMS messaging. Let's look at how you can do that:
For more detailed instructions, follow one of their many Tutorials within their docs.
</Step> <Step title="Understand the Key Components"> Irrespective of the language you use, the process requires:To send WhatsApp messages with Twilio integration, prefix the phone number of the subscriber with whatsapp: as shown below:
const novu = new Novu({ secretKey: "<NOVU_SECRET_KEY>" });
await novu.trigger({ workflowId: "workflowId", to: { subscriberId: "subscriberId", phone: "whatsapp:+14155238886", }, payload: {}, overrides: { "providers": { "twilio": { "_passthrough": { "body": { "contentSid": "HXb5b62575e6e4ff6129ad7c8efe1f983e", "contentVariables": "{"1":"12/1","2":"3pm"}" } } } } }, });
</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", "phone": "whatsapp:+14155238886"},
payload={},
overrides={
"providers": {
"twilio": {
"_passthrough": {
"body": {
"contentSid": "HXb5b62575e6e4ff6129ad7c8efe1f983e",
"contentVariables": "{\"1\":\"12/1\",\"2\":\"3pm\"}"
}
}
}
}
},
))
novugo "github.com/novuhq/novu-go"
"github.com/novuhq/novu-go/models/components"
)
s := novugo.New(novugo.WithSecurity(os.Getenv("NOVU_SECRET_KEY")))
res, err := s.Trigger(context.Background(), components.TriggerEventRequestDto{ WorkflowID: "workflowId", To: components.CreateToSubscriberPayloadDto(components.SubscriberPayloadDto{ SubscriberID: "subscriberId", Phone: novugo.String("whatsapp:+14155238886"), }), Payload: map[string]any{}, Overrides: map[string]any{ "providers": { "twilio": { "_passthrough": { "body": { "contentSid": "HXb5b62575e6e4ff6129ad7c8efe1f983e", "contentVariables": "{"1":"12/1","2":"3pm"}" } } } } }, }, 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', phone: 'whatsapp:+14155238886'),
payload: {},
overrides: {
"providers": {
"twilio": {
"_passthrough": {
"body": {
"contentSid": "HXb5b62575e6e4ff6129ad7c8efe1f983e",
"contentVariables": "{\"1\":\"12/1\",\"2\":\"3pm\"}"
}
}
}
}
},
),
);
var sdk = new NovuSDK(secretKey: "<NOVU_SECRET_KEY>");
await sdk.TriggerAsync(triggerEventRequestDto: new TriggerEventRequestDto() { WorkflowId = "workflowId", To = To.CreateSubscriberPayloadDto(new SubscriberPayloadDto() { SubscriberId = "subscriberId", Phone = "whatsapp:+14155238886" }), Payload = {}, Overrides = { "providers": { "twilio": { "_passthrough": { "body": { "contentSid": "HXb5b62575e6e4ff6129ad7c8efe1f983e", "contentVariables": "{"1":"12/1","2":"3pm"}" } } } } }, });
</Tab>
<Tab title="Java">
```java
import co.novu.Novu;
import co.novu.models.components.*;
Novu novu = Novu.builder().secretKey("<NOVU_SECRET_KEY>").build();
novu.trigger()
.body(TriggerEventRequestDto.builder()
.workflowId("workflowId")
.to(To2.of(SubscriberPayloadDto.builder().subscriberId("subscriberId").phone("whatsapp:+14155238886").build()))
.payload({})
.overrides({
"providers": {
"twilio": {
"_passthrough": {
"body": {
"contentSid": "HXb5b62575e6e4ff6129ad7c8efe1f983e",
"contentVariables": "{\"1\":\"12/1\",\"2\":\"3pm\"}"
}
}
}
}
})
.build())
.call();
To send WhatsApp template messages with Twilio integration, you can use the template field in the overrides object.
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", phone: "whatsapp:+14155238886", }, payload: {}, overrides: { providers: { twilio: { "_passthrough": { "body": { "contentSid": "HXb5b62575e6e4ff6129ad7c8efe1f983e", "contentVariables": "{"1":"12/1","2":"3pm"}" } } } } } });
</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", "phone": "whatsapp:+14155238886"},
payload={},
overrides={
"providers": {
"twilio": {
"_passthrough": {
"body": {
"contentSid": "HXb5b62575e6e4ff6129ad7c8efe1f983e",
"contentVariables": "{\"1\":\"12/1\",\"2\":\"3pm\"}"
}
}
}
}
},
))
novugo "github.com/novuhq/novu-go"
"github.com/novuhq/novu-go/models/components"
)
s := novugo.New(novugo.WithSecurity(os.Getenv("NOVU_SECRET_KEY")))
res, err := s.Trigger(context.Background(), components.TriggerEventRequestDto{ WorkflowID: "workflowId", To: components.CreateToSubscriberPayloadDto(components.SubscriberPayloadDto{ SubscriberID: "subscriberId", Phone: novugo.String("whatsapp:+14155238886"), }), Payload: map[string]any{}, Overrides: map[string]any{ "providers": map[string]any{ "twilio": map[string]any{ "_passthrough": map[string]any{ "body": map[string]any{ "contentSid": "HXb5b62575e6e4ff6129ad7c8efe1f983e", "contentVariables": "{"1":"12/1","2":"3pm"}", }, }, }, }, }, }, 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', phone: 'whatsapp:+14155238886'),
payload: [],
overrides: [
'providers' => [
'twilio' => [
'_passthrough' => [
'body' => [
'contentSid' => 'HXb5b62575e6e4ff6129ad7c8efe1f983e',
'contentVariables' => '{"1":"12/1","2":"3pm"}',
],
],
],
],
],
),
);
var sdk = new NovuSDK(secretKey: "<NOVU_SECRET_KEY>");
await sdk.TriggerAsync(triggerEventRequestDto: new TriggerEventRequestDto() { WorkflowId = "workflowId", To = To.CreateSubscriberPayloadDto(new SubscriberPayloadDto() { SubscriberId = "subscriberId", Phone = "whatsapp:+14155238886" }), Payload = new Dictionary<string, object>(), Overrides = new Overrides() { Providers = new Dictionary<string, Dictionary<string, object>>() { { "twilio", new Dictionary<string, object>() { { "_passthrough", new Dictionary<string, object>() { { "body", new Dictionary<string, object>() { { "contentSid", "HXb5b62575e6e4ff6129ad7c8efe1f983e" }, { "contentVariables", "{"1":"12/1","2":"3pm"}" }, } }, } }, } }, }, }, });
</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").phone("whatsapp:+14155238886").build()))
.overrides(TriggerEventRequestDtoOverrides.builder()
.additionalProperties(Map.of("providers", Map.of("twilio", Map.of(
"_passthrough", Map.of("body", Map.of(
"contentSid", "HXb5b62575e6e4ff6129ad7c8efe1f983e",
"contentVariables", "{\"1\":\"12/1\",\"2\":\"3pm\"}"
))
))))
.build())
.build())
.call();