背景介绍
Asterisk 是一个开源的 IP PBX(Private Branch Exchange,专用分组交换机),广泛应用于 VoIP(Voice over Internet Protocol)领域,它支持多种语音和数据通讯协议,包括 SIP、IAX2、PRI 等,Asterisk 不仅可以处理传统的电话通信,还具备丰富的扩展功能,如短信服务、传真服务等,本文将详细介绍如何在 Asterisk 中实现短信功能。
一、Asterisk 短信发送模式
文本模式(Text Mode)
在文本模式下,每次只能发送140个字节的内容,如果短信内容超过140字节,则需要进行分割发送。
示例脚本
#!/bin/bash SMS Content(s) SMS_CONTENTS="123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" SPAN Number(s) SPAN=1 Destination Number(s) NUMBER=15623841257 SMS Center Number. #SMSC= 1380075500 #Shenzhen China #Sending MODE: pdu or text MODE=text Set up sending methods if [ $MODE = text ];then LIMIT=140 asterisk -rx "gsm set send sms mode text" else LIMIT=70 asterisk -rx "gsm set send sms mode pdu" fi Count the length of whole SMS LENGTH=${#SMS_CONTENTS} Groups of sending time(s) TIMES=$(($LENGTH / $LIMIT)) The remaining length of SMS LAST=$(($LENGTH % $LIMIT)) if [ $LAST -eq 0 ];then SEND_TIMES=$TIMES else SEND_TIMES=$(($TIMES+1)) fi echo "Please note: Your SMS will be separated into $SEND_TIMES section(s) to send!" for((i=0; i<$TIMES; i++)) do S=$(($i*$LIMIT)) REAL_CONTENT=${SMS_CONTENTS:$S:$LIMIT} asterisk -rx "gsm send sms $SPAN $NUMBER "$REAL_CONTENT"" echo $(($i + 1)) done if [ $LAST -ne 0 ]; then S=$(($LENGTH $LAST)) REAL_CONTENT=${SMS_CONTENTS:$S:$LAST} asterisk -rx "gsm send sms $SPAN $NUMBER "$REAL_CONTENT"" echo $(($TIMES + 1)) fi
此脚本用于强制截断短信内容并分多次发送。
PDU模式(PDU Mode)
在PDU模式下,每次只能发送70个字节的内容,如果短信内容超过70字节,同样需要进行分割发送。
示例脚本
#!/bin/bash SMS Content(s) SMS_CONTENTS="1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" SPAN Number(s) SPAN=1 Destination Number(s) NUMBER=15623841257 SMS Center Number. #SMSC= 1380075500 #Shenzhen China #Sending MODE: pdu or text MODE=pdu Set up sending methods if [ $MODE = text ];then LIMIT=140 asterisk -rx "gsm set send sms mode text" else LIMIT=70 asterisk -rx "gsm set send sms mode pdu" fi Count the length of whole SMS LENGTH=${#SMS_CONTENTS} Groups of sending time(s) TIMES=$(($LENGTH / $LIMIT)) The remaining length of SMS LAST=$(($LENGTH % $LIMIT)) if [ $LAST -eq 0 ];then SEND_TIMES=$TIMES else SEND_TIMES=$(($TIMES+1)) fi echo "Please note: Your SMS will be separated into $SEND_TIMES section(s) to send!" for((i=0; i<$TIMES; i++)) do S=$(($i*$LIMIT)) REAL_CONTENT=${SMS_CONTENTS:$S:$LIMIT} asterisk -rx "gsm send sms $SPAN $NUMBER "$REAL_CONTENT"" echo $(($i + 1)) done if [ $LAST -ne 0 ]; then S=$(($LENGTH $LAST)) REAL_CONTENT=${SMS_CONTENTS:$S:$LAST} asterisk -rx "gsm send sms $SPAN $NUMBER "$REAL_CONTENT"" echo $(($TIMES + 1)) fi
此脚本用于强制截断短信内容并分多次发送。
二、Asterisk 接收短信配置
基本配置步骤:
确保 Asterisk 的版本至少为 1.8,因为早期版本不支持完整的短信功能。
安装chan_dongle
或其他支持 GSM 卡的驱动模块,OpenVox GSM 卡支持两种短信发送模式:text 和 pdu,用户可以通过 CLI 控制台命令自行设定发送模式,由于当前对于 text 模式每次只支持 140 个字节发送,pdu 每次发送只支持 70 个字节,剩下的短信内容将无法发送,如下这个脚本主要就是强制截断短信内容分若干次发送,这样做比较灵活。
配置拨号规则以处理接收到的短信,使用 AGI(Asterisk Gateway Interface)脚本来处理短信内容。
设置短信中心号码(SMSC)。
确保系统已正确识别 GSM 卡并能够发送和接收短信。
示例配置:
[general] context = from-internal-calls sms_span_id = 1 ; Span ID for SMS messages (typically 1) sms_outgoing_carrier = YOUR_CARRIER_NAME ; Outgoing SMS carrier name (e.g., AT&T, Verizon) sms_incoming_carrier = YOUR_CARRIER_NAME ; Incoming SMS carrier name (e.g., AT&T, Verizon) sms_default_coding = UCS2 ; Default encoding for SMS messages (UCS2 or GSM) sms_max_message_length = 160 ; Maximum message length in characters (including overhead)
> 配置完成后,重启 Asterisk 服务以使更改生效,然后可以通过发送测试短信来验证配置是否正确,如果一切正常,你应该能够在控制台上看到接收到的短信内容,还可以编写自定义的 AGI 脚本来进一步处理这些短信,例如将其转发到电子邮件地址或存储到数据库中。
到此,以上就是小编对于“asterisk 短信”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/650897.html