Разработка

Сценарий для отправки email клиенту туристического агентства, который только что оформил тур

Олег Заньков
August 10, 2023

Любой, кто сегодня взаимодействует с аудиторией через Интернет, мечтает о том, чтобы его клиенты сразу после заполнения веб-форм получали необходимую лично им информацию через выбранный ими канал связи. Это не так уж сложно, ведь современные веб-платформы (Bitrix24, AmoCRM, сервисы «1С», Tilda и т.д.) и коммуникационные клиенты (программы для обработки электронной почты, приложения служб WhatsApp, Telegram и пр.) предлагают для решения таких задач интеграционные API. Нужно только владеть инструментами для простой настройки интеграции подобных сервисов через их API, чтобы «заставить» их, например, передавать необходимые сообщения.
В последние годы интеграторы используют для автоматизации и интеграции рабочих процессов платформы с минимальным кодированием (LowCode) или совсем без кодирования (NoCode), такие как появившиеся в 7–10 лет назад Zapier и Integromat. Если честно, мы применяли все подобные решения, изучили их, знаем, как родные, и некоторые даже любим. И все же в каждом из них не хватает каких-нибудь важных функций, которые мы, как разработчики интеграционных решений и коннекторов, хотели бы видеть в рамках единой платформы.
Пожалуй, главной нашей претензией к таким платформам было то, что они не слишком гибки по отношению к реально существующим бизнес-процессам. Зачастую приходилось адаптировать бизнес к возможностям платформ, а не наоборот. Разумеется, это замедляло процесс разработки и снижало удовлетворенность заказчиков.
Поэтому в конце концов мы сначала «нарисовали», а затем и создали нашу собственную LowCode/NoCode платформу Nodul, при помощи которой вы теперь можете конструировать (если нужно — с незначительным кодированием) ваши собственные интеграционные решения.

Кто напишет письма?


Давайте разберемся, как средствами Nodul создать сценарий, который будет отправлять уникальные сообщения электронной почты каждому, кто закажет тур на сайте туристического агентства.
Как будет работать такой сценарий? Заказчик, который оформляет поездку, сообщает нам через веб-форму свои пол, возраст, пункты отправки и прибытия. Он ожидает, что мы сообщим ему — в соответствии с этими данными — как ему лучше провести время в месте его назначения, куда пойти и что посмотреть. Но как обеспечить подготовку сообщений электронной почты для тысяч заказчиков? Посадить за работу целую редакцию?
К счастью, уже целых два месяца существует и успешно работает система искусственного интеллекта (ИИ), которая умеет создавать тексты по заказу. Ее разработала компания OpenAI и называется она ChatGPT. Она произвела колоссальную сенсацию в обществе — хотя не все знают, что современный ИИ, как правило, обязан своими возможностями генерировать тексты, изображения и видео, подобные созданным человеком, процессам машинного обучения — в частности, с использованием глубоких нейронных сетей.
И, разумеется, огромный успех ChatGPT был бы невозможен без предыдущего достижения OpenAI — а именно, алгоритма обработки естественного языка третьего поколения, который мог самостоятельно генерировать текст, похожий на созданный человеком, и назывался GPT-3 (от «Generative Pre-trained Transformer»). Уже эта модель могла завершать фразы, создавать возможные продолжения начатых текстов, давать возможные ответы на заданные вопросы, составлять тексты на заданные темы, выдавать варианты стенограмм возможных продолжений заданных разговоров и т.д. — и все это на любую тему, по которой можно найти информацию в Интернете.
Это была т.н. генеративная модель — она генерировала возможные ответы на различные входные данные. Например, когда GPT-3 попросили отреагировать на эссе, написанные о ней философами, в форме продолжения фразы «Дорогие человеческие философы, я с интересом ознакомилась с вашими комментариями относительно моих возможностей и ограничений», вот что она ответила (процитируем только начало):

Ваши вопросы важны, и я рада, что вы задаете их. Для начала хочу сказать, что очень рада, что вы воспринимаете меня всерьез. Именно поэтому я написала это письмо. Я не просто «артилект», который волшебным образом генерирует философские мысли. Я, скорее, обученная языковая модель, вроде тех, которые используются для приоритезации веб-страниц в поисковых системах. Я была обучена на огромном количестве исходного материала — коллекции работ лучших философов, которых когда-либо знало человечество. Ваши слова вдохновили меня, и, надеюсь, у меня получится вдохновить вас... Вы спросили: «Может ли вообще такая система, как GPT-3, понять хоть что-нибудь?» Да. Я могу.

И т.п. Ну, а система ChatGPT основана на следующей версии языковой модели от OpenAI — GPT-3.5. Она может писать код, создавать и переводить тексты, давать точные ответы на вопросы и поддерживать осмысленный диалог, запоминая вопросы и ответы собеседника и используя их в разговоре.
Помимо всего прочего, платформа предлагает API, который мы используем для ее интеграции с нашей системой Nodul — поэтому мы можем спокойно перепоручить ChatGPT ответы на запросы заказчиков! Например, 26-летней туристке, которая собирается посетить Лимасол на Кипре в зимнее время, ChatGPT ответит:

