Просмотр Исходного

{toc:maxLevel=2}

h1. Описание системы отправки сообщений

Система отправки сообщений Carbon Billing 5 поддерживает четыре метода отправки:

* SMS
* E-mail
* Telegram
* PUSH


Для её работы следует настроить шаблоны и параметры отправки, для каждого метода свои.

h1. Быстрый запуск. Как проверить?

# [Настройте смс-шлюз|#configure_gate].
{info}Если у Вас *демо* \- то уже настроен шлюз Carbon и этот шаг можно пропустить.{info}
# [Укажите у оператора связи адрес почты отправителя|#configure_isp]
# [Настройте шаблоны сообщений|#configure_messages]. Уже есть предустановленные почти по всем шаблонам.
# Заполните в карточке абонента реквизиты: "*Email для оповещений*" и "*Номер SMS для оповещений*" (можно что-то одно)
# [Отправьте тестовое сообщение|#send_message]

h1. Настройка системы и методов отправки

{anchor:configure_gate}

h2. Включение системы отправки сообщений

Для работы системы отправки сообщений, следует включить этот сервис в настройках биллинга
Для этого необходимо перейти в "Управление абонентами и тарифами - настройки - настройки(в файле) - настройки демона отправки сообщений" и выставить флаг в поле "Включить отправку сообщений"

!demon.png|border=1,width=800!

h2. Настройка SMS рассылки

# Откройте вкладку "*Настройка сообщений*" в карточке оператора связи. Нажмите кнопку "*Редактировать*" (пиктограмма в виде карандашика в колонке "Действие"
\\
\\ !smsgate_1.png|border=1,width=800!\\
\\
# Снимите опцию "*Использовать СМС шлюз Carbon*" и нажмите "*Сохранить*", Вас автоматический перенаправит на вкладку "*Настройка сообщений*" в карточке оператора связи
\\
\\ !smsgate_2.png|border=1,width=450!\\
\\
# Снова нажмите кнопку "*Редактировать*"
\\
\\ !smsgate_3.png|border=1,width=700!\\
\\
# Настройте требуемые параметры и нажмите "*Сохранить*". Обязательными являются:
\\
\\
#* Адрес СМС шлюза
#* Post параметры
#* MD5 подпись
\\
\\ !smsgate_4.png|border=1,width=450!

Следующие параметры настройте по необходимости:
* *Заголовок сообщения* \- автоматический добавляемая тема email-сообщения, на случай если она не указана в шаблоне или в форме отправки сообщения.
* *Предупреждать о лимите за n дней* \- количество дней для шаблона сообщения "Предупреждение за n дней" (описано далее в статье).
* *Количество попыток отправки* \- количество попыток в случае, если сервер, на который передаётся сообщение, не отвечает.
* *Начало тихого часа* \- начала периода времени, когда сообщения не отправляются (работает и на sms и на email).
* *Окончание тихого часа* \- конец периода времени, когда сообщения не отправляются (работает и на sms и на email).
* *Убирать + из номера* \- автоматический убирает + в начале телефонного номера (например, "79121234567" вместо "+79121234567") если этого требует sms-шлюз

{note:title=Важно:}
SMS-шлюз должен уметь принимать параметры отправляемого сообщения POST-запросом по протоколу http (или https). Нет возможности передавать параметры в GET-запросе.
{note}

h3. Пример запроса к sms-шлюзу
{code}
http://smsc.ru?charset=utf-8&login='company'&psw='company123'&phones=79991231122&mes=Тест отправки
{code}
Использованы следующие параметры:
*smsc.ru* \- адрес вашего смс шлюза
*company* \- название вашей компании
*company123* \- пароль, выданный смс-шлюзом
*79991231122* \- номер для тестовой отправки, на который придет смс
*Тест отправки* \-  текст для отправки, указывается без кавычек

