Last active
March 24, 2018 13:46
-
-
Save dvdvck/c9554b27e099321783c56b1dcc022cac to your computer and use it in GitHub Desktop.
Send sms from node using ModemManager through DBus
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'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(); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.