[英]How to wrap an existing chatbot for Google Assistant (Google Home)
今天,我們的網站有一個聊天機器人,它不是使用Google技術構建的。 該機器人具有JSON REST API,您可以在其中將問題發送到,並用相應的答案進行答復。 因此,所有的意圖和實體都將由現有的聊天機器人來解決。
在Google Assistant / Google Home中包裝此功能的最佳方法是什么?
對我來說,我似乎需要從發送到我們的Web服務的JSON中提取“原始”問題(啟用全功能時)。
但是由於上下文是用來交換“狀態”的,所以我必須找到一種方法在對話框流和我們自己的聊天機器人之間交換上下文(見上文)。
但是也許還有其他方法? 是否可以直接完成(調用我們的聊天機器人)(中間沒有DialogFlow)?
對於那些不知道我在說什么的人來說,這可能是不夠的,而對於那些知道我的人來說,這是太多的。 開始:
在我看來,您似乎需要使用Actions SDK而不是Dialog flow來構建Action。 然后,在您的操作中實現一個文本“意圖”-即在用戶每次說話時都會運行的文本。 在該文本意圖中,您要求AoG平台提供文本-請參見getRawInput()。 現在您要做兩件事。 第一,您獲取原始輸入並將其傳遞給您的機器人。 第二,您返回一個承諾,告訴AoG您正在處理回復,但還沒有。 兌現諾言后(即當您的漫游器回復時),您將使用從漫游器獲得的文本進行回復。
我在https://github.com/unclewill/french_parrot中有一個名為“法國鸚鵡”的動作示例。 就言語而言,它只是說出什么,就像鸚鵡會聽到的一樣。 它還會去翻譯服務來翻譯文本並返回(松散的)法語等效內容。
您的任務(如果您選擇接受它)是獲取示例,提取去往翻譯服務的代碼,然后插入去往機器人的代碼。 :-)
我應該提到兩件事。 第一,它不是我的示例中發現的“慣用”節點或JavaScript。 我能說什么-我認為世界其他地方感到困惑。 真。 第二,我有大約50行的最少樣本,可以在這里避開翻譯https://github.com/unclewill/parrot 。 另一個選擇是將其用作基礎並添加代碼以調用您的機器人,並添加Promise-y代碼以對其進行等待。
如果走后一條路線,請從操作包(action.json)中刪除觸發短語。
因此,您已經擁有一個可以處理用戶輸入並發送回響應的后端,並且您想使用它來處理新的輸入流(來自Google助手)?
實際上,我的情況是,我有一個Facebook Messenger ChatBot服務,最近開始為其開發Google Home Action。
這很簡單。 您只需要:
action.[fr/en/de/it].json
(選擇一種語言)。 該文件可用來定義您的意圖和Webhook(后端與Google助手之間的中間件)的URL。 它可能看起來像這樣: { "locale": "en", "actions": [ { "name": "MAIN", "description": "Default Welcome Intent", "fulfillment": { "conversationName": "app name" }, "intent": { "name": "actions.intent.MAIN", "trigger": { "queryPatterns": [ "Talk to app name" ] } } } ], "conversations": { "app name": { "name": "app name", "url": "https://your_nodejs_middleware.com/" } } }
gactions update --action_package action.en.json --project PROJECT_ID
上傳JSON文件 //require express and all required staff to build a Node.js server, //look on internet how to build a simple web server in Node.js //if you a new to this domain. const { ActionsSdkApp } = require('actions-on-google'); app.post('/', (req, res) => { req.body = JSON.parse(req.body); const app = new ActionsSdkApp({ request: req, response: res }); // Create functions to handle requests here function mainIntent(app) { let inputPrompt = app.buildInputPrompt(false, 'Hey! Welcome to app name!'); app.ask(inputPrompt); } function respond(app) { let userInput = app.getRawInput(); //HERE you get what user typed/said to Google Assistant. //NOW you can send the input to your BACKEND, process it, get the response_from_your_backend and send it back app.ask(response_from_your_backend); } let actionMap = new Map(); actionMap.set('actions.intent.MAIN', mainIntent); actionMap.set('actions.intent.TEXT', respond); app.handleRequest(actionMap); });
希望能有所幫助!
感謝所有幫助,已經給出了解決方案的主要部分,但是我在這里總結一下
您可以在此處找到該演示: 嘿Google與Watson交談
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.