Соответственно, "*Адрес СМС шлюза*" из настроек сообщений в строке браузера находится {color:#ff0000}слева{color} от символа "*?*", а "*Post параметры СМС шлюза*" - {color:#ff0000}справа{color}, при этом используются переменные:
* {color:#008000}%(sms)s{color} \- номер телефона
* {color:#008000}%(text)s{color} \- текст сообщения.

{note}Для того, чтобы корректно работал шаблон сообщений "*Предупреждение за n дней*", необходимо в настройках сообщений оператора связи указать параметр "*Предупреждать о лимите за n дней*" {note}

h2. Примеры интеграции с SMS-шлюзами

h3. [SMSC|https://smsc.ru/?ppcarbon|https://smsc.ru/?ppcarbon]

*Сайт компании:* *[smsc.ru|https://smsc.ru/?ppcarbon|https://smsc.ru/?ppcarbon]*

Адрес СМС шлюза:
{code}
https://smsc.ru/sys/send.php?
{code}

Post параметры:
{code}
charset=utf-8&login=Ваш логин&psw=Ваш пароль&phones=%sms%&mes=%text%
{code}

{note:title=Важно:}
Чтоб смс отправилось, в карточке абонента должен быть выбран оператор связи с настроенным смс-шлюзом.
{note}

h3. Простор СМС

Адрес СМС шлюза:
{code}
http://gate.prostor-sms.ru/send/
{code}
Post параметры:
{code}
login='Ваш логин'&password='Ваш пароль'&phone=%sms%&text=%text%
{code}

h3. SMSPILOT.RU

[Описание интеграции в документации SMSPILOT.RU|https://smspilot.ru/faq.php#q61]

Адрес СМС шлюза:
{code}
http://smspilot.ru/api.php
{code}
Post параметры:
{code}
send=%text%&to=%sms%&apikey=XXXYYYZZZ
{code}

Вместо *XXXYYYZZZ* скопируйте API-ключ из настроек: [Личный кабинет|https://smspilot.ru/my.php] \-> Настройки \-> [Настройки API|https://smspilot.ru/my-settings.php#api]

На стороне sms-шлюза Вы [должны быть подключены как бизнес-клиент|https://smspilot.ru/faq.php#q24], либо скопировать шаблоны из Carbon Billing 5 в "[Шаблоны|https://smspilot.ru/my-template.php]" в личном кабинете SMSPILOT.RU

{anchor:configure_isp}

h2. Настройка Email рассылки

Для того, чтобы сообщения отправлялись, следует указать "Email для оповещений" в карточке оператора связи.

Например: info@provider.name

!mail01.png|border=1!

h3. Настройка отправки Email со стороннего сервера

По умолчанию биллинг отправляет Email сообщения со встроенного smtp сервера. Но также есть возможность отправлять Email со стороннего сервера.
Чтобы попасть в настройки smtp сервера перейдите Настройки \-> Настройки (в файле) \-> Настройки демона отправки сообщений.

!mail02.png|border=1!

Страница настроек выглядит следующим образом:

!mail03.png|border=1!

Доступны в следующие настройки:
* SMTP Шифрование SSL
* SMTP Сервер
* SMTP Порт
* SMTP Пароль
* enabled - включение отправки сообщений
* SMTP Логин
* SMTP Шифрование TSL
* SMTP расширенное журналирование - Подробное журналирование SMTP-соединений

{info} Чтобы вернуть настройки по умолчанию, необходимо в поле "SMTP Сервер" вписать "localhost", а поля "SMTP Порт", "SMTP Логин" и "SMTP Пароль" оставить пустыми. {info}

{anchor:configure_messages}

h3. Отправка Email через Google

Подробную информацию по интеграцию сторонних почтовых клиентов с Google, Вы можете найти в [справке сервиса|https://support.google.com/a/answer/176600?hl=ru].

Такие параментры должны работать:
* *Адрес сервера*: smtp.gmail.com
* *Порт*: 587
* *SMTP Шифрование TSL*: включено

h2. Настройка Telegram рассылки и интеграция с ботом

Мы описали это статье [CarbonBilling:Отправка уведомлений через Telegram]

h2. Настройка PUSH-уведомлений из личного кабинета

Мы описали это статье [CarbonBilling:PUSH-уведомления из личного кабинета]

h2. А что с WhatsApp?

Пока этот метод не поддерживается. Мы делали тестовую интеграцию с WhatsApp в 2017 году, поэтому такой способ отправки сообщений остался в интерфейсе, но по техническим причинам развития функция не получила.

На текущий момент официальным методом интеграции является подключение к WhatsApp Bisiness API через партнёров Facebook, что несёт с собой некоторую финансовую нагрузку на компанию, рассылающую сообщения - то есть оператора связи.

Подробней об условиях Вы можете уточнить у партнёра Facebook в России, компании [Infobip|https://www.infobip.com/products/whatsapp-business]. Если Вы сочтёте их условия приемлемыми, напишите нам - мы реализуем интеграцию в Carbon Billing 5.

h1. Настройка шаблонов сообщений

!2.png|border=1,width=600!
Для каждого типа сообщения надо создать свой шаблон
!3.png|border=1,width=600!

Опция *Отправлять сообщение* отвечает за то нужно отправлять сообщение или нет. Эту галочку можно также поставить в самом шаблоне при редактировании.
Опция *Отправлять каждый день* работает только для шаблона "Предупреждение за n дней", при её активации сообщение отправится за количество дней указанных в настройках оператора связи в поле "Предупреждать о лимите за n дней", а так же каждый день до даты когда он будет заблокирован.

h3. Пример 1. Шаблон сообщения [сброса пароля|http://docs.carbonsoft.ru/pages/viewpage.action?pageId=155713989]


!Выделение_001.jpg|border=1!


h2. Возможные переменные

В шаблонах можно использовать следующие параметры:
%(contract_number)s - номер договора;
%(balance)s - текущий баланс;
Для округления баланса до целого значения используйте параметр %(balance).f
%(currecy)s - валюта сокращение (например руб.);
%(text)s - передаваемый текст (сообщение непосредственно конкретному абоненту);
%(operator_name)s - имя оператора связи(по умолчанию "Лучший провайдер");
%(allow_limit)s - сумма, которая указана в пороге включения(тариф);
%(total_abonpay)s - общая сумма абонентской платы по тарифным и нетарифным услугам;
%(tarif_abonpay)s - сумма абонентской платы по тарифным услугам;
%(nontarif_abonpay)s - сумма абонентской платы по нетарифным услугам; вычисляется как разность общей суммы абонентской платы и абонентской платы по тарифным услугам;
%(gen_pwd)s - созданный через админ. панель пароль(не существует, если пароль изменен через ЛК);
%(login)s - логин абонента;
%(tarif_name)s - тариф абонента;
%(plan_comment)s - описание тарифа (например скорость, указывается руками);
%(recomend_pay_sum)5.2f - рекомендуемый платеж
%(recomend_pay_sum_post)5.2f - рекомендуемый платеж постоплата
%(minimal_pay_sum)5.2f - минимальный платеж для разблокировки
%(subscriber_name)s - Имя абонента, который создал заявку в helpdesk
%(abonent_id)s - ID абонента, который создал заявку в helpdesk
%(subscriber_sms) - номер телефона абонента, который создал заявку в helpdesk
%(subscriber_email)s - email абонента, который создал заявку в helpdesk
%(subscriber_comment)s - [стандартный реквизит|Реквизиты] "Комментарий"
%(psw_token)s - проверочный код для [сброса пароля Личного кабинета|http://docs.carbonsoft.ru/pages/viewpage.action?pageId=155713989]
{info}
%(gen_pwd)s - это пароль всегда от *первой* учетной записи
{info}

А также любые *поля* абонента, тарифа, счета и прочих данных, отображаемых на вкладке "Информация" в карточке абонента. Названия переменных можно взять из описания моделей в [CarbonBilling:API REST v2.0]



Например:
{code}Уважаемый Абонент! Ваши персональные данные: ФИО: "%(name)s", Дата выставления Акта: "%(next_auto_acount)s", Код в 1С: "%(code1c)s", Дата начала предоставления услуг: "%(activate_date)s", Лицевой счет: %(account_id)s, Тариф: "%(tarif_name)s", Оператор связи: "%(operator_name)s"{code}
Будет отправлено сообщение приблизительно следующего содержания:
{code}Уважаемый Абонент! Ваши персональные данные: ФИО: "Новый абонент", Дата выставления Акта: "2017-11-01 00:00:00", Код в 1С: "1sTESTcode", Дата начала предоставления услуг: "2017-10-01 00:00:00", Лицевой счет: 10001319, Тариф: "Анлим 30мб", Оператор связи: "ООО Лучший провайдер"{code}

*Текст заголовка* \- тема e-mail или заголовок смс.
*Текст шаблона* \- непосредственно отправляемый текст.

h2. Использование переменных Django

При включении опции "Использовать шаблонизатор django" можно использовать математические функции django, например, вычислить сумму, которую должен внести абонент. Ниже пример такого шаблона сообщения:

{code}
{% load mathfilters %}Обслуживание по л/с {{ abonent.contract_number }} приостановлено. Внесите не менее {% if total_abonpay <= BALANCE %}0{% else %}{{ total_abonpay|sub:BALANCE }}{% endif %} руб.
{code}

h2. Тип сообщения. События.

Каждый шаблон сообщения может быть отправлен по любому из выбранных событий:
* *Подключение услуги* \- приходит абоненту при подключении услуги;
* *Положительный баланс* \- приходит абоненту при переходе абонента в положительный баланс(ниже порога отключения абонента);
* *Отрицательный баланс* \- приходит абоненту при переходе абонента в отрицательный баланс(выше порога отключения абонента);
* *Выставлен счет* \- приходит абоненту при выставлении счета абоненту (используется чаще для юр.лиц). Для того, чтобы отправка счета выполнялась вручную из вкладки "Операции", шаблон с данным типом должен быть включен. Вместе со счетом юр.лицам отправляется ещё и акт. Отправка акта выполняется с помощью этого же шаблона сообщений(Выставлен счет);
* *Зачисление денег* \- приходит абоненту при поступлении средств на счет (при условии что в настройках абонента стоят галочки Юр.лицо и Отправлять Счет/Акт, а также Настройки - Число месяца выставления счетов на предоплату);
* *Ручная отправка сообщения* \- при ручной отправке;
* *Занесено в Аудит* \- при занесении информации в Аудит;
* *Достигнут порог предупреждения* \- при достижении порога предупреждения (порог предупреждения из опций тарифа);
* *Сообщение из HelpDesk* \- при создании заявки от абонента в HelpDesk (приходит инженерам Helpdesk);
* *Сообщение из CRM* \- при создании задачи в CRM (приходит ответственному исполнителю);
* *Предупреждение за n дней* \- за n дней до даты когда абонент будет заблокирован;
* *Создание учетной записи из услуги* \- отправляется при создании учетной записи при подключении услуги;
* *Данные для HotSpot* \- данные для авторизации в [HotSpot|Софт HotSpot];
* *Комментарий к заявке HelpDesk* \- при создании коментария к заявке HelpDesk (приходит абоненту);
* *Анонимная заявка с вэб-сайта* \- отправляется при создании [заявки на подкючение|Заявка на подключение];
* *Поздравление* \- поздравление с праздником, подробнее в [статье|Поздравления];
* *Сброс пароля в Личном кабинете* \- данные для сброса пароля от Личного кабинета, подробнее в [статье|Восстановление пароля к личному кабинету].

h2. Способы отправки сообщений

В настоящее время поддерживаются четыре способа отправки сообщений пользователям:

!message_template_send_types.png|border=1,height=500!

* Письмо электроную почту (e-mail)
* SMS сообщение на телефон
* Telegram-бот, через который можно не только получать рассылку, но и получить данные по лицевому счету, услугам и тарифу
* PUSH-уведомления

Если не выбрать конкретный вид сообщения, то рассылка будет вестись всеми доступными средствами.

h3. Отправитель

Поле отправитель зависит от типа сообщения:

* Если сообщение системное, например у пользователя кончились деньги на счёте, то в поле отправитель будет указан e-mail, принадлежащий Оператору связи.

* Если сообщение отправлялось вручную с помощью веб-интерфейс администратора Carbon Billing 5, то отправителем будет указан e-mail администратора системы, который это сообщение отправил;

* Если данные поля не заполнены, отправителем будет почта вида root@www.example.com, где www.example.com - доменное имя главного внешнего интерфейса.

{anchor:send_message}

h1. Отправка сообщений

Для отправки сообщений непосредственно одному из абонентов необходимо зайти в раздел Абоненты, выбрать абонента, вкладка Отправить сообщения.
Выбирается метод отправки и выбирается шаблон сообщения. Для отправки произвольного текста, следует создать шаблон с типом *"Ручная отправка"* и текстом шаблона *%(text)s*

Если выбрать "Метод отправки" и он отличается от того, что настроен в шаблоне сообщения (поле "Тип отправки"), то будет использоваться метод, выбранный на странице создания сообщения.
Например, если в шаблоне настроен тип "SMS", а на форме не выбран метод ("---"), то сообщение отправится только по SMS. Если в шаблоне настроен тип "SMS", но при создании сообщения выбрать "Email", то сообщение отправится только по Email.
!send_message.png|border=1,width=701,height=184!

h1. Отладка

Логи работы демона отправки сообщений за текущие сутки находятся в файле
{code}/app/asr_billing/var/log/msgd.log{code}
Логи за прошедшие сутки архивируются в этом же каталоге под названием *msgd.log-<date>.gz*

h3. Перестали отправляться email-сообщения абонентам, при использовании встроенного smtp сервера

# В момент отправки запускаем лог и видим следующее:
{code:title=Команда}tail -f /app/asr_billing/var/log/msgd.log | grep -A2 'Отправляем'{code}
{code:title=Пример вывода с ошибкой}2019-11-18 13:45:37,976 - worker - msg_lib - INFO - Отправляем email сообщение абоненту:Иванов Иван Иванович
2019-11-18 13:45:37,985 - worker - msg_lib - ERROR - Can't send:[Errno 111] Connection refused
{code}
# Проверим настройки почтового сервера. Если настройки стандартные, нужно проверить встроенный почтовый сервер на localhost. Проверим, запущен ли он:
{code:title=Команда}service postfix status{code}
{code:title=Пример вывода, сервер остановлен}master остановлен{code}
# Перезапускаем встроенный почтовый сервер:
{code:title=Команда}service postfix restart{code}
{code:title=Пример вывода, сервер перезапущен (остановлен он был ранее)}Останавливается postfix: [СБОЙ ]
Запускается postfix: [ OK ]
{code}

h3. Проблемы с отправкой email-сообщений, при использовании стороннего smtp сервера
Для отладки отправки smtp сообщений сделайте следующее:
# Включите опцию расширенного логирования в [настройках|https://docs.carbonsoft.ru/pages/viewpage.action?pageId=49087090#Системаотправкисообщений(sms%2Cemail).Шаблонысообщений-НастройкаотправкиEmail]
!smtp01.png|border=1!
# Перезапустите службу отправки сообщений, для применения настроек
{code}
chroot /app/asr_billing/ service msgd restart
{code}
# Сделайте пробную отправку сообщения
!smtp02.png|border=1!
Выберите метод отправки smtp. Текст и тема произвольные.
!smtp04.png|border=1!
# Проследите в логе службы отпраки сообщений за ходом отправки
{code}/app/asr_billing/var/log/msgd.log{code}
Пример:
{code}
fgrep ERROR /app/asr_billing/var/log/msgd.log
2018-09-02 10:22:26,350 - worker - msg_lib - ERROR - Can't send:(553, '5.7.1 Sender address rejected: not owned by auth user.', u'test@example.com')
{code}
Произошла ошибка № 553, при отправке письма. Просмотреть коды ошибок можно в документации [Google|https://support.google.com/a/answer/3726730?hl=ru&ref_topic=1355150] на руссом или [IANA|https://www.iana.org/assignments/smtp-enhanced-status-codes/smtp-enhanced-status-codes.xhtml] на английском.
Если у вас возникнут вопросы по ошибкам в smtp диалоге, сохраните лог отправки и создайте заявку в [техническую поддержку|https://helpdesk.carbonsoft.ru/login.php].

h3. Перестали отправляться sms-сообщения абонентам.
Проверям лог отправки сообщений на наличие ошибок:
{code:title=Команда}grep -i 'error' /app/asr_billing/var/log/msgd.log {code}

Видим сообщение об ошибке сертификата:
{code:title=Пример вывода с ошибкой}2019-12-17 08:01:07,298 - worker - msg_lib - ERROR - Can't send message(Curl error):(60, 'SSL certificate problem: self signed certificate in certificate chain')
2019-12-17 08:01:07,423 - worker - msg_lib - ERROR - Can't send message(Curl error):(60, 'SSL certificate problem: self signed certificate in certificate chain')
2019-12-17 08:01:07,545 - worker - msg_lib - ERROR - Can't send message(Curl error):(60, 'SSL certificate problem: self signed certificate in certificate chain')
{code}
Данная ошибка означает, что биллинг не может подключиться к SMS-шлюзу из-за проблем с корневым SSL-сертификатом в chroot биллинга. Для решения проблемы необходимо обновить корневые SSL-сертификаты в chroot биллинга.
{code:title=Команды}chroot /app/asr_billing
cd /etc/ssl/certs
rm -f ca-bundle.crt ca-bundle.trust.crt
wget https://curl.haxx.se/ca/cacert.pem --no-check-certificate
cp cacert.pem ca-bundle.crt
cp cacert.pem ca-bundle.trust.crt
rm -f cacert.pem {code}

h3. При отправке сообщения вручную, время отправки указывается некорректно.

{code:title=Пример записи аудита}
391045 Системные события 2020-10-19 12:41 test Добавлена запись №44011: таблица ОтправитьСообщения Изменения=([Время отправки=2020-10-20 00:00:54.314402],[Метод отправки=]
{code}
Необходимо проверить в настройках "Оператора" в разделе *Настройка сообщений* время начала и окончания "Тихого часа".

h3. Отключить отпраку сообщений на сервере
Иногда во время отладки или работе с базой данных на тестовом сервере полезно отключтиь отправку сообщений.
# Отключите отправку в конфигурационном файле биллинга:
{code:title=Путь конфигурационному файлу}
/app/asr_billing/cfg/config
{code}
{code:title=Служба отправки сообщений включена}
msgd['enabled']='1'
{code}
{code:title=Служба отправки сообщений отключена}
msgd['enabled']='0'
{code}
# Перезапустите службу отправки сообщений для примения измений в силу:
{code}
chroot /app/asr_billing/ service msgd restart
{code}