我在关注@dstoiko from here的回答
我正在调用ADD_MOVIE
块中的API,并希望将一些值传递给具有有效负载ADD_TO_FIREBASE
的回发
这是我的积木
'use strict';
const Script = require('smooch-bot').Script;
var YtsHelper = require('./libs/YtsHelper.js');
const FirebaseHelper = require('./libs/FirebaseHelper.js');
var firebaseHelperObj = new FirebaseHelper();
module.exports = new Script({
processing: {
prompt: (bot) => bot.say('Beep boop...'),
receive: () => 'processing'
},
start: {
receive: (bot) => {
return bot.say('Hi! I\'m Smooch Bot!')
.then(() => 'showUserMenu');
}
},
showUserMenu: {
prompt: (bot) => bot.say("Here are the areas I can help you out. %[Add Movie](postback:ADD_MOVIE) %[Serve Food](postback:SERVE_FOOD)"),
receive: () => 'finish'
},
ADD_MOVIE : {
prompt: (bot) => bot.say('Enter movie name or keywords you want to search please.'),
receive: (bot, message) => {
const movie_name_searched = message.text;
return bot.setProp('movie_name_searched', movie_name_searched)
.then(() => bot.say('Search in progress...'))
.then(() => {
YtsHelper.getMoviesList(movie_name_searched,function(movies_array){
var movies_postbacks = "";
console.log("Movies SIZE " + movies_array.length);
for (var i = 0; i < movies_array.length ; i++){
movies_postbacks = movies_postbacks + " %["+movies_array[i]+"](postback:ADD_TO_FIREBASE)";
}
bot.say(movies_postbacks)
.then(() => bot.say("Click any movie to add into firebase."));
});
});
}
},
ADD_TO_FIREBASE: {
prompt: (bot) => bot.say("confirm, y/n"),
receive: () => 'showUserMenu'
},
finish: {
receive: (bot, message) => {
return bot.getProp('name')
.then((name) => bot.say(`Sorry ${name}, my creator didn't ` +
'teach me how to do anything else!'))
.then(() => 'showUserMenu');
}
}
});
字符串
问题
Q 0.我也是nodeJS的新手,我应该怎么称呼ADD_MOVIE,start,showUserMenu(在我的代码中)块?函数,方法,代码,模块等。
Q1.我在ADD_MOVIE块中调用了一个yts API。在script.js文件中调用API可以吗?
问题2.重要事项!:我如何将参数传递给我的回发与有效负载ADD_MOVIE,以便我可以在ADD_TO_FIREBASE块中执行一些条件代码
1条答案
按热度按时间6ie5vjzr1#
**Q0:**是风格问题。
**Q1:**是的,在
receive
中进行数据库查询是可以的,但是您的receive
函数在解析机器人状态之前并没有等待查询完成。例如,如果您不希望机器人在返回电影列表之前接受用户输入,您可以这样做:字符串
请注意,我使用'ADD_MOVIE'来解决promise链的最后一个问题,它告诉你的bot保持与之前相同的状态。
**Q2:**我看到两个选项。
ADD_TO_FIREBASE.movieid1
,ADD_TO_FIREBASE.movieid2
等。如果您这样做了,您将不得不在WebResourcePostback中定义自己的行为,从您的回发有效负载中解析出电影ID。
你还必须自己将amchine的状态转换为所需的
ADD_TO_FIREBASE
状态。例如,从你的自定义handlePostback
方法中,你可以这样做:型
%[foo](postback:bar)
消息实际上是一种速记语法。回发消息的真实的内部工作是操作按钮,您可以直接将其发送到Smooch API。操作按钮还允许您指定metadata
对象。如果不使用内置的bot.say
,您可以直接在API上发布消息,并且您可以将电影ID存储在操作元数据中。您仍然需要通过自定义handlePostback
从该元数据中检索选定的movieId,就像您在选项1中所做的那样。