Skip to content

Instantly share code, notes, and snippets.

@dvdvck
Last active March 24, 2018 13:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save dvdvck/c9554b27e099321783c56b1dcc022cac to your computer and use it in GitHub Desktop.
Save dvdvck/c9554b27e099321783c56b1dcc022cac to your computer and use it in GitHub Desktop.
Send sms from node using ModemManager through DBus
'use strict';
const DBus = require('dbus');
const co = require('co');
let bus = DBus.getBus('system');
let mm = bus.getInterface.bind(bus, 'org.freedesktop.ModemManager1');
co(function*(){
let messaging = yield new Promise((res, rej)=>{
mm('/org/freedesktop/ModemManager1', 'org.freedesktop.DBus.ObjectManager', (err, manager)=>{
if(err){ rej(err); return }
manager.GetManagedObjects((err, modems)=>{
if(err){ rej(err); return }
let pathModems = Object.keys(modems);
mm(pathModems[0], 'org.freedesktop.ModemManager1.Modem.Messaging', (err, messaging)=>{
if(err){ rej(err); return }
res(messaging);
});
});
});
});
let SMSpath = yield new Promise((res, rej)=>{
messaging.Create({number:'5512345678', text:'Hello there/Hola ahí'}, (err, SMSpath)=>{
if(err){ rej(err); return }
res(SMSpath);
});
});
mm(SMSpath, 'org.freedesktop.ModemManager1.Sms', (err, sms)=>{
if(err){ throw new Error(err) }
sms.Send();
});
return new Promise((res, rej)=>{
mm(SMSpath, 'org.freedesktop.DBus.Properties', (err, sms)=>{
if(err){ rej(err); return }
sms.on('PropertiesChanged', (iface, changed)=>{
console.log(changed);
if(changed.State == 5){
res();
}else{
rej(new Error('Envío no completado'+ changed));
}
});
});
});
})
.then(_=>{
console.log('Eso fue todo amigos')
process.exit();
})
.catch(err=>{
console.error(err);
process.exit();
});
@dvdvck
Copy link
Author

dvdvck commented Apr 8, 2017

Send sms to Mexico is a pain in the nuts due to misrouting and internal issues from
cellular last mile providers.
This is another layer when nexmo or clx failed to deliver sms on demand.
It uses a siretta modem (could be any modem) managed with ModemManager
and nodejs as execution control.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment