Nous avons récemment
présenté une solution commerciale appelée Dialogflow Connector: un ensemble de Dialogflow de Google et de notre cloud Voximplant. Le connecteur peut fonctionner à la place d'un opérateur de centre d'appels et accepter des commandes complexes. Cela est devenu possible parce que Dialogflow vous permet de vous éloigner du scénario IVR habituel, où le client est obligé de nommer des mots d'un ensemble donné, auxquels le menu interactif peut répondre. La plate-forme Google peut recevoir séquentiellement les entrées d'un client et les collecter ensemble - par exemple, pour passer une commande dans une boutique en ligne. Vous avez probablement déjà entendu le mot à la mode «
remplissage de fente », alors c'est tout. Les détails vous attendent sous la coupe, comme nous l'avons fait pour la commande de pizza - par analogie, vous pouvez entailler quelque chose de similaire et être heureux que les temps de l'ascenseur et du "onze" soient révolus depuis longtemps ...
Numéro de téléphone
Pour commencer, vous devez louer un numéro virtuel auquel le bot «répondra». Pour ce faire, dans le panneau d'administration de Voximplant, dans le menu
"Numéros", cliquez sur "Acheter un numéro de téléphone".
Sur le nouvel écran, placez l'interrupteur en position "Numéros de test" - cela vous permettra de louer un numéro virtuel.
Les numéros virtuels sont très bon marché et vous permettent de tester pleinement toute solution sur notre plateforme. Louez une chambre et plus ...
... créer un script
Nous avons maintenant besoin d'un scénario cloud, au cœur de notre décision. C'est lui qui va recevoir l'appel, reconnaître la parole et le transférer vers Dialogflow. Le script doit être créé dans l'application. Dans le menu de gauche, sélectionnez
"Applications" , créez une nouvelle application et donnez-lui un nom.
Ensuite, allez dans l'onglet "Scripts" de votre application et créez le vôtre en cliquant sur le plus. N'oubliez pas de lui donner un nom, tel que dialogflow.
Il est temps d'écrire du code!
Connectons le module
AI - il contient les méthodes et les événements de Dialogflow - ainsi que le module de
reconnaissance vocale et le
lecteur . Nous déclarerons les variables et la fonction de fin de
mot délicate, qui prend une quantité d'entrée (pizzas) et un tableau avec les mots ('margarita', 'margaritas', 'margaritas') et renvoie un mot qui correspond au numéro de cas. Ceci est nécessaire pour que le bot ne dise pas «4 margaritas», mais émette correctement «4 margaritas».
require(Modules.AI); require(Modules.ASR); require(Modules.Player); let mycall = null, voice = Language.Premium.RU_RUSSIAN_YA_FEMALE, account_name = "", dialed_number = "", caller_id = "", flow, lastText = '', player function wordend(num, words) { return words[ ((num=Math.abs(num%100)) > 10 && num < 15 || (num%=10) > 4 || num === 0) + (num !== 1) ]; }
Ajoutez maintenant le gestionnaire de l'appel entrant et la fonction d'aide
startASR :
VoxEngine.addEventListener(AppEvents.CallAlerting, (e) => { mycall = e.call; mycall.addEventListener(CallEvents.Connected, handleCallConnected); account_name = e.toURI.substring(e.toURI.indexOf('.') + 1); account_name = account_name.substring(0, account_name.indexOf('.')); dialed_number = e.destination; caller_id = e.callerid; mycall.answer(); }); function startASR() { mycall.removeEventListener(CallEvents.PlaybackFinished, startASR); mycall.sendMediaTo(flow); }
Lorsque l'événement
Connected se produit, la fonction
handleCallConnected est
appelée . En fait, toute la farce y a lieu:
- un objet Dialogflow est créé;
- Une voix synthétisée salue le client et lui propose de passer commande
- la reconnaissance commence, le client passe une commande;
- les mots des clients sont transférés vers Dialogflow, un créneau philling se produit;
- des voix synthétisées expriment l'ordre et l'adresse du client;
- le bot raccroche, la session se ferme.
Liste des fonctionnalités:
handleCallConnected | function handleCallConnected(e) { |
| |
| flow = AI.createDialogflow({ |
| lang: "ru" |
| }); |
| |
| if (AI.Events.DialogflowResponse !== undefined) |
| flow.addEventListener(AI.Events.DialogflowResponse, (event) => { |
| if (event.response.queryResult !== undefined) { |
| let result = event.response.queryResult |
| |
| if (result.queryText === undefined) { |
| if (result.languageCode !== undefined) startASR(); |
| return |
| } |
| |
| |
| if (result.fulfillmentText !== undefined) { |
| try { |
| player = VoxEngine.createTTSPlayer(result.fulfillmentText, voice) |
| player.addMarker(-500) |
| player.addEventListener(PlayerEvents.PlaybackMarkerReached, startASR) |
| player.sendMediaTo(mycall) |
| } catch (err) {} |
| |
| if (result.allRequiredParamsPresent == true && |
| result.outputContexts !== undefined && |
| result.parameters.PizzaType != undefined) { |
| |
| let msg = " "; |
| for (let k = 0; k < result.parameters.PizzaType.length; k++) { |
| let count = result.parameters.count[k] !== undefined ? result.parameters.count[k] : 1 |
| switch (count) { |
| case 1: |
| msg += " "; |
| break; |
| case 2: |
| msg += " "; |
| break; |
| default: |
| msg += count + " "; |
| break; |
| } |
| |
| if (result.parameters.PizzaSize[k] !== undefined) { |
| switch (result.parameters.PizzaSize[k]) { |
| case "small": |
| msg += wordend(count, ['', '', '']); |
| break; |
| case "medium": |
| msg += wordend(count, ['', '', '']); |
| break; |
| case "large": |
| msg += wordend(count, ['', '', '']); |
| break; |
| } |
| } |
| msg += " " |
| switch (result.parameters.PizzaType[k]) { |
| case "margarita": |
| msg += wordend(count, ['', '', '']); |
| break; |
| case "fourcheese": |
| msg += wordend(count, ['', '', '']) + " "; |
| break; |
| case "vegetarian": |
| msg += wordend(count, [' ', ' ', ' ']); |
| break; |
| case "pepperoni": |
| msg += wordend(count, ['', '', '']) + " "; |
| break; |
| case "cheese": |
| msg += wordend(count, [' ', ' ', ' ']); |
| break; |
| case "chicken": |
| msg += wordend(count, ['', '', '']) + " "; |
| break; |
| } |
| if (k == result.parameters.PizzaType.length - 1) msg += " , " |
| else msg += " "; |
| } |
| msg = msg.slice(0, msg.length - 2); |
| if (result.parameters.time !== undefined && result.parameters.time != "") { |
| let time = new Date(result.parameters.time), |
| local = time.toTimeString() |
| local = local.split(":") |
| time = local[0] + ":" + local[1] |
| msg += ". " + time |
| } |
| if (result.parameters.deliveryaddress !== undefined) msg += ". " + result.parameters.deliveryaddress |
| msg += ". ?"; |
| |
| player.stop() |
| player = VoxEngine.createTTSPlayer(msg, voice) |
| player.addMarker(-500) |
| player.addEventListener(PlayerEvents.PlaybackMarkerReached, startASR) |
| player.sendMediaTo(e.call) |
| |
| } else { |
| |
| player.stop() |
| lastText = result.fulfillmentText |
| player = VoxEngine.createTTSPlayer(result.fulfillmentText, voice) |
| if (result.action == "pizzaorder.pizzaorder-yes") { |
| player.addEventListener(PlayerEvents.PlaybackFinished, () => mycall.hangup()) |
| player.sendMediaTo(e.call) |
| } else { |
| player.addMarker(-500) |
| player.addEventListener(PlayerEvents.PlaybackMarkerReached, startASR) |
| player.sendMediaTo(e.call) |
| } |
| |
| } |
| } |
| } |
| }) |
| |
| player = VoxEngine.createTTSPlayer("! , !", voice); |
| player.addMarker(-500); |
| player.addEventListener(PlayerEvents.PlaybackMarkerReached, startASR); |
| player.sendMediaTo(e.call); |
| |
| mycall.record(); |
| mycall.addEventListener(CallEvents.Disconnected, (event) => { |
| VoxEngine.terminate(); |
| }) |
| } |
Il en reste très peu. Allez dans l'onglet Routage -> "Créer". Une fenêtre modale avec un formulaire apparaîtra. Le nom peut être donné par analogie - dialogflow-rule. Laissez le masque par défaut et le plus important est d'attacher le script de dialogue. Cliquez sur "Créer une règle", la fenêtre modale se fermera.
Vous devez maintenant joindre le numéro acheté à l'application. Pour ce faire, allez dans la section "Numéros" de votre application, cliquez sur "Disponible" puis - "Attacher" à côté du numéro sélectionné. Une fenêtre modale s'ouvrira, il ne reste plus qu'à sélectionner la règle souhaitée ici et à cliquer sur "attacher".
Cliquez sur "Enregistrer". Le script sait maintenant ce dont il a besoin pour répondre à tout numéro composé que vous avez loué. Étant donné que nous avons un seul numéro, c'est ce dont nous avons besoin.
Génial, maintenant tout est connecté et devrait fonctionner!
Agent Dialogflow
En termes de Dialogflow, un agent est le bot. Nous avons déjà
décrit en détail comment créer votre agent et comment communiquer avec lui, mais cette fois nous vous suggérons d'utiliser notre pièce.
Vous devez vous inscrire sur
dialogflow.com et créer un nouvel agent. N'oubliez pas de préciser la langue russe:
Par défaut, l'agent ne connaît pas une seule instruction (intentions) et ne peut généralement rien faire.
Téléchargez les actifs de notre agent et téléchargez-les sur le vôtre: pour cela, dans les paramètres de l'agent, allez dans l'onglet «Exporter et importer» -> «Importer depuis ZIP».
Maintenant, vous avez un ensemble de dictons pour commander une pizza! Vous pouvez les étudier dans la section "Intentions"; notez que l'agent a des instructions auxiliaires
pizza.sizehelp et
pizza.typehelp . Grâce à eux, après avoir salué la pizzeria, le client peut demander «Quel type de pizza avez-vous» et le bot vous dira ce qui est au menu.
Vérifiez que la deuxième version de l'API est sélectionnée dans les paramètres de l'onglet Général.
Enfin, téléchargez le JSON de votre compte de service Google -
cela se fait en quelques clics .
Lier l'agent à l'application Voximplant
Dans le menu de gauche de votre application Voximplant, sélectionnez «Connecteur Dialogflow», cliquez sur «Ajouter», dans le formulaire modal apparu, chargez JSON et cliquez à nouveau sur «Ajouter».
Vous verrez que le fichier JSON apparaît dans la liste, ce qui signifie qu'il est attaché à l'application.
C'est fait! Le bundle Dialoglow + Voximplant est configuré, tous les maillons de la chaîne sont assemblés.
Au cas où vous seriez trop paresseux pour faire toutes ces étapes, vous pouvez sentir notre démonstration de pizzeria:
- allez sur http://demos05.voximplant.com/pizza/ ;
- entrez le numéro de téléphone (pour la Russie ce sera 7900 ...) et cliquez sur "SUIVANT";
- à partir du numéro indiqué, composez le +74999384952;
- profitez du robot miracle :)