node-red-contrib-chatbot
Version:
REDBot a Chat bot for a full featured chat bot for Telegram, Facebook Messenger and Slack. Almost no coding skills required
94 lines (88 loc) • 2.33 kB
JavaScript
var _ = require('underscore');
var parseButtons = require('./parse-buttons');
var PayloadTranslators = {
dynamicMessage: function(payload) {
if (payload.content.indexOf('{{first_name}}') !== -1 || payload.content.indexOf('{{last_name}}') !== -1) {
return {
dynamic_text: {
text: payload.content,
fallback_text: !_.isEmpty(payload.fallback) ? payload.fallback : payload.content
}
}
} else {
return PayloadTranslators.message(payload);
}
},
message: function(payload) {
return {
text: payload.content
};
},
inlineButtons: function(payload) {
return {
attachment: {
type: 'template',
payload: {
template_type: 'button',
text: payload.content,
buttons: parseButtons(payload.buttons)
}
}
};
},
genericTemplate: function(payload) {
// translate elements into facebook format
var elements = payload.elements.map(function(item) {
var element = {
title: item.title,
buttons: parseButtons(item.buttons)
};
if (!_.isEmpty(item.subtitle)) {
element.subtitle = item.subtitle;
}
if (!_.isEmpty(item.imageUrl)) {
element.image_url = item.imageUrl;
}
return element;
});
return {
attachment: {
type: 'template',
payload: {
template_type: 'generic',
image_aspect_ratio: payload.aspectRatio,
sharable: payload.sharable,
elements: elements
}
}
}
},
listTemplate: function(payload) {
// translate elements into facebook format
var elements = payload.elements.map(function(item) {
var element = {
title: item.title,
buttons: parseButtons(item.buttons)
};
if (!_.isEmpty(item.subtitle)) {
element.subtitle = item.subtitle;
}
if (!_.isEmpty(item.imageUrl)) {
element.image_url = item.imageUrl;
}
return element;
});
return {
attachment: {
type: 'template',
payload: {
template_type: 'list',
top_element_style: payload.topElementStyle,
sharable: payload.sharable,
elements: elements
}
}
};
}
};
module.exports = PayloadTranslators;