Репозиторий GitHub:

Следуйте видеоуроку:

Добро пожаловать в Курьерскую Лабораторию. В этом руководстве мы создадим приложение Node.js, которое отправляет многоканальные уведомления азбукой Морзе.


В чем дело?

Сегодня мы секретные агенты, и наша цель — отправлять зашифрованные сообщения в нашу шпионскую сеть. Некоторые шпионы предпочитают читать электронные письма, а другие предпочитают читать тексты, поэтому нам нужно убедиться, что наше приложение может удовлетворить все шпионские предпочтения.

Примечание: первые 5 секретных агентов, которые успешно завершат это обучение и это задание, получат подарок от Курьера.

В главе 1 мы сначала интегрируем API Gmail и Twilio, которые Courier будет использовать для отправки электронных и текстовых сообщений. В главе 2 мы покажем, как отправлять одиночные сообщения и настраивать маршрутизацию для отправки многоканальных уведомлений. В главе 3 мы интегрируем API перевода для преобразования наших сообщений в азбуку Морзе.

Мы проводим наш первый хакатон в следующем месяце, с 5 по 30 сентября. Зарегистрируйтесь сейчас, чтобы представить этот проект и получить шанс выиграть классные призы.

Зарегистрироваться на хакатон:


Глава 1. Разрешите Courier отправлять сообщения с помощью API Gmail и Twilio

В этой первой главе нам нужно будет авторизовать наш API для отправки секретных сообщений. Начнем с интеграции API-интерфейсов Gmail и Twilio, что позволит Courier отправлять электронные письма и сообщения с помощью одного вызова API.

  • Войдите в свою учетную запись Курьера и создайте новое секретное рабочее пространство.
  • Для процесса регистрации выберите канал электронной почты, разрешите Courier и выполните сборку с помощью Node.js. Начните с Gmail API, поскольку его настройка занимает всего несколько секунд. Все, что нам нужно сделать для авторизации, это войти через Gmail. Теперь API готов к отправке сообщений.
  • Скопируйте начальный код, представляющий собой базовый вызов API с использованием cURL, и вставьте его в новый терминал. Он уже сохранил ваш API-ключ, знает, на какой адрес электронной почты вы хотите отправить сообщение, и имеет уже встроенное сообщение.

Как только вы увидите танцующего голубя, вы готовы использовать Courier для отправки дополнительных уведомлений. Прежде чем мы создадим наше приложение, нам просто нужно настроить поставщика Twilio для включения текстовых сообщений.

  • Перейдите в «Каналы» в левом меню и найдите Twilio. Для авторизации Twilio вам потребуется SID учетной записи, токен аутентификации и SID службы обмена сообщениями.
  • Открытым twilio.com, войдите в систему и откройте консоль и найдите первые два токена на этой странице. Сохраните SID учетной записи и токен аутентификации в Courier.

Наконец, вам просто нужно найти SID службы обмена сообщениями, который можно создать на вкладке «Сообщения» в левом меню. Оформить заказ документов Twilio на как создать SID службы обмена сообщениямиссылка в описании.

  • Как только мы получим все три части информации, установите провайдера, и теперь ваша учетная запись Courier авторизована для отправки любого электронного письма или SMS в рамках одного вызова API.


Глава 2. Отправка одно- и многоканальных уведомлений

В следующей главе вы начнете отправлять сообщения. Чтобы на самом деле отправить секретные сообщения, перейдите на Отправить документацию по API. Здесь вы можете найти все, что связано с отправкой сообщений.

Справа вы увидите начальный код и сможете выбрать язык по вашему выбору из cURL, Node.js, Ruby, Python, Go или PHP.

  • Выберите Node.js, чтобы начать.
// Dependencies to install:
// $ npm install node-fetch --save

const fetch = require('node-fetch');

const options = {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "message": {
      "template": "NOTIFICATION_TEMPLATE"
    }
  })
};

fetch('https://api.courier.com/send', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
Войти в полноэкранный режим

Выйти из полноэкранного режима

Это базовый POST-запрос, который можно отредактировать, включив в него данные шпионов, например, как с ними связаться, и сообщение, которое вам нужно отправить. «Шаблон уведомления» можно заменить собственным шаблоном.

  • Добавьте адрес электронной почты в поле электронной почты слева, и вы заметите, что он автоматически появляется во фрагменте кода справа.
// Dependencies to install:
// $ npm install node-fetch --save

const fetch = require('node-fetch');

const options = {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "message": {
      "template": "NOTIFICATION_TEMPLATE",
      "to": {
        "email": "courier.demos+secretmessage@gmail.com"
      }
    }
  })
};