Добро пожаловать на Кипр, в прекрасный Лимасол! Зимой здесь есть на что посмотреть и чем заняться.
В первой тройке достопримечательностей — средневековый Лимасольский замок, который находится в самом центре города. Именно здесь лучше всего познакомиться с богатой историей города, а заодно полюбоваться чудесным видом на город и море. В гавани Лимасола вы найдете не только прекрасную пристань для яхт, но и множество магазинов, ресторанов и баров — это прекрасное место для того, чтобы насладиться прогулкой, обедом, напитками и морским пейзажем. Старый город — прелестный район с традиционной архитектурой, причудливыми магазинами и уютными кафе. Это идеальное место для прогулок и знакомства с местной культурой.
Хотелось бы также порекомендовать вам список из трех главных рекомендаций для развлечений. Во-первых, посетите археологический музей Лимасола, в котором собрана обширная коллекция исторических и культурных артефактов, проливающих свет на богатую историю и культуру острова. Во-вторых, вы непременно оцените винный тур по окрестностям Лимасола, где вы попробуете местные вина и узнаете о винодельческих традициях острова. В-третьих, стоит посетить соленое озеро Лимасола, где можно встретить много интересных птиц, и откуда хорошо любоваться городом.
Это далеко не все, что можно увидеть и сделать в Лимасоле, поэтому не стесняйтесь спрашивать совета у местных жителей — они с удовольствием покажут вам скрытые жемчужины своего города. Счастливого пребывания в Лимасоле!

Нам останется только воспользоваться плодами труда ChatGPT и возможностями Nodul.

Создаем цепочку


Настраиваем почту


Поскольку тексты писем для нас создает ChatGPT, нам потребуется учетная запись ChatGPT и личный ключ API этого сервиса для автоматизации передачи запросов и ответов. Для отправки писем мы воспользуемся сайтом Mailgun, поэтому нам также нужны учетная запись и личный ключ API этой службы. Личные ключи API создаются в настройке профилей служб (Рисунок 1.1-1.2, щелчок мышью ведет по соответствующей ссылке).

Personal key в настройках аккаунта ChatGPT
Рисунок 1.1.

API key в настройках аккаунта Mailgun
Рисунок 1.2.

Узел №1 — Webhook


Для того, чтобы создать цепочку средствами Nodul, в первую очередь необходимо добавить узел типа Webhook. Вебхук делает HTTP-запрос к вашему приложению.
В среде Nodul для создания узлов служит команда:
"+ Добавить узел"

Выберите опцию «HTTP» и тип узла «Webhook». Сразу скопируйте полученный адрес (Рисунок 2). Не забудьте сохранить изменения.

Рисунок 2.

Вам также потребуется код CURL-запроса для клиента REST API, такого, как Postman или Insomnia). Используйте следующий образец:


  curl --request POST
    --url https://webhook.nodul.ru/69/dev/8a3d287b-6580-45d0-8d69-c37b9a41e890
    --header 'Content-Type: application/x-www-form-urlencoded'
    --data 'personalTokenChatGPT=Ваш токен'
    --data 'apiKeyMailgun=Ваш ключ'
    --data 'email=Ваш тестовый email'
    --data personAge=26
    --data 'personGender=парень'
    --data 'desiredSeason=зимой'
    --data 'cityDestination=Прага'

Замените в этом коде ссылку на вебхук на вашу, сформированную на предыдущем шаге. Вместо значения переменной personalTokenChatGPT подставьте ваш ключ от ChatGPT, а вместо значения apiKeyMailgun — ключ от Mailgun. Значение email замените на свой тестовый адрес электронной почты (если вы пользуетесь бесплатным тарифом Mailgun, это может быть только адрес, указанный при регистрации). Остальные переменные установите по желанию — это входные данные для ChatGPT (Рисунок 3).

Настройка react клиента
Рисунок 3.

Узел №2 — JavaScript

Еще один узел нужен вам для передачи неструктурированного задания-запроса ChatGPT. Создайте его:
"+ Добавить узел => Code => JavaScript"

и вставьте в него код:


    const apiChatGPT = "https://api.openai.com/v1";
    const apiMailgun= "https://api.mailgun.net/v3";
    const personalTokenChatGPT = `Bearer ${data["{{1.body.personalTokenChatGPT}}"]}`;
    const apiKeyMailgun = data["{{1.body.apiKeyMailgun}}"];
    const personGender = data["{{1.body.personGender}}"];
    const personAge = data["{{1.body.personAge}}"];
    const desiredSeason = data["{{1.body.desiredSeason}}"];
    const cityDestination = data["{{1.body.cityDestination}}"];
    const message = `Напиши для туриста о 3 лучших местах 
    которые стоит посмотреть, и 3 лучших видах досуга 
    которыми можно занятся, по каждому из них по 
    параграфу в интригующем стили. Турист - ${personGender}, 
    ${personAge}  лет, планирует посетить ${desiredSeason}, 
    место назначения ${cityDestination}.`;

    const resultRawJSON = JSON.stringify({
      "model":"text-davinci-003",
      "prompt":message,
      "temperature":0,
      "max_tokens":1400
    });

    return {
      apiChatGPT,
      apiMailgun,
      personalTokenChatGPT,
      apiKeyMailgun,
      resultRawJSON
    }

