От Дэвид Браун

Эта запись первоначально появилась в Блоге Notif.me.

Это может (надеюсь) быть случайным, но это случается. Я видел, что провайдеры не отвечают, потому что:

  • Делали плановые ремонты
  • Аккаунт заблокировали из-за всплеска накануне или из-за того, что кредитная карта была отклонена, а напоминания никто не читал.
  • Они были просто вниз

Что ж, сохраняйте спокойствие и пользуйтесь Notif.me!

Что такое Notif.me?

Notif.me — это библиотека Node.js с открытым исходным кодом для отправки всех видов уведомлений о транзакциях. Он позволяет использовать несколько поставщиков и резервную стратегию по умолчанию.

Не разрабатываете Node.js? Вы по-прежнему можете запустить его в микрослужбе (см. notifme-sdk-queue-rabbitmq, чтобы получить пример).

Используйте запасной провайдер

Если вы используете только одного провайдера, самое время открыть вторую учетную запись и использовать ее в случае сбоя первой. Мы хотели упростить это с помощью notifme-sdk:

$ yarn add notifme-sdk
------------------------------------------------------------
import NotifmeSdk from 'notifme-sdk'
new NotifmeSdk({
  channels: {
    sms: {
      // Use Nexmo and fallback to Twilio in case of failure
      multiProviderStrategy: 'fallback',
      providers: [{
        type: 'nexmo',
        apiKey: 'xxxxx',
        apiSecret: 'xxxxx'
      }, {
        type: 'twilio',
        accountSid: 'xxxxx',
        authToken: 'xxxxx'
      }]
    }
  }
})
notifmeSdk.send({
  sms: {
    from: 'Notifme',
    to: '+15000000001',
    text: 'Hello, how are you?'
  }
})

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

Идем еще дальше

Если все ваши уведомления имеют решающее значение для вашего бизнеса, вот еще две вещи, которые вам нужно учитывать:

1. Обработка аварийного отказа

Это связано с небольшой вероятностью отказа всех ваших провайдеров:

const request = {
  sms: {from: 'Notifme', to: '+15000000001', text: 'Hello'}
}
notifmeSdk.send(request).then((result) => {
  if (result.status === 'error') {
    /*
     * Here is a (non-exhaustive) list of what you can do:
     * 1. Try another channel:
     *    notifmeSdk.send({email: {...}})
     * 2. Construct the new request with the failing channels
     *    and enqueue it to a delayed queue to retry it later.
     */
  }
})

2. Интеграция веб-хуков ваших провайдеров

Вы также должны обрабатывать события ошибок, происходящие после того, как провайдер принял ваш запрос. Например, если вы отправляете электронное письмо и получаете мягкий отказ, потому что почтовый ящик вашего пользователя заполнен, вы можете вместо этого попробовать отправить веб-push-уведомление или SMS.

Это пока невозможно с Notif.me SDK, но мы определенно хотели бы над этим поработать.

Вывод

Если вам нравится этот проект, вы можете отметить наш репозиторий GitHub и следить за обновлениями для следующего эпизода :)