【问题标题】:How to implement the google translator api in the dialogflow line editor如何在对话流行编辑器中实现谷歌翻译器api
【发布时间】:2021-06-05 00:05:46
【问题描述】:

我在 dialogflow 中实现翻译器时遇到问题,我不知道会出现什么问题,代码对我不起作用。你能指导我吗?我澄清一下,行编辑器不允许我实现异步功能。

const axios = require('axios'); 
const unirest = require('unirest');
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');

process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements

 exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
 const agent = new WebhookClient({ request, response });
 console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
 console.log('Dialogflow Request body: ' + JSON.stringify(request.body));

function translate(agent){
const text = agent.parameters.text;
const key = "yout_key";
const to = 'es';
const from = 'en';
const response = axios.post(`https://www.googleapis.com/language/translate/v2?key=${key}&source=${from}&target=${to}&q=${text}`);
  return response.then((result) => {
  console.log(result.text);
  agent.add("traduccion: "+result.text);
  });
  }
  let intentMap = new Map();
  intentMap.set('traducir', translate);
  agent.handleRequest(intentMap);
});

这是我在原始 API 响应中获得的诊断信息 { "responseId": "7ecceeb9-9764-417a-9899-315dca16b550-b03aa3f9", “查询结果”:{ "queryText": "你好", “参数”: { “文字”:“你好” }, “allRequiredParamsPresent”:真, "fulfillmentText": "traduccion: undefined", “履行信息”:[ { “文本”: { “文本”: [ “传统:未定义” ] } } ], “输出上下文”:[ { “名称”:“项目/canvas-primacy-314603/agent/sessions/d5048480-e5fb-c291-19d7-a2085d8d5fe2/contexts/text”, “寿命计数”:5, “参数”: { "text.original": "你好", “文字”:“你好” } } ], “意图”:{ “名称”:“项目/canvas-primacy-314603/agent/intents/b4144ec2-afd1-46bd-9347-7e20ae615f58”, “displayName”:“traducir” }, “intentDetectionConfidence”:1, “诊断信息”:{ “webhook_latency_ms”:3292 }, "languageCode": "en", “情绪分析结果”:{ “queryTextSentiment”:{ “分数”:0.2, “幅度”:0.2 } } }, “网络钩子状态”:{ "message": "Webhook 执行成功" } }

【问题讨论】:

    标签: axios dialogflow-es-fulfillment google-translation-api


    【解决方案1】:

    在运行代码之前,我设置了翻译冒号 (:) 后单词的意图。

    在您的代码中,要正确获取响应,您应该使用 result.data 来获取响应的正文。响应的主体结构如下:

    {
       "data":{
          "translations":[
             {
                "translatedText":"translated_output_here"
             }
          ]
       }
    }
    

    因此,您可以通过打印此result.data.data.translations[0].translatedText 来访问翻译后的数据。

    const text = agent.parameters.any; // This is based from my intent I used "any" as entity of words typed after the colon (:)
    const key = "your_api_key";
    const to = 'es';
    const from = 'en';
    const response = axios.post(`https://www.googleapis.com/language/translate/v2?key=${key}&source=${from}&target=${to}&q=${text}`);
      return response.then((result) => {
      console.log(result.data.data.translations[0].translatedText);
      output = result.data.data.translations[0].translatedText;
      agent.add("traduccion: "+ output);
      }); 
      }
    

    测试完成:

    【讨论】:

      【解决方案2】:

      代码存在一些问题。代码需要需要所需的库、定义代理、包含意图映射,并且函数必须命名为 dialogflowFirebaseFulfillment 才能使用 Dialogflow 实现库。

      您可以查看 Dialogflow 实现库文档和示例以查看所需的样板元素 1,然后在它们周围添加您的代码。

      【讨论】:

      • 你好早上好,我已经添加了对话框流编辑器中使用的所有代码,添加了库,定义了代理,之前我只传递了函数的代码,我不知道在哪里我的失败将是,它只返回翻译:未定义
      • 你能从 console.log(result.text) 中添加你的结果吗?行吗?
      • 我只得到这个结果 -> traduccion: undefined , 好像它不做翻译,我不知道为什么,如果我给它发送parameter.text,在诊断中我得到它连接到 API,但不进行翻译
      • 你能找到一种方法来测试文本是否被发送到翻译 API 吗?也许你可以用一个console.log来检查key,from,to,text
      • 这是一个示例,可以满足您的要求:gist.github.com/CodingDoug/51030c85894b35a3495f548b1b5b0aff
      猜你喜欢
      • 2020-04-03
      • 2016-04-11
      • 1970-01-01
      • 2014-09-18
      • 2017-07-15
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      相关资源
      最近更新 更多