fetch('https://api.courier.com/send', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
Войти в полноэкранный режим

Выйти из полноэкранного режима

Затем вам нужно добавить фактическое сообщение, которое вы отправляете. Эти сообщения довольно просты, поэтому вы можете напрямую написать их в вызове API, а не создавать шаблон.

  • Напишите тему в объекте заголовка (это можно изменить в любое время).
  • В теле письма напишите свое сообщение.
// Dependencies to install:
// $ npm install node-fetch --save

const fetch = require('node-fetch');

const options = {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "message": {
      "to": {
        "email": "courier.demos+secretmessage@gmail.com"
      },
      "content": {
        "title": "new subject",
        "body": "message"
      }
    }
  })
};

fetch('https://api.courier.com/send', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
Войти в полноэкранный режим

Выйти из полноэкранного режима

Как и раньше, данные слева автоматически появляются во фрагменте кода справа. Существует объект содержимого, который включает в себя параметры заголовка и тела.

Теперь вам просто нужно убедиться, что этот вызов API имеет доступ к вашей учетной записи Courier, которая связана с API Gmail и Twilio.

// Dependencies to install:
// $ npm install node-fetch --save

const fetch = require('node-fetch');

const options = {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json',
    Authorization: 'Bearer apikey'
  },
  body: JSON.stringify({
    "message": {
      "to": {
        "email": "courier.demos+secretmessage@gmail.com"
      },
      "content": {
        "title": "new subject",
        "body": "message"
      }
    }
  })
};

