Créer un traitement avec la bibliothèque cliente Actions on Google Node.js (Dialogflow)

La bibliothèque cliente Actions on Google pour Node.js est recommandée pour accéder à avec la plate-forme Actions on Google si vous créez de fulfillment en JavaScript.

Introduction

La bibliothèque cliente Node.js est une bibliothèque de fulfillment Actions on Google qui fournit les fonctionnalités suivantes:

  • Compatible avec toutes les fonctionnalités Actions on Google, y compris les réponses textuelles et multimédias la connexion à un compte, le stockage des données, les transactions, etc.
  • Fournit en JavaScript une couche d'abstraction idiomatique qui encapsule l'API conversation HTTP/JSON webhook.
  • Gère les détails de bas niveau de la communication entre votre traitement et la plate-forme Actions on Google.
  • peuvent être installées à l'aide d'outils de gestion de packages familiers, tels que npm ou yarn.
  • Vous permet de déployer facilement votre webhook de traitement sur des plates-formes de calcul sans serveur telles que Cloud Functions for Firebase ou AWS Lambda. Vous pouvez également héberger votre webhook de traitement sur un fournisseur de services cloud ou dans un environnement auto-hébergé et autogéré.
  • Compatible avec Node.js v6.0.0 et versions ultérieures.

Vous pouvez utiliser la bibliothèque cliente conjointement Intégration Dialogflow pour Actions on Google ou avec le SDK Actions.

Pour voir des exemples de code complets d'utilisation de la bibliothèque cliente, consultez la page la page d'exemples.

Consulter la documentation de référence de l'API

La documentation de référence de l'API est hébergée sur la bibliothèque cliente Actions on Google pour Node.js. page GitHub.

Vous pouvez également générer une copie locale de la référence en exécutant la commande suivante : à partir du répertoire dans lequel vous avez téléchargé la bibliothèque cliente code:

yarn docs

Les documents générés seront disponibles dans le dossier docs du répertoire où vous avez téléchargé le code de la bibliothèque cliente.

Comprendre le fonctionnement

Avant d'utiliser la bibliothèque cliente, il est utile de comprendre comment le webhook de fulfillment utilise la bibliothèque cliente pour traiter les requêtes des utilisateurs Actions on Google envoie à votre traitement.

Lorsque vous créez un webhook de traitement en JavaScript, vous pouvez déployer et héberger votre code dans un environnement de calcul sans serveur tel que Cloud Functions for Firebase de Google ou AWS Lambda. Vous pouvez également héberger le code vous-même sans effort supplémentaire à l'aide du framework Express Web.

Dans l'environnement d'exécution, le webhook de traitement peut appeler des fonctions dans la bibliothèque cliente pour traiter les requêtes des utilisateurs et renvoyer des réponses à Actions sur Google pour les afficher dans la sortie utilisateur.

Les principales tâches que votre webhook de traitement gère à l'aide de la bibliothèque cliente sont brièvement résumées ci-dessous :

Figure 1. Architecture de haut niveau de la bibliothèque cliente Node.js
<ph type="x-smartling-placeholder">
    </ph>
  1. Réception de demandes des utilisateurs: lorsqu'un utilisateur envoie une requête à l'Assistant Google, la plate-forme Actions on Google envoie une requête HTTP à votre webhook de fulfillment ; la demande qui inclut une charge utile JSON contenant l'intent et d'autres données telles que les données brutes le texte de l'entrée utilisateur et les fonctionnalités de surface de l'appareil de l'utilisateur. Pour plus d'exemples de contenu de la charge utile JSON, consultez la Format de webhook Dialogflow format webhook de conversation .
  2. Détection du format d'appel de framework: pour les frameworks compatibles, le champ la bibliothèque cliente détecte automatiquement le format d'appel du framework (par exemple, si la requête provient du framework Web Express ou d'AWS Lambda) et sait comment gérer facilement la communication avec la plate-forme Actions on Google.
  3. Traitement du gestionnaire de services : la bibliothèque cliente représente l'API de webhook HTTP/JSON de la conversation pour le SDK Dialogflow et Actions en tant que fonction de service. Le webhook de fulfillment utilise le service approprié pour créer une instance app globale ; L'instance app sert de gestionnaire pour les requêtes HTTP et comprend le protocole spécifique du service.
  4. Traitement de conversation:la bibliothèque cliente représente informations par conversation en tant qu'objet Conversation associé à app. Votre webhook de fulfillment peut utiliser l'objet Conversation pour récupérer des données stockées ou des informations d'état dans plusieurs conversations, envoyer des réponses ou désactiver le micro.
  5. Traitement middleware:la bibliothèque cliente vous permet de créer intergiciel de services de conversation, constitué d'une ou plusieurs fonctions vous définissez que la bibliothèque cliente s'exécute automatiquement avant d'appeler le gestionnaire d'intents. Votre webhook de fulfillment peut utiliser votre middleware pour ajouter des propriétés ou d'assistance à l'objet Conversation.
  6. Traitement du gestionnaire d'intent : la bibliothèque cliente vous permet de définir des gestionnaires pour les intents compris par votre webhook de traitement. Pour Dialogflow, la bibliothèque cliente achemine la requête vers le gestionnaire d'intent approprié en mappant la chaîne exacte du nom de l'intent défini dans la console Dialogflow. Pour le SDK Actions, le routage est basé sur la propriété intent envoyée depuis Actions on Google.
  7. Envoyer des réponses aux utilisateurs:pour construire des réponses, votre webhook de fulfillment appelle la fonction Conversation#ask(). La fonction ask() peut être appelé plusieurs fois pour créer la réponse de manière incrémentielle. La sérialise la réponse en requête HTTP avec une valeur JSON et l'envoie à Actions on Google. La fonction close() a une valeur comportement semblable à ask(), mais ferme la conversation.

Configurer l'environnement de développement local

Avant d'implémenter votre webhook de fulfillment, veillez à installer bibliothèque cliente.

Installer la bibliothèque cliente

Le moyen le plus simple d'installer la bibliothèque cliente dans votre environnement de développement local consiste à utiliser un gestionnaire de packages, tel que npm ou yarn.

Pour l'installer, exécutez l'une des commandes suivantes à partir du terminal:

  • Si vous utilisez npm: npm install actions-on-google
  • Si vous utilisez de la laine: yarn add actions-on-google

Configurer les dossiers de votre projet

Selon l'emplacement où vous prévoyez de déployer le webhook de fulfillment (Cloud Functions de Google pour Firebase, AWS Lambda ou Express auto-hébergé), vous devrez peut-être créer un une structure de dossiers de projet spécifique pour enregistrer vos fichiers.

Par exemple, si vous utilisez Cloud Functions for Firebase, vous pouvez configurer les dossiers de projet requis en suivant la procédure décrite dans configurer Node.js et la CLI Firebase ; Initialisez Firebase pour Cloud Functions. Pour Cloud Functions for Firebase, vous écrivez généralement webhook de fulfillment dans le fichier /functions/index.js.

Créer une instance d'application

Actions on Google utilise des formats de messagerie spécifiques pour échanger des requêtes et des réponses avec votre webhook de traitement, selon que vous créez une action conversationnelle à l'aide de Dialogflow ou du SDK Actions, ou une action pour la maison connectée.

Pour représenter ces différents protocoles de requête et de réponse, la bibliothèque cliente fournit trois fonctions de service :

Le protocole de webhook de conversation est utilisé par les deux services de conversation (Dialogflow et SDK Actions), mais chaque service encapsule les messages différemment.

Vous utilisez un service pour créer une instance app. L'instance app encapsule l'état global et la logique de fulfillment de votre webhook et gère entre Actions on Google et votre traitement à l'aide de la spécifique au service.

Vous pouvez configurer les propriétés de l'instance app et appeler ses méthodes pour directement le comportement du webhook de fulfillment. Vous pouvez aussi brancher facilement l'instance app dans un environnement informatique sans serveur, comme Cloud Functions for Firebase, qui accepte les fonctions JavaScript en tant que gestionnaires pour les requêtes HTTP.

Pour créer une instance app dans votre webhook de fulfillment, procédez comme suit:

  1. Appelez la fonction require() pour importer la valeur "actions-on-google". module et pour charger le service souhaité. Par exemple, l'extrait de code suivant montre comment charger le service dialogflow et certains éléments utilisés pour créer des réponses, puis l'attribuer à une constante nommée dialogflow :

    // Import the service function and various response classes
    const {
      dialogflow,
      actionssdk,
      Image,
      Table,
      Carousel,
    } = require('actions-on-google');

    Ici, actions-on-google fait référence à une dépendance spécifiée dans un package.json dans votre dossier du projet (vous pouvez vous reporter au cet exemple de fichier package.json à titre d'exemple).

    Lors de l'obtention d'une instance app, vous pouvez éventuellement spécifier des classes représentant des réponses enrichies, les intents d'assistance et les autres fonctionnalités Actions on Google que vous souhaitez utiliser. Pour le la liste complète des classes valides que vous pouvez charger, consultez la documentation de référence la réponse de la conversation ; et l'intent d'assistance modules.

  2. Créez une instance app en appelant le service que vous avez chargé. Exemple :

    const app = dialogflow();
    .

  3. Pour configurer l'instance app lors de l'initialisation, vous pouvez fournir une options comme premier argument lorsque vous appelez le service. (Voir DialogflowOptions pour en savoir plus.) Par exemple, l'extrait de code suivant montre comment consigner la charge utile JSON brute à partir de la requête ou la réponse de l'utilisateur en définissant l'option { debug: true }:

const app = dialogflow({
  debug: true
});

Définir des gestionnaires pour les événements

Pour traiter les événements associés à Actions on Google créés par la bibliothèque cliente lors de la cycle de vie de l'interaction utilisateur avec votre action, vous utiliserez pour créer des gestionnaires qui traitent les requêtes des utilisateurs et les renvoient réponses.

Vous pouvez créer des fonctions qui agissent en tant que gestionnaires pour ces principaux types d'événements. reconnue par la bibliothèque cliente:

  • Événements d'intent:les intents sont des identifiants uniques envoyés par Actions on Google. à votre traitement chaque fois qu'un utilisateur demande une fonctionnalité spécifique. Si vous utilisez Dialogflow, cela correspond à la mise en correspondance de Dialogflow avec une requête utilisateur. à un intent dans votre agent Dialogflow.
  • Événements d'erreur:lorsqu'une erreur JavaScript ou de bibliothèque cliente se produit, vous pouvez utiliser la fonction catch de l'instance app pour traiter l'exception d'erreur. en conséquence. Vous devez implémenter une seule fonction catch pour gérer tous les erreurs dont votre traitement se préoccupe.
  • Événements de remplacement:un événement de remplacement se produit lorsque l'utilisateur envoie une requête qu'Actions on Google ne peut pas reconnaître. Vous pouvez utiliser l'app la fonction fallback de l'instance pour enregistrer un gestionnaire de remplacement générique qui se déclenche si aucun gestionnaire d'intent n'a été mis en correspondance pour le traitement entrant. requête. Vous devez implémenter une seule fonction fallback pour gérer tous les événements de remplacement. Si vous utilisez Dialogflow, Dialogflow peut déclencher un événement un intent de remplacement lorsqu'aucun autre intent ne correspond. Vous devez créer un le gestionnaire d'intent correspondant à l'intent de remplacement.

Chaque fois que l'utilisateur envoie une requête à votre action, l'instance app crée un Conversation qui représente cette session de conversation. Cet objet est accessible via le nom de variable conv transmis dans la fonction du gestionnaire d'intents en tant que le premier argument de la fonction. Vous utiliserez généralement la conv dans vos gestionnaires pour envoyer une réponse à l'utilisateur.

Les requêtes utilisateur peuvent également inclure des paramètres que votre action peut extraire et utiliser pour affiner les réponses.

  • Si vous utilisez le SDK Actions, vous définissez les paramètres dans le package d'action. Pour voir un exemple d'extraction de paramètres à partir d'intents, consultez la Exemple de code Eliza.
  • Si vous utilisez Dialogflow, vous pouvez accéder aux valeurs de paramètre via la variable params. Pour voir des exemples de gestion des intents avec paramètres dans Dialogflow, consultez la section Paramètres d'accès et contextes.

Définir des gestionnaires pour les intents

Pour définir le gestionnaire d'un intent, appelez la fonction intent() de votre app. Compute Engine. Par exemple, si vous utilisez Dialogflow, il s'agit du DialogflowApp#intent() . Dans les arguments, spécifiez le nom de l'intent et fournissez une fonction de gestionnaire.

Si vous utilisez Dialogflow, il n'est pas nécessaire de définir des gestionnaires pour chaque intent dans votre agent. Vous pouvez plutôt utiliser le gestionnaire de réponses intégré de Dialogflow pour gérer automatiquement les intents sans implémenter vos propres fonctions de gestionnaire. Par exemple, L'intent d'accueil par défaut peut être délégué à Dialogflow de cette manière.

L'exemple suivant montre des gestionnaires d'intent pour le message d'accueil et "au revoir" les intents. Leurs fonctions de gestionnaire anonyme prennent un argument conv et renvoient une réponse de chaîne simple à l'utilisateur via la fonction conv.ask():

app.intent('Default Welcome Intent', (conv) => {
  conv.ask('How are you?');
});

app.intent('bye', (conv) => {
  conv.close('See you later!');
});

Notez que la fonction close() est semblable à ask(), sauf qu'elle se ferme le micro et la conversation est terminée.

Pour en savoir plus sur la création de gestionnaires pour les intents, consultez Créez votre gestionnaire d'intents.

Définir des gestionnaires pour les événements d'erreur

Pour définir les gestionnaires d'erreurs, appelez la fonction catch() de votre instance app. (Par exemple, si vous utilisez Dialogflow, il s'agit du DialogflowApp#catch() function.)

L'exemple suivant montre un gestionnaire d'erreurs "catch" simple qui envoie l'erreur à console et renvoie une simple réponse sous forme de chaîne pour inviter l'utilisateur via la fonction conv.ask():

app.catch((conv, error) => {
  console.error(error);
  conv.ask('I encountered a glitch. Can you say that again?');
});

Définir des gestionnaires pour les événements de remplacement

Pour définir un gestionnaire de remplacement générique lorsqu'aucun intent n'est mis en correspondance pour requête entrante pour le traitement, appelez la fonction fallback() de votre instance app. (Par exemple, si vous utilisez Dialogflow, il s'agit de la fonction DialogflowApp#fallback().)

L'exemple suivant montre un gestionnaire de remplacement simple qui renvoie une réponse de chaîne simple pour inviter l'utilisateur via la fonction conv.ask() :

app.fallback((conv) => {
  conv.ask(`I couldn't understand. Can you say that again?`);
});

Créer votre gestionnaire d'intent

Cette section traite de quelques cas d'utilisation courants liés à l'implémentation de gestionnaires d'intents. avec la bibliothèque cliente. Pour voir comment la bibliothèque cliente correspond l'intent, reportez-vous à la section dans Comprendre son fonctionnement

Paramètres d'accès et contextes

Si vous utilisez Dialogflow, vous pouvez définir parameters et contextes dans votre agent Dialogflow les informations d'état et contrôler le flux de conversation.

Les paramètres sont utiles pour capturer les mots, expressions ou valeurs importants dans l'utilisateur requêtes. Dialogflow extrait les paramètres correspondants des requêtes utilisateur au niveau Vous pouvez traiter ces valeurs de paramètre dans votre webhook de fulfillment déterminer comment répondre aux utilisateurs.

Chaque fois que l'utilisateur envoie une requête à votre action, l'instance DialogflowApp crée un élément parameters qui représente les valeurs de paramètre extraites par Dialogflow requête. Cet objet est accessible via le nom de la variable params.

L'extrait de code suivant montre comment accéder à la propriété name à partir de params lorsque l'utilisateur envoie une requête:

app.intent('Default Welcome Intent', (conv, params) => {
  conv.ask(`How are you, ${params.name}?`);
});

Voici un autre extrait qui fait la même chose. Les accolades ({}) effectue une déstructuration JavaScript pour récupérer la propriété name de l'objet parameters et l'utiliser comme propriété :

app.intent('Default Welcome Intent', (conv, {name}) => {
  conv.ask(`How are you, ${name}?`);
});

Dans l'extrait de code suivant, le nom du paramètre est full-name, mais il est déstructurée et attribuée à une variable locale appelée name:

app.intent('Default Welcome Intent', (conv, {'full-name': name}) => {
  conv.ask(`How are you, ${name}?`);
});

Les contextes sont une fonctionnalité avancée Dialogflow. Vous pouvez utiliser des contextes pour gérer l'état, le flux et la ramification de la conversation. La bibliothèque cliente permet d'accéder à un contexte via la DialogflowConversation#contexts . L'extrait de code suivant montre comment définir un contexte de manière programmatique dans votre webhook de fulfillment et comment récupérer l'objet de contexte:

app.intent('intent1', (conv) => {
  const lifespan = 5;
  const contextParameters = {
    color: 'red',
  };
  conv.contexts.set('context1', lifespan, contextParameters);
  // ...
  conv.ask('...');
});

app.intent('intent2', (conv) => {
  const context1 = conv.contexts.get('context1');
  const contextParameters = context1.parameters;
  // ...
  conv.ask('...');
});

app.intent('intent3', (conv) => {
  conv.contexts.delete('context1');
  // ...
  conv.ask('...');
});

Accéder aux résultats de l'intent d'assistance

Pour plus de commodité, la bibliothèque cliente fournit Classes d'intent d'assistance qui encapsulent les types de données utilisateur courants que les Actions demandent fréquemment. Ces inclure des classes représentant les résultats des différentes actions Actions on Google ; intents d'aide. Les intents d'assistance sont utilisés que l'Assistant Google gère les parties de la conversation où l'utilisateur doit fournir des données pour poursuivre la conversation.

Exemple: résultats de l'assistant de confirmation

L'intent d'assistance de confirmation permet vous demandez une confirmation oui/non à l'utilisateur et vous obtenez la réponse résultante. L'extrait de code suivant montre comment votre webhook peut personnaliser sa réponse en fonction sur les résultats renvoyés par l'intent de confirmation. Pour une exemple plus complet, consultez la Confirmation documentation de référence de la classe.

// Create Dialogflow intent with `actions_intent_CONFIRMATION` event
app.intent('get_confirmation', (conv, input, confirmation) => {
  if (confirmation) {
    conv.close(`Great! I'm glad you want to do it!`);
  } else {
    conv.close(`That's okay. Let's not do it now.`);
  }
});

L'extrait de code suivant montre comment votre webhook de fulfillment peut personnaliser sa réponse en fonction de l'entrée utilisateur carrousel. Le composant carrousel permet à votre action de présenter une sélection d'options que les utilisateurs peuvent choisir. Pour une exemple complet, consultez la Carousel documentation de référence de la classe.

app.intent('carousel', (conv) => {
  conv.ask('Which of these looks good?');
  conv.ask(new Carousel({
    items: {
      car: {
        title: 'Car',
        description: 'A four wheel vehicle',
        synonyms: ['automobile', 'vehicle'],
      },
      plane: {
        title: 'Plane',
        description: 'A flying machine',
        synonyms: ['aeroplane', 'jet'],
      }
    }
  }));
});

// Create Dialogflow intent with `actions_intent_OPTION` event
app.intent('get_carousel_option', (conv, input, option) => {
  if (option === 'one') {
    conv.close(`Number one is a great choice!`);
  } else {
    conv.close(`Number ${option} is a great choice!`);
  }
});

Configurer les objets de réponse de conversation

La bibliothèque cliente fournit cours de réponse aux conversations qui représentent des réponses enrichies ou des éléments multimédias que votre action peut envoyer. Vous envoyez généralement ces réponses ou éléments lorsque les utilisateurs n'ont pas besoin de donner toute entrée pour poursuivre la conversation.

Exemple: Image

L'extrait de code suivant montre comment votre webhook de fulfillment peut envoyer une Image dans une réponse qui sera automatiquement jointe à une réponse BasicCard la bibliothèque:

app.intent('Default Welcome Intent', (conv) => {
  conv.ask('Hi, how is it going?');
  conv.ask(`Here's a picture of a cat`);
  conv.ask(new Image({
    url: '/web/fundamentals/accessibility/semantics-builtin/imgs/160204193356-01-cat-500.jpg',
    alt: 'A cat',
  }));
});

Effectuer des appels de fonction asynchrones

La bibliothèque cliente Node.js d'Actions on Google est conçue pour les opérations asynchrones programmation. Votre gestionnaire d'intent peut renvoyer une promesse qui se résout lorsque votre webhook de traitement a fini de générer une réponse.

L'extrait de code suivant montre comment appeler une fonction asynchrone pour renvoyer un objet promet, puis renvoyer un message si votre webhook de fulfillment reçoit le message d'accueil l'intention. Dans cet extrait, la promesse garantit que votre webhook de traitement ne renvoie une réponse conversationnelle qu'après la résolution de la promesse de l'appel d'API externe.

Dans cet exemple, nous utilisons une API fictive pour obtenir les données météorologiques.

/**
 * Make an external API call to get weather data.
 * @return {Promise<string>}
 */
const forecast = () => {
  // ...
};

app.intent('Default Welcome Intent', (conv) => {
  return forecast().then((weather) => {
    conv.ask('How are you?');
    conv.ask(`Today's weather is ${weather}.`);
  });
});

L'extrait de code simplifié suivant a le même effet, mais utilise la fonctionnalité await async introduite dans ECMA 2017 (version 8 de Node.js). Pour utiliser ce code avec Cloud Functions for Firebase, veillez à utiliser la version correcte de firebase-tools et que la configuration est correcte.

app.intent('Default Welcome Intent', async (conv) => {
  const weather = await forecast();
  conv.ask('How are you?');
  conv.ask(`Today's weather is ${weather}.`);
});

Stocker des données de conversation

La bibliothèque cliente permet au webhook de fulfillment d'effectuer les opérations suivantes : enregistrer des données dans les conversations pour pour une utilisation ultérieure. Voici les principaux objets que vous pouvez utiliser pour le stockage des données:

L'extrait de code suivant montre comment votre webhook de traitement peut stocker des données dans une propriété arbitraire que vous avez définie (someProperty) et l'associer à l'objet Conversation#user.storage. Pour un exemple plus complet, consultez la documentation de référence de la classe Conversation#user.storage.

app.intent('Default Welcome Intent', (conv) => {
  conv.user.storage.someProperty = 'someValue';
  conv.ask('...');
});

Vous pouvez utiliser l'objet Conversation#user pour obtenir des informations sur l'utilisateur, y compris un identifiant de chaîne et des informations personnelles. Certains champs tels que conv.user.name.display et conv.user.email nécessitent de demander conv.ask(new Permission) pour le NOM et conv.ask(new SignIn) pour la connexion Google, respectivement.

const {Permission} = require('actions-on-google');
app.intent('Default Welcome Intent', (conv) => {
  if (conv.user.last.seen) {
    conv.ask('Welcome back! How are you?');
  } else {
    conv.ask('Nice to meet you! How are you doing?');
  }
});

app.intent('permission', (conv) => {
  conv.ask(new Permission({
    context: 'To greet you personally',
    permissions: 'NAME',
  }));
});

// Create Dialogflow intent with `actions_intent_PERMISSION` event
app.intent('get_permission', (conv, input, granted) => {
  if (granted) {
    conv.close(`Hi ${conv.user.name.display}!`);
  } else {
    // User did not grant permission
    conv.close(`Hello!`);
  }
});

Scaling avec un middleware

Vous pouvez étendre la bibliothèque cliente à l'aide d'un middleware.

La couche d'intergiciel se compose d'une ou de plusieurs fonctions que vous définissez. que la bibliothèque cliente exécute automatiquement avant d'appeler d'intents spécifiques. L'utilisation d'une couche de middleware vous permet de modifier l'instance Conversation et d'ajouter des fonctionnalités supplémentaires.

Les services du SDK Dialogflow et Actions exposent une fonction app.middleware() qui vous permet d'ajouter des propriétés ou des classes d'assistance à l'instance Conversation.

L'extrait de code suivant montre comment utiliser un middleware:

class Helper {
  constructor(conv) {
    this.conv = conv;
  }

  func1() {
    this.conv.ask(`What's up?`);
  }
}

app.middleware((conv) => {
  conv.helper = new Helper(conv);
});

app.intent('Default Welcome Intent', (conv) => {
  conv.helper.func1();
});

Exporter l'application

Pour exposer votre webhook de fulfillment pour un framework Web ou une plate-forme informatique sans serveur : vous devez exporter l'objet app en tant que webhook accessible publiquement. La La bibliothèque cliente permet d'effectuer des déploiements dans différents environnements de la boîte.

Les extraits de code suivants montrent comment exporter app dans différents environnements d'exécution :

Exemple: Cloud Functions for Firebase

const functions = require('firebase-functions');
// ... app code here
exports.fulfillment = functions.https.onRequest(app);

Exemple: Éditeur intégré Dialogflow

const functions = require('firebase-functions');

// ... app code here

// Exported function name must be 'dialogflowFirebaseFulfillment'
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

Exemple: Serveur Express auto-hébergé (simple)

const express = require('express');
const bodyParser = require('body-parser');  

// ... app code here

express().use(bodyParser.json(), app).listen(3000);

Exemple: Serveur Express auto-hébergé (plusieurs itinéraires)

const express = require('express');
const bodyParser = require('body-parser');

// ... app code here

const expressApp = express().use(bodyParser.json());

expressApp.post('/fulfillment', app);

expressApp.listen(3000);

Exemple: Passerelle API AWS Lambda

// ... app code here

exports.fulfillment = app;