Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

OpenERP给合android手机SMS Gateway实现SMS(短信)发送



  • [b]最近完成了OpenERP与voip(总机)的融合,就想着把sms(短信)也弄起来,这样在OE中就可以给客户发送短信[/b]<br /><br />1、首先想到的是@重庆-mrshelly <br />写的 openerp-android模块(lizijian 补充了发送功能),经测试一次最多只能发送140个字符(移动商规定一次只能发送70个汉字),如是英文数字每次都成功(自动截到140个字符),但如果有中文(即使不超过70个汉字)就不一定发送成功(短一点的中文可能正常,但找不到规律),估计可能是android_sl4a处理中文有问题。<br /><br />2、那就试试网上的短信平台:安装SMS Client模块后,注册了短信平台,发送英文没问题,但发送中文就有各种限制,自己手机能发送的正常业务短信,在设置-SMS Gateway--Message Queue查看状态为send,表示已经发送至短信平台,但在平台查看不到,在浏览器地址直接输入测试,返回代码表有“非法字符”,中国特色没办法,正常的短信也有非法字符!再试了另一个短信平台也是如此,只好放弃,手机能正常发送的短信,在短信平台不能发送,这个不靠谱!<br /><br />3、既然手机能发送,看来还是回到手机上靠谱,想想有没有在android上运行的sms Gateway?<br /><br />Google一查有,其中有一个 “中文版SMS Gateway”,此APP让Android手机变成一个短消息网关,下载安装,相应设置:<br />[b]打开app界面如下,进入设置[/b]<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2942;image[/img]<br /><br />[b]在监听HTTP打勾,以便在OE上调用<br />长短信打勾,短信再长也不担心[/b]!<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2934;image[/img]<br /><br /><br /><br />[b]点击HTTP设置[/b]<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2932;image[/img]<br /><br />[b]设置端口及密码,调用方法在下图有说明了。[/b]<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2936;image[/img]<br /><br />[b]返回到最开始界面,点击开始,这时sms gateway已运行,可能调用了。[/b]<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2940;image[/img]<br /><br />[b]进入OE作相应设置[/b]<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2944;image[/img]<br /><br />[b]这时就可以发送信息[/b]<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2948;image[/img]<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2950;image[/img]<br /><br />[b]在手机上可以查看LOG[/b]<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2946;image[/img]<br /><br />[b]最后SMS Client模块代码要作些修改:[/b]<br /><br />            if gateway.method == 'http':<br />                prms = {}<br />                for p in data.gateway.property_ids:<br />                    if p.type == 'user':<br />                        prms[p.name] = p.value<br />                    elif p.type == 'password':<br />                        prms[p.name] = p.value<br />                    elif p.type == 'to':<br />                        prms[p.name] = data.mobile_to<br />                    elif p.type == 'sms':<br />                        print data.text<br />                        prms[p.name] = data.text.encode('utf-8')  [color=red]#原来是prms[p.name] = data.text 加上encode('utf-8') 以便能发送中文。否则运行到params = urllib.urlencode(prms) 进行地址编码会出错。[/color]<br /><br />[color=red]短信发送长度可以改成300[/color]<br /><br /><br />        for sms in queue_obj.browse(cr, uid, sids, context=context):<br />            if len(sms.msg) > 300:<br />                error_ids.append(sms.id)<br />                continue<br />            if sms.gateway_id.method == 'http':<br /><br />........................<br /><br />        queue_obj.write(cr, uid, sent_ids, {'state': 'send'}, context=context)<br />        queue_obj.write(cr, uid, error_ids, {<br />                                        'state': 'error',<br />                                        'error': 'Size of SMS should not be more then 300 char'<br />                                    }, context=context)<br /><br /><br />............................................................<br /><br />class HistoryLine(orm.Model):<br />    _name = 'sms.smsclient.history'<br />    _description = 'SMS Client History'<br /><br />    _columns = {<br />        'name': fields.char('Description', size=160, required=True, readonly=True),<br />        'date_create': fields.datetime('Date', readonly=True),<br />        'user_id': fields.many2one('res.users', 'Username', readonly=True, select=True),<br />        'gateway_id': fields.many2one('sms.smsclient', 'SMS Gateway', ondelete='set null', required=True),<br />        'to': fields.char('Mobile No', size=15, readonly=True),<br />        'sms': fields.text('SMS', size=300, readonly=True),<br />    }<br /><br /><br /><br />[b]总结:[/b]<br />1、android_sl4a发送中文短信有问题,但可以接收手机上的短信到OE中查看。<br />2、网络短信平台,有各种限制,不灵活,客户收到的短信显示的发送号码也是太长,不友好。<br />3、中文版SMS Gateway,发送短信没有长度限制,显示号码友好,OE的SMS Client可以查看发出的短信,但不能接收手机上的短信,这可以结合[b]重庆-mrshelly [/b]的模块接收手机的短信到OE上。



  • [b]最近完成了OpenERP与voip(总机)的融合,就想着把sms(短信)也弄起来,这样在OE中就可以给客户发送短信[/b]<br /><br />1、首先想到的是@重庆-mrshelly <br />写的 openerp-android模块(lizijian 补充了发送功能),经测试一次最多只能发送140个字符(移动商规定一次只能发送70个汉字),如是英文数字每次都成功(自动截到140个字符),但如果有中文(即使不超过70个汉字)就不一定发送成功(短一点的中文可能正常,但找不到规律),估计可能是android_sl4a处理中文有问题。<br /><br />2、那就试试网上的短信平台:安装SMS Client模块后,注册了短信平台,发送英文没问题,但发送中文就有各种限制,自己手机能发送的正常业务短信,在设置-SMS Gateway--Message Queue查看状态为send,表示已经发送至短信平台,但在平台查看不到,在浏览器地址直接输入测试,返回代码表有“非法字符”,中国特色没办法,正常的短信也有非法字符!再试了另一个短信平台也是如此,只好放弃,手机能正常发送的短信,在短信平台不能发送,这个不靠谱!<br /><br />3、既然手机能发送,看来还是回到手机上靠谱,想想有没有在android上运行的sms Gateway?<br /><br />Google一查有,其中有一个 “中文版SMS Gateway”,此APP让Android手机变成一个短消息网关,下载安装,相应设置:<br />[b]打开app界面如下,进入设置[/b]<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2942;image[/img]<br /><br />[b]在监听HTTP打勾,以便在OE上调用<br />长短信打勾,短信再长也不担心[/b]!<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2934;image[/img]<br /><br /><br /><br />[b]点击HTTP设置[/b]<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2932;image[/img]<br /><br />[b]设置端口及密码,调用方法在下图有说明了。[/b]<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2936;image[/img]<br /><br />[b]返回到最开始界面,点击开始,这时sms gateway已运行,可能调用了。[/b]<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2940;image[/img]<br /><br />[b]进入OE作相应设置[/b]<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2944;image[/img]<br /><br />[b]这时就可以发送信息[/b]<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2948;image[/img]<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2950;image[/img]<br /><br />[b]在手机上可以查看LOG[/b]<br />[img]http://shine-it.net/index.php?action=dlattach;topic=14631.0;attach=2946;image[/img]<br /><br />[b]最后SMS Client模块代码要作些修改:[/b]<br /><br />            if gateway.method == 'http':<br />                prms = {}<br />                for p in data.gateway.property_ids:<br />                    if p.type == 'user':<br />                        prms[p.name] = p.value<br />                    elif p.type == 'password':<br />                        prms[p.name] = p.value<br />                    elif p.type == 'to':<br />                        prms[p.name] = data.mobile_to<br />                    elif p.type == 'sms':<br />                        print data.text<br />                        prms[p.name] = data.text.encode('utf-8')  [color=red]#原来是prms[p.name] = data.text 加上encode('utf-8') 以便能发送中文。否则运行到params = urllib.urlencode(prms) 进行地址编码会出错。[/color]<br /><br />[color=red]短信发送长度可以改成300[/color]<br /><br /><br />        for sms in queue_obj.browse(cr, uid, sids, context=context):<br />            if len(sms.msg) > 300:<br />                error_ids.append(sms.id)<br />                continue<br />            if sms.gateway_id.method == 'http':<br /><br />........................<br /><br />        queue_obj.write(cr, uid, sent_ids, {'state': 'send'}, context=context)<br />        queue_obj.write(cr, uid, error_ids, {<br />                                        'state': 'error',<br />                                        'error': 'Size of SMS should not be more then 300 char'<br />                                    }, context=context)<br /><br /><br />............................................................<br /><br />class HistoryLine(orm.Model):<br />    _name = 'sms.smsclient.history'<br />    _description = 'SMS Client History'<br /><br />    _columns = {<br />        'name': fields.char('Description', size=160, required=True, readonly=True),<br />        'date_create': fields.datetime('Date', readonly=True),<br />        'user_id': fields.many2one('res.users', 'Username', readonly=True, select=True),<br />        'gateway_id': fields.many2one('sms.smsclient', 'SMS Gateway', ondelete='set null', required=True),<br />        'to': fields.char('Mobile No', size=15, readonly=True),<br />        'sms': fields.text('SMS', size=300, readonly=True),<br />    }<br /><br /><br /><br />[b]总结:[/b]<br />1、android_sl4a发送中文短信有问题,但可以接收手机上的短信到OE中查看。<br />2、网络短信平台,有各种限制,不灵活,客户收到的短信显示的发送号码也是太长,不友好。<br />3、中文版SMS Gateway,发送短信没有长度限制,显示号码友好,OE的SMS Client可以查看发出的短信,但不能接收手机上的短信,这可以结合[b]重庆-mrshelly [/b]的模块接收手机的短信到OE上。



  • 马克~~~



  • 感谢楼主,Mark



  • 赞..... 好东西............. 楼主应该将 apk 一并分享出来 就更棒了. :P



  • 补上apk:



  • 鼓掌~~~~~~~~~~~~~~~~~~~~~~~~



  • 你好,请问下我用这个SMSclient发送短信时,它的状态一直是Queued,这是为什么哇,我也是按照短信平台商给的接口,填的相应的参数,求帮忙谢谢了



  • 获益匪浅,学习了


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待