fetch('https://api.courier.com/send', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
Войти в полноэкранный режим

Выйти из полноэкранного режима

  • Отправьте отсюда этот код, чтобы проверить, работает ли вызов API (нажмите «Попробовать» над фрагментом кода).
  • Перейти к вашей Журналы курьера и нажмите на последний журнал для получения дополнительной информации. Вы должны иметь возможность просмотреть, как оно отображается для пользователя, получающего сообщение. Если произошла ошибка, вы также должны иметь доступ к коду ошибки.

Теперь вы можете интегрировать этот код в наше собственное приложение Node.js.

  • Откройте VS Code и откройте новый проект с файлом с именем index.js.
  • Вставьте код в index.js файл.
  • Установите пакет node-fetch npm, который позволит вам выполнять вызовы API.
  • Откройте терминал и вставьте команду для установки пакета.
$ npm install node-fetch --save
Войти в полноэкранный режим

Выйти из полноэкранного режима

  • Запустите программу в терминале.
$ node index.js
Войти в полноэкранный режим

Выйти из полноэкранного режима

npm install node-fetch@2
Войти в полноэкранный режим

Выйти из полноэкранного режима

Теперь, когда вы запускаете эту программу, вы должны получить ответ от Courier, который включает в себя requestID в консоли VS Code. Это указывает на то, что вызов API был выполнен успешно, и вы можете перейти к журналу данных Courier, чтобы определить, было ли сообщение отправлено успешно.

Поскольку вы являетесь секретным агентом, вам, вероятно, следует защитить ключ API на случай, если наш код попадет в чужие руки.

  • Создайте новый файл с именем .env.
  • Сохраните ключ API как переменную в файле .env.
APIKEY="fksdjfgjsdkfgndfsmn"
Войти в полноэкранный режим

Выйти из полноэкранного режима

  • Установите пакет dotenv npm, который позволит вам получить доступ к переменной в index.js файл.
  • После установки пакета получите доступ к ключу, указав на него как process.env.APIKEY.
  • Добавлять require('dotenv').config() к вершине index.js файл.
  • Запустите эту программу, чтобы убедиться, что она по-прежнему работает.

На этом этапе вы можете отправить одно сообщение шпионам по электронной почте. Однако вы знаете, что некоторые шпионы предпочитают использовать текстовые сообщения, поэтому вам нужно будет включить многоканальные уведомления. Вернемся к документации Courier и прокрутим вниз до routing объект, содержащий method а также channels. Доступны два типа методов — all а также single. Все означает, что Courier попытается отправить сообщение на каждый из перечисленных каналов. Одиночный означает, что Courier попытается отправить его по первому работающему каналу. Давайте интегрируем это в нашу программу.

  • Добавить routing объект в любом месте внутри message объект на том же уровне, что и to а также content.
  • Определите каналы в одном routing объект — в этом случае вы можете выбрать SMS или электронную почту, поскольку у вас уже есть определенный адрес электронной почты.
"message": {
    "to": {
      "email": process.env.EMAIL
    },
    "content": {
      "title": "new subject",
      "body": "message"
    },
    "routing": {
      "method": "single",
      "channels": "email"
    },
}
Войти в полноэкранный режим

Выйти из полноэкранного режима

  • Преобразовать channels в массив, чтобы определить несколько каналов и перечислить как электронную почту, так и SMS.
"channels": ["email", "sms"]
Войти в полноэкранный режим

Выйти из полноэкранного режима

Теперь у вас есть 2 разных канала, на которые можно отправить это сообщение. all Методы будут отправлять это сообщение как по электронной почте, так и по SMS. single метод попытается отправить это первому работающему. Поскольку у вас есть адрес электронной почты пользователя, но нет его номера телефона, эта программа может отправить его только по электронной почте.

Если два канала поменять местами, Courier попытается отправить SMS, но не сможет этого сделать, а затем по умолчанию отправит электронное письмо.

"channels": ["sms", "email"]
Войти в полноэкранный режим

Выйти из полноэкранного режима

  • Добавьте номер телефона пользователя, чтобы заработал SMS-канал. Теперь эта программа должна иметь возможность отправлять текстовые сообщения через Twilio.
"message": {
    "to": {
      "email": process.env.EMAIL,
      "phone_number": process.env.PHONENUMBER
    },
    "content": {
      "title": "new subject",
      "body": "message"
    },
    "routing": {
      "method": "single",
      "channels": ["sms", "email"]
    },
}
Войти в полноэкранный режим

Выйти из полноэкранного режима

  • Измените единственный метод на all и снова запустите программу.
"message": {
    "to": {
      "email": process.env.EMAIL,
      "phone_number": process.env.PHONENUMBER
    },
    "content": {
      "title": "new subject",
      "body": "message"
    },
    "routing": {
      "method": "all",
      "channels": ["sms", "email"]
    },
}
Войти в полноэкранный режим

Выйти из полноэкранного режима

Courier теперь может отправлять через Twilio и Gmail в рамках одного вызова API.


Глава 3. Интеграция API перевода для преобразования сообщений в азбуку Морзе

ПРИМЕЧАНИЕ. API-интерфейс Morse имеет ограничение скорости, что может привести к ошибке, если вы запустите его слишком много раз в течение часа. В этом случае вам придется подождать некоторое время, прежде чем продолжить.

В этой последней главе вы интегрируете API Fun Translations Morse для кодирования секретных сообщений и отправки их шпионам. На веб-сайте Fun Translations вы можете искать документацию по API Морзе. Здесь у вас есть доступ ко всей информации, необходимой для выполнения вызова — у вас есть конечная точка и пример, демонстрирующий, что исходное сообщение является параметром для конечной точки.

🔗 Веселые переводы:

🔗 API забавных переводов:

  • Начните с включения вызова Courier API в функцию.
  • Добавьте вызов этой функции под определением асинхронной функции.
  • Рефакторинг options к courier_options.
// Dependencies to install:
// $ npm install node-fetch --save

const fetch = require('node-fetch');
require('dotenv').config()

async function send_secret_message() {

    const courier_options = {
        method: 'POST',
        headers: {
          Accept: 'application/json',
          'Content-Type': 'application/json',
          Authorization: 'Bearer ' + process.env.APIKEY
        },
        body: JSON.stringify({
          "message": {
            "to": {
              "email": process.env.EMAIL,
              "phone_number": process.env.PHONENUMBER
            },
            "content": {
              "title": "new subject",
              "body": "message"
            },
            "routing": {
              "method": "all",
              "channels": ["sms", "email"]
            },
          }
        })
      };

      fetch('https://api.courier.com/send', courier_options)
        .then(response => response.json())
        .then(response => console.log(response))
        .catch(err => console.error(err));

}

send_secret_message()
Войти в полноэкранный режим

Выйти из полноэкранного режима

Прежде чем отправить сообщение, вам сначала нужно сделать вызов API Морзе, чтобы перевести сообщение. Вы можете использовать node-fetch так же, как вы использовали для Courier, чтобы сделать этот вызов.

  • Скопируйте код в асинхронной функции, чтобы сделать новый вызов API.
  • Вставьте код над вызовом Courier API.
  • Обновите конечную точку до конечной точки API Морзе.
  • Рефакторинг options к morse_options для первого звонка.
  • Удалите токен авторизации в вызове API Морзе, так как он не требует ключа API.
  • Удалить body объект.
  • Добавьте сообщение — «привет, секретный агент x, это ваше сообщение» — в качестве параметра в конечной точке и замените все пробелы в сообщении его URL-кодированием (%20).
// Dependencies to install:
// $ npm install node-fetch --save

const fetch = require('node-fetch');
require('dotenv').config()

async function send_secret_message() {

    const morse_options = {
        method: 'GET',
        headers: {
          Accept: 'application/json',
          'Content-Type': 'application/json'
        }
      };

      const original_message = "hey%20secret%20agent%20x%20this%20is%20your%20message"
      const morse_endpoint = "translate/morse.json?text="+original_message

      fetch(morse_endpoint, morse_options)
        .then(response => response.json())
        .then(response => console.log(response))
        .catch(err => console.error(err));

    const courier_options = {
        method: 'POST',
        headers: {
          Accept: 'application/json',
          'Content-Type': 'application/json',
          Authorization: 'Bearer ' + process.env.APIKEY
        },
        body: JSON.stringify({
          "message": {
            "to": {
              "email": process.env.EMAIL,
              "phone_number": process.env.PHONENUMBER
            },
            "content": {
              "title": "new subject",
              "body": "message"
            },
            "routing": {
              "method": "all",
              "channels": ["sms", "email"]
            },
          }
        })
      };

      fetch('https://api.courier.com/send', courier_options)
        .then(response => response.json())
        .then(response => console.log(response))
        .catch(err => console.error(err));

}

send_secret_message()
Войти в полноэкранный режим

Выйти из полноэкранного режима

  • Закомментируйте вызов Courier API, так как вам нужно только протестировать код, который вы только что добавили.

Когда вы запускаете эту программу, мы можем получить сообщение об ошибке, в котором говорится, что произошла ошибка при синтаксическом анализе JSON. Эта проблема вызвана ошибкой в ​​документации, в которой говорится, что она должна быть POST запрос. Однако в отдельной документации по API это написано как GET запрос. Обновите тип вызова на GET и вы должны увидеть переведенное сообщение в ответе.

Ясно, что вы не хотите отправлять всю эту информацию шпионам. Вам нужно только секретное сообщение.

  • Изолируйте сообщение путем регистрации response.contents.translated.
fetch(morse_endpoint, morse_options)
    .then(response => response.json())
    .then(response => console.log(response.contents.translated))
    .catch(err => console.error(err));
Войти в полноэкранный режим

Выйти из полноэкранного режима

Вы должны иметь доступ к переводу из этого вызова API в теле вызова Courier API.

  • Создайте переменную с именем morse_responseкоторый будет содержать весь ответ от этого вызова.
  • Преобразуйте объект JSON в объект JavaScript, чтобы его можно было прочитать в коде.
  • Получите переведенное сообщение из этого объекта и сохраните его в новой переменной с именем message.
  • Зарегистрируйте эту переменную, чтобы убедиться, что она работает.
const morse_response = await fetch(morse_endpoint, morse_options)
    // .then(response => response.json())
    // .then(response => console.log(response.contents.translated))
    // .catch(err => console.error(err));
const translation = await morse_response.json();
const message = translation.contents.translated
console.log(message)
Войти в полноэкранный режим

Выйти из полноэкранного режима

  • Замените сообщение в теле вызова Courier API закодированным сообщением, которое вы только что сохранили в message переменная.
"message": {
    "to": {
      "email": process.env.EMAIL,
      "phone_number": process.env.PHONENUMBER
    },
    "content": {
      "title": "new secret message",
      "body": message
    },
    "routing": {
      "method": "all",
      "channels": ["sms", "email"]
    },
}
Войти в полноэкранный режим

Выйти из полноэкранного режима

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

Пример зашифрованного письма


Вывод

Наши шпионы теперь готовы получать свои секретные зашифрованные сообщения. Попробуйте изменить текст содержимого на собственное секретное сообщение и отправить его на courier.demos+secretmessage@gmail.com и отправим первым 5 секретным агентам для выполнения этого задания подарок! Не забудьте отправить свой проект на наш хакатон за шанс выиграть XYZ.

🔗 Репозиторий GitHub:
🔗 Видео урок:

🔗 Курьер: app.courier.com
🔗 Зарегистрироваться на хакатон:
🔗 Начало работы Courier с Node.js: https://www.courier.com/docs/guides/getting-started/nodejs/
🔗 Документация по API отправки курьером: https://www.courier.com/docs/reference/send/message/
🔗 Документы SID службы обмена сообщениями Twilio: https://support.twilio.com/hc/en-us/articles/223181308-Начало работы с службами обмена сообщениями
🔗 Выборка узла: https://www.npmjs.com/package/node-fetch
🔗 Дотенв: https://www.npmjs.com/package/dotenv
🔗 Веселые переводы:
🔗 API забавных переводов: