Рубрики
Uncategorized

AI DevOps Squad на помощь: как использовать Voice AI, чтобы сделать ваш сайт надежностью более эффективной

Первоначально опубликовано на https://dasha.ai/en-us/blog/voice-ai-site-relability-ingineering от Артура … Tagged с VSCODE, DevOps, Tulciory, Programming.

Первоначально опубликовано на https://dasha.ai/en-us/blog/voice-ai-site-relability-ingineering Артур Гришкевич

Голосовой ИИ и инженерия надежности сайта? Какой нелепой матч. Они живут в совершенно разных мирах. Первый в мире надоедливых колл -центров, последний в мире администраторов с хвостиком.

Я мог бы закончить свой пост здесь, если бы не одно. Я зарегистрировался, чтобы прочитать лекцию по использованию AI Voice AI для инженерии надежности сайта на Conf42. Зачем мне такую глупую вещь? Потому что у меня было видение того, как они могут работать вместе.

Вступление и определения

В этом уроке мы будем использовать следующие технологии и инструменты:

  • Webhooks
  • Https запросы
  • Мониторинг надежности сайта (мы будем использовать лучшее время безотказной работы)
  • Разговорный голос AI (мы будем использовать дашу)

Во -первых, давайте сделаем определения:

  • Инжиниринг надежности сайта — принципы разработки программного обеспечения, применяемые к проблемам нарушения и операций.

  • Инцидент — что -то плохое, что происходит с вашим сайтом. Другими словами, ваш сайт вырос, случается инцидент, теперь он упал. Инциденты сообщаются мониторами надежности сайта.

  • Подтверждение инцидента — как только инцидент сообщается, это должно быть подтверждено ответственным лицом (вы).

  • Резолюция инцидентов — после того, как инцидент признан, это должно быть решено (то есть, если вы хотите, чтобы ваш сайт снова работал и работал).

  • Разговорное приложение для ИИ — автоматизированный разговор, созданный для определенной потребности, интегрированный с инструментами, которые вы уже используете, работают на AI.

Что не так с текущим рабочим процессом отчетности об инцидентах?

В этом нет ничего плохого Но это может быть сделано более эффективным.

В качестве примера, давайте посмотрим на Лучшее время безотказной работы , поскольку это то, с чем мы будем интегрироваться. Вы добавляете домен для лучшего времени безотказной работы для мониторинга. Каждые 30 секунд он отправляет на веб -сайт запрос HTTP и Ping. Если веб -сайт не работает, инцидент создается. На этом этапе вы уведомляются либо по электронной почте, SMS, телефонным звонкам, либо отправляя веб -крюк, где бы вы ни указали.

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

Как я думаю, что это можно сделать более эффективным? Добавив приложение DevOps Conveloding AI, которое будет позвонить пользователю, когда произойдет инцидент, предоставите пользователю обновления от дополнительных сервисов (Kubernetes Cluster, TLS-сертификаты и т. Д.), Будьте в состоянии уведомлять коллеги и, наконец, установить подтверждение и Установите статусы в лучшем времени. Есть два основных варианта использования/преимущества, которые я вижу здесь:

  1. Ответственный пользователь может быть вдали от своей машины, как происходит инцидент. Они могут проверить некоторые системы со своего телефона и, возможно, даже решить проблему, но зачем заставлять их тратить время на то, чтобы ввести время в лучшем случае, если они могут просто поставить телефон на динамик и решить все с помощью приложения ИИ?

  2. Пользователь действительно может быть на своем компьютере, но для решения инцидента придется войти на полдюжины веб -сайтов и щелкнуть тонны вещей. С помощью приложения ИИ они смогут получить всю информацию/данные, которые им нужны, через простой голосовой вопрос, а также установить соответствующие статусы инцидента в лучшем случае безотказной работы.

  3. И я уверен, что вы найдете еще дюжину способов, которыми эта технология была бы полезна в вашем рабочем процессе DevOps.

