diff --git a/modules/client/back/methods/client/sendSms.js b/modules/client/back/methods/client/sendSms.js
new file mode 100644
index 0000000000..a39d4c75a9
--- /dev/null
+++ b/modules/client/back/methods/client/sendSms.js
@@ -0,0 +1,57 @@
+
+module.exports = Self => {
+    Self.remoteMethodCtx('sendSms', {
+        description: 'Log the message in clientLog and call the send method',
+        accessType: 'WRITE',
+        accepts: [{
+            arg: 'id',
+            type: 'Number',
+            required: true,
+            description: 'The ticket id',
+            http: {source: 'path'}
+        },
+        {
+            arg: 'destination',
+            type: 'String',
+            required: true,
+        },
+        {
+            arg: 'message',
+            type: 'String',
+            required: true,
+        }],
+        returns: {
+            type: 'Object',
+            root: true
+        },
+        http: {
+            path: `/:id/sendSms`,
+            verb: 'POST'
+        }
+    });
+
+    Self.sendSms = async(ctx, id, destination, message) => {
+        const userId = ctx.req.accessToken.userId;
+
+        let sms = await Self.app.models.Sms.send(ctx, id, destination, message);
+        let logRecord = {
+            originFk: id,
+            userFk: userId,
+            action: 'insert',
+            changedModel: 'sms',
+            newInstance: {
+                destinationFk: id,
+                destination: destination,
+                message: message,
+                statusCode: sms.statusCode,
+                status: sms.status
+            }
+        };
+
+        const clientLog = await Self.app.models.ClientLog.create(logRecord);
+
+        sms.logId = clientLog.id;
+
+        return sms;
+    };
+};
diff --git a/modules/client/back/methods/client/specs/sendSms.spec.js b/modules/client/back/methods/client/specs/sendSms.spec.js
new file mode 100644
index 0000000000..06435fdbd0
--- /dev/null
+++ b/modules/client/back/methods/client/specs/sendSms.spec.js
@@ -0,0 +1,27 @@
+const app = require('vn-loopback/server/server');
+
+describe('client sendSms()', () => {
+    let clientLog;
+
+    afterAll(async done => {
+        await app.models.ClientLog.destroyById(clientLog.id);
+
+        done();
+    });
+
+    it('should send a message and log it', async() => {
+        let ctx = {req: {accessToken: {userId: 9}}};
+        let id = 101;
+        let destination = 222222222;
+        let message = 'this is the message created in a test';
+
+        let sms = await app.models.Client.sendSms(ctx, id, destination, message);
+
+        logId = sms.logId;
+
+        let createdLog = await app.models.ClientLog.findById(logId);
+        let json = JSON.parse(JSON.stringify(createdLog.newInstance));
+
+        expect(json.message).toEqual(message);
+    });
+});
diff --git a/modules/client/back/methods/sms/send.js b/modules/client/back/methods/sms/send.js
index e56b5567ed..af956650d5 100644
--- a/modules/client/back/methods/sms/send.js
+++ b/modules/client/back/methods/sms/send.js
@@ -3,7 +3,7 @@ const xmlParser = require('xml2js').parseString;
 const UserError = require('vn-loopback/util/user-error');
 
 module.exports = Self => {
-    Self.remoteMethodCtx('send', {
+    Self.remoteMethod('send', {
         description: 'Sends SMS to a destination phone',
         accessType: 'WRITE',
         accepts: [{
@@ -83,7 +83,6 @@ module.exports = Self => {
         };
 
         const sms = await Self.create(newSms);
-
         if (statusCode != 200)
             throw new UserError(`We weren't able to send this SMS`);
 
diff --git a/modules/client/back/models/client.js b/modules/client/back/models/client.js
index 73626b4083..9b9db7161e 100644
--- a/modules/client/back/models/client.js
+++ b/modules/client/back/models/client.js
@@ -24,6 +24,7 @@ module.exports = Self => {
     require('../methods/client/canBeInvoiced')(Self);
     require('../methods/client/uploadFile')(Self);
     require('../methods/client/lastActiveTickets')(Self);
+    require('../methods/client/sendSms')(Self);
 
     // Validations
 
diff --git a/modules/client/back/models/sms.json b/modules/client/back/models/sms.json
index aa9737478c..cb6936d904 100644
--- a/modules/client/back/models/sms.json
+++ b/modules/client/back/models/sms.json
@@ -1,11 +1,7 @@
 {
     "name": "Sms",
     "description": "Sms sent to client",
-	"base": "Loggable",
-	"log": {
-        "model":"ClientLog",
-        "relation": "recipient"
-	},
+	"base": "VnModel",
     "options": {
         "mysql": {
             "table": "sms"
@@ -45,11 +41,6 @@
             "type": "belongsTo",
             "model": "Account",
             "foreignKey": "senderFk"
-        },
-        "recipient": {
-            "type": "belongsTo",
-            "model": "Client",
-            "foreignKey": "destinationFk"
         }
     }
 }
diff --git a/modules/client/front/sms/index.js b/modules/client/front/sms/index.js
index b68171ce55..1bf2fb99c8 100644
--- a/modules/client/front/sms/index.js
+++ b/modules/client/front/sms/index.js
@@ -28,7 +28,7 @@ class Controller extends Component {
 
     onResponse(response) {
         if (response === 'accept') {
-            this.$http.post(`Sms/send`, this.sms).then(res => {
+            this.$http.post(`Clients/${this.$params.id}/sendSms`, this.sms).then(res => {
                 this.vnApp.showMessage(this.$translate.instant('SMS sent!'));
 
                 if (res.data) this.emit('send', {response: res.data});
diff --git a/modules/client/front/sms/index.spec.js b/modules/client/front/sms/index.spec.js
index 6018825e93..c2a7eb9352 100644
--- a/modules/client/front/sms/index.spec.js
+++ b/modules/client/front/sms/index.spec.js
@@ -14,6 +14,7 @@ describe('Client', () => {
             $element = angular.element('<vn-dialog></vn-dialog>');
             controller = $componentController('vnClientSms', {$element, $scope});
             controller.client = {id: 101};
+            controller.$params = {id: 101};
         }));
 
         describe('onResponse()', () => {
@@ -22,8 +23,7 @@ describe('Client', () => {
                 controller.sms = {destinationFk: 101, destination: 111111111, message: 'My SMS'};
 
                 spyOn(controller.vnApp, 'showMessage');
-                $httpBackend.when('POST', `Sms/send`, params).respond(200, params);
-                $httpBackend.expect('POST', `Sms/send`, params).respond(params);
+                $httpBackend.expect('POST', `Clients/101/sendSms`, params).respond(200, params);
 
                 controller.onResponse('accept');
                 $httpBackend.flush();
diff --git a/modules/ticket/back/methods/ticket/sendSms.js b/modules/ticket/back/methods/ticket/sendSms.js
new file mode 100644
index 0000000000..efcaf4eda4
--- /dev/null
+++ b/modules/ticket/back/methods/ticket/sendSms.js
@@ -0,0 +1,57 @@
+
+module.exports = Self => {
+    Self.remoteMethodCtx('sendSms', {
+        description: 'Log the message in ticketLog and call the send method',
+        accessType: 'WRITE',
+        accepts: [{
+            arg: 'id',
+            type: 'Number',
+            required: true,
+            description: 'The ticket id',
+            http: {source: 'path'}
+        },
+        {
+            arg: 'destination',
+            type: 'String',
+            required: true,
+        },
+        {
+            arg: 'message',
+            type: 'String',
+            required: true,
+        }],
+        returns: {
+            type: 'Object',
+            root: true
+        },
+        http: {
+            path: `/:id/sendSms`,
+            verb: 'POST'
+        }
+    });
+
+    Self.sendSms = async(ctx, id, destination, message) => {
+        const userId = ctx.req.accessToken.userId;
+
+        let sms = await Self.app.models.Sms.send(ctx, id, destination, message);
+        let logRecord = {
+            originFk: id,
+            userFk: userId,
+            action: 'insert',
+            changedModel: 'sms',
+            newInstance: {
+                destinationFk: id,
+                destination: destination,
+                message: message,
+                statusCode: sms.statusCode,
+                status: sms.status
+            }
+        };
+
+        const ticketLog = await Self.app.models.TicketLog.create(logRecord);
+
+        sms.logId = ticketLog.id;
+
+        return sms;
+    };
+};
diff --git a/modules/ticket/back/methods/ticket/specs/sendSms.spec.js b/modules/ticket/back/methods/ticket/specs/sendSms.spec.js
new file mode 100644
index 0000000000..20066a5ba8
--- /dev/null
+++ b/modules/ticket/back/methods/ticket/specs/sendSms.spec.js
@@ -0,0 +1,27 @@
+const app = require('vn-loopback/server/server');
+
+describe('ticket sendSms()', () => {
+    let logId;
+
+    afterAll(async done => {
+        await app.models.TicketLog.destroyById(logId);
+
+        done();
+    });
+
+    it('should send a message and log it', async() => {
+        let ctx = {req: {accessToken: {userId: 9}}};
+        let id = 11;
+        let destination = 222222222;
+        let message = 'this is the message created in a test';
+
+        let sms = await app.models.Ticket.sendSms(ctx, id, destination, message);
+
+        logId = sms.logId;
+
+        let createdLog = await app.models.TicketLog.findById(logId);
+        let json = JSON.parse(JSON.stringify(createdLog.newInstance));
+
+        expect(json.message).toEqual(message);
+    });
+});
diff --git a/modules/ticket/back/models/ticket.js b/modules/ticket/back/models/ticket.js
index 8ba2bfb0d7..45284d60d2 100644
--- a/modules/ticket/back/models/ticket.js
+++ b/modules/ticket/back/models/ticket.js
@@ -28,6 +28,7 @@ module.exports = Self => {
     require('../methods/ticket/canHaveStowaway')(Self);
     require('../methods/ticket/recalculateComponents')(Self);
     require('../methods/ticket/deleteStowaway')(Self);
+    require('../methods/ticket/sendSms')(Self);
 
     Self.observe('before save', async function(ctx) {
         if (ctx.isNewInstance) return;
diff --git a/modules/ticket/front/descriptor/index.html b/modules/ticket/front/descriptor/index.html
index 3632d37f10..f47f3d6efa 100644
--- a/modules/ticket/front/descriptor/index.html
+++ b/modules/ticket/front/descriptor/index.html
@@ -193,7 +193,7 @@
 <!-- Regenerate invoice dialog -->
 
 <!-- SMS Dialog -->
-<vn-client-sms vn-id="sms" sms="$ctrl.newSMS"></vn-client-sms>
+<vn-ticket-sms vn-id="sms" sms="$ctrl.newSMS"></vn-ticket-sms>
 <!-- SMS Dialog -->
 
 <vn-confirm
diff --git a/modules/ticket/front/index.js b/modules/ticket/front/index.js
index 58ee9136ef..2625d35f31 100644
--- a/modules/ticket/front/index.js
+++ b/modules/ticket/front/index.js
@@ -34,3 +34,4 @@ import './weekly';
 import './dms/index';
 import './dms/create';
 import './dms/edit';
+import './sms';
diff --git a/modules/ticket/front/sms/index.html b/modules/ticket/front/sms/index.html
new file mode 100644
index 0000000000..ac7a206512
--- /dev/null
+++ b/modules/ticket/front/sms/index.html
@@ -0,0 +1,35 @@
+<vn-dialog
+    vn-id="SMSDialog"
+    on-response="$ctrl.onResponse($response)">
+    <tpl-body>
+        <section class="SMSDialog">
+            <h5 class="vn-py-sm" translate>Send SMS</h5>
+            <vn-horizontal>
+                <vn-textfield
+                    vn-one
+                    label="Destination"
+                    ng-model="$ctrl.sms.destination">
+                </vn-textfield>
+            </vn-horizontal>
+            <vn-horizontal >
+                <vn-textarea vn-one
+                    vn-id="message"
+                    label="Message" 
+                    ng-model="$ctrl.sms.message"
+                    rows="5"
+                    maxlength="160"
+                    rule>
+                </vn-textarea>
+            </vn-horizontal>
+            <vn-horizontal>
+                <span>
+                    {{'Characters remaining' | translate}}: {{$ctrl.charactersRemaining()}}
+                </span>
+            </vn-horizontal>
+        </section>
+    </tpl-body>
+    <tpl-buttons>
+        <input type="button" response="cancel" translate-attr="{value: 'Cancel'}"/>
+        <button response="accept" translate>Send</button>
+    </tpl-buttons>
+</vn-dialog>
\ No newline at end of file
diff --git a/modules/ticket/front/sms/index.js b/modules/ticket/front/sms/index.js
new file mode 100644
index 0000000000..1f2c7f9c05
--- /dev/null
+++ b/modules/ticket/front/sms/index.js
@@ -0,0 +1,48 @@
+import ngModule from '../module';
+import Component from 'core/lib/component';
+import './style.scss';
+
+class Controller extends Component {
+    constructor($element, $scope, $http, $translate, vnApp) {
+        super($element, $scope);
+
+        this.$scope = $scope;
+        this.$http = $http;
+        this.$translate = $translate;
+        this.vnApp = vnApp;
+    }
+
+    open() {
+        this.$scope.SMSDialog.show();
+    }
+
+    charactersRemaining() {
+        let elementMaxLength;
+        let textAreaLength;
+        const element = this.$scope.message;
+
+        textAreaLength = element.input.textLength;
+        elementMaxLength = element.maxlength;
+        return elementMaxLength - textAreaLength;
+    }
+
+    onResponse(response) {
+        if (response === 'accept') {
+            this.$http.post(`Tickets/${this.$params.id}/sendSms`, this.sms).then(res => {
+                this.vnApp.showMessage(this.$translate.instant('SMS sent!'));
+
+                if (res.data) this.emit('send', {response: res.data});
+            });
+        }
+    }
+}
+
+Controller.$inject = ['$element', '$scope', '$http', '$translate', 'vnApp'];
+
+ngModule.component('vnTicketSms', {
+    template: require('./index.html'),
+    controller: Controller,
+    bindings: {
+        sms: '<',
+    }
+});
diff --git a/modules/ticket/front/sms/index.spec.js b/modules/ticket/front/sms/index.spec.js
new file mode 100644
index 0000000000..5565c36230
--- /dev/null
+++ b/modules/ticket/front/sms/index.spec.js
@@ -0,0 +1,49 @@
+import './index';
+
+describe('Ticket', () => {
+    describe('Component vnTicketSms', () => {
+        let controller;
+        let $httpBackend;
+        let $element;
+
+        beforeEach(ngModule('ticket'));
+
+        beforeEach(angular.mock.inject(($componentController, $rootScope, _$httpBackend_) => {
+            $httpBackend = _$httpBackend_;
+            let $scope = $rootScope.$new();
+            $element = angular.element('<vn-dialog></vn-dialog>');
+            controller = $componentController('vnTicketSms', {$element, $scope});
+            controller.$params = {id: 11};
+        }));
+
+        describe('onResponse()', () => {
+            it('should perform a POST query and show a success snackbar', () => {
+                let params = {destinationFk: 101, destination: 111111111, message: 'My SMS'};
+                controller.sms = {destinationFk: 101, destination: 111111111, message: 'My SMS'};
+
+                spyOn(controller.vnApp, 'showMessage');
+                $httpBackend.expect('POST', `Tickets/11/sendSms`, params).respond(200, params);
+
+                controller.onResponse('accept');
+                $httpBackend.flush();
+
+                expect(controller.vnApp.showMessage).toHaveBeenCalledWith('SMS sent!');
+            });
+        });
+
+        describe('charactersRemaining()', () => {
+            it('should return the characters remaining in a element', () => {
+                controller.$scope.message = {
+                    input: {
+                        textLength: 50
+                    },
+                    maxlength: 150
+                };
+
+                let result = controller.charactersRemaining();
+
+                expect(result).toEqual(100);
+            });
+        });
+    });
+});
diff --git a/modules/ticket/front/sms/locale/es.yml b/modules/ticket/front/sms/locale/es.yml
new file mode 100644
index 0000000000..f26c8ba24f
--- /dev/null
+++ b/modules/ticket/front/sms/locale/es.yml
@@ -0,0 +1,5 @@
+Send SMS: Enviar SMS
+Destination: Destinatario
+Message: Mensaje
+SMS sent!: ¡SMS enviado!
+Characters remaining: Carácteres restantes
\ No newline at end of file
diff --git a/modules/ticket/front/sms/style.scss b/modules/ticket/front/sms/style.scss
new file mode 100644
index 0000000000..89723b1962
--- /dev/null
+++ b/modules/ticket/front/sms/style.scss
@@ -0,0 +1,5 @@
+@import "variables";
+
+.SMSDialog {
+    min-width: 25em
+}
\ No newline at end of file