Отправка секретных сообщений с помощью Courier API и Node.js

Репозиторий GitHub: https://github.com/shreythecray/secret-messages

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

На следующей неделе мы запускаем наш первый хакатон и разыгрываем более $1K в качестве призов! Присоединяйтесь, чтобы создать крутой проект и выиграть любой из следующих призов 🏆

  • Courier Hacks 1 место: Лучший проект по использованию уведомлений и демонстрации правильных уведомлений от приложения к пользователю с помощью Courier API получит $1000 через Zelle или PayPal.
  • Courier Hacks 2 место: За 2 место за использование уведомлений и демонстрацию правильных уведомлений от приложения к пользователю с помощью Courier API будет вручен Apple AirPods Pro.
  • Любимец публики: Победитель, занявший первое место, получит клавиатуру Keychron Keyboard.
  • Победитель: Участник, занявший второе место, получит флягу Hydroflask.

Кроме того, каждый, кто представит проект, успешно интегрирующий Courier API, получит подарочную карту Amazon на $20!

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

Что происходит?

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

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

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

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

Зарегистрироваться для участия в хакатоне: https://courier-hacks.devpost.com/

Инструкции

Глава 1: Авторизация Courier для отправки сообщений с помощью API Gmail и Twilio

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

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

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

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

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

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

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

В следующей главе вы начнете отправлять сообщения. Чтобы действительно отправлять секретные сообщения, перейдите к документации Send 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-запрос, который можно редактировать, чтобы включить данные шпионов, например, как с ними связаться и какое сообщение нужно отправить. Шаблон «Notification Template» может быть заменен на ваш собственный шаблон.

  • Добавьте адрес электронной почты в поле электронной почты слева, который, как вы заметите, автоматически появится в фрагменте кода справа.
// 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));
Войти в полноэкранный режим Выход из полноэкранного режима

Как и раньше, данные слева автоматически появляются в фрагменте кода справа. Есть объект content, который включает в себя параметры title и body.

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

  • Замените Auth Token на Courier API Key (хранится в настройках аккаунта Courier в разделе API Keys)[https://www.courier.com/docs/guides/getting-started/nodejs/#getting-your-api-keys].
// 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 работает (нажмите «Try it» над фрагментом кода).
  • Перейдите в журналы Courier и нажмите на последний журнал для получения дополнительной информации. Вы должны увидеть, как отображается сообщение для пользователя, получившего его. Если произошла ошибка, вы также сможете получить код ошибки.

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

  • Откройте VS Code и откройте новый проект с файлом под названием index.js.
  • Вставьте код в файл index.js.
  • Установите пакет node-fetch npm, который позволит вам выполнять вызовы API.
  • Откройте терминал и вставьте команду для установки пакета.
$ npm install node-fetch --save
Войти в полноэкранный режим Выйдите из полноэкранного режима
  • Запустите программу в терминале.
$ node index.js
Войти в полноэкранный режим Выйдите из полноэкранного режима
  • Здесь вы можете столкнуться с ошибкой при работе с node-fetch, которая вызвана оператором require в строке 4. Чтобы исправить это, установите другую версию пакета, найденную в документации по node-fetch: https://www.npmjs.com/package/node-fetch#class-response.
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 попытается отправить сообщение на все перечисленные каналы. Single означает, что 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 в массив, чтобы определить несколько каналов и перечислить как email, так и 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 Морзе имеет ограничение по скорости, которое может выдать ошибку, если вы запустите его слишком много раз в течение часа. В этом случае вам придется подождать некоторое время, прежде чем продолжить.

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

🔗 Веселые переводы: https://funtranslations.com/api/#morse

🔗 API Fun Translations: https://api.funtranslations.com/.

  • Начните с того, что заключите вызов API Courier в функцию.
  • Добавьте вызов этой функции ниже определения функции async.
  • Переделайте 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.

  • Скопируйте код из функции async, чтобы сделать новый вызов API.
  • Вставьте код над вызовом API Courier.
  • Обновите конечную точку на конечную точку API Morse.
  • Измените options на morse_options для первого вызова.
  • Удалите маркер авторизации в вызове API Morse, поскольку он не требует ключа API.
  • Удалите объект body.
  • Добавьте сообщение — «hey secret agent x this is your message» — в качестве параметра в конечной точке и замените все пробелы в сообщении его 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 = "https://api.funtranslations.com/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()
Вход в полноэкранный режим Выход из полноэкранного режима
  • Закомментируйте вызов API Courier, поскольку вам нужно только протестировать только что добавленный код.

При запуске этой программы мы можем получить ошибку, в которой будет сказано, что произошла ошибка при разборе 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 в теле вызова API Courier.

  • Создайте переменную 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)
Вход в полноэкранный режим Выйдите из полноэкранного режима
  • Замените сообщение в теле вызова API Courier кодированным сообщением, которое вы только что сохранили в переменной 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: https://github.com/shreythecray/secret-messages
🔗 Видеоурок: https://youtu.be/6W2rIyUdmas

🔗 Курьер: app.courier.com
🔗 Регистрация на хакатон: https://courier-hacks.devpost.com/
🔗 Courier’s Get Started with Node.js: https://www.courier.com/docs/guides/getting-started/nodejs/
🔗 Док-ты API отправки Курьера: https://www.courier.com/docs/reference/send/message/
🔗 Twilio Messaging Service SID Docs: https://support.twilio.com/hc/en-us/articles/223181308-Getting-started-with-Messaging-Services
🔗 Node-fetch: https://www.npmjs.com/package/node-fetch
🔗 Dotenv: https://www.npmjs.com/package/dotenv
🔗 Веселые переводы: https://funtranslations.com/api/#morse
🔗 API Fun Translations: https://api.funtranslations.com/

Оцените статью
devanswers.ru
Добавить комментарий