«Но Артур», — я слышу, как вы кричате », — сказали, что лучшее время безотказной работы может уведомить ответственного пользователя через фонекол, когда происходит инцидент. Все само по себе! «

Я, конечно, сказал это. Но это не разговорной телефонный звонок. Это очень просто » Привет, у тебя был инцидент. Пока. «Звоните. Что все еще здорово. Но можно сделать намного лучше.

Вот что я построил:

Встроенный контент: https://www.youtube.com/watch?v=tejafi993_0

И вот как вы можете построить его в десять простых шагов для создания нашего разговорного ИИ для DevOps:

  1. Создайте лучшую учетную запись времени UP.
  2. Активируйте ключ Dasha API.
  3. Создайте сервер для лучшего времени безотказной работы для мониторинга.
  4. Создайте сервер для прослушивания WebHooks из лучшего времени безотказной работы и запустите приложение DASHA.
  5. Создайте Dasha Conveloding App, которое позвонит вам, когда будет создан инцидент; Установите внешние функции и HTTPS -запросы для лучшего времени безотказной работы.
  6. Настройте Nodemailer, чтобы написать себе стенограмму разговора.
  7. Настройка .env.
  8. Установите туннельную службу на ваши местные доходные доски.
  9. Установите мониторы и веб -крючки на лучшее время безотказной работы.
  10. Контрольная работа.

Я призываю вас следовать учебному пособию и построить эту вещь самостоятельно. Но если вы этого хотите, вот исходный код Анкет

1. Создайте лучшую учетную запись времени Uptime

Во -первых, вам понадобится лучшая учетная запись Uptime. К сожалению, для отправки Webhooks вам понадобится платная учетная запись. И нам нужно будет отправить веб -крючки. Есть по крайней мере дюжина лучших альтернатив времени безотказной работы, которые я смог найти, некоторые из которых могут предложить бесплатные веб -крючки. Я использую лучшее время безотказной работы, потому что мы уже используем его для наших рабочих процессов SRE в Dasha.

Итак, шаг 1, перейти к Лучшее время безотказной работы и зарегистрировать учетную запись.

2. Активировать ключ Dasha API

Теперь вам нужно активировать свой ключ Dasha API. Если у вас есть ключ Dasha API, не обращайте внимания на эту часть. Откройте код Visual Studio и установите интерфейс Dasha Studio Extension и Dasha Command Line.

code --install-extension dasha-ai.dashastudio && 
npm i -g "@dasha.ai/cli@latest"

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

dasha account login

После этого запустите, чтобы проверить свой ключ API.

dasha account info

Теперь вам нужно клонировать пустое приложение Dasha и открыть папку, в которой оно находится. Мы будем клонировать это приложение Анкет

git clone https://github.com/dasha-samples/blank-slate-app
cd blank-slate-app
npm i

3. Создайте сервер для лучшего времени безотказной работы для мониторинга

В корне папки, которую вы открыли в VSCODE, создайте новый файл Node.js. Вы можете назвать это всем, я назвал это helloworld.js Анкет

Используйте этот код для супер простого сервера:

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World. Server is up.');
});

server.listen(port, hostname, () => {
  console.log("Server running at http://${hostname}:${port}/");
});

Теперь запустите его.

node helloworld.js

4. Создайте сервер для прослушивания Webhooks из лучшего времени Uptime и запустите приложение Dasha

Open index.js и удалить весь код. Мы начнем с нуля здесь. Мы сделаем гораздо больше, чем просто создать сервер прослушивания Webhook. Мы создадим приложение node.js, которое запустит ваше приложение Dasha AI Confrutsational, собирать данные из приложения, отправить HTTPS -запросы, чтобы улучшить время безотказной работы, когда ваше приложение DASHA требует этого, и отправите форматированную стенограмму разговора на указанный адрес электронной почты.

