Создание события уведомлений

Перед созданием события уведомлений необходимо создать шаблон уведомлений, на основе которого будет формироваться текст уведомления для этого события уведомления (см. Управление шаблонами уведомлений). Для СМС-уведомлений также требуется создать SMS-шлюз (см. Управление SMS-шлюзами). Созданное событие уведомлений автоматически создается у всех нижестоящих реселлеров (подробнее см. Делегирование шаблонов интерфейса, шаблонов уведомлений, событий уведомлений и категорий уведомлений).

В этой статье:

Создание события уведомлений

Чтобы создать событие уведомлений:

  1. Перейдите в раздел События уведомлений (см. Навигация по Панели управления Оператора). Отобразится список событий уведомлений (см. Просмотр списка событий уведомлений).
  2. Нажмите Создать. Отобразится страница Добавить обработчик.



    Так как событие уведомлений делегируется всем нижестоящим реселлерам, то оно должно быть уникальным. Набор параметров Событие, Тип Шаблона уведомлений, Шаблон уведомлений и Правило не должен совпадать с соответствующим набором параметров существующих событий уведомлений у текущего реселлера и всех его нижестоящих реселлеров.
  3. В списке Событие выберите событие, при наступлении которого должно срабатывать событие уведомлений. Список событий см. в таблице ниже.

  4. В списке Тип шаблона уведомлений выберите один из способов отправки уведомлений: EmailСМС или Панель управления Клиента.
  5. В списке Шаблон уведомлений выберите ранее созданный шаблон уведомлений выбранного типа (см. Просмотр списка шаблонов уведомлений). Доступен поиск по части ID и названия шаблонов уведомлений.
  6. Если требуется настроить рассылку уведомлений в определенное время:
    1. Снимите флажок Добавить в очередь на отправку сразу. Поле Добавить в очередь на отправку в определенное время (час суток) станет доступным.
    2. В поле Добавить в очередь на отправку в определенное время (час суток) введите час суток, в который задачи на отправку уведомлений по этому событию должны быть поставлены в очередь на отправку.
  7. В поле Правило введите условия обработки события, используя плейсхолдеры (см. Плейсхолдеры для описания правила обработки события).

    При описании правила обработки события возможны следующие операции с плейсхолдерами:

    • >

    • <

    • >=

    • <=

    • =

    • !=

    • include? (например, order.type = "SalesOrder" and (order.plans_ids include? 2000030)) — обработчик события сработает, если в заказ на покупку включен тарифный план с id =2000030)

    • exclude? (исключить определенные сущности (по id, ключу, имени) из выбранного массива сущностей, например, чтобы исключить отправку уведомления о создании заказа на подписку по тарифному плану с id = 2000, используйте следующее правило: order.plans_ids exclude? 2000)
    • and (например, чтобы исключить несколько сущностей из массива, используйте(product_ids exclude? 34650) and (product_ids exclude? 34702))

    • or. Для нескольких or после and используйте дополнительные скобки: order.type = "RenewalOrder" and order.renewal_is_positive = true and subscription.payment_model = "prepay" and ((order.plans_ids include? 293827) or (order.plans_ids include? 293824) or (order.plans_ids include? 294340))
    • % (например, 30% от порога срабатывания финансовой блокировки: account.financial_blocking_threshold % 30 )
    subscription.days_left = 10 AND subscription.status = "active" 

    Этот запрос означает, что обработчик будет работать для всех активных подписок, которые истекают через 10 дней.

  8. Нажмите Создать. Новое событие будет создано и появится в списке событий уведомлений текущего реселлера и его нижестоящих реселлеров.

Список событий

СобытиеОписание
Приближается финансовая блокировка клиента (Account credit hold is coming)

Происходит если баланс клиента становится равным либо меньше заданной доли (от 1% до 99% включительно) от порога срабатывания финансовой блокировки, но не меньше порога срабатывания финансовой блокировки. Для корректной работы требует обязательной настройки правила обработки события.

Например, при следующем правиле обработки события, событие произойдет когда баланс клиента будет составлять менее 35% от порога срабатывания финансовой блокировки:

account.financial_blocking_threshold % 35 < -account.balance