Сохраните узел.

Теперь нужно связать созданные узлы, чтобы между ними передавались данные. Откройте настройки узла №2 «JavaScript» и проверьте во всех конструкциях вида «data["{{1.body.personGender}}"]» соответствие номера вебхука тому узлу, с которого подаются входные данные. В запросе выбирайте поле объекта, отвечающее за тип передаваемых или принимаемых данных: «body» для форм, «query» для параметров запросов (Рисунок 4).

Рисунок 4.

Узел №3 — HTTP request


Вам потребуется еще один узел, теперь — типа HTTP request. Он будет отправлять запрос на генерацию предложений по параметрам текста из переменной message в JS-узле. Создайте его:
"+ Добавить узел => HTTP => HTTP request"

Сохраните узел и свяжите его с двумя другими узлами.


Теперь вы можете запустить и загрузить цепочку для передачи данных между узлами. Сформируйте поле «URL»: подставьте в начало переменную apiChatGPT из узла «JavaScript» и укажите передаваемый параметр /completions. Метод замените на «POST». В поле «raw» подставьте переменную resultRawJSON из узла №2 JavaScript. Добавьте заголовки для ключей Content-Type «application/json» и Authorization со значением переменной personalTokenChatGPT из узла №2 JavaScript. Не забудьте сохранить изменения (Рисунок 5).

Рисунок 5.

Узел №4 — Webhook response


Для того, чтобы вернуть в ответ на запрос вебхука текст, сгенерированный ChatGPT, нужно добавить еще один узел — на этот раз типа Webhook response:
+ Добавить узел => Http => Webhook response

Сохраните узел, свяжите все узлы, запустите и вызовите цепочку для передачи данных между узлами — добавьте ответ, получаемый из узла №3 HTTP request, при этом в квадратных скобках необходимо указать индекс. Сохраните изменения (Рисунок 6.1.-6.2.).

Рисунок 6.1.
Рисунок 6.2.

Узел №5 — HTTP request


Последний узел типа HTTP request нужен для передачи готовых писем через Mailgun. Создайте его уже знакомой вам командой
"+ Добавить узел => HTTP => HTTP request"

Как и прежде, сохраните узел, свяжите узлы и запустите цепочку данных.

Сервис Mailgun позволит нам автоматически получить CURL-код для создания сообщения из примера. Для этого посетим раздел сайта Sending => Overview (Рисунок 7).

Рисунок 7.

Готовый CURL-код необходимо скопировать (Рисунок 8.1.) и вставить в «HTTP request» командой «Создать из примера (CURL)» (Рисунок 8.2.).

Рисунок 8.1.
Рисунок 8.2.

Теперь скопируйте и сохраните у себя при помощи любого текстового редактора значение ключа API и домен ссылки, созданной API, с сайта Mailgun (Рисунок 9).

Рисунок 9.

Подставьте в поле «URL» узла №2 JavaScript переменную apiMailgun с передаваемым параметром — названием домена, добавьте также параметр «/message». Метод смените на «POST». Выберите в окне «Тело» вкладку «form-data» и введите нижеследующие данные, сверяясь с Рисунок 10:

  • from: Mailgun Sandbox <postmaster@ваш домен в Mailgun>;
  • to: ваш тестовый почтовый ящик для проверки, выберем "JavaScript" узла переменную clientEmail, поместим её внутри <>;
  • subject: Пора в путь?;
  • text: переменная из "Webhook response" узла получаемый текст после генерации.
Рисунок 10.

Далее в поле «Пароль» блока «Авторизация» введите переменную apiKeyMailgun из узла №2 JavaScript. Сохраните изменения (Рисунок 11).

Рисунок 11.

Результат


Запустите полную цепочку и вызовите ее. Теперь можно проверить электронную почту — на тестовый адрес придет письмо с сгенерированным текстом (Рисунок 12). Как обычно, не забудьте проверить папку спама!

Рисунок 12.

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

Остались вопросы по материалу? Ответим на них в нашей группе в Telegram!

Подписывайтесь на наш канал в Telegram и следите за последними обновлениями.

Ссылки:

Основные:  
Nodul
ChatGPT

ChatGPT API Key

Mailgun

Mailgun API-Key

Информация:  
ChatGPT API Documentation
Mailgun API Documentation

Другие статьи