Мы будем использовать Express.js для запуска сервера. Мы также будем использовать FS, Dasha SDK, Body-Parser, JSON2HTML, AXIOS и DOTENV. Давайте начнем с объявлений и продолжим и создадим сервер.:

const dasha = require("@dasha.ai/sdk");
const fs = require("fs");
const express = require( "express" );
const bodyParser = require("body-parser");
const hook = express();
const PORT = 1919;
const json2html = require("node-json2html");
const axios = require("axios").default;

require("dotenv").config();

hook.get('/', (req, res) => {
  res.setHeader("Content-Type", "text/plain");
  res.end("Hello World. Server running on port " + PORT + ". Listening for incidents on http://1543a913a2c7.ngrok.io As soon as incident is identified, I will initiate a call from Dasha AI to ackgnowledge or address the incident. ");
})

hook.use(bodyParser.json());
hook.listen(PORT, () => console.log("🚀 Server running on port ${PORT}"));

Теперь давайте создадим слушателя Webhook. Обратите внимание, что лучшее время безотказной работы посылает веб -хук, который будет создан, признанный или разрешенный инцидент. Нам нужно запустить звонок ИИ только при создании инцидента. Я получил структуру JSON выше от лучшего времени безотказной работы Инциденты API документация . Пожалуйста, обратитесь к комментариям:

hook.post("/hook", async(req, res) => 
{
  console.log(req.body); // Call your action on the request here
  res.status(200).end(); // Responding is important
  // save incidentID from JSON as const incidentId 
  // we will need it to send acknowledged and resolved requests to Better Uptime 
  incidentId = req.body.data.id; 
  // we also save acknowledged and resolved statuses.
  // we will need these to keep Dasha from calling you when your incident is acknowledged or resolved
  acknowledged = req.body.data.attributes.acknowledged_at;
  resolved = req.body.data.attributes.resolved_at;
  // log the statuses 
  console.log("incidentID: " + incidentId);
  console.log("acknowledged: " + acknowledged);
  console.log("resolved: " + resolved);

  // Better Uptime sends out webhooks on created, acknowledged, resolved statuses for each incident 
  // we only need to run the Dasha app when the incident is created, thus we do the following: 
  if (acknowledged != null && resolved == null) 
  {
    console.log("Incident " + incidentId + " acknowledged.");
  }
  else if (acknowledged != null && resolved != null)
  {
    console.log("Incident " + incidentId + " resolved.");
  }
  else 
  { 
    console.log("Incident " + incidentId + " created. Expect a call from Dasha.");
    // Launch the function running the Dasha app  
    await calldasha(incidentId);
  }
});

Теперь давайте определим функцию приложения Dasha. Обратите внимание на //начинаются внешние функции и //заканчиваются внешние функции . Мы добавим код для внешних функций здесь, когда мы доберемся до этого момента в создании нашего разговора DASHA.

Пожалуйста, обратитесь к комментариям:

async function calldasha(incidentId) 
{
  const app = await dasha.deploy("./app");

  // external functions begin 

  // external functions are called from your Dasha conversation in the body of main.dsl file 
  // external functions can be used for calculations, data storage, in this case, to 
  // call external services with HTTPS requests. You can call an external function from DSL
  // in your node.js file and have it do literally anything you can do with Node.js.

  // external functions end

  await app.start();

  const conv = app.createConversation({ 
    phone: process.env.phone, 
    name: process.env.name 
  });

  conv.audio.tts = "dasha";

  if (conv.input.phone === "chat") {
    await dasha.chat.createConsoleChat(conv);
  } else {
    conv.on("transcription", console.log);
  }

  if (conv.input.phone !== "chat") conv.on("transcription", console.log);

  const result = await conv.execute();

  console.log(result.output);

  //create directory to save transcriptions
  fs.mkdirSync("transcriptions", { recursive: true } );  
  var transcription = JSON.stringify(result.transcription);

  //save the transcript of the conversation in a file  
  // or you can upload incident transcriptions to your incident management system here
  fs.writeFileSync("transcriptions/" + (incidentId??"test") + ".log", transcription ); 

  // and  email it to yourself
  var transcript = json2html.render(transcription, {"<>": "li", "html":[
    {"<>": "span", "text": "${speaker} at ${startTime}: ${text} "}
    ]});
  sendemail(transcript);

  await app.stop();
  app.dispose();
}
node index.js

