﻿# Интеграция с сервисом отправки SMS

> [HTML Version](sms-integration.html)

Модули интеграции с сервисами отправки SMS нужны для информирования клиентов и сотрудников о любых событиях, возникающих в ходе бизнес-процесса. Например, используя блок [Отправить SMS](360013409220.md), вы можете настроить автоматическую отправку SMS с данными о статусе заказа для клиентов или с информацией о постановке важных задач для коллег.  

Также такие модули можно использовать при настройке [двухфакторной аутентификации](security_settings.md#authorization) или [авторизации в системе](security_settings.md#mobile) по номеру телефона и одноразовым кодам. 

Вы можете воспользоваться готовыми модулями интеграции [SMSЦентр](sms-center.md) и [SMSRU](smsru.md) или создать пользовательский модуль для работы с другим сервисом. 

## Создание и настройка модуля интеграции 

````
начало внимание

````
Создавать и настраивать модули могут только пользователи, включённые в группу [Администраторы](360006871932.md#administrators).

````
конец внимание

````
Чтобы [создать модуль](create-extention.md) интеграции с сервисом отправки SMS, выполните следующие действия: 

1. Перейдите в **Администрирование > Модули**. 

2. В правом верхнем углу нажмите кнопку **+Модуль** и в открывшемся окне выберите опцию **Создать**. 

3. Введите название и описание модуля и нажмите кнопку **Создать**. 

4. В настройках модуля перейдите на вкладку [Методы API](extention-api.md) и нажмите кнопку **Редактировать**. Откроется редактор методов. 

5. Перейдите на вкладку **Скрипты** и подключите следующие интерфейсы: 

````
// Cтруктура данных для хранения ответа проверки соединения.  
interface SMSTestConnectionResult \{  
    success: boolean;  
    failReason: string;  
\}  
  
// Cтруктура данных для хранения ответа отправки СМС на номер.  
interface SMSSendError \{  
    phone: string;  
    statusCode?: number;  
    statusText?: string;  
\}

6. ````
Реализуйте функцию отправки SMS: 

````
async function SMS\_sendSMS(phones: string\[\], msg: string): Promise<SMSSendError\[\]> \{  
    // содержимое функции  
\}

7. ````
Сохраните и опубликуйте скрипт.

После этого включённый модуль можно использовать для отправки SMS-уведомлений в ходе бизнес-процесса или для авторизации в системе. 

## Пример интеграции 

Рассмотрим подробнее создание модуля на примере интеграции с сервисом SMS Aero. Для интеграции с этим сервисом требуется дополнительно указывать электронную почту, на которую зарегистрирована учётная запись в SMS Aero, а также API-ключ. Эти поля нужно вынести на страницу настройки модуля. Для этого: 

1. Перейдите на страницу **Администрирование > Модули**. В правом верхнем углу нажмите кнопку **+Модуль**, а затем **Создать**. Укажите название модуля и краткое описание. 

2. Откройте вкладку **Настройки** и создайте два строковых поля, в которых будут храниться настройки для подключения к SMS Aero со стороны модуля: 

- **API key** — API-ключ для соединения модуля и сервиса SMS Aero; 

- **email** — электронная почта, на которую зарегистрирована учётная запись в SMS Aero. Используется для авторизации в сервисе. 

(sms-integration-1.png)

3. Вернитесь на страницу модуля — на ней появятся добавленные в предыдущем пункте поля: 

(sms-integration-2.png)

4. Перейдите в редактор скриптов: **Настройки модуля > Методы API > Скрипты** и добавьте в файл следующий код: 

````
// Cтруктура данных для хранения ответа проверки соединения.  
interface SMSTestConnectionResult \{  
	success: boolean;  
	failReason: string;  
\}  
  
// Cтруктура данных для хранения ответа отправки СМС на номер.  
interface SMSSendError \{  
	phone: string;  
	statusCode?: number;  
	statusText?: string;  
\}  
  
const api\_key = Namespace.params.data.api\_key  
const email = Namespace.params.data.email  
  
// Отправить СМС на номера.  
async function SMS\_sendSMS(phones: string\[\], msg: string): Promise<SMSSendError\[\]> \{  
	const smsErrs: SMSSendError\[\] = \[\]  
	const authSuccess = await tryAuth()  
  
	if (\!authSuccess) \{  
		smsErrs.push(\{ phone: '', statusCode: 401, statusText: 'Unauthorized' \})  
		return smsErrs  
\}   
  
	const phoneListString = phones.join('\&numbers\[\]=')  
  
	const res = await fetch(\`https://\$\{email\}:\$\{api\_key\}@gate.smsaero.ru/v2/sms/send?numbers\[\]=\$\{phoneListString\}\&text=\$\{msg\}\&sign=SMS Aero\`)  
	if (\!res.ok) \{  
		// smsErrs позволяет написать отдельную обработку для каждого номера телефона  
		smsErrs.push(\{phone: '', statusCode: res.status, statusText: res.statusText\})  
		return smsErrs  
	\}  
	return smsErrs  
\}  
  
async function tryAuth(): Promise<boolean> \{  
	const res = await fetch(\`https://\$\{email\}:\$\{api\_key\}@gate.smsaero.ru/v2/auth\`)  
	if (\!res.ok) \{  
		return false  
	\}  
	return true  
\}

5. ````
Сохраните и опубликуйте скрипты. 

После включения модуля и заполнения его параметров вы сможете выбрать интеграцию с сервисом SMS Aero при настройке [двухфакторной аутентификации](security_settings.md#authorization), [авторизации в системе](security_settings.md#mobile) по номеру телефона и одноразовым кодам или блока [Отправить SMS](360013409220.md). 