🚀 Send Multi-Channel Notifications
Overview
This guide will get you sending notifications across multiple channels at once with NotificationAPI. You can send to email, SMS, calls, in-app, web push, mobile push, and Slack all in a single request.
Some channels require additional setup before you can send notifications: In-App and Web Push require frontend SDK integration, Mobile Push requires platform-specific setup (iOS/Android), and Slack requires OAuth setup. This guide only shows how to send multi-channel notifications. For complete setup instructions, see the individual Quick-Start Guides or Channels Documentation.
Install the SDK for your backend language:
npm install notificationapi-node-server-sdk pip install notificationapi_python_server_sdk composer require notificationapi/notificationapi-php-server-sdk go get github.com/notificationapi-com/notificationapi-go-server-sdk Install the package:
dotnet add package NotificationAPI --version 0.5.0 Add the following dependency to your Maven project:
<dependency>
<groupId>com.notificationapi</groupId>
<artifactId>notificationapi-java-server-sdk</artifactId>
<version>0.2.0</version>
</dependency>For optimal functionality, you’ll also need the following dependencies:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.14</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency> # Create the following class in your application
require 'net/http'
require 'json'
require 'base64'
require 'openssl'
class NotificationAPI
def initialize(client_id, client_secret)
# if in the CA region, use 'https://api.ca.notificationapi.com'
# if in the EU region, use 'https://api.eu.notificationapi.com'
@base_url = 'https://api.notificationapi.com'
@client_id = client_id
@auth_token = Base64.strict_encode64("#{client_id}:#{client_secret}")
# if in the CA region, use 'api.ca.notificationapi.com'
# if in the EU region, use 'api.eu.notificationapi.com'
@http_client = Net::HTTP.new('api.notificationapi.com', 443)
@http_client.use_ssl = true
end
def send(request)
payload = request.to_json
response = @http_client.post(
"/#{@client_id}/sender",
payload,
{
'Content-Type' => 'application/json',
'Authorization' => "Basic #{@auth_token}"
}
)
response.body
end
def retract(request)
payload = request.to_json
response = @http_client.post(
"/#{@client_id}/sender/retract",
payload,
{
'Content-Type' => 'application/json',
'Authorization' => "Basic #{@auth_token}"
}
)
response.body
end
def identify_user(user_id, user_data)
digest = OpenSSL::Digest::SHA256.new
hmac = OpenSSL::HMAC.digest(digest, @client_secret, user_id)
hashed_user_id = Base64.strict_encode64(hmac)
custom_auth = Base64.strict_encode64("#{@client_id}:#{user_id}:#{hashed_user_id}")
send_request('POST', "users/#{URI.escape(user_id)}", user_data, custom_auth)
end
def create_sub_notification(notification_id, sub_notification_id, title)
payload = { title: title }
send_request('PUT', "notifications/#{notification_id}/subNotifications/#{sub_notification_id}", payload)
end
def delete_sub_notification(notification_id, sub_notification_id)
send_request('DELETE', "notifications/#{notification_id}/subNotifications/#{sub_notification_id}")
end
def update_schedule(tracking_id, scheduleUpdate)
send_request('PATCH', "notifications/#{tracking_id}", scheduleUpdate)
end
def delete_schedule(tracking_id)
send_request('DELETE', "notifications/#{tracking_id}")
end
def set_user_preferences(user_id, user_preferences)
send_request('POST', "user_preferences/#{user_id}", user_preferences)
end
private
def send_request(method, uri, data = {}, auth = "Basic #{@auth_token}")
payload = data.to_json
response = @http_client.send_request(
method,
"/#{@client_id}/#{uri}",
payload,
{
'Content-Type' => 'application/json',
'Authorization' => auth
}
)
response.body
end
end Now, send a notification across multiple channels at once:
Replace YOUR_CLIENT_ID and YOUR_CLIENT_SECRET with the values from the
code sample in your NotificationAPI dashboard. These values can also be found
in the Environments section of the dashboard.
// import/require:
import notificationapi from 'notificationapi-node-server-sdk';
// const notificationapi = require('notificationapi-node-server-sdk').default
// initialize notificationapi (default US region)
// if in the CA region, add 'https://api.ca.notificationapi.com' after CLIENT_SECRET
// if in the EU region, add 'https://api.eu.notificationapi.com' after CLIENT_SECRET
notificationapi.init('CLIENT_ID', 'CLIENT_SECRET');
notificationapi
.send({
// The ID of the notification you wish to send. You can find this
// value from the dashboard.
type: 'order_tracking',
to: {
id: 'user123',
email: 'user@example.com',
number: '+15005550006' // Replace with format [+][country code][area code][local number]
},
email: {
subject: 'Hello',
html: '<h1>Hello, world!</h1>'
},
sms: {
message: 'Hello, world!'
},
inapp: {
title: 'Hello',
url: 'https://example.com',
image: 'https://example.com/image.png'
},
mobile_push: {
title: 'Hello',
message: 'Hello, world!'
},
web_push: {
title: 'Hello',
message: 'Hello, world!',
icon: 'https://example.com/icon.png',
url: 'https://example.com'
},
call: {
message: 'This is a test call from NotificationAPI.'
},
slack: {
text: 'Hello, world!'
}
})
.then((res) => console.log(res.data)); # import
import asyncio
from notificationapi_python_server_sdk import (notificationapi)
# initialize notificationapi (default US region)
# if in the CA region, add 'https://api.ca.notificationapi.com' after CLIENT_SECRET
# if in the EU region, add 'https://api.eu.notificationapi.com' after CLIENT_SECRET
notificationapi.init("CLIENT_ID", "CLIENT_SECRET")
# send
async def send_notification():
await notificationapi.send(
{
"type": "order_tracking",
"to": {
"id": "spongebob.squarepants",
"email": "spongebob@squarepants.com",
"number": "+15005550006"
},
"email": {
"subject": "Hello",
"html": "<h1>Hello, world!</h1>",
},
"sms": {
"message": "Hello, world!"
},
"inapp": {
"title": "Hello",
"url": "https://example.com",
"image": "https://example.com/image.png"
},
"mobile_push": {
"title": "Hello",
"message": "Hello, world!"
},
"web_push": {
"title": "Hello",
"message": "Hello, world!",
"icon": "https://example.com/icon.png",
"url": "https://example.com"
},
"call": {
"message": "This is a test call from NotificationAPI."
},
"slack": {
"text": "Hello, world!"
}
}
)
# Run the async function
asyncio.run(send_notification()) # import
use NotificationAPI\NotificationAPI;
# init
# if in the CA Region, add 'https://api.ca.notificationapi.com' after Client Secret
# if in the EU Region, add 'https://api.eu.notificationapi.com' after Client Secret
$notificationapi = new NotificationAPI('CLIENT_ID', 'CLIENT_SECRET');
# send
$notificationapi->send([
#The ID of the notification you wish to send. You can find this
#value from the dashboard.
"type" => "order_tracking",
# The user to send the notification to.
"to" => [
"id" => "spongebob.squarepants",
"email" => "spongebob@squarepants.com", # required for email notifications
"number" => "+15005550006" # optional phone number required to send SMS notifications
],
"email" => [
"subject" => "Hello",
"html" => "<h1>Hello, world!</h1>",
],
"sms" => [
"message" => "Hello, world!"
],
"inapp" => [
"title" => "Hello",
"url" => "https://example.com",
"image" => "https://example.com/image.png"
],
"mobile_push" => [
"title" => "Hello",
"message" => "Hello, world!"
],
"web_push" => [
"title" => "Hello",
"message" => "Hello, world!",
"icon" => "https://example.com/icon.png",
"url" => "https://example.com"
],
"call" => [
"message" => "This is a test call from NotificationAPI."
],
"slack" => [
"text" => "Hello, world!"
]
]); package main
// import
import (
notificationapi "github.com/notificationapi-com/notificationapi-go-server-sdk"
"encoding/json"
)
func main() {
// init (US region)
// if in CA Region, replace API URL with 'https://api.ca.notificationapi.com'
// if in EU Region, replace API URL with 'https://api.eu.notificationapi.com'
notificationapi.Init("CLIENT_ID", "CLIENT_SECRET", "https://api.notificationapi.com")
// parameters is to pass dynamic values into the notification design.
parameters := make(map[string]interface{})
parameters["item"] = "Krabby Patty Burger"
parameters["address"] = "124 Conch Street"
parameters["orderId"] = "1234567890"
notificationapi.Send(
notificationapi.SendRequest{
// The ID of the notification you wish to send. You can find this
// value from the dashboard.
Type: "order_tracking",
// The user to send the notification to.
To: notificationapi.User{
Id: "spongebob.squarepants",
Email: "spongebob@squarepants.com",
Number: "+15005550006" // Optional phone number required to send SMS notifications
},
Email: map[string]interface{}{
"subject": "Hello",
"html": "<h1>Hello, world!</h1>",
},
SMS: map[string]interface{}{
"message": "Hello, world!",
},
InApp: map[string]interface{}{
"title": "Hello",
"url": "https://example.com",
"image": "https://example.com/image.png",
},
MobilePush: map[string]interface{}{
"title": "Hello",
"message": "Hello, world!",
},
WebPush: map[string]interface{}{
"title": "Hello",
"message": "Hello, world!",
"icon": "https://example.com/icon.png",
"url": "https://example.com",
},
Slack: map[string]interface{}{
"text": "Hello, world!",
},
},
)
}
//import
using NotificationApi.Server;
using NotificationApi.Server.Models;
// initialize notificationapi (default US region)
// if in the CA region, add 'https://api.ca.notificationapi.com' after boolean argument
// if in the EU region, add 'https://api.eu.notificationapi.com' after boolean argument
var notificationApi = new NotificationApiServer("CLIENT_ID", "CLIENT_SECRET", false);
//send
var user = new NotificationUser("spongebob.squarepants")
{
Email = "spongebob@squarepants.com",
TelephoneNumber = "+15005550006"
};
await notificationApi.Send(new SendNotificationData("order_tracking", user)
{
Email = new Dictionary<string, object>
{
{ "subject", "Hello" },
{ "html", "<h1>Hello, world!</h1>" },
},
SMS = new Dictionary<string, object>
{
{ "message", "Hello, world!" }
},
InApp = new Dictionary<string, object>
{
{ "title", "Hello" },
{ "url", "https://example.com" },
{ "image", "https://example.com/image.png" }
},
MobilePush = new Dictionary<string, object>
{
{ "title", "Hello" },
{ "message", "Hello, world!" }
},
WebPush = new Dictionary<string, object>
{
{ "title", "Hello" },
{ "message", "Hello, world!" },
{ "icon", "https://example.com/icon.png" },
{ "url", "https://example.com" }
},
Slack = new Dictionary<string, object>
{
{ "text", "Hello, world!" }
}
}); // import
import com.notificationapi.NotificationApi;
import com.notificationapi.model.NotificationRequest;
import com.notificationapi.model.User;
import java.util.HashMap;
import java.util.Map;
// Initialize NotificationAPI (default US region)
// If in the CA region, use the third parameter: "https://api.ca.notificationapi.com"
// If in the EU region, use the third parameter: "https://api.eu.notificationapi.com"
NotificationApi api = new NotificationApi("CLIENT_ID", "CLIENT_SECRET", "https://api.notificationapi.com");
// Create user
User user = new User("spongebob.squarepants")
.setEmail("spongebob@squarepants.com") // required for email notifications
.setNumber("+15005550006"); // optional phone number required to send SMS notifications
// Create and send notification request
NotificationRequest request = new NotificationRequest("order_tracking", user)
.setEmail(new HashMap<String, Object>() {{
put("subject", "Hello");
put("html", "<h1>Hello, world!</h1>");
}})
.setSMS(new HashMap<String, Object>() {{
put("message", "Hello, world!");
}})
.setInApp(new HashMap<String, Object>() {{
put("title", "Hello");
put("url", "https://example.com");
put("image", "https://example.com/image.png");
}})
.setWebPush(new HashMap<String, Object>() {{
put("title", "Hello");
put("message", "Hello, world!");
put("icon", "https://example.com/icon.png");
put("url", "https://example.com");
}})
.setMobilePush(new HashMap<String, Object>() {{
put("title", "Hello");
put("message", "Hello, world!");
}})
.setSlack(new HashMap<String, Object>() {{
put("text", "Hello, world!");
}});
String response = api.send(request); # require:
require './NotificationAPI'
# initialize notificationapi (default US region)
# if in the CA region, add 'https://api.ca.notificationapi.com' after CLIENT_SECRET
# if in the EU region, add 'https://api.eu.notificationapi.com' after CLIENT_SECRET
notificationapi = NotificationAPI.new("CLIENT_ID", "CLIENT_SECRET")
# send
notificationapi.send({
#The ID of the notification you wish to send. You can find this
#value from the dashboard.
type: 'order_tracking',
# The user to send the notification to.
to: {
id: 'spongebob.squarepants',
email: 'spongebob@squarepants.com', # required for email notifications
number: '+15005550006'
},
email: {
subject: 'Hello',
html: '<h1>Hello, world!</h1>'
},
sms: { message: 'Hello, world!' },
inapp: {
title: 'Hello', url:
'https://example.com',
image: 'https://example.com/image.png'
},
mobile_push: {
title: 'Hello',
message: 'Hello, world!'
},
web_push: {
title: 'Hello',
message: 'Hello, world!',
icon: 'https://example.com/icon.png',
url: 'https://example.com'
},
call: { message: 'This is a test call from NotificationAPI.' },
slack: { text: 'Hello, world!' }
}); You’re All Set!
🎉 Congrats! You’re now sending multi-channel notifications!
For channel-specific advanced features, check out our channel documentation:
- Email - Attachments, CC/BCC, custom templates, SPF/DKIM
- SMS - Sender numbers, A2P 10DLC registration, best practices
- Automated Voice Calls - Sender numbers, regulatory compliance
- In-App - Custom click actions, batching, UI customization
- Web Push - Browser support, troubleshooting, system settings
- Mobile Push - iOS/Android setup, FCM configuration
- Slack - OAuth setup, workspace integration
Prefer using templates? Keep your content in the dashboard and pass only dynamic parameters. See Server reference for template-based examples and our Templating guide to learn more.