Getting started with topics in Yandex Cloud Notification Service
Note
The service is at the preview stage.
To enable Cloud Notification Service, request access to the service from your account manager or technical support
Cloud Notification Service (CNS) is a service for multichannel notifications of users. The service's HTTP API is compatible with the Amazon SNS API
To send messages to different endpoints at the same time, use topics. You can subscribe the endpoints to a topic and send notifications to all of them at once.
To get started with topics:
-
Create notification channels and endpoints:
- Mobile push notifications
- In-browser push notifications
- SMS
For SMS notifications, you may add phone numbers directly to the topic rather than the channel.
Get your cloud ready
Sign up for Yandex Cloud and create a billing account:
- Navigate to the management console
and log in to Yandex Cloud or create a new account. - On the Yandex Cloud Billing
page, make sure you have a billing account linked and it has theACTIVEorTRIAL_ACTIVEstatus. If you do not have a billing account, create one and link a cloud to it.
If you have an active billing account, you can navigate to the cloud page
Learn more about clouds and folders here.
Create the topic
- In the management console
, select your folder. - In the list of services, select Cloud Notification Service.
- Select Topics on the left.
- Click Create topic.
- Enter a name for the topic. The name must be unique within Cloud Notification Service.
- Under Logging, enable the Write logs option.
- In the Folder list, select a folder to house the log group.
- In the Log group field, select an existing log group or create a new one.
- Click Create topic.
-
If you do not have the AWS CLI yet, install and configure it.
-
Run this command:
aws sns create-topic --name <topic_name>Where
nameis topic name, which can be any name unique within Cloud Notification Service.For more information about the
aws sns create-topiccommand, see the AWS documentation .
-
If you do not have the AWS SDK for Python (boto3) yet, install and configure it.
-
To create a push notification channel, use the following code:
response = client.create_topic( Name="<topic_name>" ) print (f"Topic ARN:", response['TopicArn'])Where:
Name: Topic name, which can be any name unique within Cloud Notification Service.
Subscribe endpoints to the topic
-
Select a topic.
-
Select Subscriptions on the left.
-
Click Create subscription.
-
Select a notification channel type:
-
Mobile push notifications.
Enter the endpoint ARN in
arn:aws:sns::<cloud_id>:endpoint/<platform>/<channel_name>/<endpoint_unique_id>format. You can copy the ARN on the endpoint’s settings page. -
In-browser push notifications.
Enter the endpoint ARN in
arn:aws:sns::<cloud_id>:endpoint/<platform>/<channel_name>/<endpoint_unique_id>format. -
SMS.
Enter your phone number in E.164
format, e.g.,+79991112233. You do not need to pre-add the phone number to the SMS notification channel, but you need to create the channel itself.
-
-
Click Create subscription.
Subscribe other endpoints to the topic in the same way.
Run this command:
aws sns subscribe \
--topic-arn <topic_ARN> \
--protocol <channel_type> \
--notification-endpoint <endpoint_ARN_or_phone_number>
Where:
topic-arn: Topic ARN.protocol: Type of notification channel, e.g.,sms,application.notification-endpoint: ARN of the endpoint subscribing to the topic, inarn:aws:sns::<cloud_id>:endpoint/<platform>/<channel_name>/<endpoint_unique_id>format. For SMS, enter a phone number in E.164 format, e.g.,+79991112233.
For more information about the aws sns subscribe command, see the AWS documentation
Use the following code:
try:
response = client.subscribe(
TopicArn = "<topic_ARN>",
Protocol = "<channel_type>",
Endpoint = "<endpoint_ARN_or_phone_number>"
)
print(f"Topic ARN: {response['TopicArn']}")
except botocore.exceptions.ClientError as error:
print(f"Error: {error}")
Where:
TopicArn: Topic ARN.Protocol: Notification channel type, e.g.,smsorapplication.Endpoint: ARN of the endpoint subscribing to the topic, inarn:aws:sns::<cloud_id>:endpoint/<platform>/<channel_name>/<endpoint_unique_id>format. For SMS, enter a phone number in E.164 format, e.g.,+79991112233.
Send a notification to the topic
-
Select the topic.
-
Click Send notification.
-
Select a notification type:
- Same: To send the same notification to all channel types.
- Different: To enter different texts for different channel types.
-
Enter the same text for all channels, or different texts for different channel types, in JSON format. If a channel is not specified, the notification will contain the
defaultmessage text.Notification format in JSON:
{ "default": "<Default_text>", "sms": "<Notification_text_for_sms>", "WEB": "<Notification_text_for_bowser>", "APNS": { "aps": { "alert": { "title": "Notification_title", "body": "Notification_text" } } }, "GCM": { "notification": { "title": "Notification_title", "body": "Notification_text" } }, "HMS": { "notification": { "title": "Notification_title", "body": "<Notification_text>" } }, "RUSTORE": { "notification": { "title": "Notification_title", "body": "<Notification_text>" } } } -
Click Send.
Run this command:
To send a notification:
aws sns publish \
--topic-arn <topic_ARN> \
--message-structure json \
--message '{"default": "<notification_text>","APNS": {"aps":{"alert":"<notification_text>"}},"GCM": {"notification":{"body":"<notification_text>"}},"HMS": {"notification":{"body":"<notification_text>"}},"RUSTORE": {"notification":{"body":"<notification_text>"}},"WEB": "<notification_text>","sms": "<notification_text>"}'
Where:
topic-arn: Topic ARN.message-structure: Message format (json).message: Notification text or path to the notification file. To send different notifications depending on channel type, specify the channel and notification text: If some channel is not specified, the default message will be sent.
For more information about the aws sns publish command, see the AWS documentation
Use the following code:
try:
response = client.publish(
TopicArn="<topic_ARN>",
Message=json.dumps({
"default": "<notification_text>",
"APNS": {"aps":{"alert":"<notification_text>"}},
"GCM": {"notification":{"body":"<notification_text>"}},
"HMS": {"notification":{"body":"<notification_text>"}},
"RUSTORE": {"notification":{"body":"<notification_text>"}},
"WEB": "<notification_text>",
"sms": "<notification_text>"
}),
MessageStructure="json"
)
print(f"Message ID: {response["MessageId"]}")
except botocore.exceptions.ClientError as error:
print(f"Error: {error}")
Where:
TopicArn: Topic ARN.Message: Notification text. You can add the same text for all channel types or different texts for each channel type. If a channel is not specified, the notification will contain thedefaultmessage text.MessageStructure: Message format (json).