Как отправлять SMS через МТС Exolve и Go

от автора

В одной из московских компаний решили расширить функции системы на Golang, и заказчик попросил внедрить в неё SMS и прочие каналы для уведомлений клиентов. В этой статье пошагово разберём, как отправлять SMS с использованием сервиса МТС Exolve и популярного языка программирования Golang.

SMS — полезный инструмент в сценариях взаимодействия с клиентами, если вы получаете их согласие на уведомления. В основном про доставку товара или о состоянии онлайн-заказа; сообщения о бонусах и акциях; автоматические ответы на запросы клиентов; оповещения о нештатных ситуациях в системах умного дома при интеграции с устройствами интернета вещей (IoT).

Соединим SMS-уведомления с сервером на Go и протестируем работу.

Покупаем номер для сообщений

Для начала регистрируемся на exolve.ru. Платформа начислит 300 приветственных рублей новому пользователю — их достаточно, чтобы арендовать номер.

При создании приложения необходимо придумать для него название: это поможет находить приложение в списке быстрее.

Что такое Приложения

Приложения — ваш проект для работы с IT- и телеком-функциями. Он позволяет проводить интеграции, купить и настроить номера и так далее. У каждого приложения есть свои ресурсы и настройки. В приложении вы можете настроить переадресацию входящих звонков, запись разговоров, создать callback, посмотреть детализацию по звонкам и сообщениям.

Затем сервис перенаправит нас в панель управления приложением. Просматриваем небольшое обучение и подтверждаем номер телефона. После этого переходим к разделу приложений.

Выбираем вкладку в меню приложения.

В левом сайдбаре находим раздел API-ключей.

Этот ключ (токен) нужен для отправки SMS. Важно запомнить, где он хранится, чтобы воспользоваться им позже.

Для отправки сообщений нужен номер телефона, поэтому переходим в левом боковом меню к вкладке «Номера» и нажимаем на кнопку «Купить номер».

Выбираем нужный регион, категорию, тип и кликаем на «Найти номер». Отмечаем понравившийся номер и нажимаем «Купить».

В итоге мы будем использовать личный токен для авторизации и два телефонных номера: номер-отправитель (купленный на МТС Exolve) и номер-получатель.

Создаём сервер на Golang

Язык программирования Go позволяет быстро и эффективно развернуть сервер, который можно использовать для различных задач, включая отправку SMS. Скачать Go можно с официального сайта.

Для начала создаём новую папку для нашего проекта, в ней — файл send.go и открываем его в предпочитаемом текстовом редакторе, например в VSCode.

Необходимо создать сервер, который будет прослушивать определённый порт и обрабатывать входящие запросы. В файл send.go добавляем следующий код с комментариями, которые объясняют назначения каждого его блока:

