diff --git a/packages/rocketchat-livechat/imports/server/rest/sms.js b/packages/rocketchat-livechat/imports/server/rest/sms.js index 56ca236c3b5b..a959807e4613 100644 --- a/packages/rocketchat-livechat/imports/server/rest/sms.js +++ b/packages/rocketchat-livechat/imports/server/rest/sms.js @@ -46,6 +46,27 @@ RocketChat.API.v1.addRoute('livechat/sms-incoming/:service', { sendMessage.message.msg = sms.body; sendMessage.guest = visitor; + sendMessage.message.attachments = sms.media.map(curr => { + const attachment = { + message_link: curr.url + }; + + const contentType = curr.contentType; + switch (contentType.substr(0, contentType.indexOf('/'))) { + case 'image': + attachment.image_url = curr.url; + break; + case 'video': + attachment.video_url = curr.url; + break; + case 'audio': + attachment.audio_url = curr.url; + break; + } + + return attachment; + }); + try { const message = SMSService.response.call(this, RocketChat.Livechat.sendMessage(sendMessage)); diff --git a/packages/rocketchat-sms/services/twilio.js b/packages/rocketchat-sms/services/twilio.js index 1d7499bb21ae..e9bb32235af9 100644 --- a/packages/rocketchat-sms/services/twilio.js +++ b/packages/rocketchat-sms/services/twilio.js @@ -7,7 +7,9 @@ class Twilio { this.authToken = RocketChat.settings.get('SMS_Twilio_authToken'); } parse(data) { - return { + let numMedia = 0; + + const returnData = { from: data.From, to: data.To, body: data.Body, @@ -23,6 +25,34 @@ class Twilio { fromZip: data.FromZip } }; + + if (data.NumMedia) { + numMedia = parseInt(data.NumMedia, 10); + } + + if (isNaN(numMedia)) { + console.error(`Error parsing NumMedia ${ data.NumMedia }`); + return returnData; + } + + returnData.media = []; + + for (let mediaIndex = 0; mediaIndex < numMedia; mediaIndex++) { + const media = { + 'url': '', + 'contentType': '' + }; + + const mediaUrl = data[`MediaUrl${ mediaIndex }`]; + const contentType = data[`MediaContentType${ mediaIndex }`]; + + media.url = mediaUrl; + media.contentType = contentType; + + returnData.media.push(media); + } + + return returnData; } send(fromNumber, toNumber, message) { const client = twilio(this.accountSid, this.authToken);