Клиент изменен (Account changed)
Происходит при блокировке клиента (финансовой или административной, см. Переход клиента в финансовую блокировку и Перевод клиента в административную блокировку) и при активации клиента после блокировки (см. Выход клиента из финансовой блокировки и Активация клиента после административной блокировки).
Клиент создан (Account created)
Происходит при создании нового клиента (см. Создание клиента), кроме случаев создания клиента через Reseller API (см. Create account).
Порог срабатывания финансовой блокировки изменен (Financial blocking threshold was changed)
Происходит при изменении значения порога срабатывания финансовой блокировки в правиле обслуживания (см. Создание правила обслуживания) или при изменении индивидуального значения для клиента (см. Просмотр и обновление информации о клиенте). Событие происходит также и при создании нового клиента. Если клиенту назначается другое правило обслуживания, а порог срабатывания финансовой блокировки не изменяется, то событие не происходит.
Менеджер клиента изменен (Account manager changed)
Происходит при изменении или назначении менеджера для уже существующего клиента (см. Просмотр и обновление информации о клиенте).
До истечения постоплатных подписок клиента (Before account's postpaid subscriptions expiration)

Происходит ежедневно для клиентов, у которых есть хотя бы одна подписка по модели Постоплата в статусе Активная с датой истечения, попадающей в правило обработки события. Клиент получает одно уведомление о всех подходящих подписках, истекающих через указанное количество дней в отличие от отдельных уведомлений по каждой подписке До окончания периода подписки (Before subscription expiration).

Для корректной работы требует обязательной настройки правила обработки события с использованием before_subscriptions_expirations include?.

before_subscriptions_expirations include? 3 or before_subscriptions_expirations include? 1

Шаблон уведомления поддерживает отображение расширенной информации о каждой подписке клиента, истекающей через указанное количество дней, в частности:

  • Название подписки.
  • Дата истечения подписки.
  • Статус автопродления подписки.
  • Предварительная стоимость продления.
  • Количество основного ресурса.
  • Кнопка перехода к карточке подписки.
  • Кнопка перехода к карточке последнего заказа за продление или переключение.

    <table width="100%" bgcolor="#ffffff">
      <tr>
        <td height="30"></td>
      </tr>
      <tr>
        <td>
          <table width="660" cellpadding="0" cellspacing="0" align="center" bgcolor="#ffffff" style="">
            <!-- HEADER -->
            <tr>
              <td align="left" valign="top" colspan="3" style="padding: 24px;" bgcolor="#ffffff">
                <table cellpadding="0" cellspacing="0" width="580">
                  <tr>
                    <td align="center" valign="top">
                      <img src="https://example.com/logo.png" width="250" height="52" align="center" border="0" alt="" style="margin:0">
                    </td>
                  </tr>
                </table>
              </td>
            </tr>
            <!--END HEADER -->
            <!-- BODY -->
            <tr>
              <td align="left" colspan="3" valign="top" width='580' style="padding: 0 30px;">
                <table>
                  <tr>
                    <td>
                      <p style="margin:10px 0px;padding:0;width:528px">
                        <font color="#333333" style="font-size: 16px; font-family: 'IBM Plex Sans', sans-serif;">
                          <br>Dear {{owner.first_name}} {{owner.last_name}},
                        </font><br><br>
                        <font color="#333333" style="font-size: 16px; font-family: 'IBM Plex Sans', sans-serif;">
                          We're reaching out regarding your {{account.name}} company. Some of company subscriptions are expiring.
                        </font><br><br>
                      </p>
                    </td>
                  </tr>
                </table>
              </td>
            </tr>
            <!--BUTTONS-->
            <tr>
              <td align="left" width='580' style="padding: 0 30px; ">
                <table>
                  <tr>
                    <td>
                      {% for subscription in subscriptions %}
                      {% if subscription.days_left == 1 %}
                      {% if subscription.last_renew_or_switch_order.status == 'waiting_for_provisioning' %}
                      <table width="528" height="195" style="padding: 20px; border: 2px solid; border-color:#DADADA; border-radius: 12px; border-spacing: 12px; border-collapse: separate; margin-bottom: 25px;">
                        <!-- 1 row ><-->
                        <tr>
                          <td align="left" colspan="3" width="528">
                            <font color="#333333" style="font-size: 18px; font-family: 'IBM Plex Sans', sans-serif; word-break: break-word;">
                              <strong>#{{subscription.id}} {{subscription.name}}</strong>
                            </font>
                          </td>
                        </tr>
                        <!-- 2 row ><-->
                        <tr>
                          <td align="left" style="margin: 0px;" colspan="3">
                            <div style="display: flex; align-items: center;">
                              <svg xmlns="http://www.w3.org/2000/svg" width="21" height="20" viewBox="0 0 21 20" fill="none" style="margin-right: 5px;">
                                <path d="M10.5 18.3125C5.90913 18.3125 2.1875 14.5909 2.1875 10C2.1875 5.40913 5.90913 1.6875 10.5 1.6875C15.0909 1.6875 18.8125 5.40913 18.8125 10C18.8125 14.5909 15.0909 18.3125 10.5 18.3125ZM10.5 19.5C15.7467 19.5 20 15.2467 20 10C20 4.75329 15.7467 0.5 10.5 0.5C5.25329 0.5 1 4.75329 1 10C1 15.2467 5.25329 19.5 10.5 19.5Z" fill="#0DC143" />
                                <path d="M14.0265 6.40148C14.0181 6.40988 14.0102 6.41878 14.0029 6.42812L9.87941 11.6824L7.39335 9.19633C7.04554 8.84852 6.48163 8.84852 6.13382 9.19633C5.78601 9.54414 5.78601 10.1081 6.13382 10.4559L9.27648 13.5985C9.62429 13.9463 10.1882 13.9463 10.536 13.5985C10.5438 13.5908 10.5511 13.5826 10.5579 13.5741L15.2986 7.64812C15.6338 7.29941 15.6296 6.74503 15.286 6.40148C14.9382 6.05367 14.3743 6.05367 14.0265 6.40148Z" fill="#0DC143" />
                                <path d="M10.5 18.3125C5.90913 18.3125 2.1875 14.5909 2.1875 10C2.1875 5.40913 5.90913 1.6875 10.5 1.6875C15.0909 1.6875 18.8125 5.40913 18.8125 10C18.8125 14.5909 15.0909 18.3125 10.5 18.3125ZM10.5 19.5C15.7467 19.5 20 15.2467 20 10C20 4.75329 15.7467 0.5 10.5 0.5C5.25329 0.5 1 4.75329 1 10C1 15.2467 5.25329 19.5 10.5 19.5Z" stroke="#0DC143" stroke-linecap="round" stroke-linejoin="round" />
                                <path d="M14.0265 6.40148C14.0181 6.40988 14.0102 6.41878 14.0029 6.42812L9.87941 11.6824L7.39335 9.19633C7.04554 8.84852 6.48163 8.84852 6.13382 9.19633C5.78601 9.54414 5.78601 10.1081 6.13382 10.4559L9.27648 13.5985C9.62429 13.9463 10.1882 13.9463 10.536 13.5985C10.5438 13.5908 10.5511 13.5826 10.5579 13.5741L15.2986 7.64812C15.6338 7.29941 15.6296 6.74503 15.286 6.40148C14.9382 6.05367 14.3743 6.05367 14.0265 6.40148Z" stroke="#0DC143" stroke-linecap="round" stroke-linejoin="round" />
                              </svg>
                              <font color="#9D9D9D" style="font-size: 16px; font-family: 'IBM Plex Sans', sans-serif;">
                                Order created<br>
                              </font>
                              <span style="margin-left: 5px;"></span>
                              <svg xmlns="http://www.w3.org/2000/svg" width="21" height="20" viewBox="0 0 21 20" fill="none" style="margin-right: 5px;">
                                <path d="M10.5 18.3125C5.90913 18.3125 2.1875 14.5909 2.1875 10C2.1875 5.40913 5.90913 1.6875 10.5 1.6875C15.0909 1.6875 18.8125 5.40913 18.8125 10C18.8125 14.5909 15.0909 18.3125 10.5 18.3125ZM10.5 19.5C15.7467 19.5 20 15.2467 20 10C20 4.75329 15.7467 0.5 10.5 0.5C5.25329 0.5 1 4.75329 1 10C1 15.2467 5.25329 19.5 10.5 19.5Z" fill="#0DC143" />
                                <path d="M14.0265 6.40148C14.0181 6.40988 14.0102 6.41878 14.0029 6.42812L9.87941 11.6824L7.39335 9.19633C7.04554 8.84852 6.48163 8.84852 6.13382 9.19633C5.78601 9.54414 5.78601 10.1081 6.13382 10.4559L9.27648 13.5985C9.62429 13.9463 10.1882 13.9463 10.536 13.5985C10.5438 13.5908 10.5511 13.5826 10.5579 13.5741L15.2986 7.64812C15.6338 7.29941 15.6296 6.74503 15.286 6.40148C14.9382 6.05367 14.3743 6.05367 14.0265 6.40148Z" fill="#0DC143" />
                                <path d="M10.5 18.3125C5.90913 18.3125 2.1875 14.5909 2.1875 10C2.1875 5.40913 5.90913 1.6875 10.5 1.6875C15.0909 1.6875 18.8125 5.40913 18.8125 10C18.8125 14.5909 15.0909 18.3125 10.5 18.3125ZM10.5 19.5C15.7467 19.5 20 15.2467 20 10C20 4.75329 15.7467 0.5 10.5 0.5C5.25329 0.5 1 4.75329 1 10C1 15.2467 5.25329 19.5 10.5 19.5Z" stroke="#0DC143" stroke-linecap="round" stroke-linejoin="round" />
                                <path d="M14.0265 6.40148C14.0181 6.40988 14.0102 6.41878 14.0029 6.42812L9.87941 11.6824L7.39335 9.19633C7.04554 8.84852 6.48163 8.84852 6.13382 9.19633C5.78601 9.54414 5.78601 10.1081 6.13382 10.4559L9.27648 13.5985C9.62429 13.9463 10.1882 13.9463 10.536 13.5985C10.5438 13.5908 10.5511 13.5826 10.5579 13.5741L15.2986 7.64812C15.6338 7.29941 15.6296 6.74503 15.286 6.40148C14.9382 6.05367 14.3743 6.05367 14.0265 6.40148Z" stroke="#0DC143" stroke-linecap="round" stroke-linejoin="round" />
                              </svg>
                              <font color="#9D9D9D" style="font-size: 16px; font-family: 'IBM Plex Sans', sans-serif;">
                                Will be renewed {{subscription.expiration_date | format_as_date}}
                              </font>
                            </div>
                          </td>
                        </tr>
                        <!-- 3 row ><-->
                        <tr>
                          <td width="195">
                            <table width="183" height="60" bgcolor="#0DC143" style="padding: 12px 16px; border-color:#f0f0f0; border-radius: 8px;">
                              <tr>
                                <td align="center" valign="center">
                                  <font color="#ffffff" style="font-size: 16px; font-family: 'IBM Plex Sans', sans-serif;">
                                    <a style="color:#ffffff; text-decoration: none; justify-content: center;" href="https://{{ reseller.custom_attributes['vendor_ccp'] }}/client/billing/sections/orders?filter[document_id][like]={{subscription.last_renew_or_switch_order.number}}&account_id={{subscription.account.id}}" target="_top">See Renew Order</a>
                                  </font>
                                </td>
                              </tr>
                            </table>
                          </td>
                          <td>
                            <font color="#9D9D9D" style="font-size: 14px; font-family: 'IBM Plex Sans', sans-serif;">Preliminary renewal price*<br></font>
                            <font color="#222" style="font-size: 18px; font-family: 'IBM Plex Sans', sans-serif;"><strong>{{subscription.renewal_amount_in_original_currency}}</strong></font><br>
                            <font color="#9D9D9D" style="font-size: 14px; font-family: 'IBM Plex Sans', sans-serif;"> for {{ subscription.resources[0].additional | round }} licenses</font>
                          </td>
                        </tr>
                      </table>
                      {% endif %}
                      {% if subscription.last_renew_or_switch_order.status != 'waiting_for_provisioning' and subscription.auto_renewal == false %}
                      <table width="528" height="195" style="padding: 20px; border: 2px solid; border-color:#DADADA; border-radius: 12px; border-spacing: 12px; border-collapse: separate; margin-bottom: 25px;">
                        <!-- 1 row ><-->
                        <tr>
                          <td align="left" colspan="3" width="528">
                            <font color="#333333" style="font-size: 18px; font-family: 'IBM Plex Sans', sans-serif; word-break: break-word;">
                              <strong>#{{subscription.id}} {{subscription.name}}</strong>
                            </font>
                          </td>
                        </tr>
                        <!-- 2 row ><-->
                        <tr>
                          <td align="left" style="margin: 0px;" colspan="3">
                            <div style="display: flex; align-items: center;">
                              <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" style="margin-right: 5px;">
                                <path d="M15.71 8.29002C15.6171 8.19629 15.5065 8.1219 15.3846 8.07113C15.2627 8.02036 15.132 7.99422 15 7.99422C14.868 7.99422 14.7373 8.02036 14.6154 8.07113C14.4936 8.1219 14.383 8.19629 14.29 8.29002L12 10.59L9.71002 8.29002C9.52171 8.10171 9.26632 7.99593 9.00002 7.99593C8.73372 7.99593 8.47832 8.10171 8.29002 8.29002C8.10171 8.47832 7.99593 8.73372 7.99593 9.00002C7.99593 9.26632 8.10171 9.52171 8.29002 9.71002L10.59 12L8.29002 14.29C8.19629 14.383 8.1219 14.4936 8.07113 14.6154C8.02036 14.7373 7.99422 14.868 7.99422 15C7.99422 15.132 8.02036 15.2627 8.07113 15.3846C8.1219 15.5065 8.19629 15.6171 8.29002 15.71C8.38298 15.8037 8.49358 15.8781 8.61544 15.9289C8.7373 15.9797 8.86801 16.0058 9.00002 16.0058C9.13203 16.0058 9.26274 15.9797 9.38459 15.9289C9.50645 15.8781 9.61705 15.8037 9.71002 15.71L12 13.41L14.29 15.71C14.383 15.8037 14.4936 15.8781 14.6154 15.9289C14.7373 15.9797 14.868 16.0058 15 16.0058C15.132 16.0058 15.2627 15.9797 15.3846 15.9289C15.5065 15.8781 15.6171 15.8037 15.71 15.71C15.8037 15.6171 15.8781 15.5065 15.9289 15.3846C15.9797 15.2627 16.0058 15.132 16.0058 15C16.0058 14.868 15.9797 14.7373 15.9289 14.6154C15.8781 14.4936 15.8037 14.383 15.71 14.29L13.41 12L15.71 9.71002C15.8037 9.61705 15.8781 9.50645 15.9289 9.38459C15.9797 9.26274 16.0058 9.13203 16.0058 9.00002C16.0058 8.86801 15.9797 8.7373 15.9289 8.61544C15.8781 8.49358 15.8037 8.38298 15.71 8.29002ZM19.07 4.93002C18.1476 3.97492 17.0441 3.21309 15.8241 2.689C14.604 2.16491 13.2918 1.88905 11.964 1.87751C10.6362 1.86598 9.31944 2.11899 8.09048 2.6218C6.86151 3.12461 5.745 3.86714 4.80607 4.80607C3.86714 5.745 3.12461 6.86151 2.6218 8.09048C2.11899 9.31944 1.86598 10.6362 1.87751 11.964C1.88905 13.2918 2.16491 14.604 2.689 15.8241C3.21309 17.0441 3.97492 18.1476 4.93002 19.07C5.85249 20.0251 6.95593 20.7869 8.17597 21.311C9.39601 21.8351 10.7082 22.111 12.036 22.1225C13.3638 22.1341 14.6806 21.881 15.9096 21.3782C17.1385 20.8754 18.255 20.1329 19.194 19.194C20.1329 18.255 20.8754 17.1385 21.3782 15.9096C21.881 14.6806 22.1341 13.3638 22.1225 12.036C22.111 10.7082 21.8351 9.39601 21.311 8.17597C20.7869 6.95593 20.0251 5.85249 19.07 4.93002ZM17.66 17.66C16.3521 18.9694 14.6306 19.7848 12.7888 19.9673C10.9471 20.1498 9.09902 19.6881 7.55954 18.6608C6.02006 17.6335 4.88438 16.1042 4.34599 14.3335C3.80761 12.5628 3.89982 10.6602 4.60693 8.9498C5.31404 7.23945 6.59229 5.82717 8.22391 4.95358C9.85553 4.07999 11.7396 3.79915 13.555 4.15889C15.3705 4.51863 17.0051 5.49671 18.1803 6.92648C19.3555 8.35625 19.9986 10.1493 20 12C20.0036 13.0513 19.7986 14.0929 19.3969 15.0644C18.9953 16.0359 18.4049 16.9182 17.66 17.66Z" fill="#FF2E2E" />
                              </svg>
                              <font color="#9D9D9D" style="font-size: 16px; font-family: 'IBM Plex Sans', sans-serif;">
                                Auto-renewal disabled <br>
                              </font>
                              <span style="margin-left: 5px;"></span>
                              <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" style="margin-right: 5px;">
                                <path d="M15.098 12.634L13 11.423V7C13 6.73478 12.8946 6.48043 12.7071 6.29289C12.5196 6.10536 12.2652 6 12 6C11.7348 6 11.4804 6.10536 11.2929 6.29289C11.1054 6.48043 11 6.73478 11 7V12C11 12.1755 11.0462 12.348 11.134 12.5C11.2218 12.652 11.348 12.7782 11.5 12.866L14.098 14.366C14.2118 14.4327 14.3376 14.4762 14.4683 14.4941C14.5989 14.512 14.7319 14.5038 14.8594 14.4701C14.9869 14.4364 15.1064 14.3778 15.2112 14.2977C15.3159 14.2176 15.4038 14.1175 15.4698 14.0033C15.5357 13.8891 15.5784 13.763 15.5954 13.6322C15.6124 13.5014 15.6034 13.3686 15.5688 13.2413C15.5343 13.114 15.4749 12.9949 15.3941 12.8906C15.3133 12.7864 15.2127 12.6992 15.098 12.634ZM12 2C10.0222 2 8.08879 2.58649 6.4443 3.6853C4.79981 4.78412 3.51809 6.3459 2.76121 8.17317C2.00433 10.0004 1.8063 12.0111 2.19215 13.9509C2.578 15.8907 3.53041 17.6725 4.92894 19.0711C6.32746 20.4696 8.10929 21.422 10.0491 21.8079C11.9889 22.1937 13.9996 21.9957 15.8268 21.2388C17.6541 20.4819 19.2159 19.2002 20.3147 17.5557C21.4135 15.9112 22 13.9778 22 12C21.9971 9.34873 20.9426 6.80688 19.0679 4.93215C17.1931 3.05742 14.6513 2.00291 12 2ZM12 20C10.4178 20 8.87104 19.5308 7.55544 18.6518C6.23985 17.7727 5.21447 16.5233 4.60897 15.0615C4.00347 13.5997 3.84504 11.9911 4.15372 10.4393C4.4624 8.88743 5.22433 7.46197 6.34315 6.34315C7.46197 5.22433 8.88743 4.4624 10.4393 4.15372C11.9911 3.84504 13.5997 4.00346 15.0615 4.60896C16.5233 5.21447 17.7727 6.23984 18.6518 7.55544C19.5308 8.87103 20 10.4177 20 12C19.9974 14.1209 19.1537 16.1542 17.6539 17.6539C16.1542 19.1536 14.1209 19.9974 12 20Z" fill="#FF2E2E" />
                              </svg>
                              <font color="#9D9D9D" style="font-size: 16px; font-family: 'IBM Plex Sans', sans-serif;">
                                Expires {{subscription.expiration_date | format_as_date}}
                              </font>
                            </div>
                          </td>
                        </tr>
                        <!-- 3 row ><-->
                        <tr>
                          <td width="195">
                            <table width="183" height="60" bgcolor="#0B408B" style="padding: 12px 16px; border-color:#f0f0f0; border-radius: 8px;">
                              <tr>
                                <td align="center" valign="center">
                                  <font color="#ffffff" style="font-size: 16px; font-family: 'IBM Plex Sans', sans-serif;">
                                    <a style="color:#ffffff; text-decoration: none; justify-content: center;" href="https://{{ reseller.custom_attributes['vendor_ccp'] }}/client/subscriptions/{{subscription.id}}/management?account_id={{subscription.account.id}}" target="_top">Set up renewal</a>
                                  </font>
                                </td>
                              </tr>
                            </table>
                          </td>
                          <td>
                            <font color="#9D9D9D" style="font-size: 14px; font-family: 'IBM Plex Sans', sans-serif;">Preliminary renewal price*<br></font>
                            <font color="#222" style="font-size: 18px; font-family: 'IBM Plex Sans', sans-serif;"><strong>{{subscription.renewal_amount_in_original_currency}}</strong></font><br>
                            <font color="#9D9D9D" style="font-size: 14px; font-family: 'IBM Plex Sans', sans-serif;"> for {{ subscription.resources[0].additional | round }} licenses</font>
                          </td>
                        </tr>
                      </table>
                      {% endif %}
                      {% if subscription.last_renew_or_switch_order.status != 'waiting_for_provisioning' and subscription.auto_renewal == true %}
                      <table width="528" height="195" style="padding: 20px; border: 2px solid; border-color:#DADADA; border-radius: 12px; border-spacing: 12px; border-collapse: separate; margin-bottom: 25px;">
                        <!-- 1 row ><-->
                        <tr>
                          <td align="left" colspan="3" width="528">
                            <font color="#333333" style="font-size: 18px; font-family: 'IBM Plex Sans', sans-serif; word-break: break-word;">
                              <strong>#{{subscription.id}} {{subscription.name}}</strong>
                            </font>
                          </td>
                        </tr>
                        <!-- 2 row ><-->
                        <tr>
                          <td align="left" style="margin: 0px;" colspan="3">
                            <div style="display: flex; align-items: center;">
                              <svg xmlns="http://www.w3.org/2000/svg" width="21" height="20" viewBox="0 0 21 20" fill="none" style="margin-right: 5px;">
                                <path d="M10.5 18.3125C5.90913 18.3125 2.1875 14.5909 2.1875 10C2.1875 5.40913 5.90913 1.6875 10.5 1.6875C15.0909 1.6875 18.8125 5.40913 18.8125 10C18.8125 14.5909 15.0909 18.3125 10.5 18.3125ZM10.5 19.5C15.7467 19.5 20 15.2467 20 10C20 4.75329 15.7467 0.5 10.5 0.5C5.25329 0.5 1 4.75329 1 10C1 15.2467 5.25329 19.5 10.5 19.5Z" fill="#0DC143" />
                                <path d="M14.0265 6.40148C14.0181 6.40988 14.0102 6.41878 14.0029 6.42812L9.87941 11.6824L7.39335 9.19633C7.04554 8.84852 6.48163 8.84852 6.13382 9.19633C5.78601 9.54414 5.78601 10.1081 6.13382 10.4559L9.27648 13.5985C9.62429 13.9463 10.1882 13.9463 10.536 13.5985C10.5438 13.5908 10.5511 13.5826 10.5579 13.5741L15.2986 7.64812C15.6338 7.29941 15.6296 6.74503 15.286 6.40148C14.9382 6.05367 14.3743 6.05367 14.0265 6.40148Z" fill="#0DC143" />
                                <path d="M10.5 18.3125C5.90913 18.3125 2.1875 14.5909 2.1875 10C2.1875 5.40913 5.90913 1.6875 10.5 1.6875C15.0909 1.6875 18.8125 5.40913 18.8125 10C18.8125 14.5909 15.0909 18.3125 10.5 18.3125ZM10.5 19.5C15.7467 19.5 20 15.2467 20 10C20 4.75329 15.7467 0.5 10.5 0.5C5.25329 0.5 1 4.75329 1 10C1 15.2467 5.25329 19.5 10.5 19.5Z" stroke="#0DC143" stroke-linecap="round" stroke-linejoin="round" />
                                <path d="M14.0265 6.40148C14.0181 6.40988 14.0102 6.41878 14.0029 6.42812L9.87941 11.6824L7.39335 9.19633C7.04554 8.84852 6.48163 8.84852 6.13382 9.19633C5.78601 9.54414 5.78601 10.1081 6.13382 10.4559L9.27648 13.5985C9.62429 13.9463 10.1882 13.9463 10.536 13.5985C10.5438 13.5908 10.5511 13.5826 10.5579 13.5741L15.2986 7.64812C15.6338 7.29941 15.6296 6.74503 15.286 6.40148C14.9382 6.05367 14.3743 6.05367 14.0265 6.40148Z" stroke="#0DC143" stroke-linecap="round" stroke-linejoin="round" />
                              </svg>
                              <font color="#9D9D9D" style="font-size: 16px; font-family: 'IBM Plex Sans', sans-serif;">
                                Auto-renewal enabled<br>
                              </font>
                              <span style="margin-left: 5px;"></span>
                              <svg xmlns="http://www.w3.org/2000/svg" width="21" height="20" viewBox="0 0 21 20" fill="none" style="margin-right: 5px;">
                                <path d="M10.5 18.3125C5.90913 18.3125 2.1875 14.5909 2.1875 10C2.1875 5.40913 5.90913 1.6875 10.5 1.6875C15.0909 1.6875 18.8125 5.40913 18.8125 10C18.8125 14.5909 15.0909 18.3125 10.5 18.3125ZM10.5 19.5C15.7467 19.5 20 15.2467 20 10C20 4.75329 15.7467 0.5 10.5 0.5C5.25329 0.5 1 4.75329 1 10C1 15.2467 5.25329 19.5 10.5 19.5Z" fill="#0DC143" />
                                <path d="M14.0265 6.40148C14.0181 6.40988 14.0102 6.41878 14.0029 6.42812L9.87941 11.6824L7.39335 9.19633C7.04554 8.84852 6.48163 8.84852 6.13382 9.19633C5.78601 9.54414 5.78601 10.1081 6.13382 10.4559L9.27648 13.5985C9.62429 13.9463 10.1882 13.9463 10.536 13.5985C10.5438 13.5908 10.5511 13.5826 10.5579 13.5741L15.2986 7.64812C15.6338 7.29941 15.6296 6.74503 15.286 6.40148C14.9382 6.05367 14.3743 6.05367 14.0265 6.40148Z" fill="#0DC143" />
                                <path d="M10.5 18.3125C5.90913 18.3125 2.1875 14.5909 2.1875 10C2.1875 5.40913 5.90913 1.6875 10.5 1.6875C15.0909 1.6875 18.8125 5.40913 18.8125 10C18.8125 14.5909 15.0909 18.3125 10.5 18.3125ZM10.5 19.5C15.7467 19.5 20 15.2467 20 10C20 4.75329 15.7467 0.5 10.5 0.5C5.25329 0.5 1 4.75329 1 10C1 15.2467 5.25329 19.5 10.5 19.5Z" stroke="#0DC143" stroke-linecap="round" stroke-linejoin="round" />
                                <path d="M14.0265 6.40148C14.0181 6.40988 14.0102 6.41878 14.0029 6.42812L9.87941 11.6824L7.39335 9.19633C7.04554 8.84852 6.48163 8.84852 6.13382 9.19633C5.78601 9.54414 5.78601 10.1081 6.13382 10.4559L9.27648 13.5985C9.62429 13.9463 10.1882 13.9463 10.536 13.5985C10.5438 13.5908 10.5511 13.5826 10.5579 13.5741L15.2986 7.64812C15.6338 7.29941 15.6296 6.74503 15.286 6.40148C14.9382 6.05367 14.3743 6.05367 14.0265 6.40148Z" stroke="#0DC143" stroke-linecap="round" stroke-linejoin="round" />
                              </svg>
                              <font color="#9D9D9D" style="font-size: 16px; font-family: 'IBM Plex Sans', sans-serif;">
                                Will be renewed {{subscription.expiration_date | format_as_date}}
                              </font>
                            </div>
                          </td>
                        </tr>
                        <!-- 3 row ><-->
                        <tr>
                          <td width="195">
                            <table width="183" height="60" bgcolor="#0DC143" style="padding: 12px 16px; border-color:#f0f0f0; border-radius: 8px;">
                              <tr>
                                <td align="center" valign="center">
                                  <font color="#ffffff" style="font-size: 16px; font-family: 'IBM Plex Sans', sans-serif;">
                                    <a style="color:#ffffff; text-decoration: none; justify-content: center;" href="https://{{ reseller.custom_attributes['vendor_ccp'] }}/client/subscriptions/{{subscription.id}}/management?account_id={{subscription.account.id}}" target="_top">Change Configuration</a>
                                  </font>
                                </td>
                              </tr>
                            </table>
                          </td>
                          <td>
                            <font color="#9D9D9D" style="font-size: 14px; font-family: 'IBM Plex Sans', sans-serif;">Preliminary renewal price*<br></font>
                            <font color="#222" style="font-size: 18px; font-family: 'IBM Plex Sans', sans-serif;"><strong>{{subscription.renewal_amount_in_original_currency}}</strong></font><br>
                            <font color="#9D9D9D" style="font-size: 14px; font-family: 'IBM Plex Sans', sans-serif;"> for {{ subscription.resources[0].additional | round }} licenses</font>
                          </td>
                        </tr>
                      </table>
                      {% endif%}
                      {% endif%}
                      {% endfor%}
                  <tr>
    
                    <td>
                      <p style="margin:0;padding:0;width:480px">
                        <font color="#797979" style="font-size: 14px; font-family: 'IBM Plex Sans', sans-serif;">*Renewal prices are preliminary in local currency, at the time of purchase the exchange rate may vary.<br></font>
                      </p>
                    </td>
                  </tr>
              </td>
            </tr>
          </table>
        </td>
      </tr>
      <!--How to renew><-->
      <tr>
        <td align="left" colspan="3" valign="top" width='580' style="padding: 0 30px;">
          <table>
            <tr>
              <td height="40"></td>
            </tr>
            <tr>
              <td>
                <font color="#222" style="font-size: 22px; font-family: 'IBM Plex Sans', sans-serif;">
                  <strong>How to renew</strong><br /><br />
                </font>
              </td>
            </tr>
            <tr>
              <td>
                <table height="330" style="background-color: #F5F5F5; padding: 20px; padding-bottom: 100px;">
                  <tr>
                    <td width='264' height='46'>
                      <font color="#222" style="font-size: 18px; font-family: 'IBM Plex Sans', sans-serif;"><strong>To renew your subscription without changes</strong></font>
                    </td>
                  </tr>
                  <tr>
                    <td>
                      <div style="display: flex; align-items: center;">
                        <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none" style="margin-right: 10px;">
                          <circle cx="20" cy="20" r="20" fill="#0B408B" fill-opacity="0.1" />
                          <text x="50%" y="50%" dominant-baseline="middle" text-anchor="middle" font-size="16" font-family="IBM Plex Sans" fill="#333333">1</text>
                        </svg>
                        <font color="#222" style="font-size: 16px; font-family: 'IBM Plex Sans', sans-serif;">Log in <a style="color:#0B408B; text-decoration: none; text-align: right;" href="https://{{ reseller.custom_attributes['vendor_ccp'] }}/client/home?account_id={{subscription.account.id}}" target="_top"> to the Customer Panel</a></font>
                      </div>
                    </td>
                  </tr>
                  <tr>
                    <td style="padding-left: 20px">
                      <div style="width: 1px; height: 32px; background: #D6D6D6;;"></div>
                    </td>
                  </tr>
                  <tr>
                    <td>
                      <div style="display: flex; align-items: center;">
                        <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none" style="margin-right: 10px;">
                          <circle cx="20" cy="20" r="20" fill="#0B408B" fill-opacity="0.1" />
                          <text x="50%" y="50%" dominant-baseline="middle" text-anchor="middle" font-size="16" font-family="IBM Plex Sans" fill="#333333">2</text>
                        </svg>
                        <font color="#222" style="font-size: 16px; font-family: 'IBM Plex Sans', sans-serif;">Find the subscription</font>
                      </div>
                    </td>
                  </tr>
                  <tr>
                    <td style="padding-left: 20px">
                      <div style="width: 1px; height: 32px; background: #D6D6D6;"></div>
                    </td>
                  </tr>
                  <tr>
                    <td>
                      <div style="display: flex;">
                        <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none" style="margin-right: 10px;">
                          <circle cx="20" cy="20" r="20" fill="#0B408B" fill-opacity="0.1" />
                          <text x="50%" y="50%" dominant-baseline="middle" text-anchor="middle" font-size="16" font-family="IBM Plex Sans" fill="#333333">3</text>
                        </svg>
                        <font color="#222" style="font-size: 16px; width: 179px; font-family: 'IBM Plex Sans', sans-serif;">Make sure that auto-renewal is switched on</font>
                      </div>
                    </td>
                  </tr>
                </table>
              </td>
              <!--PART2><-->
              <td>
                <table height="330" style="padding: 20px; padding-bottom: 100px;">
                  <tr>
                    <td width='255' height='46'>
                      <font color="#222" style="font-size: 18px; font-family: 'IBM Plex Sans', sans-serif;"><strong>To renew your subscription with some changes</strong></font>
                    </td>
                  </tr>
                  <tr>
                    <td>
                      <div style="display: flex; align-items: center;">
                        <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none" style="margin-right: 10px;">
                          <circle cx="20" cy="20" r="20" fill="#0B408B" fill-opacity="0.1" />
                          <text x="50%" y="50%" dominant-baseline="middle" text-anchor="middle" font-size="16" font-family="IBM Plex Sans" fill="#333333">1</text>
                        </svg>
                        <font color="#222" style="font-size: 16px; font-family: 'IBM Plex Sans', sans-serif;">Log in <a style="color:#0B408B; text-decoration: none; text-align: right;" href="https://{{ reseller.custom_attributes['vendor_ccp'] }}/client/home?account_id={{subscription.account.id}}" target="_top"> to the Customer Panel</a></font>
                      </div>
                    </td>
                  </tr>
                  <tr>
                    <td style="padding-left: 20px">
                      <div style="width: 1px; height: 32px; background: #D6D6D6;;"></div>
                    </td>
                  </tr>
                  <tr>
                    <td>
                      <div style="display: flex; align-items: center;">
                        <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none" style="margin-right: 10px;">
                          <circle cx="20" cy="20" r="20" fill="#0B408B" fill-opacity="0.1" />
                          <text x="50%" y="50%" dominant-baseline="middle" text-anchor="middle" font-size="16" font-family="IBM Plex Sans" fill="#333333">2</text>
                        </svg>
                        <font color="#222" style="font-size: 16px; font-family: 'IBM Plex Sans', sans-serif;">Find the subscription</font>
                      </div>
                    </td>
                  </tr>
                  <tr>
                    <td style="padding-left: 20px">
                      <div style="width: 1px; height: 32px; background: #D6D6D6;"></div>
                    </td>
                  </tr>
                  <tr>
                    <td>
                      <div style="display: flex;">
                        <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" fill="none" style="margin-right: 10px;">
                          <circle cx="20" cy="20" r="20" fill="#0B408B" fill-opacity="0.1" />
                          <text x="50%" y="50%" dominant-baseline="middle" text-anchor="middle" font-size="16" font-family="IBM Plex Sans" fill="#333333">3</text>
                        </svg>
                        <font color="#222" style="font-size: 16px; width: 172px; height: 40px; font-family: 'IBM Plex Sans', sans-serif;">Click on the "Renew" button. Create an order by selecting a new tariff or by setting the desired number of licences</font>
                      </div>
                    </td>
                  </tr>
                </table>
              </td>
            </tr>
          </table>
        </td>
      </tr>
      <tr>
        <td align="center" colspan="3" valign="top" width='580' style="padding: 0 30px;">
          <table>
            <tr>
              <td height="50"></td>
            </tr>
            <tr>
              <td>
                <table width="520" height="160" style="padding: 20px; border: 2px solid; border-color:#DADADA; border-radius: 24px; border-collapse: separate">
                  <tr>
                    <td align="center">
                      <p style="font-family: 'IBM Plex Sans', sans-serif; font-size: 16px;">Changed your mind?</p>
                      <p style="font-family: 'IBM Plex Sans', sans-serif; font-size: 16px; color: #9D9D9D;">You can always cancel any of your subscriptions</p>
                      <p style="margin-top: 25px"><a style="padding: 7px 25px; border-radius: 8px; text-decoration: none; background-color:#f5f5f5; font-family: 'IBM Plex Sans', sans-serif; font-size: 16px; color:#0B408B" href="https://{{ reseller.custom_attributes['vendor_ccp'] }}/client/subscriptions/all?account_id={{subscription.account.id}}">Manage my subscriptions</a></p>
                    </td>
                  </tr>
                </table>
              </td>
            </tr>
          </table>
        </td>
      </tr>
      <tr>
        <td align="left" colspan="3" valign="top" width='580' style="padding: 0 30px;">
          <table>
            <tr>
              <td height="50"></td>
            </tr>
            <tr>
              <td align="left">
                <p style="font: 30px IBM Plex Sans, sans-serif; font-color: #000000; line-height: 22px; margin: 0 0 0px 0;">
                  <strong>Support</strong><br /><br />
                </p>
                <p style="font-family: 'IBM Plex Sans', sans-serif; font-size: 16px; font-color: #333333; line-height: 22px; margin: 0 0 0px 0;">
                  <!-- <p style="font-family: 'IBM Plex Sans', sans-serif; font-size: 16px;">Changed your mind?</p> -->
                  To work with the your Subscriptions, please use the instructions:<br>
                  <a style="font-family: 'IBM Plex Sans', sans-serif; line-height: 22px;" href="https://docs.example.com/my-en/subscriptions/amount-of-resources">Changing the number licenses</a><br />
                  <a style="font-family: 'IBM Plex Sans', sans-serif; line-height: 22px;" href="https://docs.example.com/my-en/subscriptions/purchase">Purchasing a new subscription</a><br />
                  <a style="font-family: 'IBM Plex Sans', sans-serif; line-height: 22px;" href="https://docs.example.com/my-en/subscriptions/analytics">Viewing resource consumption statistics</a><br />
                </p>
              </td>
            </tr>
          </table>
        </td>
      </tr>
      <tr>
        <td align="left" colspan="3" valign="top" width='580' style="padding: 0 30px;">
          <table>
            <tr>
              <td height="12"></td>
            </tr>
            <tr>
              <td>
                <div style="display: flex; margin-bottom: 20px;">
                  <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" style="background-color: #007EC61A; padding: 20px; border-radius: 12px; margin-right: 25px;">
                    <path d="M12 2C9.43639 2.00731 6.97349 2.99891 5.12 4.77V3C5.12 2.73478 5.01464 2.48043 4.82711 2.29289C4.63957 2.10536 4.38522 2 4.12 2C3.85478 2 3.60043 2.10536 3.41289 2.29289C3.22536 2.48043 3.12 2.73478 3.12 3V7.5C3.12 7.76522 3.22536 8.01957 3.41289 8.20711C3.60043 8.39464 3.85478 8.5 4.12 8.5H8.62C8.88522 8.5 9.13957 8.39464 9.32711 8.20711C9.51464 8.01957 9.62 7.76522 9.62 7.5C9.62 7.23478 9.51464 6.98043 9.32711 6.79289C9.13957 6.60536 8.88522 6.5 8.62 6.5H6.22C7.50578 5.15636 9.21951 4.30265 11.0665 4.08567C12.9136 3.86868 14.7785 4.30198 16.3407 5.31104C17.9028 6.32011 19.0646 7.84191 19.6263 9.61479C20.188 11.3877 20.1145 13.3009 19.4184 15.0254C18.7223 16.7499 17.4472 18.1781 15.8122 19.0643C14.1772 19.9505 12.2845 20.2394 10.4596 19.8813C8.63463 19.5232 6.99147 18.5405 5.81259 17.1022C4.63372 15.6638 3.99279 13.8597 4 12C4 11.7348 3.89464 11.4804 3.70711 11.2929C3.51957 11.1054 3.26522 11 3 11C2.73478 11 2.48043 11.1054 2.29289 11.2929C2.10536 11.4804 2 11.7348 2 12C2 13.9778 2.58649 15.9112 3.6853 17.5557C4.78412 19.2002 6.3459 20.4819 8.17317 21.2388C10.0004 21.9957 12.0111 22.1937 13.9509 21.8079C15.8907 21.422 17.6725 20.4696 19.0711 19.0711C20.4696 17.6725 21.422 15.8907 21.8079 13.9509C22.1937 12.0111 21.9957 10.0004 21.2388 8.17317C20.4819 6.3459 19.2002 4.78412 17.5557 3.6853C15.9112 2.58649 13.9778 2 12 2Z" fill="#0B408B" />
                  </svg>
                  <font style="font: 15px IBM Plex Sans, sans-serif; font-color: #333333; line-height: 2px; margin: 0 0 0px 0;">
                  </font>
                  <font style="font-family: 'IBM Plex Sans', sans-serif; line-height: 22px; font-size: 18px;"><strong>Support for your Subscriptions</strong> <br>
                    <span style="font-family: 'IBM Plex Sans', sans-serif; line-height: 22px; font-size: 16px;">
                                  Personal account functionality,
                                  payment for services,<br> subscription management,
                                  changing the number of <br>licenses:<br><br>
                                  <a href="mailto:{{reseller.custom_attributes['vendor_email']}}" style="color:#0B408B;">
                                  {{reseller.custom_attributes['vendor_email']}}</a><br>
                                  <span style="color:#0B408B;">{{reseller.custom_attributes['vendor_phone']}}<span>
                                  </span>
                  </font>
                </div>
              </td>
            </tr>
            <tr>
              <td>
                <div style="display: flex;">
                  <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" style="background-color: #007EC61A; padding: 20px; border-radius: 12px; margin-right: 25px;">
                    <path d="M12 3C10.6868 3 9.38642 3.25866 8.17317 3.7612C6.95991 4.26375 5.85752 5.00035 4.92893 5.92893C3.05357 7.8043 2 10.3478 2 13V20C2 20.2652 2.10536 20.5196 2.29289 20.7071C2.48043 20.8946 2.73478 21 3 21H6C6.79565 21 7.55871 20.6839 8.12132 20.1213C8.68393 19.5587 9 18.7956 9 18V16C9 15.2044 8.68393 14.4413 8.12132 13.8787C7.55871 13.3161 6.79565 13 6 13H4C4 10.8783 4.84285 8.84344 6.34315 7.34315C7.84344 5.84285 9.87827 5 12 5C14.1217 5 16.1566 5.84285 17.6569 7.34315C19.1571 8.84344 20 10.8783 20 13H18C17.2044 13 16.4413 13.3161 15.8787 13.8787C15.3161 14.4413 15 15.2044 15 16V18C15 18.7956 15.3161 19.5587 15.8787 20.1213C16.4413 20.6839 17.2044 21 18 21H21C21.2652 21 21.5196 20.8946 21.7071 20.7071C21.8946 20.5196 22 20.2652 22 20V13C22 10.3478 20.9464 7.8043 19.0711 5.92893C17.1957 4.05357 14.6522 3 12 3ZM6 15C6.26522 15 6.51957 15.1054 6.70711 15.2929C6.89464 15.4804 7 15.7348 7 16V18C7 18.2652 6.89464 18.5196 6.70711 18.7071C6.51957 18.8946 6.26522 19 6 19H4V15H6ZM20 19H18C17.7348 19 17.4804 18.8946 17.2929 18.7071C17.1054 18.5196 17 18.2652 17 18V16C17 15.7348 17.1054 15.4804 17.2929 15.2929C17.4804 15.1054 17.7348 15 18 15H20V19Z" fill="#0B408B" />
                  </svg>
                  <font style="font: 15px IBM Plex Sans, sans-serif; font-color: #333333; line-height: 2px; margin: 0 0 0px 0;">
                  </font>
                  <font style="font-family: 'IBM Plex Sans', sans-serif; line-height: 22px; font-size: 18px;"><strong>Product support</strong> <br>
                    <span style="font-family: 'IBM Plex Sans', sans-serif; line-height: 22px; font-size: 16px;">
                                  Configuration, installation, product errors:<br><br>
                                  <a href="mailto:{{reseller.custom_attributes['vendor_email']}}" style="color:#0B408B;">
                                  {{reseller.custom_attributes['vendor_email']}}</a>
                                  </span>
                  </font>
                </div>
              </td>
            </tr>
          </table>
        </td>
      </tr>
      <tr>
        <td align="left" colspan="3" valign="top" width='580' style="padding: 0 30px;">
          <table>
            <tr>
              <td height="12"></td>
            </tr>
            <tr>
              <td height="12" />
            </tr>
            <tr>
              <td>
                <p style="font-family: 'IBM Plex Sans', sans-serif; font-size: 30px; font-color: #000000; line-height: 22px; margin: 0 0 0px 0;">
                  <strong>Our benefits</strong><br /><br />
                </p>
              </td>
            </tr>
            <!-- START -->
            <tr>
              <td align="left" colspan="3" valign="top" width='580' style="padding: 0 0px;">
                <table>
                  <!-- 1 -->
                  <tr>
                    <td>
                    <td align="left" valign="top" width="30" height="30">
                      <div style="line-height:1px;">
                        <img src="https://example.com/time.png" style="border:0; margin:0;" align="right" height="29" width="29" />
                      </div>
                    </td>
              </td>
    
              <td>
              <td align="left" valign="center" width='550'>
                <p style="font: 13px IBM Plex Sans, sans-serif; font-color: #333333; line-height: 22px; margin: 0 0 0px 0;">
                  24/7 access to subscription management and an ability to activate new services.
                </p>
              </td>
        </td>
      </tr>
      <!-- 2 -->
      <tr>
        <td>
        <td align="left" valign="top" width="30" height="30">
          <div style="line-height:1px;">
            <img src="https://example.com/hand.png" style="border:0; margin:0;" align="right" height="29" width="29" />
          </div>
        </td>
        </td>
        <td>
        <td align="left" valign="center" width='550'>
          <p style="font: 13px IBM Plex Sans, sans-serif; font-color: #333333; line-height: 22px; margin: 0 0 0px 0;">
            Free Trial Licenses.
          </p>
        </td>
        </td>
      </tr>
      <!-- 3 -->
      <tr>
        <td>
        <td align="left" valign="top" width="30" height="30">
          <div style="line-height:1px;">
            <img src="https://example.com/grow.png" style="border:0; margin:0;" align="right" height="29" width="29" />
          </div>
        </td>
        </td>
        <td>
        <td align="left" valign="center" width='550'>
          <p style="font: 13px IBM Plex Sans, sans-serif; font-color: #333333; line-height: 22px; margin: 0 0 0px 0;">
            An hourly / daily consumption-based pricing (depends on the service).
          </p>
        </td>
        </td>
      </tr>
      <!-- 4 -->
      <tr>
        <td>
        <td align="left" valign="top" width="30" height="30">
          <div style="line-height:1px;">
            <img src="https://example.com/box.png" style="border:0; margin:0;" align="right" height="29" width="29" />
          </div>
        </td>
        </td>
        <td>
        <td align="left" valign="center" width='550'>
          <p style="font: 13px IBM Plex Sans, sans-serif; font-color: #333333; line-height: 22px; margin: 0 0 0px 0;">
            Expense analytics and drill down reports.
          </p>
        </td>
        </td>
      </tr>
      <!-- 5 -->
      <tr>
        <td>
        <td align="left" valign="top" width="30" height="30">
          <div style="line-height:1px;">
            <img src="https://example.com/letter.png" style="border:0; margin:0;" align="right" height="29" width="29" />
          </div>
        </td>
        </td>
        <td>
        <td align="left" valign="center" width='550'>
          <p style="font: 13px IBM Plex Sans, sans-serif; font-color: #333333; line-height: 22px; margin: 0 0 0px 0;">
            Automatic reminders and notifications of subscriptions’ statuses.
          </p>
        </td>
        </td>
      </tr>
    </table>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    <tr>
      <td colspan="3" align="center" valign="top" height="30"></td>
    </tr>
    
    <!-- END BODY -->
    <tr>
      <td valign="top" align="left" colspan="3" style="padding: 16px 0;" bgcolor="#f1f1f1">
        <table cellspacing="0" cellpadding="0" width="640" style="">
          <tr>
            <td valign="top" align="left" width="30"></td>
            <td valign="top" align="left">
              <font size="2" color="#888888" style="font-family: 'IBM Plex Sans', sans-serif;font-size:12px;line-height:1.5">
                © {{ reseller.custom_attributes['vendor_short_name'] }}, {{ reseller.custom_attributes['vendor_full_name'] }}.<br>
                E-mail: <a href="mailto:{{ reseller.custom_attributes['vendor_email'] }}" target="_top">{{ reseller.custom_attributes['vendor_email'] }}</a>
                You have received this message as a service user of {{ reseller.custom_attributes['vendor_short_name'] }}.
              </font>
            </td>
            <td align="left" valign="top" width="16"></td>
          </tr>
        </table>
      </td>
    </tr>
    </table>
    </td>
    </tr>
    </table>
Отчет о потреблении по pay-as-you-go подпискам готов (The report with daily consumptions of pay-as-you-go subscriptions is ready)

Событие наступает, когда завершено формирование отчета о потреблении (успешно или с ошибкой). Для разделения уведомлений о ежемесячных и однократных отчетах, а также по статусу отчета, требуется настройка правила обработки события. Подробнее об отчетах см. Reports в Руководстве по Панели управления Клиента.

Корректировка баланса подтверждена (Correction approved)
Происходит при подтверждении корректировки в Панели управления Оператора (см. Подтверждение корректировки) или по API (см. Update correction status). В поле Правило можно указать ID менеджера, подтвердившего корректировку. Уведомление отправляется на email Владельца клиента.
Закрытие Акта (Invoice closed)
Происходит в финансовый день при выставлении акта за потребленную услугу (подробнее см. Управление актами). Также используется для ручной отправки акта на email (см. Пересылка акта по email)
Счет был подтвержден (The Invoice was approved)
Событие наступает при подтверждении акта по модели Постоплата с внешним управлением (см. Управление актами по модели Постоплата сторонней ERP-системой). Чтобы определить, был ли прикреплен к связанному платежу счет на оплату, в правиле обработки события используется плейсхолдер invoice.has_attached.
Счет был аннулирован (The Invoice was revoked)
Событие наступает при аннулировании подтверждения акта по модели Постоплата с внешним управлением (см. Аннулирование подтверждения акта по модели Постоплата с выставлением счета сторонней ERP-системой и Аннулирование подтверждения акта по модели Постоплата по ID). Не требует настройки правила обработки события.
Недостаточно средств на балансе (Low balance)
Происходит если баланс клиента меньше либо равен нулю.
Сотрудник создан (Manager created)Происходит при создании менеджера через Панель управления Оператора (см. Добавление сотрудника) или по API (см. Create manager). Используется для отправки менеджеру учетных данных для входа (см. Плейсхолдеры в шаблонах уведомлений для отдельных событий уведомлений). Не требует настройки правила обработки события.
Ручная операция (Manual operation)Происходит при:
Срок оплаты платежа наступил (Payment due date has come)

Происходит только для подписок по модели Постоплата через заданное в правиле количество дней после перехода платежа в статус Просрочен (см. Плейсхолдеры для описания правила обработки события). При отсутствии условий в правиле событие произойдет в дату перехода платежа в статус Просрочен.

Email-уведомление содержит вложение:

  • Если внешнее управление актами по модели Постоплата выключено — PDF-счет для платежа. PDF-счет формируется только для клиентов, у которых в качестве способа оплаты по умолчанию задан активный способ оплаты на основе модуля CheckCash (см. Просмотр и обновление типа клиентов).
  • Если внешнее управление актами по модели Постоплата включено (см. Управление актами по модели Постоплата сторонней ERP-системой) — файл счета на оплату из сторонней ERP-системы, связанный с платежом. С помощью плейсхолдеров также можно вывести его сумму с указанием валюты (Внешний итог).

Платеж изменен (Payment has been changed) (ранее — Платеж получен (Payment has been received))

Происходит при смене статуса платежа. Email-уведомление содержит вложение:

  • Предоплата: PDF-счет для платежа. PDF-счет формируется только для клиентов, у которых в качестве способа оплаты по умолчанию задан активный способ оплаты на основе модуля CheckCash (см. Просмотр и обновление типа клиентов).
  • Постоплата:
    • Если внешнее управление актами по модели Постоплата выключено — PDF-счет для платежа. PDF-счет формируется только для клиентов, у которых в качестве способа оплаты по умолчанию задан активный способ оплаты на основе модуля CheckCash (см. Просмотр и обновление типа клиентов).
    • Если внешнее управление актами по модели Постоплата включено (см. Управление актами по модели Постоплата сторонней ERP-системой) — файл счета на оплату из сторонней ERP-системы, связанный с платежом. С помощью плейсхолдеров также можно вывести его сумму с указанием валюты (Внешний итог).
Срок оплаты платежа приближается (Payment due date is coming)

Происходит только для подписок по модели Постоплата. В зависимости от условий в правиле (см. Плейсхолдеры для описания правила обработки события) происходит за указанное количество дней до крайней даты оплаты платежа (см. Срок оплаты платежа в Просмотр акта для модели Постоплата).

Для отправки уведомлений за несколько дней до истечения периода отсрочки платежа используйте правило следующего вида:

payment.days_left = N

где N — количество дней до крайней даты оплаты платежа Срок оплаты, за которое нужно отправить уведомление.

Чтобы отправить уведомление в последний день отсрочки платежа (в дату Срок оплаты), используйте правило следующего вида:

payment.days_left = 0

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

Email-уведомление содержит вложение:

  • Если внешнее управление актами по модели Постоплата выключено — PDF-счет для платежа. PDF-счет формируется только для клиентов, у которых в качестве способа оплаты по умолчанию задан активный способ оплаты на основе модуля CheckCash (см. Просмотр и обновление типа клиентов).
  • Если внешнее управление актами по модели Постоплата включено (см. Управление актами по модели Постоплата сторонней ERP-системой) — файл счета на оплату из сторонней ERP-системы, связанный с платежом. С помощью плейсхолдеров также можно вывести его сумму с указанием валюты (Внешний итог).
Платеж по постоплате создан (Postpay payment created)Происходит на следующий день после финансового дня, когда платформа закрывает акт по модели Постоплата и создает связанный платеж. Email-уведомление включает PDF-счет для платежа. PDF-счет формируется только для клиентов, у которых в качестве способа оплаты по умолчанию задан активный способ оплаты на основе модуля CheckCash (см. Просмотр и обновление типа клиентов).
Запрос сброса пароля (Password reset request)Происходит при запросе письма с инструкциями по сбросу пароля к Панели управления Клиента (подробнее см. Reset password).
Запрос сброса пароля менеджера (Manager password reset request)Происходит при запросе письма с инструкциями по сбросу пароля к Панели управления Оператора (подробнее см. Сброс пароля к учетной записи сотрудника).
Статус MFA для вашего аккаунта изменен (MFA status for your account has been changed)

Происходит при смене статуса многофакторной аутентификации (MFA) менеджера (см. Просмотр и обновление информации о сотруднике), т.е. при добавлении или удалении единственного метода MFA (см. Настройка методов MFA сотрудника).

В поле Получатель на странице создания и редактирования шаблона уведомлений укажите плейсхолдер {{manager.email}} — уведомление будет отправлено только тому менеджеру, для которого сработало событие уведомлений.

Не требует настройки правила обработки события.

Настройка MFA изменена на уровне реселлера (MFA setting has been changed on the Reseller's side)

Происходит при изменении настройки Обязательность использования для многофакторной аутентификации (MFA) в настройках безопасности реселлера (см. Настройки сотрудника).

В поле Получатель на странице создания и редактирования шаблона уведомлений укажите плейсхолдер {{manager.email}} — уведомление будет отправлено каждому менеджеру реселлера.

Не требует настройки правила обработки события.

До окончания периода подписки (Before subscription expiration)Происходит ежедневно для всех подписок, у которых нет связи с заказом на продление в статусе Ожидает предоставления или Предоставляется. Для корректной работы требует обязательной настройки правила обработки события.
После окончания периода подписки (After subscription expiration)Происходит ежедневно для всех подписок. Для корректной работы требует обязательной настройки правила обработки события. 
Подписка переведена из пробного статуса в платный (After subscription switched from trial to no-trial)Происходит при переходе подписки из пробного на платный период как для модели Предоплата, так и Постоплата.
Подписка изменена (Subscription changed)

Происходит при:

  • Смене статуса подписки на:
    • Активная.
    • Удалена, кроме перехода в статус Удалена из статуса Новый заказ.
    • Остановлена, кроме случая административной блокировки клиента.
    • Доставлена.
    • Просрочена оплата.
    • Ожидает ручного подтверждения.
    • Ошибка установки.
    • Ошибка активации.
    • Ошибка продления.
    • Ошибка обновления.
  • Переходе подписки из пробного на платный период.
  • Продлении активной подписки в Панели управления Оператора (см. Ручное продление подписки) или в Панели управления Клиента (см. Renew subscription).
  • Автопродлении подписки (см. Автоматическое продление подписки).
  • Изменении ресурсов подписки (см. Изменение количества ресурсов подписки).
Подтверждение email (Verify email)Происходит при регистрации нового пользователя в Панели управления Клиента, после нажатия кнопки Зарегистрироваться (подробнее см. Quick registration).
Приглашение пользователя (User invitation)Происходит при приглашении внешнего пользователя Владельцем или Администратором клиента (подробнее см. Приглашение Внешнего пользователя).
Заказ изменён (Order changed)Происходит при смене статуса заказа на:
  • Отменен (при ручной отмене заказа или при отмене платежа по заказу в Панели управления Клиента и Панели управления Оператора). 
  • Предоставляется.
  • Завершен (см. Просмотр списка заказов).

Счет к уведомлению не прикрепляется.

Заказ создан (Order created)

Происходит при создании нового заказа (Создание заказа). В том числе, срабатывает как при ручном, так и при автоматическом создании заказа на продление.

Чтобы исключить отправку клиентам счетов на оплату по заказам на пролонгацию, создаваемым в финансовый день для автоматической оплаты с баланса клиента (см. Пролонгация подписки), необходимо чтобы для подписок, у которых установлена Точка автоматического продления (в днях) = 0, события Заказ создан и Заказ изменён не срабатывали. Для этого в правиле обработки этих событий задайте условие order.type = "ProlongOrder" AND order.renewal_is_positive = true (см. Плейсхолдеры для описания правила обработки события). События будут срабатывать только для подписок, у которых Точка автоматического продления (в днях) больше 0.

Обещанный платёж создан (Guaranteed payment created)Происходит при:
  • Ручном создании обещанного платежа через Панель управления Оператора или через Панель управления Клиента.
  • Автоматическом создании обещанного платежа в статусе Предоставлен в связи с пополнением.

Подробнее см. Управление обещанными платежами.

Обещанный платёж изменён (Guaranteed payment changed)Происходит при автоматическом или ручном отзыве обещанного платежа. Подробнее см. Управление обещанными платежами.
Обещанный платёж истекает (Guaranteed payment will expire)Происходит за указанное количество дней до наступления даты истечения обещанного платежа. Подробнее см. Управление обещанными платежами.
Осталось дней до оплаты (Days left to pay)Происходит ежедневно для всех подписок. Для корректной работы требует обязательной настройки правила обработки события.
Телефонная верификация (Phone verification)Происходит при нажатии кнопки Получить код на шаге SMS верификация в процессе полной регистрации клиента (см. Full registration).
Финансовый день наступает (Billing day is coming)
Происходит ежедневно для каждого уникального финансового дня. Пользователю клиента с ролью Владелец отправляется email-сообщение о дате финансового дня и о сумме предстоящего списания средств с баланса клиента. Если у клиента есть подписки с типом биллинга Pay as you go, в тексте уведомления укажите, что сумма, на которую нужно пополнить баланс, может измениться. В сообщении также может быть размещена ссылка на страницу пополнения баланса клиента (см. Пополнение Баланса Клиента). Пользователи, авторизованные в Панели управления Оператора, также могут перейти по этой ссылке в Панель управления Клиента в рамках одного реселлера, если у них в браузере нет сессии с авторизацией в Панели управления Клиента.
Учитываются только подписки в следующих статусах (см. Просмотр списка подписок):
  • Активная.
  • Ожидает ручного подтверждения для остановки подписки.
  • Просрочена оплата.

Для корректной работы требует обязательной настройки правила обработки события.

Если не задать правило обработки, то событие уведомления будет срабатывать во всех возможных ситуациях: ежедневно для каждого уникального финансового дня, независимо от типа биллинга подписки. Например, если у клиента есть три подписки с типами биллинга Предзаказ, CSP annual, Pay as you go и тремя разными финансовыми днями, то в течение всего месяца ему будет приходить по три уведомления в день.

Чтобы этого избежать, задайте следующие параметры (см. Плейсхолдеры для описания правила обработки события):

  • Наличие подписок с определенной моделью оплаты — при помощи плейсхолдера subscription.payment_model:

    • Если subscription.payment_model = "postpay", уведомление отправляется, только если у клиента есть неудаленные подписки по модели Постоплата, у которых наступает финансовый день.
    • Если subscription.payment_model = "prepay", уведомление отправляется, только если у Клиента есть неудаленные Подписки по модели Предоплата, у которых наступает финансовый день.
  • Наличие подписок с определенным типом биллинга у клиента — при помощи плейсхолдера monthly_billing. Чтобы уведомления приходили только клиентам, у которых есть подписки с ежемесячными платежами (например, типы биллинга CSP месячный, Monthly Commitment), используйте следующее условие в правиле: monthly_billing = "true".

  • Количество дней, которые остались до даты финансового дня — при помощи плейсхолдера billing_day_left. Чтобы уведомления приходили только за определенное количество дней до наступления уникального финансового дня, используйте следующее условие в правиле: billing_day_left = {количество дней до финансового дня, за которое нужно отправить уведомление}.

Дополнительно можно задать следующие параметры:

  • Число месяца, на которое установлен финансовый день — при помощи плейсхолдера billing_day.
  • Сумма списаний в статусе Открыто, которые будут закрыты или заблокированы в финансовый день, для которого было вызвано событие — при помощи плейсхолдера billing_day_open_charges_amount. Учитываются только подписки, у которых Точка автоматического продления = 0. Если списания в статусе Открыто не существуют, то производится расчет суммы на основе предварительной генерации списаний на будущий финансовый период.
  • ID планов активных подписок клиента — при помощи плейсхолдера plan_ids.
  • ID продуктов активных подписок клиента — при помощи плейсхолдера product_ids.
  • Ключ типа клиента — при помощи плейсхолдера account.type_key.
  • Ключ правила обслуживания клиента — при помощи плейсхолдера account.class_key.
  • Доступный баланс клиента — при помощи плейсхолдера account.balance.
  • Порог срабатывания финансовой блокировки клиента — при помощи плейсхолдера account.financial_blocking_threshold.

Например:

billing_day = 1 and billing_day_left = 28 and account.type_key = "personal" and account.class_key = "default" and account.financial_blocking_threshold = 0 and monthly_billing = true and (plan_ids include? 1420) and (product_ids include? 498)

Если нужно добавить несколько условий, которые должны выполняться одновременно, то следует использовать оператор and: billing_day = 1 and billing_day_left = 28. В этом примере уведомление будет отправлено для подписок, финансовый день которых установлен 1-го числа каждого месяца, за 28 дней до наступления финансового дня. Всего будет отправлено одно уведомление.

Если нужно добавить несколько условий, одно из которых должно выполняться обязательно, то следует использовать оператор or: billing_day = 1 or billing_day = 5. В этом примере по одному уведомлению будет отправляться каждый день финансового периода для подписок, финансовый день которых установлен как 1-го, так и 5-го числа каждого месяца.

Для группировки и объединения условий можно использовать скобки (): (billing_day = 1 or billing_day = 2) and (billing_day_left = 3 or billing_day_left = 4) . В этом примере уведомления будут отправлены для подписок, финансовый день которых установлен как 1-го, так и 2-го числа каждого месяца за 3 и за 4 дня до наступления финансового дня. Всего будет отправлено четыре уведомления.

Также для формирования правила можно использовать арифметические операторы + и -, операторы сравнения значений плейсхолдеров > <, менять порядок значений (1 = billing_day).

Чтобы сформировать таблицу с перечнем подписок, которые истекают в ближайший финансовый период, можно использовать следующие плейсхолдеры:

  • next_billing_period_start_day — дата начала следующего финансового периода относительно финансового дня, для которого было вызвано событие.
  • next_billing_period_end_day — дата окончания следующего финансового периода относительно финансового дня, для которого было вызвано событие.
  • Плейсхолдеры для сущности Подписка (см. Плейсхолдеры для сущности Подписка).

Финансовый день по подпискам менеджера наступил (Billing day for manager's subscriptions has come)

(ранее — Финансовый день наступил (Billing day has come))

Событие происходит после прохождения биллинг-процесса и закрытия списаний для каждого менеджера при выполнении следующего условия:
  1. Хотя бы один клиент этого менеджера имеет неудаленную подписку с финансовым днем, равным текущей дате выполнения биллинг-процесса. Например, у менеджера один клиент, и у этого клиента 3 подписки, у двух из них финансовый день 5 число, у одной — 10. Событие будет происходить дважды — 5 и 10 числа.
  2. Выполняются условия, заданные в поле Правило.

В поле Получатель на странице создания и редактирования шаблона уведомлений укажите плейсхолдер {{manager.email}} — email менеджера, для которого сработало событие уведомлений.

Финансовый день по подписке клиента наступил (Billing day for account's subscription has come)
Событие происходит после прохождения биллинг-процесса и закрытия списаний для каждого клиента при выполнении всех следующих условий:
  1. У клиента есть подписка с финансовым днем, равным текущей дате выполнения биллинг-процесса. 
  2. У этой подписки есть списания в статусе Закрыто за прошедший финансовый период.
  3. Сумма этих списаний больше 0.
  4. Выполняются условия, заданные в поле Правило.

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

В поле Получатель на странице создания и редактирования шаблона уведомлений можно указать плейсхолдер {{owner.email}} — email Владельца клиента, для которого сработало событие уведомлений.

По подпискам Microsoft Azure Plan и Microsoft Azure для события может использоваться специально подготовленный шаблон уведомления с разбивкой данных по категориям ресурсов, а для подписок VMware vCloud Director — с разбивкой по ресурсам:

Шаблон уведомления поддерживает отображение следующих данных:

  1. Динамика расходов:
    1. Сумма расходов за последний завершенный финансовый период (поддерживается сумма до 11 знаков), а также обозначение валюты реселлера. Если сумма расходов отрицательная, отображается 0.
    2. Месяц и год последнего завершенного финансового периода.
    3. Сумма расходов за предпоследний завершенный финансовый период (поддерживается сумма до 11 знаков), а также обозначение валюты реселлера. Если сумма расходов отрицательная, отображается 0.
    4. Месяц и год предпоследнего завершенного финансового периода.
    5. Темп прироста в процентах, рассчитанный по формуле:

      ( (Прошлый период - Позапрошлый период) / Позапрошлый период ) × 100

      Для величины прироста предусмотрена цветовая индикация: положительный прирост — красный, отрицательный прирост — зеленый, 0 — серый.

    6. Темп прироста для отрицательных сумм устанавливается следующим образом:
      • -100%, если сумма расходов отрицательная только за прошлый период.
      • 100%, если сумма расходов отрицательная только за позапрошлый период.
      • 0%, если сумма расходов отрицательная за прошлый и позапрошлый периоды.
    7. Блок не отображается, если отсутствуют данные за последний или предпоследний финансовый период.
  2. Структура расходов за последний месяц:
    1. Линейная диаграмма:
      1. Количество частей диаграммы соответствует числу ресурсов (категорий ресурсов), которые были потреблены за прошедший финансовый период:
      2. Каждая часть диаграммы обладает своим цветом.
      3. Части диаграммы располагаются от большего к меньшему слева направо, включая отрицательные суммы потребления.
      4. Максимальное число ресурсов (категорий ресурсов): 5, остальные объединяются в отдельную группу.
    2. Легенда диаграммы:
      1. Отображается название ресурса (категории ресурсов) и процент ее вклада в общее потребление за прошедший финансовый период. Для отрицательных сумм потребления отображается вклад 0%.
      2. Поддерживается отображение до 3-х ресурсов (категорий ресурсов). 
      3. Названия ресурсов (категорий ресурсов) располагаются от большего к меньшему слева направо.
      4. Рядом с названием ресурса (категории ресурсов отображается цвет, который соответствует цвету блока линейной диаграммы для этого ресурса (категории ресурсов).
    3. Таблица:
      1. Таблица содержит следующие столбцы:
        1. Цвет, который соответствует цвету блока линейной диаграммы для этого ресурса (категории ресурсов).
        2. Название ресурса (категории ресурсов).
        3. Стоимость, <обозначение валюты реселлера> — размер потребления ресурса (категории ресурсов) за прошедший финансовый период в валюте реселлера.
      2. Строки в таблице отсортированы по убыванию стоимости, включая отрицательные суммы потребления.
  3. Динамика еженедельных затрат за последний месяц — столбчатая диаграмма:
    1. Количество частей в столбцах диаграммы соответствует числу ресурсов (категорий ресурсов), потребленных за прошедший финансовый период.
    2. Максимальное число ресурсов (категорий ресурсов): 5, остальные объединяются в отдельную группу.
    3. Каждая часть диаграммы обладает своим цветом и соответствует линейной диаграмме.
    4. Столбцы отображают потребление ресурсов (категорий ресурсов) по неделям прошедшего финансового периода, включая отрицательные значения.
  4. Ссылка для перехода в Панель управления Клиента на страницу Аналитика той подписки, для которой сработало событие, с предустановленными фильтрами (см. -Subscription analytics):
    1. Детализация — по дням или месяцам.
    2. Период — в зависимости от детализации:
      • По дням — прошедший или текущий биллинг период.
      • По месяцам — 3, 6 или 12 биллинг периодов.

Точность и разделители сумм в шаблоне уведомления отображаются в соответствии с настройками для валюты реселлера (см. Просмотр списка валют). Названия месяцев автоматически отображаются на языке, установленном по умолчанию в Панели управления Оператора (см. Управление языковыми настройками), остальной текст указывается вручную.

Пример отображения данных (English)Пример кода шаблона уведомления
<!-- CHART_COLORS = %w(#5c4aa7 #d4e689 #94db99 #bd8c75 #9fc5e8 #db577d) -->
<!-- SHOULD BE MAPPED IN CORE FOR SORTED BY 'percent_usage' for last_billing_period -->
<table width="100%" bgcolor="#ffffff">
<tr>
  <td height="30"></td>
</tr>
<tr>
  <td>
    <table width="640" cellpadding="0" cellspacing="0" align="center" bgcolor="#ffffff" style="">
    <!-- HEADER -->
<tr>
  <td align="left" valign="top" colspan="3" style="padding: 24px 30px;" bgcolor="#ffffff">
    <table cellpadding="0" cellspacing="0" width="580">
      <tr>
        <td align="left" valign="top">
          <a href="{{ reseller.custom_attributes['vendor_site_url'] }}" title="Vendor" style="text-decoration:none" target="_blank"><img src="https://example.com/logo.png" width="151" height="54" align="left" border="0" alt="" style="margin:0"></a>
        </td>
        <td align="right" valign="top"> <font color="#333333" face="Arial" style="font-size: 13px;">
          <a href="https://example.com/catalog/" title="Vendor Market" target="_blank">Buy a subscription to a new service<br>or try free</a>
          </font>
          <br>
          <br> <font color="#333333" face="Arial, sans-serif" style="font-size: 14px;">
          <b><a href="tel:+1-234-555-67-89" target="_blank" style="color:#333333;text-decoration: none;">+1(234)555-67-89</a></b>
          </font>
        </td>
      </tr>
    </table>
  </td>
</tr>
<!--END HEADER -->
<!-- GRAY -->
<tr>
  <td align="left" valign="top" colspan="3" style="padding: 1px 30px;" bgcolor="#f0f0f0"> </td>
</tr>
<!--END GRAY -->
<!-- BODY -->
<tr>
  <td align="left" colspan="3" valign="top" width='580' style="padding: 0 30px;">
    <table>
      <tr>
        <td>
          <p style="margin:0;padding:0;"> <font color="#333333" face="Arial, sans-serif" style="font-size: 20px;">
            <br>Hello, {{owner.first_name}} {{owner.last_name}}!
            </font>
            <br>
            <br> <font color="#333333" face="Arial, sans-serif" style="font-size: 14px;">
            The expenses of the company <strong> # {{account.id}} "{{account.name}}" </strong> for the subscription <strong> # {{subscription.id}} "{{subscription.name}}" </strong>
            in the past billing period (from {{subscription.last_billing_period_start_day}} to {{subscription.last_billing_period_end_day}}) were
            <strong>{{ subscription.last_billing_period_amount_with_currency }}</strong>
            </font>
          </p>
        </td>
      </tr>
    </table>
  </td>
</tr>
<tr>
  <td height="24"></td>
</tr>

<tr>
  <td align="left" colspan="3" valign="center" width='580' style="padding: 0 30px;">
    <table>
      <tr>
        <td height="12"></td>
      </tr>
      <tr>
        <td>
          <p style="font: 16px Arial, sans-serif; color: #333333; line-height: 22px; margin: 0 0 0px 0;"> <strong>Spend Dynamics</strong>
            <br />
            <br />
          </p>
        </td>
      </tr>
      <tr>
        <td align="center" valign="center" width='190' style='border-right: 2px solid; border-right-color: #f1f1f1;'>
          <p style="font: 16px Arial, sans-serif; color: #333333; line-height: 2px; margin: 0 0 0px 0; font-weight: bold;">
            {% if subscription.pre_last_billing_period_amount < 0 %}
              <br>0.00 {{reseller.currency}} 
              <br />
            {% else %}
              <br>{{ subscription.pre_last_billing_period_amount_with_currency }}
              <br />
            {% endif %}
          </p>
          <p style="font: 14px Arial, sans-serif; color: #808080; line-height: 22px; margin: 0 0 0px 0;">
            <br>{{subscription.pre_last_billing_period_month}} {{subscription.pre_last_billing_period_year}}
            <br>
          </p>
        </td>
        <td align="center" valign="center" width='190' style='border-right: 2px solid; border-right-color: #f1f1f1;'>
          <p style="font: 16px Arial, sans-serif; color: #333333; line-height: 2px; margin: 0 0 0px 0; font-weight: bold;">
            {% if subscription.last_billing_period_amount < 0 %}
              <br>0.00 {{reseller.currency}}
              <br />
            {% else %}
              <br>{{ subscription.last_billing_period_amount_with_currency }}
              <br />
            {% endif %}
          </p>
          <p style="font: 14px Arial, sans-serif; color: #808080; line-height: 22px; margin: 0 0 0px 0;">
            <br>{{subscription.last_billing_period_month}} {{subscription.last_billing_period_year}}
            <br>
          </p>
        </td>
        <td align="center" valign="center" width='190'>
        {% if subscription.pre_last_billing_period_amount < 0 %}
          <p style="font: 16px Arial, sans-serif; color: red; line-height: 2px; margin: 0 0 0px 0; font-weight: bold;">
          <br>+100%
          <br>
        {% elsif subscription.change_in_periods > 0 %}
          <p style="font: 16px Arial, sans-serif; color: red; line-height: 2px; margin: 0 0 0px 0; font-weight: bold;">
          <br>+{{subscription.change_in_periods}}%
          <br>
        {% elsif subscription.change_in_periods < 0 %}  
          <p style="font: 16px Arial, sans-serif; color: green; line-height: 2px; margin: 0 0 0px 0; font-weight: bold;">
          <br>{{subscription.change_in_periods}}%
        {% else %}
          <p style="font: 16px Arial, sans-serif; color: grey; line-height: 2px; margin: 0 0 0px 0; font-weight: bold;">
          <br>{{subscription.change_in_periods}}%
        {% endif %}
          </p>
          <p style="font: 14px Arial, sans-serif; color: #808080; line-height: 22px; margin: 0 0 0px 0;">
            <br><br>
          </p>
        </td>
      </tr>
    </table>
  </td>
</tr>
<tr>
  <td align="left" valign="top" width='580' style="padding: 0 30px;">
    <table>
      <tr>
        <td height="12"></td>
      </tr>
      <tr>
        <td>
          <p style="font: 16px Arial, sans-serif; color: #333333; line-height: 22px; margin: 0 0 0px 0;">
            <br><strong>Cost Structure in {{subscription.last_billing_period_month}} by resource category</strong>
            <br />
            <br />
          </p>
        </td>
      </tr>
      <tr>
        <td align="left" valign="top" width='640'>
          <table>
            <tr>
            {% assign counter = 0 %}
            {% for item in subscription.resource_categories %}
              {% if counter < 3 %}
                {% assign counter = counter | plus:1 %}
                <td align="left" valign="center" width='15' height='15' style="background-color: {{item['chart_color']}}; border-radius: 1px;"> </td>
                <td>  </td>
                <td align="left" valign="center" height='15'>
                    <p style="font: 12px Arial, sans-serif; color: #555555; line-height: 15px; margin: 0;"> {{ item['name'] }} {{ item['percent_usage'] }}% </p>
                </td>
                <td>  </td>
              {% endif %}
            {% endfor %}
            </tr>
          </table>
        </td>
      </tr>
      <tr>
        <td height="12"></td>
      </tr>
      <tr>
        <td align="left" valign="top" width='640'>
          <table>
            <tr>
              {% for item in subscription.resource_categories %}
              
              <td align="center" valign="center" width="{{ item['percent_usage'] | times: 630 | divided_by: 100 }}" height='25' style="background-color: {{item['chart_color']}}; border-radius: 1px;"> </td>
              
              {% endfor %}
            </tr>
          </table>
        </td>
      </tr>
      <tr>
        <td align="center" colspan="6" valign="center" width='640'>
          <table>
            <tr>
              <td height="24"></td>
            </tr>
            <tr>
              <td width='20' height='20' style='background-color: none;'> </td>
              <td valign="center" width='300' style='padding-left: 20px;'>
                <p style="font: 16px Arial, sans-serif; color: #808080; line-height: 2px;">
                  <br>RESOURCE CATEGORY
                  <br />
                </p>
              </td>
              <td valign="center" width='300'>
                <p style="font: 16px Arial, sans-serif; color: #808080; line-height: 2px;">
                  <br>COST, {{reseller.currency}}
                  <br />
                  <br>
                </p>
              </td>
              <br>
            </tr>
            <br>
            <tr><td><br></td></tr>

            {% for item in subscription.resource_categories %}
            <tr>
              <td align="left" valign="center" width='15' height='15' style="background-color: {{item['chart_color']}}; border-radius: 1px;"> </td>
              <td valign="center" width='300' style='padding-left: 20px;'>
                <p style="font: 14px Arial, sans-serif; color: #333333; line-height: 2px;">
                  <br>{{ item['name'] }}
                  <br />
                </p>
              </td>
              <td valign="center" width='300'>
                <p style="font: 14px Arial, sans-serif; color: #333333; line-height: 2px;">
                  <br>{{ item['total_for_current_billing_period'] }}
                  <br />
                </p>
              </td>
            </tr>
            <tr>
              <td height="8"></td>
            </tr>
            {% endfor %}
          </table>
        </td>
      </tr>
      <tr> </tr>
    </table>
  </td>
</tr>
<tr>
  <td align="left" valign="top" width='580' style="padding: 0 30px;">
    <table>
      <tr>
        <td height="12"></td>
      </tr>
      <tr>
        <td>
          <p style="font: 16px Arial, sans-serif; color: #333333; line-height: 22px; margin: 0 0 0px 0;">
            <br><strong>Last month weekly cost dynamic</strong>
            <br />
            <br />
          </p>
        </td>
      </tr>
      <!--
        max_totals_sum_weekly
        decorated_steps ['200K', '190K', '180K' .. '20K', '10K'] (max and first el == decorated max_totals_sum_weekly), size == 10
        resources_total_by_weeks [['3 Feb. - 9 Feb.', [[46000, '#5c4aa7'], [15000,'#d4e689'], ... ]], ...]] -->

        <!-- maybe refactor this.... -->
      <tr>
        <td align="center" colspan="7" valign="center" width='640' height='280'>
          <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt;">
            <tr>
              <td style="vertical-align:bottom; border-right: 2px solid #ebebeb;">
                <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border: none; border-collapse: collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; width:20px;">
                  {% for step in subscription.decorated_steps['positive_result'] %}
                  <tr>
                    <td style="height: 28; font: 12px Arial, sans-serif; color: #808080;" align="center">{{step}}</td>
                  </tr>
                  {% endfor %}
                </table>
              </td>
              {% for item in subscription.resources_total_by_weeks %}
              <td style="padding: 0 16px; vertical-align:bottom;">
                <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border: none; border-collapse: collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; width:80px;">
                    {% for totals in item['totals'] %}
                      {% if totals['total'] > 0 %}
                        <tr> 
                          <td><div style="height: {{ totals['total'] | times: 140 | divided_by: subscription.max_totals_sum_weekly }}px; background-color: {{totals['chart_color']}};"></div></td>
                        </tr> 
                      {% endif %}
                    {% endfor %}
                </table>
              </td>
              {% endfor %}
            </tr>
            <tr style='border-top: 2px solid #ebebeb;'>
              <td style="vertical-align:bottom; border-right: 2px solid #ebebeb;">
                <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border: none; border-collapse: collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; width:20px;">
                  {% for step in subscription.decorated_steps['negative_result'] %}
                    {% if step == '0' %}
                      <tr>
                        <td style="height: 28; font: 12px Arial, sans-serif; color: #808080;" align="center"><br></td>
                      </tr>
                    {% else %}
                      <tr>
                        <td style="height: 28; font: 12px Arial, sans-serif; color: #808080;" align="center">{{step}}</td>
                      </tr>
                    {% endif %}
                  {% endfor %}
                </table>
              </td>
              {% for item in subscription.resources_total_by_weeks %}
              <td style="padding: 0 16px; vertical-align:top;">
                <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border: none; border-collapse: collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; width:80px;">
                    {% assign reverse_total = item['totals'] | reverse %}
                    {% for totals in reverse_total %}
                      {% if totals['total'] < 0 %}
                        <tr> 
                          <td><div style="height: {{ totals['total'] | times: 140 | divided_by: subscription.min_totals_sum_weekly }}px; background-color: {{totals['chart_color']}};"></div></td>
                        </tr> 
                
                      {% endif %}                
                    {% endfor %}
                </table>
              </td>
              {% endfor %}
            </tr>
            <tr>
              <td align="center" valign="center"> </td>
              {% for item in subscription.resources_total_by_weeks %}
              <td align="center" valign="center">
                <p style="font: 12px Arial, sans-serif; color: #808080; line-height: 14px;">
                  <br>{{ item['week'] }}
                  <br />
                </p>
              </td>
              {% endfor %}
            </tr>
          </table>
        </td>
      </tr>
      <tr> </tr>
    </table>
  </td>
</tr>
<tr>
  <td height="24"></td>
</tr>
<td>
  <table>
    <tr>
      <p style="font: 14px Arial, sans-serif; font-color: #333333; line-height: 22px; margin: 12px 0; text-align: center;">
        <a style="display: inline-block;" href="https://ap-07.test.activeplatform.com/client/analytics"> <span style="display: inline-block; color: #ffffff; background-color: rgb(22, 155, 213); padding: 12px 60px; border-radius: 5px;">
        EXPLORE MORE ANALYTICS
        </span> </a>
      </p>
    </tr>
  </table>
</td>
</tr>
<tr>
  <td colspan="3" align="center" valign="top" height="30"></td>
</tr>
<!-- END BODY -->
<tr>
  <td valign="top" align="left" colspan="3" style="padding: 16px 0;" bgcolor="#f1f1f1">
    <table cellspacing="0" cellpadding="0" width="640" style="">
      <tr>
        <td valign="top" align="left" width="30"></td>
        <td valign="top" align="left"> <font size="2" face="Arial, sans-serif" color="#888888" style="font-family:Arial,sans-serif;font-size:12px;line-height:1.5">
          © {{ reseller.custom_attributes['vendor_short_name'] }}, {{ reseller.custom_attributes['vendor_full_name'] }}.<br>
          Phone:
          <a href="tel:{{ reseller.custom_attributes['vendor_phone_escaped'] }}" value="{{ reseller.custom_attributes['vendor_phone'] }}">
          <font color="#888888">{{ reseller.custom_attributes['vendor_phone'] }}</font> </a> , E-mail: <a href="mailto:{{ reseller.custom_attributes['vendor_email'] }}" target="_top">{{ reseller.custom_attributes['vendor_email'] }}</a>, <a href="{{ reseller.custom_attributes['vendor_site_url'] }}">contact information</a>.
          <br> You have received this message as service user of {{ reseller.custom_attributes['vendor_short_name'] }}. If you believe that this message was sent by mistake, please, <a href="mailto:{{ reseller.custom_attributes['vendor_email'] }}?Subject=Email was sent by mistake">let us know</a> about that. </font>
        </td>
        <td align="left" valign="top" width="16"></td>
      </tr>
    </table>
  </td>
</tr>
 <table width="100%" bgcolor="#ffffff">
   <tr>
     <td>
       <table width="640" cellpadding="0" cellspacing="0" align="center" bgcolor="#ffffff" style="">
         
         <!-- BODY LINE 1 -->
         <tr>
   <td align="left" colspan="3" valign="top" width='580' style="padding: 0 30px;">
     <table>
       <tr>
         <td>
           <p style="margin:0;padding:0;"> <font color="#333333" face="Arial, sans-serif" style="font-size: 20px;">
             <br>Здравствуйте, {{owner.first_name}} {{owner.last_name}}!
             </font>
             <br>
             <br> <font color="#333333" face="Arial, sans-serif" style="font-size: 14px;">
             Расходы компании <strong> # {{account.id}} "{{account.name}} </strong> по подписке <strong> # {{subscription.id}} "{{subscription.name}}" </strong>за прошедший отчетный период (с {{subscription.last_billing_period_start_day | date: "%d.%m.%Y" }} по {{subscription.last_billing_period_end_day | date: "%s" | minus : 86400 | date: "%d.%m.%Y" }}) составили <strong>{{ subscription.last_billing_period_amount_with_currency }}</strong>
             </font>
           </p>
         </td>
       </tr>
     </table>
   </td>
 </tr>
 <tr>
   <td height="24"></td>
 </tr>
 
 
 {% if subscription.last_billing_period_amount > 0 and subscription.pre_last_billing_period_amount > 0 %} 
 
 <tr>
   <td align="left" colspan="3" valign="center" width='580' style="padding: 0 30px;">
     <table>
       <tr>
         <td height="12"></td>
       </tr>
       <tr>
         <td>
           <p style="font: 16px Arial, sans-serif; color: #333333; line-height: 22px; margin: 0 0 0px 0;"> <strong>Динамика расходов</strong>
             <br />
             <br />
           </p>
         </td>
       </tr>
       <tr>
         <td align="center" valign="center" width='190' style='border-right: 2px solid; border-right-color: #f1f1f1;'>
           <p style="font: 16px Arial, sans-serif; color: #333333; line-height: 2px; margin: 0 0 0px 0; font-weight: bold;">
             <br>{{ subscription.pre_last_billing_period_amount_with_currency }}
             <br />
           </p>
           <p style="font: 14px Arial, sans-serif; color: #808080; line-height: 22px; margin: 0 0 0px 0;">
             <br>{{subscription.pre_last_billing_period_month}} {{subscription.pre_last_billing_period_year}}
             <br>
           </p>
         </td>
         <td align="center" valign="center" width='190' style='border-right: 2px solid; border-right-color: #f1f1f1;'>
           <p style="font: 16px Arial, sans-serif; color: #333333; line-height: 2px; margin: 0 0 0px 0; font-weight: bold;">
             <br>{{ subscription.last_billing_period_amount_with_currency }}
             <br />
           </p>
           <p style="font: 14px Arial, sans-serif; color: #808080; line-height: 22px; margin: 0 0 0px 0;">
             <br>{{subscription.last_billing_period_month}} {{subscription.last_billing_period_year}}
             <br>
           </p>
         </td>
         <td align="center" valign="center" width='190'>
 
         {% if subscription.change_in_periods > 0  %}
           <p style="font: 16px Arial, sans-serif; color: red; line-height: 2px; margin: 0 0 0px 0; font-weight: bold;">
           <br>+{{subscription.change_in_periods}}%
           <br>
         {% elsif subscription.change_in_periods < 0 %}  
           <p style="font: 16px Arial, sans-serif; color: green; line-height: 2px; margin: 0 0 0px 0; font-weight: bold;">
           <br>{{subscription.change_in_periods}}%
         {% else %}
           <p style="font: 16px Arial, sans-serif; color: grey; line-height: 2px; margin: 0 0 0px 0; font-weight: bold;">
           <br>{{subscription.change_in_periods}}%
         {% endif %}
           </p>
           <p style="font: 14px Arial, sans-serif; color: #808080; line-height: 22px; margin: 0 0 0px 0;">
             <br><br>
           </p>
         </td>
       </tr>
     </table>
   </td>
 </tr>
 
 {% endif %}
 
 <tr>
   <td align="left" valign="top" width='580' style="padding: 0 30px;">
     <table>
       <tr>
         <td height="12"></td>
       </tr>
       <tr>
         <td>
           <p style="font: 16px Arial, sans-serif; color: #333333; line-height: 22px; margin: 0 0 0px 0;">
             <br><strong>Структура расходов за {{subscription.last_billing_period_month}} по ресурсам</strong>
             <br />
             <br />
           </p>
         </td>
       </tr>
       <tr>
         <td align="left" valign="top" width='640'>
           <table>
             <tr>
             {% assign counter = 0 %}
             {% for item in subscription.resource_names %}
               {% if counter < 3 %}
                 {% assign counter = counter | plus:1 %}
                 <td align="left" valign="center" width='15' height='15' style="background-color: {{item['chart_color']}}; border-radius: 1px;"> </td>
                 <td>  </td>
                 <td align="left" valign="center" height='15'>
                     <p style="font: 12px Arial, sans-serif; color: #555555; line-height: 15px; margin: 0;"> {{ item['name'] }} {{ item['percent_usage'] }}% </p>
                 </td>
                 <td>  </td>
               {% endif %}
             {% endfor %}
             </tr>
           </table>
         </td>
       </tr>
       <tr>
         <td height="12"></td>
       </tr>
       <tr>
         <td align="left" valign="top" width='640'>
           <table>
             <tr>
               {% for item in subscription.resource_names %}
               
               <td align="center" valign="center" width="{{ item['percent_usage'] | times: 630 | divided_by: 100 }}" height='25' style="background-color: {{item['chart_color']}}; border-radius: 1px;"> </td>
               
               {% endfor %}
             </tr>
           </table>
         </td>
       </tr>
       <tr>
         <td align="center" colspan="6" valign="center" width='640'>
           <table>
             <tr>
               <td height="24"></td>
             </tr>
             <tr>
               <td width='20' height='20' style='background-color: none;'> </td>
               <td valign="top" width='300' style='padding-left: 20px;'>
                 <p style="font: 16px Arial, sans-serif; color: #808080; line-height: 2px;">
                   <br>РЕСУРС
                   <br/>
                 </p>
               </td>
               <td valign="center" width='300'>
                 <p style="font: 16px Arial, sans-serif; color: #808080; line-height: 2px;">
                   <br>СТОИМОСТЬ, {{reseller.currency}}
                   <br/>
                 </p>
               </td>
               <br>
             </tr>
             <br>
             <tr><td><br></td></tr>
 
             {% for item in subscription.resource_names %}
             <tr>
               <td align="left" valign="center" width='15' height='15' style="background-color: {{item['chart_color']}}; border-radius: 1px;"> </td>
               <td valign="center" width='300' style='padding-left: 20px;'>
                 <p style="font: 14px Arial, sans-serif; color: #333333; line-height: 2px;">
                   <br>{{ item['name'] }}
                   <br />
                 </p>
               </td>
               <td valign="center" width='300'>
                 <p style="font: 14px Arial, sans-serif; color: #333333; line-height: 2px;">
                   <br>{{ item['total_for_current_billing_period'] }}
                   <br />
                 </p>
               </td>
             </tr>
             <tr>
               <td height="8"></td>
             </tr>
             {% endfor %}
           </table>
         </td>
       </tr>
       <tr> </tr>
     </table>
   </td>
 </tr>
 <tr>
   <td align="left" valign="top" width='580' style="padding: 0 30px;">
     <table>
       <tr>
         <td height="12"></td>
       </tr>
       <tr>
         <td>
           <p style="font: 16px Arial, sans-serif; color: #333333; line-height: 22px; margin: 0 0 0px 0;">
             <br><strong>Динамика еженедельных затрат за последний месяц</strong>
             <br />
             <br />
           </p>
         </td>
       </tr>
       <!--
         max_totals_sum_weekly_by_resource_name
         decorated_steps_by_resource_name ['200K', '190K', '180K' .. '20K', '10K'] (max and first el == decorated max_totals_sum_weekly_by_resource_name), size == 10
         resources_total_by_weeks_and_resource_name [['3 Feb. - 9 Feb.', [[46000, '#5c4aa7'], [15000,'#d4e689'], ... ]], ...]] -->
 
         <!-- maybe refactor this.... -->
      <tr>
  <td align="center" colspan="7" valign="center" width='640' height='280'>
    <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt;">
      <tr>
        <td style="vertical-align:bottom; border-right: 2px solid #ebebeb;">
          <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border: none; border-collapse: collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; width:20px;">
            {% for step in subscription.decorated_steps_by_resource_name['positive_result'] %}
            <tr>
              <td style="height: 28; font: 12px Arial, sans-serif; color: #808080;" align="center">{{step}}</td>
            </tr>
            {% endfor %}
          </table>
        </td>
        {% for item in subscription.resources_total_by_weeks_and_resource_name %}
        <td style="padding: 0 16px; vertical-align:bottom;">
          <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border: none; border-collapse: collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; width:80px;">
              {% for totals in item['totals'] %}
                {% if totals['total'] > 0 %}
                  <tr> 
                    <td><div style="height: {{ totals['total'] | times: 140 | divided_by: subscription.max_totals_sum_weekly_by_resource_name }}px; background-color: {{totals['chart_color']}};"></div></td>
                  </tr> 
                {% endif %}
              {% endfor %}
          </table>
        </td>
        {% endfor %}
      </tr>
      <tr style='border-top: 2px solid #ebebeb;'>
        <td style="vertical-align:bottom; border-right: 2px solid #ebebeb;">
          <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border: none; border-collapse: collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; width:20px;">
            {% for step in subscription.decorated_steps_by_resource_name['negative_result'] %}
              {% if step == '0' %}
                <tr>
                  <td style="height: 28; font: 12px Arial, sans-serif; color: #808080;" align="center"><br></td>
                </tr>
              {% else %}
                <tr>
                  <td style="height: 28; font: 12px Arial, sans-serif; color: #808080;" align="center">{{step}}</td>
                </tr>
              {% endif %}
            {% endfor %}
          </table>
        </td>
        {% for item in subscription.resources_total_by_weeks_and_resource_name %}
        <td style="padding: 0 16px; vertical-align:top;">
          <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border: none; border-collapse: collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; width:80px;">
              {% assign reverse_total = item['totals'] | reverse %}
              {% for totals in reverse_total %}
                {% if totals['total'] < 0 %}
                  <tr> 
                    <td><div style="height: {{ totals['total'] | times: 140 | divided_by: subscription.min_totals_sum_weekly_by_resource_name }}px; background-color: {{totals['chart_color']}};"></div></td>
                  </tr> 
          
                {% endif %}                
              {% endfor %}
          </table>
        </td>
        {% endfor %}
      </tr>
      <tr>
        <td align="center" valign="center"> </td>
        {% for item in subscription.resources_total_by_weeks_and_resource_name %}
        <td align="center" valign="center">
          <p style="font: 12px Arial, sans-serif; color: #808080; line-height: 14px;">
            <br>{{ item['week'] }}
            <br />
          </p>
        </td>
        {% endfor %}
      </tr>
    </table>
  </td>
</tr>
<tr> </tr>
</table>
</td>
</tr>
<tr>
<td height="24"></td>
</tr>
<td>
<table>
<tr>
<p style="font: 14px Arial, sans-serif; font-color: #333333; line-height: 22px; margin: 12px 0; text-align: center;">
  <a style="display: inline-block;" href="https://{{ reseller.custom_attributes['vendor_ccp'] }}/client/analytics/overview?filter[details]=daily&filter[billing-period]=previous&account_id={{account.id}}&filter[subscription_id]={{subscription.id}}&filter[is_payg]=true&filter[expenses]=actual"> <span style="display: inline-block; color: #ffffff; background-color: rgb(22, 155, 213); padding: 12px 60px; border-radius: 5px;">
  ПЕРЕЙТИ К АНАЛИТИКЕ
  </span> </a>
</p>
</tr>
</table>
    </td>
  </tr>
 </table>


По умолчанию ссылка на раздел Аналитика в Панели управления Клиента https://{domain}/client/analytics отображает данные о потреблении по всем подпискам аккаунта с детализацией по месяцам за 3 последних периода.

Другая фильтрация данных о потреблении выполняется с помощью query-параметров filter по следующему шаблону:

Query-параметр

Обязательный/Опциональный

Назначение

Описание

filter[details]

Обязательный

Уровень детализации

Допустимые значения:

  • monthly — по месяцам.
  • daily — по дням.
filter[billing-period]

Обязательный

Тип периода

Допустимые значения:

  • С детализацией по месяцам: 3-period, 6-period, 12-period, custom-billing, custom-calendar.
  • Для фактических расходов PAYG-подписки с детализацией по дням: current, previous, custom-billing, custom-calendar.
  • Для предварительного потребления PAYG-подписки с детализацией по днямcurrent, previous, current_and_previous.
filter[period][gteq] и filter[period][lteq]

Опциональный

Начало и конец периода

Значение в формате: ГГГГ-ММ, а для ключа custom-calendar — ГГГГ-ММ-ДД.

Если значения не указаны или указан только один параметр и его значение, то период определяется автоматически исходя из значения filter[billing-period] и filter[details], а также текущего времени сервера. 

filter[subscription_id]

Опциональный

Подписка

ID подписки.

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

filter[expenses]

Параметр больше не поддерживается

Тип расходов PAYG-подписки с детализацией по дням

Параметр больше не поддерживается. 

Ранее использовался для переключения между предварительными и финальными данными

Например, потребление для подписки 1234 с детализацией по дням за текущий период: https://{domain}/client/analytics?filter[details]=daily&filter[billing-period]=current&filter[subscription_id]=1234

Себестоимость изменена (Net cost has been changed)

Происходит при изменении себестоимости тарифного плана на уровне текущего реселлера (см. Просмотр прайс-листа).

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

Платформа собирает данные об изменении себестоимости раз в сутки ночью. При этом в выборку тарифных планов включаются только те планы, себестоимость которых изменилась с 00:00:00 до 23:59:59 предыдущих суток. Если себестоимость тарифного плана изменилась, например, в 00:01 текущих суток, то этот тарифный план попадет в выборку только на следующие сутки.

Кредитный лимит для постоплатной подписки изменен (Credit limit for postpaid subscription was changed)Событие происходит для клиентов, у которых есть подписка по модели Постоплата в статусе отличном от Удалена, в случае:
    • Изменения кредитного лимита по подписке в правиле обслуживания.
    • Изменения кредитного лимита по подписке на странице клиента с моделью оплаты по умолчанию Постоплата.
    • Изменения кредитного лимита по подписке на странице подписки по модели Постоплата.
    • Переключения настройки Использовать из правил обслуживания в настройках клиента, если при этом значение кредитного лимита по подписке для клиента изменяется.
    • Переключения настройки Использовать из настроек Клиента на странице подписки, если при этом значение кредитного лимита по подписке для подписки изменяется.
    • Изменения правила обслуживания для клиента при включенной настройке Использовать из правил обслуживания, если при этом значение кредитного лимита по подписке для клиента изменяется.
    • Создания новой подписки по модели Постоплата.

Событие происходит, если перечисленные выше действия выполняются как через Панель управления Оператора, так и по API.

Приближение к кредитному лимиту постоплатной подписки (Credit limit for postpaid subscription is approaching)

Событие происходит, если величина текущей задолженности по подписке пересекла установленный % (1...99) кредитного лимита для этой подписки, вне зависимости от статуса подписки. Уведомление отправляется 1 раз.

Например, при следующем правиле обработки события событие произойдет, когда величина текущей задолженности по подписке превысит 70% от кредитного лимита для этой подписки:

subscription_postpay.credit_limit % 70 < subscription_postpay.current_debt

Закрывающие документы сформированы (Closing documents generated)Событие происходит при вызове API-метода (см. Send notifications on closing documents) для рассылки уведомлений клиентам реселлера о том, что закрывающие документы за указанный период получены из сторонней ERP-системы и доступны для скачивания по ссылкам и через Панель управления Клиента в разделе Закрывающие документы (см. Closing documents). Уведомление отправляется только для документов в статусе Новый. После отправки уведомления статус этих документов меняется на Отправлен.
Создан объединенный платеж (Joined payment created)Событие происходит при автоматическом или ручном объединении платежей (см. Объединение платежей по модели Предоплата).
Повторная отправка заказа (Resend the order)Происходит через указанное количество дней после создания заказа для заказов в статусе Ожидает оплаты, у которых платеж связан только с одним заказом (то есть заказ не связан с объединенным платежом — см. Объединение платежей по модели Предоплата).
Повторная отправка объединенного платежа (Resend the joined payment)Происходит через указанное количество дней после создания объединенного платежа для платежей в статусе Ожидает оплаты.
Расходы по подписке приближаются к установленному бюджету расходов на период (Spending budget for a period is approaching)

Если в подписке с типом биллинга Pay as you go клиент установил процент от бюджета расходов для отправки уведомления, событие срабатывает, когда потребление по подписке (сумма списаний в статусе Заблокировано) за выбранный период достигло или превысило порог, но при этом остается меньше бюджета расходов. Указывать правило обработки для события не требуется.

Расходы по подписке достигли установленного бюджета расходов на период (Spending budget has been reached)

Если в подписке с типом биллинга Pay as you go клиент установил бюджет расходов за выбранный период, событие срабатывает, когда потребление по подписке (сумма списаний в статусе Заблокировано) за выбранный период достигло или превысило бюджет. Указывать правило обработки для события не требуется.

Обнаружение неожиданного увеличения потребления (Unexpected consumption increase detection)

Происходит, если разность потребления день-ко-дню по подписке с типом биллинга Pay as you go достигла или превысила установленный порог. Если указаны два порога, событие происходит, когда изменение потребления достигло или превысило оба порога. Пороги задаются в системных настройках как общие для всех подписок (см. Мониторинг увеличения расходов по PAYG подпискам в Задание общих системных настроек).

По умолчанию ссылка на раздел Аналитика в Панели управления Клиента https://{domain}/client/analytics отображает данные о потреблении по всем подпискам аккаунта с детализацией по месяцам за 3 последних периода.

Другая фильтрация данных о потреблении выполняется с помощью query-параметров filter по следующему шаблону:

Query-параметр

Обязательный/Опциональный

Назначение

Описание

filter[details]

Обязательный

Уровень детализации

Допустимые значения:

  • monthly — по месяцам.
  • daily — по дням.
filter[billing-period]

Обязательный

Тип периода

Допустимые значения:

  • С детализацией по месяцам: 3-period, 6-period, 12-period, custom-billing, custom-calendar.
  • Для фактических расходов PAYG-подписки с детализацией по дням: current, previous, custom-billing, custom-calendar.
  • Для предварительного потребления PAYG-подписки с детализацией по днямcurrent, previous, current_and_previous.
filter[period][gteq] и filter[period][lteq]

Опциональный

Начало и конец периода

Значение в формате: ГГГГ-ММ, а для ключа custom-calendar — ГГГГ-ММ-ДД.

Если значения не указаны или указан только один параметр и его значение, то период определяется автоматически исходя из значения filter[billing-period] и filter[details], а также текущего времени сервера. 

filter[subscription_id]

Опциональный

Подписка

ID подписки.

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

filter[expenses]

Параметр больше не поддерживается

Тип расходов PAYG-подписки с детализацией по дням

Параметр больше не поддерживается. 

Ранее использовался для переключения между предварительными и финальными данными

Например, потребление для подписки 1234 с детализацией по дням за текущий период: https://{domain}/client/analytics?filter[details]=daily&filter[billing-period]=current&filter[subscription_id]=1234

Оплата платежа получена из внешней системы (Paid amount has been received from external system)
Событие происходит при вызове API-метода для завершения платежа по его номеру document_id (см. Завершение платежа по номеру), если выполняются условия, заданные в поле Правило. В частности, сравнивая сумму оплаты и сумму платежа в платформе, предыдущий и текущий статусы платежа в платформе, для менеджеров можно настроить уведомления о переплате, частичной или повторной оплате, т.к. в этих случаях создается корректировка баланса и требуется ее подтверждение вручную.
Запрос на сброс пароля при создании пользователя (Request to reset the password after the user creation)Происходит при сбросе пароля пользователя, если пользователь был создан в Панели управления Оператора (Создание пользователя).
Обновление себестоимости CSP (Update CSP net costs)Происходит ежедневно для всех подписок. Для корректной работы требует обязательной настройки правила обработки события.
Загрузка себестоимости CSP (Upload CSP net costs)

Происходит:

  • После загрузки нового файла с ценами (см. Updating the net costs of the Resources of the Microsoft Office 365 Plans).
  • После утверждения нового файла с ценами, в случае когда файл с ценами из статуса Требуется подтверждение переходит в статус Будущий или Текущий.
  • После перехода файла из статуса Будущий в статус Текущий.
Заявка на создание счёта отправлена (Request for creating bill was sent)Сформирована ручная операция на создание счета на оплату.
Счёт на пополнение баланса готов (Bill on balance replenishment is ready)Счет на оплату для пополнения баланса клиента сформирован вручную.
Отчётный период закрыт (The accounting period was closed)Уведомление о закрытии отчетного периода при получении от 1С запроса для сверки баланса клиентов отправляется в случае совпадения балансов в 1С и ActivePlatform.
Создание сервера (Create instance)Происходит при создании нового сервера CloudServer (см. Создание Сервера).
Сброс пароля сервера (Reset instance password)Происходит при сбросе пароля сервера CloudServer. Сброс пароля возможен через пользовательский веб-интерфейс управления услугой CloudServer (Сброс пароля администратора сервера через раздел Серверы и Сброс пароля администратора сервера через раздел раздел Дата-центры).
Обработка данных по подпискам Azure Plan завершена (Data processing for Azure Plan subscriptions completed)Происходит на уровне того реселлера, для которого созданы настройки модуля Office365 и шаблон услуги на основе модуля Microsoft CSP Products. Происходит после завершения обработки детализированных данных о потреблении по всем подпискам Microsoft Azure Plan реселлера через 2 дня после закрытия актов. Правило обработки для события не настраивается. В качестве получателя уведомления можно указать только конкретный email менеджера без использования плейсхолдеров. См. Настройка уведомлений для Подписок Microsoft Azure Plan в руководстве Services. Operator Guide.
AppSource ссылка для активации сгенерирована (AppSource Activation Link Generated)Новая подписка на услугу Microsoft AppSource перешла в статус Установка и ожидает активации на стороне вендора. Для активации клиенту нужно перейти по ссылке в уведомлении (см. Microsoft AppSource. Operator Guide).
Microsoft ожидает оформления заказа на покупку (Microsoft pending PO document)Происходит, когда на стороне Microsoft заказ подписки на основе модуля Microsoft CSP Product переходит в статус Pending PO Upload. Менеджеру, получившему уведомление, нужно загрузить файл заказа (Purchase Order, PO) и ввести данные о сделке для проверки в Microsoft Partner Center. Заказ в платформе остается в статусе Предоставляется. См. пример в Ordering a subscription to the Microsoft NCE service via the Operator Control Panel в руководстве Services. Operator Guide.
Microsoft отклонил заказ на покупку (Microsoft rejected PO document)Происходит, когда на стороне Microsoft заказ подписки на основе модуля MicrosoftCSPProduct переходит в статус PO Upload Rejected. Это значит, что ранее загруженный файл заказа (Purchase Order, PO) не прошел проверку Microsoft. Заказ в платформе остается в статусе Предоставляется. См. пример в Ordering a subscription to the Microsoft NCE service via the Operator Control Panel в руководстве Services. Operator Guide.
VSP ресурсы изменились (VSP resources changed)Происходит при смене статуса подписки на тарифный план на основе модуля Vendor Service Plugin (VSP) с Обновление на Активная при изменении количества ресурсов подписки.
VSP подписка создана (VSP subscription created)Происходит при смене статуса подписки на тарифный план на основе модуля Vendor Service Plugin (VSP) с Устанавливается на Активная.