Javascript 如何将dialogflow结果集成到linebot(Node.js)?

Javascript 如何将dialogflow结果集成到linebot(Node.js)?,javascript,node.js,express,bots,dialogflow-es,Javascript,Node.js,Express,Bots,Dialogflow Es,我正在使用node.js创建聊天机器人(Line)集成Google Dialogflow 我可以创建行聊天机器人从用户输入文本和回声一些文本,只有 我可以创建从用户输入发送命令到Google Dialogflow的代码,以及使用 将NLU技术响应文本发送给用户 但我需要用户输入文本发送到对话框流并响应文本(A),然后发送文本(A)(代码后添加一些模板按钮的代码)到行bot create向用户显示一些模板按钮 如何集成两部分代码实现用户输入文本和通过dialogflow结果,使用结果发送到line

我正在使用node.js创建聊天机器人(Line)集成Google Dialogflow

我可以创建行聊天机器人从用户输入文本和回声一些文本,只有

我可以创建从用户输入发送命令到Google Dialogflow的代码,以及使用 将NLU技术响应文本发送给用户

但我需要用户输入文本发送到对话框流并响应文本(A),然后发送文本(A)(代码后添加一些模板按钮的代码)到行bot create向用户显示一些模板按钮

如何集成两部分代码实现用户输入文本和通过dialogflow结果,使用结果发送到line bot服务器

用户输入->对话框流->mycode(添加一些模板按钮调用行)->linbot->bot向用户显示模板按钮

多谢各位

//----------------------------------

我的对话框流代码:

var express = require('express');
var bodyParser = require('body-parser'); 
var app = express();
app.use(
    bodyParser.urlencoded({
        extended: true
    })
)

app.use(
    bodyParser.json()
)



app.post("/webhook", function(req,res){
    console.log(JSON.stringify(req.body, null, 2))
    var intent = req.body.queryResult.intent.displayName;
    var entityCity =  req.body.queryResult.parameters["geo-city"];

    if(intent === 'myIntent')
    {
       //  here I need call bot.on method, but I don't known how to do.
       // return res.json({
            fulfillmentText: `I known your mean.`
        });
    }
    else
    {
        return res.json({
            fulfillmentText: `i am not sure your mean`
        });
    }
})

app.listen(process.env.PORT || 5566, function(){
    console.log('server start ...');
})
var linebot = require('linebot');
var express = require('express');
var app = express();

const bot = linebot({
    channelId: 'mychannelId',
    channelSecret: 'mychannelSecret',
    channelAccessToken: 'mychannelAccessToken'
});

bot.on('message',function(event) {
    console.log('bot');
  console.log(event); 
  var msg = event.message.text;
  // here can add some template button code and reply to user.
 });

 const linebotParser = bot.parser();
app.post('/webhook', linebotParser);

var server = app.listen(process.env.PORT || 8080, function() {
  var port = server.address().port;

});
const line = require('@line/bot-sdk');
const express = require('express');
const lineConfig = {
  channelAccessToken: process.env.HEROKU_LINE_CHANNEL_ACCESS_TOKEN,
  channelSecret: process.env.HEROKU_LINE_CHANNEL_SECRET
};
const client = new line.Client(lineConfig);
const app = express();
app.post('/webhook', line.middleware(lineConfig), function(req, res) {
  Promise
    .all(req.body.events.map(handleEvent))
    .then(function(result) {
      res.json(result);
    });
});
function handleEvent(event) {
  switch (event.type) {
    case 'join':
    case 'follow':
      return client.replyMessage(event.replyToken, {
        type: 'text',
        text: 'hello~'
      });   
    case 'message':
      switch (event.message.type) {
        case 'text':
          return client.replyMessage(event.replyToken, {
            type: 'text',
            text: (event.message.text+'~yu')
          });
      }
  }
}
app.listen(process.env.PORT || 3000, function(){
  console.log("Express server listening on port %d in %s mode", this.address().port, app.settings.env);
});
//----------------------------------

我的线路聊天机器人代码:

var express = require('express');
var bodyParser = require('body-parser'); 
var app = express();
app.use(
    bodyParser.urlencoded({
        extended: true
    })
)

app.use(
    bodyParser.json()
)



app.post("/webhook", function(req,res){
    console.log(JSON.stringify(req.body, null, 2))
    var intent = req.body.queryResult.intent.displayName;
    var entityCity =  req.body.queryResult.parameters["geo-city"];

    if(intent === 'myIntent')
    {
       //  here I need call bot.on method, but I don't known how to do.
       // return res.json({
            fulfillmentText: `I known your mean.`
        });
    }
    else
    {
        return res.json({
            fulfillmentText: `i am not sure your mean`
        });
    }
})

app.listen(process.env.PORT || 5566, function(){
    console.log('server start ...');
})
var linebot = require('linebot');
var express = require('express');
var app = express();

const bot = linebot({
    channelId: 'mychannelId',
    channelSecret: 'mychannelSecret',
    channelAccessToken: 'mychannelAccessToken'
});

bot.on('message',function(event) {
    console.log('bot');
  console.log(event); 
  var msg = event.message.text;
  // here can add some template button code and reply to user.
 });

 const linebotParser = bot.parser();
app.post('/webhook', linebotParser);

var server = app.listen(process.env.PORT || 8080, function() {
  var port = server.address().port;

});
const line = require('@line/bot-sdk');
const express = require('express');
const lineConfig = {
  channelAccessToken: process.env.HEROKU_LINE_CHANNEL_ACCESS_TOKEN,
  channelSecret: process.env.HEROKU_LINE_CHANNEL_SECRET
};
const client = new line.Client(lineConfig);
const app = express();
app.post('/webhook', line.middleware(lineConfig), function(req, res) {
  Promise
    .all(req.body.events.map(handleEvent))
    .then(function(result) {
      res.json(result);
    });
});
function handleEvent(event) {
  switch (event.type) {
    case 'join':
    case 'follow':
      return client.replyMessage(event.replyToken, {
        type: 'text',
        text: 'hello~'
      });   
    case 'message':
      switch (event.message.type) {
        case 'text':
          return client.replyMessage(event.replyToken, {
            type: 'text',
            text: (event.message.text+'~yu')
          });
      }
  }
}
app.listen(process.env.PORT || 3000, function(){
  console.log("Express server listening on port %d in %s mode", this.address().port, app.settings.env);
});
//--------------------

My Line聊天机器人代码其他版本:

var express = require('express');
var bodyParser = require('body-parser'); 
var app = express();
app.use(
    bodyParser.urlencoded({
        extended: true
    })
)

app.use(
    bodyParser.json()
)



app.post("/webhook", function(req,res){
    console.log(JSON.stringify(req.body, null, 2))
    var intent = req.body.queryResult.intent.displayName;
    var entityCity =  req.body.queryResult.parameters["geo-city"];

    if(intent === 'myIntent')
    {
       //  here I need call bot.on method, but I don't known how to do.
       // return res.json({
            fulfillmentText: `I known your mean.`
        });
    }
    else
    {
        return res.json({
            fulfillmentText: `i am not sure your mean`
        });
    }
})

app.listen(process.env.PORT || 5566, function(){
    console.log('server start ...');
})
var linebot = require('linebot');
var express = require('express');
var app = express();

const bot = linebot({
    channelId: 'mychannelId',
    channelSecret: 'mychannelSecret',
    channelAccessToken: 'mychannelAccessToken'
});

bot.on('message',function(event) {
    console.log('bot');
  console.log(event); 
  var msg = event.message.text;
  // here can add some template button code and reply to user.
 });

 const linebotParser = bot.parser();
app.post('/webhook', linebotParser);

var server = app.listen(process.env.PORT || 8080, function() {
  var port = server.address().port;

});
const line = require('@line/bot-sdk');
const express = require('express');
const lineConfig = {
  channelAccessToken: process.env.HEROKU_LINE_CHANNEL_ACCESS_TOKEN,
  channelSecret: process.env.HEROKU_LINE_CHANNEL_SECRET
};
const client = new line.Client(lineConfig);
const app = express();
app.post('/webhook', line.middleware(lineConfig), function(req, res) {
  Promise
    .all(req.body.events.map(handleEvent))
    .then(function(result) {
      res.json(result);
    });
});
function handleEvent(event) {
  switch (event.type) {
    case 'join':
    case 'follow':
      return client.replyMessage(event.replyToken, {
        type: 'text',
        text: 'hello~'
      });   
    case 'message':
      switch (event.message.type) {
        case 'text':
          return client.replyMessage(event.replyToken, {
            type: 'text',
            text: (event.message.text+'~yu')
          });
      }
  }
}
app.listen(process.env.PORT || 3000, function(){
  console.log("Express server listening on port %d in %s mode", this.address().port, app.settings.env);
});

您需要用户检测意图方法

您所说的
模板代码
模板按钮
是什么意思。您能否给出任何相关示例的简要示例或屏幕截图模板按钮是[按钮模板使用按钮模板发送包含图像、标题、文本和多个操作按钮的消息。除了按钮之外,您还可以指示用户点击图像、标题或文本区域的任何位置时要执行的单个操作。]我的目的是将文本发送到dialogflow并响应我的代码,我可以处理结果,然后使用结果发送到line bot。如果我得到dialogflow响应,如何调用replayMessage(line)给用户?谢谢您的代码是user->line bot get message->send to dialog flow->response message=>line replay message(如何做?```返回client.replyMessage(event.replyToken,{type:'text'//在这里您可以放置您的dialogflow响应,text:(event.message.text+'~yu'))``非常感谢!!但是我遇到了其他问题,你能在其他文章中回复我吗?()再次感谢。我发现代码有问题,sameuser响应下一个内容时会话id总是更新,如何在同一个用户中保持相同的sessionID?不同的用户有不同的sessionID?谢谢。您可以为同一用户分配您的线路机器人id