В одной из московских компаний решили расширить функции системы на 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/
Добавить комментарий