Вопрос или проблема
Я интегрирую AWS SNS для отправки сообщений на индийские мобильные номера, уже зарегистрировав свой SenderID в DLT и получив одобрение от AWS. Однако, когда я пытаюсь включить EntityID и TemplateID в свой код, как указано в инструкциях AWS, я получаю ошибку, в которой говорится: ‘Имена атрибутов сообщения, начинающиеся с ‘AWS.’ или ‘Amazon.’, зарезервированы для использования Amazon.’ Где именно мне следует включить эти идентификаторы в мой код AWS SNS, чтобы решить эту проблему?
Вот код на nodejs
const sendSnsMessage = async (message, phone) => {
try {
let params = {
Message: message,
PhoneNumber: phone,
MessageAttributes: {
"AWS.SNS.SMS.SMSType": {
DataType: "String",
StringValue: "Transactional",
},
"AWS.SNS.SMS.SenderID": {
DataType: "String",
StringValue: <my-sender-id>,
},
"AWS.SNS.SMS.EntityID": {
DataType: "String",
StringValue: <entity-id>,
},
"AWS.SNS.SMS.TemplateID": {
DataType: "String",
StringValue: <template-id>,
},
},
};
let publishCmd = new PublishCommand(params);
let sentMsg = await SNS.send(publishCmd);
return sentMsg;
} catch (error) {
console.log("errrr",error.message);
}
};
Ответ или решение
Ваша проблема связана с ограничениями, установленными AWS для имен атрибутов сообщений. Имена атрибутов, начинающиеся с ‘AWS.’ или ‘Amazon.’, зарезервированы для использования Amazon, что означает, что вы не можете использовать их для своих собственных данных, таких как EntityID и TemplateID. Это создает определенные сложности при интеграции с AWS SNS для отправки сообщений на мобильные номера в Индии, особенно если вы уже зарегистрировали SenderID в DLT и получили одобрение от AWS.
Вот несколько важных моментов, которые следует учесть и решение, как правильно интегрировать эти идентификаторы в ваш код.
Подход к решению проблемы
-
Понимание атрибутов сообщения: Вам нужно использовать только те атрибуты, которые разрешены. Атрибуты, начинающиеся с ‘AWS.’, предназначены только для систем и служб Amazon. Это значит, что вы должны избежать их использования в своем коде.
-
Использование дополнительных атрибутов: Если необходимо передать EntityID и TemplateID, вы можете использовать другие наименования атрибутов, которые не начинаются с ‘AWS.’ или ‘Amazon.’. Например, вы могли бы использовать ‘Custom.EntityID’ и ‘Custom.TemplateID’ в качестве наименований для ваших собственных атрибутов.
-
Корректировка кода: Измените ваш код на Node.js на следующее, чтобы устранить ошибку и корректно передать идентификаторы:
const sendSnsMessage = async (message, phone) => {
try {
let params = {
Message: message,
PhoneNumber: phone,
MessageAttributes: {
"AWS.SNS.SMS.SMSType": {
DataType: "String",
StringValue: "Transactional",
},
"AWS.SNS.SMS.SenderID": {
DataType: "String",
StringValue: <my-sender-id>,
},
"Custom.EntityID": { // Изменено
DataType: "String",
StringValue: <entity-id>,
},
"Custom.TemplateID": { // Изменено
DataType: "String",
StringValue: <template-id>,
},
},
};
let publishCmd = new PublishCommand(params);
let sentMsg = await SNS.send(publishCmd);
return sentMsg;
} catch (error) {
console.log("Ошибка при отправке сообщения", error.message);
}
};
Примечания
- Убедитесь, что вы продолжаете соблюдать правила и регламенты, касающиеся использования DLT в Индии.
- Проводите тестирование кода для проверки корректности передачи ваших данных.
- Обратите внимание на возможные другие ограничения, которые могут быть наложены изготовителями мобильных приложений или местными органами контроля.
Заключение
Несмотря на сложности, связанные с ограничениями на именование атрибутов, корректная модификация вашего кода позволяет передавать необходимые данные, не нарушая правил использования AWS. Убедитесь, что вы также проводите отправку сообщений в соответствии с требованиями и нормами, установленными для отправки SMS в вашей стране.