// package main указывает, что это основной пакет программы. // В Go «main» — это специальный пакет, откуда начинается выполнение программы. package main  // Импортируем необходимые библиотеки для работы нашей программы. import (     "bytes"     "encoding/json"     "fmt"     "io"     "net/http" )  // SMSContent — структура для хранения информации SMS-сообщения. type SMSContent struct {     Number      string `json:"number"`     Destination string `json:"destination"`     Text        string `json:"text"` }  // main — стартовая точка нашей программы. func main() {     // Указываем, как обрабатывать HTTP-запросы по определённому адресу.     http.HandleFunc("/my-post", processIncomingSMS)      // Сообщаем о запуске сервера и запускаем его на 8080 порту.     fmt.Println("Server listening on :8080")      // Создаём пример SMS-сообщения и отправляем его.     smsDetails := SMSContent{         Number:      «ВСТАВЬТЕ НОМЕР ОТПРАВИТЕЛЯ»,         Destination: «ВСТАВЬТЕ НОМЕР ПОЛУЧАТЕЛЯ»,         Text:        «ВСТАВЬТЕ ТЕКСТ СООБЩЕНИЯ»,     }     executeSMSSending(smsDetails)      // Запускаем веб-сервер, чтобы он прослушивал порт 8080.     http.ListenAndServe(":8080", nil) }  // processIncomingSMS обрабатывает входящие SMS-запросы. func processIncomingSMS(responseWriter http.ResponseWriter, request *http.Request) {     // Проверка на использование метода POST.     if request.Method != http.MethodPost {         http.Error(responseWriter, "Only POST is Supported", http.StatusMethodNotAllowed)         return     }      // Чтение данных из тела запроса.     requestBody, readError := io.ReadAll(request.Body)     if readError != nil {         http.Error(responseWriter, "Failed to Read Body", http.StatusInternalServerError)         return     }      // Конвертируем полученные данные в структуру SMSData.     var smsDetails SMSContent     unmarshalError := json.Unmarshal(requestBody, &smsDetails)     if unmarshalError != nil {         http.Error(responseWriter, "JSON Conversion Failed", http.StatusBadRequest)         return     }      // Выполнение отправки SMS.     executeSMSSending(smsDetails)      // Логирование информации о запросе.     fmt.Printf("SMS Request Processed: %+v\n", smsDetails)      // Подтверждение успешного приёма запроса.     responseWriter.WriteHeader(http.StatusOK)     responseWriter.Header().Set("Content-Type", "application/json")     successResponse := map[string]string{"message": "Successfully processed SMS"}     successJSON, _ := json.Marshal(successResponse)     responseWriter.Write(successJSON) }  // executeSMSSending обращается к внешнему API для отправки SMS. func executeSMSSending(smsData SMSContent) {     endpointURL := "https://api.exolve.ru/messaging/v1/SendSMS"      // Преобразуем данные для отправки в формате JSON.     smsJSON, marshalErr := json.Marshal(smsData)     if marshalErr != nil {         fmt.Println("Error converting SMS data to JSON:", marshalErr)         return     }      // Создание запроса к API для отправки SMS.     apiRequest, requestErr := http.NewRequest("POST", endpointURL, bytes.NewBuffer(smsJSON))     if requestErr != nil {         fmt.Println("Error creating API request:", requestErr)         return     }      // Настройка заголовков HTTP-запроса.     apiRequest.Header.Set("Content-Type", "application/json")     apiRequest.Header.Set("Authorization", «Bearer ВАШ ТОКЕН АВТОРИЗАЦИИ») // Укажите здесь ваш токен.      // Инициализация клиента для отправки запроса.     httpClient := &http.Client{}     apiResponse, apiErr := httpClient.Do(apiRequest)     if apiErr != nil {         fmt.Println("Error sending request to the API:", apiErr)         return     }     defer apiResponse.Body.Close()      // Обработка и вывод ответа от API.     responseBody, readErr := io.ReadAll(apiResponse.Body)     if readErr != nil {         fmt.Println("Error reading the response body:", readErr)         return     }      fmt.Printf("API Response: %s\n", string(responseBody)) } 

Этот код позволяет тестировать API Exolve для отправки SMS. Остаётся только добавить в него свой валидный токен в формате «Bearer ваш токен», указать номера отправителя и получателя и текст SMS.

Последний шаг — тестирование нашего сервера. Открываем терминал (убедитесь, что находитесь в директории, где расположен ваш файл send.go) и вводим команду go run send.go.

Эта команда запустит наш сервер, который сделает запрос к API МТС Exolve со вставленными значениями: номерами отправителя и получателя и текстом SMS. В результате на указанные контакты придёт сообщение от номера, к которому привязана наша учётная запись МТС Exolve.

Итак, мы рассмотрели вариант для SMS-уведомлений через сервис МТС Exolve. Также по ссылке можно ознакомиться с подробной и понятной документацией.

Заключение

Использование сторонних API для отправки сообщений — ценный инструмент при разработке приложений. Ключевые преимущества таких сервисов — лёгкая настройка, обширная документация и эффективная техническая поддержка. В случае возникновения трудностей вы можете обратиться в чат и оперативно получить ответы от специалистов, что значительно облегчает решение проблем и ускоряет процесс разработки.


ссылка на оригинал статьи https://habr.com/ru/articles/828370/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *