Создайте свое диалоговое действие (Dialogflow)

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

В случае с Interactive Canvas при выполнении также передается Помощнику информация о вашем веб-приложении. Вы можете использовать HtmlResponse , чтобы сообщить Ассистенту о необходимости отрисовки вашего веб-приложения. HtmlResponse также может предоставлять обновления data , которые пользовательская логика вашего веб-приложения использует для внесения изменений в ваше веб-приложение.

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

HTML-ответы

Чтобы передать информацию о вашем веб-приложении Помощнику, вы должны включить HtmlResponse в выполнение конкретного намерения. HtmlResponse может содержать URL-адрес веб-приложения и данные, обновляющие веб-приложение. Когда вы отправляете HtmlResponse , происходят следующие шаги:

  1. При выполнении совпадающего намерения на устройство отправляется HtmlResponse .
  2. Устройство использует URL-адрес в HtmlResponse для загрузки веб-приложения.
  3. Полезная нагрузка data JSON передается веб-приложению в обратном вызове.
  4. Ваше диалоговое действие отправляет новый HtmlResponse для отправки обновлений или загрузки новых состояний.

Образец выполнения

В следующем отрывке из примера кода выполнения показано, как реализовать HtmlResponse :

const functions = require('firebase-functions');
const {dialogflow, HtmlResponse} = require('actions-on-google');

const app = dialogflow({debug: true});
app.intent('welcome', (conv) => {
  conv.ask('Welcome! Do you want me to change color or pause spinning?');
  conv.ask(new HtmlResponse({
    url: 'https://your-web-app.com',
  }));
});

// map of human speakable colors to color values
const tints = {
  red: 0xFF0000,
  green: 0x00FF00,
  blue: 0x0000FF,
};
app.intent('color', (conv, {color}) => {
  if (color in tints) {
    conv.ask(`Ok, I changed my color to ${color}. What else?`);
    conv.ask(new HtmlResponse({
      data: {
        tint: tints[color],
      },
    }));
    return;
  }
  conv.ask(`Sorry, I don't know that color. What else?`);
  conv.ask(new HtmlResponse({
    data: {
      query: conv.query,
    },
  }));
});
app.intent('start', (conv) => {
  conv.ask(`Ok, I'm spinning. What else?`);
  conv.ask(new HtmlResponse({
    data: {
      spin: true,
    },
  }));
});

app.intent('pause', (conv) => {
  conv.ask(`Ok, I paused spinning. What else?`);
  conv.ask(new HtmlResponse({
    data: {
      spin: false,
    },
  }));
});

app.intent('restart game', (conv) => {
  conv.ask(new HtmlResponse({
    data: {
      command: 'RESTART_GAME',
    },
  }));
});

exports.conversation = functions.https.onRequest(app);

welcome намерение

В приведенном выше фрагменте при выполнении намерения welcome отправляется HtmlResponse с URL-адресом веб-приложения. Помощник получает это сообщение и загружает HTML и JavaScript по этому адресу.

...
app.intent('welcome', (conv) => {
  conv.ask('Welcome! Do you want me to change color or pause spinning?');
  conv.ask(new HtmlResponse({
    url: 'https://your-web-app.com',
  }));
});
...

Другие намерения

HtmlResponse при выполнении других намерений передает значения переменных ( tint или spin в примере) в веб-приложение. Пользовательская логика веб-приложения использует эти значения для обновления элементов (анимации, цвета и т. д.):

...
app.intent('start', (conv) => {
  conv.ask(`Ok, I'm spinning. What else?`);
  conv.ask(new HtmlResponse({
    data: {
      spin: true,
    },
  }));
});
...

Рекомендации и ограничения

При построении выполнения помните о следующих правилах и ограничениях для HtmlResponse :

  • Каждое намерение вашего выполнения должно включать HtmlResponse . Если намерение не включает HtmlResponse , ваше веб-приложение закрывается.
  • Вам нужно только включить URL-адрес вашего веб-приложения в первое намерение, которое вы отправляете пользователю (обычно это намерение Welcome ).
  • Размер HtmlResponse должен составлять 50 КБ или меньше.