UNPKG

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

142 lines (126 loc) 3.3 kB
var _ = require('underscore'); var moment = require('moment'); var ChatExpress = require('../../chat-platform/chat-platform'); var ChatLog = require('../../chat-log'); var utils = require('../../../lib/helpers/utils'); var when = utils.when; var helpers = require('./helpers'); var fixNumber = helpers.fixNumber; var twilio = require('twilio'); var Twilio = new ChatExpress({ inboundMessageEvent: null, transport: 'twilio', transportDescription: 'Twilio', tsKey: function() { return moment(); }, chatIdKey: function(payload) { return payload.From; }, userIdKey: function(payload) { return payload.From; }, onStart: function() { var options = this.getOptions(); options.connector = twilio(options.accountSid, options.authToken); return when(true); }, onStop: function() { var options = this.getOptions(); options.connector = null; return when(true); }, routes: { '/redbot/twilio': function(req, res) { this.receive(req.body); res.send(''); // sending 200 cause an "OK" in whatsup } }, routesDescription: { '/redbot/twilio': 'todo fix' } }); Twilio.out('message', function(message) { var options = this.getOptions(); var context = message.chat(); var client = message.client(); var fromNumber = options.fromNumber; return new Promise(function (resolve, reject) { client.messages .create({ body: message.payload.content, from: fixNumber(fromNumber), to: fixNumber(message.payload.chatId) }) .then(function(message) { return when(context.set('messageId', message.sid)) }) .then( function() { resolve(message); }, reject ); }); }); /* { ToCountry: 'GB', ToState: '', SmsMessageSid: '', NumMedia: '0', ToCity: '', FromZip: '', SmsSid: '', FromState: '', SmsStatus: 'received', FromCity: '', Body: 'this is another answer', FromCountry: 'IT', To: '<twilio number>', MessagingServiceSid: '', ToZip: '', NumSegments: '1', MessageSid: '', AccountSid: '', From: '<who sent>', ApiVersion: '2010-04-01' } */ // log messages, these should be the last Twilio.out(function(message) { var options = this.getOptions(); var logfile = options.logfile; var chatContext = message.chat(); if (!_.isEmpty(logfile)) { return when(chatContext.all()) .then(function(variables) { var chatLog = new ChatLog(variables); return chatLog.log(message, logfile); }); } return message; }); Twilio.in(function(message) { return new Promise(function (resolve) { if (!_.isEmpty(message.originalMessage.Body)) { message.payload.type = 'message'; message.payload.content = message.originalMessage.Body; } resolve(message); }); }); Twilio.in('*', function(message) { var options = this.getOptions(); var logfile = options.logfile; var chatContext = message.chat(); if (!_.isEmpty(logfile)) { return when(chatContext.all()) .then(function(variables) { var chatLog = new ChatLog(variables); return chatLog.log(message, logfile); }); } return message; }); Twilio.registerMessageType('message', 'Message', 'Send a plain text message'); module.exports = Twilio;