Тестировать. Ваш сервер должен работать. Когда вы установите адрес WebHook для лучшего времени безотказной работы и выполняете этот сервер, разговор DASHA будет инициирован каждый раз, когда создается новый инцидент. Давайте построим приложение Dasha.

5. Создайте приложение Dasha Contringational, которое позвонит вам, когда будет создан инцидент

Open main.dsl Анкет Это языковой файл сценариев Даши. DSL — это язык, специфичный для домена, полученный из TypeScript и используемый для исключительной цели описания разговора. Вы можете прочитать больше об этом в нашем Документация Анкет

Как всегда, мы начинаем с объявлений. Давайте объявим входные переменные и внешние функции.

context 
{
    input phone: string;
    input name: string;
}

// declare external functions here 
external function acknowledge(): string;
external function resolve(): string;
external function getstatusof( what:string? ): string;

Затем у нас есть приложение для ИИ, ожидая речи (пользователь должен сказать «привет» или что -то в этом роде), а затем приветствовать пользователя, сообщить об инциденте и ждать инструкций.

start node root {
    do {
        #connectSafe($phone);
        wait *;
    }
    transitions {
        hello: goto hello on true;        
    }
}

node hello {
    do { 
        #sayText("Hello " + $name + "! This is Dasha calling you regarding your website. There has been an incident. "); 
        #sayText("You can acknowledge or resolve the incident right on the call with me. "); 
        #sayText(" Please note, I will listen and take notes until you mention that you are ready to resolve or acknowledge. ", interruptible:true);
        wait *;
    }
    transitions {
    }
}

Обратите внимание, что я сказал: «Подождите инструкции. «В этом случае инструкции будут поступать в форме отступления. Отказ — это узел на языке сценариев даша, который не обязательно вытекает из предыдущего узла, но может быть вызван абсолютно любой точкой в разговоре. Отказ становится активной, когда в ответе пользователя определяется конкретное намерение. Намерения определяются как набор данных в data.json используется для обучения Даша Облако нейронная сеть. Отступления также полезны для приложения, похожего на человека. Вы можете прочитать больше о отступлениях в этот пост Анкет

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

  1. Признайте инцидент.
  2. Установите инцидент.
  3. Игнорировать инцидент.

Мы также добавим четыре дополнительных отступления, чтобы сделать разговор более эффективным:

  1. Попросите Даша подождать, пока пользователь что -то думает или что -то смотрит.
  2. Попросите Даши повторить то, что она в последний раз сказала.
  3. Пасхальное отступление яйца «упс».
  4. Узел журнала — давайте знаем, что не реагирует, если не будет идентифицировано намерение. Это позволяет нам пассивно записывать любые заметки, которые пользователь делает для себя, поскольку он разрешает инцидент.
  5. Получить статус жизненно важных услуг. *

Существует два шага для реализации отступлений — определить намерения (создание набора данных) в data.json и напишите код для отступления в main.dsl Анкет Нам также нужно будет написать внешние функции в нашем index.js Анкет

Создание набора данных для обучения нейронной сети Dasha

Поскольку отступления активируются по намерениям, нам необходимо определить наш набор учебных данных в data.json Анкет Как только вы запустите свое приложение для разговорного ИИ, ваше data.json Файл загружен в облако даша, где он используется для обучения нейронной сети. "Включает" Раздел для каждого намерения — это то, где вы предоставляете набор фраз, на которых научена нейронная сеть, а затем распознавать намерение пользователя. Вы можете (и должны) прочитать о намерениях в Пост в блоге Илья Овчинников, руководитель команды ML, который создал этот двигатель для Dasha. Откройте файл и удалите все в нем. Вставьте код ниже в.

{
  "version": "v2",
  "intents": 
  {
    "yes": {
      "includes": [
        "yes", "sure", "yep", "I confirm", "confirmed", "I do", "yeah", "that's right"
      ],
      "excludes": []
    },
    "no": {
      "includes": [
      ]
    },
    "repeat": {
      "includes": [
      ]
    },
    "acknowledge": {
      "includes": [
        "I acknowledge the incident", "I can acknowledge the incident", "I do acknowledge the incident",
        "acknowledge", "acknowledge please", "incident acknowledged"
      ]
    },
    "resolve": {
      "includes": [
      ]
    },
    "ignore": {
      "includes": [
      ]
    },
    "oops": {
      "includes": [
      ]
    },
    "wait": {
      "includes": [
      ]
    },

    "status": {
      "includes": [
        "What is the status of (kubernetes)[statusentity]",
        "Dasha, what's the status of (kubernetes)[statusentity] and (TLS)[statusentity]",
        "What's the status of (kubernetes)[statusentity]",
        "Tell me about the status (healthcheck)[statusentity]",
        "Give me an update on the status of (healthcheck)[statusentity]",
        "Status (healthcheck)[statusentity] and (TLS)[statusentity]",
        "Dasha, let's look at the status of (TLS)[statusentity]"
      ]
    }

  },

  "entities": {
    "statusentity": {
      "open_set": false,
      "values": [
        {
          "value": "kubernetes",
          "synonyms": [
            "Kubernetes cluster", "cooper netease", "kubernetes", "Kubernetes instances", "for burnett", "Kubernetes deploy"
          ]
        },
        {
          "value": "TLS",
          "synonyms": [ "SSL", "TLS/SSL", "TLS certificate", "certificate", "SSL certificate"
          ]
        },
        {
          "value": "healthcheck",
          "synonyms": [ "site healthchecks", "health check ", "site health checks", "health checks"
          ]
        }
      ],
      "includes": []
    }
  }
}

Здесь вы увидите несколько полных намерений ( «подтверждение», «да» ), что вам нужно будет активировать ваши отступления. Формат прост — именем намерения следует за списком фраз ( »включает« ), который пользователь может использовать для обозначения их намерения. Вы можете следовать тому же формату, чтобы указать фразы для определения намерений для других отступлений, перечисленных выше.

Обратите внимание на "Статус" отступление. Это составное намерение и опирается на названные сущности функционировать.

В этом случае мы стремимся определить две вещи в фразе пользователя. Одним из них является намерение «проверить статус чего -то», а другой — то, что такое «что -то». «Что -то» определяется названными организациями. Используя распознавание именованных объектов, нейронная сеть, питающая ваше приложение в облаке Dasha, извлекает важные данные из речи пользователя.

Вы всегда можете обратиться к исходный код приложения Чтобы получить копию моего data.json файл.

Написание отступления в main.dsl

// acknowledge flow begins 
digression acknowledge {
    conditions { on #messageHasIntent("acknowledge"); }
    do {
        #sayText("Can you please confirm that you want me to acknowledge the incident?");
        wait *;
    } 
    transitions {
        acknowledge: goto acknowledge_2 on #messageHasIntent("yes");
        donotacknowledge: goto waiting on #messageHasIntent("no");
    }
}

node acknowledge_2 {
    do {
        external acknowledge();
        #sayText("Got it. I have set the status in Better Uptime as acknowledged. The next step is to resolve the incident.");
        wait *;
    } 
    transitions
    {
    }
}

node waiting {
    do{
        #sayText("Okay. I will wait for your instructions then. ");
        wait *;
    } 
}

Приведенный выше код для __digression подтверждение __ Используйте его в качестве примера для написания кода для отступления разрешение и игнорировать . Обратите внимание, что вам не нужно воссоздать Узел ожидание — Вам нужно определить его только один раз и может вызвать этот узел из других узлов или отступления, по мере необходимости.

Получение внешних функций Node.js для вызова внешних API

Обратите внимание на внешнее признание (); Анкет Здесь мы призываем к внешней функции подтвердить который мы определили в начале main.dsl.

Как вы помните, внешние функции вызывают определенную функцию в index.js Анкет Мы даже оставили немного места в нашем index.js Файл специально для наших внешних функций.

Вы можете пойти дальше и вставить следующий код в свой index.js Между //начинаются внешние функции и Внешние функции заканчиваются :

  // external functions are called from your Dasha conversation in the body of main.dsl file 
  // external functions can be used for calculations, data storage, in this case, to 
  // call external services with HTTPS requests. You can call an external function from DSL
  // in your node.js file and have it do literally anything you can do with Node.js.

  // External function. Acknowledge an incident in Betteruptime through posting HTTPS  
  app.setExternal("acknowledge", (args, conv) => 
  {
    // this keeps the code from throwing an error if we are testing with blank data
    if (incidentId === null)
    return;

    const config = {
      // remember to set your betteruptimetoken in .env
      headers: { Authorization: "Bearer " + process.env.betteruptimetoken }
    };

    const bodyParameters = { key: "value" };

    axios.post( "https://betteruptime.com/api/v2/incidents/" + incidentId + "/acknowledge", bodyParameters, config)
    .then(console.log)
    .catch(console.log);

  });

  // External function. Resolve an incident in Betteruptime through posting HTTPS  
  app.setExternal("resolve", (args, conv) => 
  {  
    if (incidentId === null)
    return;

    const config = {
      headers: { Authorization: "Bearer "+ process.env.betteruptimetoken }
    };

    const bodyParameters = { key: "value" };

    axios.post( "https://betteruptime.com/api/v2/incidents/" + incidentId + "/resolve", bodyParameters, config)
    .then(console.log)
    .catch(console.log);
  });

  // external function getting status of additional services 
  app.setExternal("getstatusof", (args, conv) => 
  {
    switch (args.what)
    {
      case "kubernetes":
        return "Kubernetes is up and running";
      case "healthcheck":
        return "Site health checks are not responding";
      case "TLS":
        return "TLS Certificate is active";
    }
  }); 

Взгляните на app.setexternal ("подтверждение") Анкет Как вы можете видеть, мы делаем запрос на пост HTTPS для лучшего API времени UPI и используем инцидент Переменная, которую мы собрали, когда впервые получили входящий Webhook, уведомляющий нас о создании инцидентов. Я сослался на лучшее время безотказной работы Документация API для этого.

Дополнительные отступления в вашем приложении Dasha

Вернитесь к своему main.dsl Анкет Нам нужно добавить еще несколько отступлений, чтобы завершить наше приложение. Добавьте их к своему main.dsl файл

// get status of vital services 
digression status  {
    conditions { on #messageHasIntent("status") && #messageHasData( "statusentity" ); }
    do {
        for (var e in #messageGetData("statusentity") ){ 
            var result = external getstatusof(e.value );
            #sayText( result );
        }
        return;
    }
}

Отступление Статус становится активированным на этом сложном гибриде и названном объекте, который мы построили. Если намерение "Статус" идентифицируется, и сообщение несет данные "Статусность" , мы собираем данные (примечание: #messagegetData Собираем данные в качестве массива) и отправляем каждую точку данных на внешнюю функцию GetStatusof который, в свою очередь, возвращает строку, которую Даша вызывает пользователю. Пожалуйста, посмотрите на app.setexternal ("getStatusof") В коде JavaScript выше. Эта функция возвращает фиктивные данные для демонстрации. Очевидно, что в производстве вы хотели бы вызвать конкретные конечные точки, чтобы получить реалистичные данные здесь.

Теперь добавьте этот код:

// additional digressions 
digression @wait {
    conditions { on #messageHasAnyIntent(digression.@wait.triggers)  priority 900; }
    var triggers = ["wait", "wait_for_another_person"];
    var responses: Phrases[] = ["i_will_wait"];
    do {
        for (var item in digression.@wait.responses) {
            #say(item, repeatMode: "ignore");
        }
        #waitingMode(duration: 70000);
        return;
    }
    transitions {
    }
}

// this digression tells Dasha to only respond to user replies that trigger an intent
// this is a very helpful little piece of code for our particular use case because 
// the user might talk to themselves as they are resolving the incident
// everyting the user says to themselves is logged (thus: journal) in the transcript 
// which can then be appended to the incident report 
digression journal {
    conditions { on true priority -1; }
    do {
        return;
    }
}

digression repeat {
    conditions { on #messageHasIntent("repeat"); }
    do {
        #repeat();
        return;
    }
} 

digression oops {
    conditions { on #messageHasIntent("oops"); }
    do {
        #sayText("What happened " + $name + "? Did you ue the wrong terminal again?");
        return;
    }
} 

Отступления Подождите и Повторите Помогите прогрессировать разговор вместе. Пользователь может попросить Даша подождать минуту или повторить свою последнюю фразу. Отступление упс это пасхальное яйцо, активированное словами намерения «ой», «дерьмо» или вашим любимым восклицательным восклицанием. Отступление Журнал говорит приложению Dasha оставаться тихим, пока оно не услышит, что пользователь скажет одно из конкретно определенных намерений. Все, что пользователь говорит до того, как намерение входит в транскрипт. Это отступление позволяет пользователю диктовать примечания Даша, которые затем собираются в стенограмму. Стенограмма может быть прикреплена к вашей системе управления инцидентами. В этом случае мы отправим стенограмму по электронной почте по указанному адресу.

6. Настройте Nodemailer, чтобы написать себе стенограмму разговора

Посмотрите на последние 11 строк кода в функции, используемой для запуска вашего приложения DASHA, которое вы добавили в свое index.js ранее. Транскрипты разговора Даша — это JSON. В этом коде мы форматируем JSON как HTML и отправляем его по электронной почте. Чтобы отправить по электронной почте код, мы называем sednemail (стенограмма) функция

Давайте теперь добавим эту функцию в нашем index.js заявление.

function sendemail(transcript)
{
  const nodemailer = require('nodemailer');
    require('dotenv').config();

  var transporter = nodemailer.createTransport(
  {
      service: 'gmail',
      auth: {
              // be sure to specify the credentials in your .env file
        user: process.env.gmailuser,
        pass: process.env.gmailpw
      }
  });

  var mailOptions = 
  {
    from: process.env.gmailuser,
    to: process.env.sendto,
    subject: 'Incident conversation transcript',
    html: '

Conversation transcript:

' + transcript + '

' }; transporter.sendMail(mailOptions, function(error, info) { if (error) { console.log(error); } else { console.log('Email sent: ' + info.response); } }); }

Этот код отправит электронное письмо из вашей учетной записи Gmail на указанный адрес.

7. Настройка .env

Вам нужно будет создать файл .env с именем «.env» (Убедитесь, что у вас установлен Dotenv).

В этом файле вам нужно будет определить следующие токены и/или учетные данные:

betteruptimetoken = 
name = 
phone =
sendto = 
gmailuser = 
gmailpw = 

BetterUptimetoken Ожидается, что ваш лучший токен API времени UPI. Если вы используете другую службу, соответствующим образом переименовать переменную среды. Если вы используете лучшее время безотказной работы, вы можете найти токен, обратившись к членам команды> Настроить команду и прокрутить на полпути вниз.

имя это буквально название, которое Даша будет использовать для вас.

Телефон номер телефона, который Даша позвонит вам. Как и в случае с именем, вы можете передать эти данные вдали Dasha.

Sendto это адрес электронной почты, на который вы хотите отправить свою стенограмму.

Gmailuser Ваш адрес электронной почты Gmail.

gmailpw Ваш пароль Gmail.

Есть немного нюансов в этих последних двух. Вам нужно будет иметь дополнительную безопасность отключена в вашей учетной записи Gmail, чтобы использовать простую аудиторию, подобную этой. Другой вариант — написание нашей аутентификации OAuth2 в соответствии с этим The Stackoverflow Thread Анкет

В конце этого шага у вас должны быть все необходимые переменные среды, определенные в вашем файле .env.

8. Установите туннельную службу на ваши местные доходные доски.

Откройте разделенные клеммы в вашем VSCODE. За один заход:

node helloworld.js

В другом, беги:

node index.js

Поздравляю, у вас должно быть два сервера. helloworld.js на порту 3000 и index.js на порту 1919. Они работают как локальные хост, которые не будут делать, потому что нам нужно, чтобы они взаимодействовали с Интернетом. Чтобы решить это, вы можете использовать местный туннель. Я использовал ngrok Но вы можете использовать любой другой.

Чтобы использовать NGROK, вам нужно будет зарегистрироваться и следовать этим инструкции Анкет После того, как вы установили и авторизовали NGROK, откройте два окна терминала (я сделал за пределами VSCODE) и запустите эту команду в одном:

./ngrok http 3000

и Эта команда в другом терминале:

./ngrok http 1919 

Это создаст два интернет -доменных имена, которые будут туннель на ваших местно -размещенных серверах. Примечание. Возможно, вам придется приобрести платную подписку NGROK для двух туннелей.

9. Установите мониторы и веб -крючки на лучшем случае Uptime

Давайте предположим, что Ngrok дал вам два доменных имена:

  1. 12345.ngrok.io — Localhost: 3000 (helloworld.js) (сервер, который мы контролируем)
  2. 67890.ngrok.io — Localhost: 1919 (index.js) (сервер, который поймает Webhooks)

Перейти к Лучшее время безотказной работы > Мониторы> Создать монитор

Введите «12345.ngrok.io» в поле «URL для мониторинга». Теперь снимайте все в виду все коробки под эскалацией по вызову (звоните, отправляйте SMS, отправьте электронное письмо, Push-уведомление). Наконец, нажмите «Создать монитор».

Вернитесь на страницу мониторов, и вы увидите, как ваш монитор станет зеленым.

Теперь перейдите в интеграции> Экспорт данных> Настройка Webhooks> Добавить

Дайте вашему WebHook имя и перечислите этот URL Webhook: http://67890.ngrok.io/hook

Вы можете нажать «Отправить тест» и посмотреть терминал в приложении Dasha. Это должно показать что -то вроде этого:

10. Проверьте все приложение

Теперь, чтобы запустить полный вызов, единственное, что вам нужно сделать, это убить ваш сервер Helloworld. Ctrl+S в терминале Vscode, работающий с helloworld.js приложение И вы получите входящий веб -крюк. Смотрите терминал для index.js И вы увидите инициированный звонок Даши. Вызов прибудет на ваш телефон как можно скорее, поэтому убедитесь, что он не в режиме не беспокоить.

Поздравляю! Вы только что построили разговорное приложение для ИИ для автоматизации надежности сайта.

Если вам это нужно, вот ссылка на исходный код очередной раз.

Дайте нам знать в Даша сообщество Как вы сделали с этим приложением.

Оригинал: «https://dev.to/dashaai/ai-devops-squad-to-the-rescue-how-to-use-voice-ai-to-make-your-site-reliability-engineering-more-efficient-a4a»