Browse Source

更新脚本程序

Yu.ding 5 năm trước cách đây
mục cha
commit
24b2d228f3

BIN
.DS_Store


BIN
etc/scripts/generate_context_conf


BIN
etc/scripts/generate_group_conf


+ 3 - 0
package-lock.json

@@ -0,0 +1,3 @@
+{
+  "lockfileVersion": 1
+}

BIN
usr/.DS_Store


BIN
usr/local/.DS_Store


BIN
usr/local/defaults/.DS_Store


BIN
usr/local/defaults/etc/.DS_Store


BIN
usr/local/defaults/etc/asterisk/.DS_Store


+ 0 - 1
usr/local/defaults/etc/asterisk/extensions.conf

@@ -6,4 +6,3 @@
 #include extensions_users_context_custom.conf
 #include extensions_ivr_custom.conf
 #include extensions_dialrule_custom.conf
-#include extensions_channelhints.conf

+ 0 - 5
usr/local/defaults/etc/asterisk/extensions_additional.conf

@@ -18,8 +18,6 @@ isDENOISE = no
 [default]
 include => ipinfo
 include => pickupexten
-include => channelhints
-include => hangup-event
 
 [pickupexten]
 exten = _*8#,1,Pickup()
@@ -31,9 +29,6 @@ exten = _**.,n,Hangup()
 exten = 610,1,Goto(voicemenu-custom-1,s,1)
 exten = 611,1,Goto(voicemenu-custom-2,s,1)
 
-[queues]
-#include "extensions_queue_custom.conf"
-
 [direct-analog]
 exten = direct,1,Goto(voicemenu-custom-1,s,1)
 

+ 0 - 5
usr/local/defaults/etc/asterisk/extensions_context_custom.conf

@@ -1,5 +0,0 @@
-[DialRule_10000]
-include => extens-group-6000
-include => extens-group-6001
-include => paging-group-6000
-include => paging-group-6001

+ 54 - 37
usr/local/defaults/etc/asterisk/extensions_general.conf

@@ -12,8 +12,8 @@ exten => s,n,execIf($[${LEN(${OUTCID})} > 0]?Set(CALLERID(all)=${OUTCID}))
 exten => s,n,GotoIf($[${LEN(${RECORDOUT_${CID}})} = 0]?parse)
 exten => s,n(record),Macro(stdexten-record,${CID},${OUTNUM})
 exten => s,n,Set(TRUNK=${CUT(ARG2,/,2)})
-exten => s,n,AGI(gettroutcid.php,${TRUNK})
-exten => s,n,execIf($[${LEN(${TROUTCID})} > 0 && ${LEN(${OUTCID})} = 0]?Set(CALLERID(all)=${TROUTCID}))
+exten => s,n,MSet(__VOIPDID=${TRUNK},TRUNK_CID=${CID_${TRUNK}})
+exten => s,n,execIf($[${LEN(${TRUNK_CID})} > 0 && ${LEN(${OUTCID})} = 0]?Set(CALLERID(all)=${TRUNK_CID}))
 exten => s,n,SIPRemoveHeader()
 exten => s,n,GotoIf($["${CUT(ARG2,/,1)}" != "DAHDI"]?ppi)
 exten => s,n,ExecIf($["foo${isDENOISE}" = "fooyes"]?MSet(DENOISE(rx)=on,DENOISE(tx)=on))
@@ -47,17 +47,21 @@ same => n,Macro(stdexten-record,${CAID},${CAEE})
 same => n,ExecIf($[${ISNULL(USERID)}]?Set(__USERID=0))
 same => n,ExecIf($[${ISNULL(USERL)}]?Set(__USERL=12))
 same => n,ExecIf($[${ISNULL(SERVICEL)}]?Set(__SERVICEL=12))
-same => n,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:call)
-same => n(dial),Dial(${ARG2},${RINGTIME},${DIALOPTIONS}M(answered)b(ringevent^s^1))
+same => n,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},status:Calling)
+same => n(dial),Dial(${ARG2},${RINGTIME},${DIALOPTIONS}M(answered)b(extringevent^s^1))
 same => n,Set(SV_DIALSTATUS=${DIALSTATUS})
 same => n,Goto(s-${SV_DIALSTATUS},1)
-exten => s-NOANSWER,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:noanswer)
+exten => s-NOANSWER,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},status:Noanswer)
 same => n,Hangup
-exten => s-BUSY,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:busy)
+exten => s-BUSY,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},status:Busy)
 same => n,Hangup
-exten => _s-.,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:failed)
+exten => _s-.,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},status:Failed)
 same => n,Hangup
 
+[extringevent]
+exten = s,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},status:Ringing)
+same => n,Return()
+
 [macro-stdexten-withoutvm]
 exten => s,1,NoOp(Call Exten)
 same => n,GotoIf($["foo${CALLERID(num)}"="foo"]?nocid)
@@ -68,24 +72,19 @@ same => n,Macro(stdexten-record,${CAID},${CAEE})
 same => n,ExecIf($[${ISNULL(USERID)}]?Set(__USERID=0))
 same => n,ExecIf($[${ISNULL(USERL)}]?Set(__USERL=12))
 same => n,ExecIf($[${ISNULL(SERVICEL)}]?Set(__SERVICEL=12))
-same => n,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:call)
-same => n(dial),Dial(${ARG2},${RINGTIME},${DIALOPTIONS}M(answered)b(ringevent^s^1))
+same => n,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},status:Calling)
+same => n(dial),Dial(${ARG2},${RINGTIME},${DIALOPTIONS}M(answered))
 same => n,Set(SV_DIALSTATUS=${DIALSTATUS})
 same => n,Goto(s-${SV_DIALSTATUS},1)
-exten => s-NOANSWER,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:noanswer)
+exten => s-NOANSWER,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},status:Noanswer)
 same => n,Hangup
-exten => s-BUSY,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:busy)
+exten => s-BUSY,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},status:Busy)
 same => n,Hangup
-exten => _s-.,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:failed)
+exten => _s-.,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},status:Failed)
 same => n,Hangup
-exten => h,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:hangup)
 
 [macro-answered]
-exten = s,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:answered)
-
-[ringevent]
-exten => s,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:ringing)
-same => n,Return()
+exten = s,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},status:Answered)
 
 [macro-stdexten-old]
 exten => s,1,Set(__DYNAMIC_FEATURES=nway-start)
@@ -226,39 +225,44 @@ same => n(fail),Hangup
 [macro-intercom]
 exten => s,1,ChanIsAvail(${ARG2},js)
 same => n,GoToIf($["${AVAILSTATUS}" = "1"]?autoanswer:fail)
-same => n(autoanswer),MSet(SRCEXTEN=${CALLERID(num)},__CALLEE=${ARG1},DATE=${STRFTIME(${EPOCH},,%Y%m%d)},__UUID=${UNIQUEID},ALERTINFO=Alert-Info: Ring Answer,CALLINFO=Call-Info: <uri>\;answer-after=0)
+same => n(autoanswer),MSet(__SRCEXTEN=${CALLERID(num)},__CALLEE=${ARG1},DATE=${STRFTIME(${EPOCH},,%Y%m%d)},__UUID=${UNIQUEID},ALERTINFO=Alert-Info: Ring Answer,CALLINFO=Call-Info: <uri>\;answer-after=0)
 same => n,SIPAddHeader(${ALERTINFO})
 same => n,SIPAddHeader(${CALLINFO})
 same => n,System(/bin/sh /etc/scripts/shell_scripts.sh mkrcdir intercom ${DATE})
 same => n,Set(FILENAME=intercom/${DATE}/intercom-${SRCEXTEN}-${CALLEE}-${UUID}.wav)
 same => n,MixMonitor(${FILENAME},b)
-same => n,UserEvent(intercomEvent,userid:${USERID},src:${SRCEXTEN},dest:${CALLEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:intercom)
-same => n,Dial(${ARG2})
+same => n,UserEvent(controlEvent,userid:${USERID},src:${SRCEXTEN},dest:${CALLEE},uuid:${UUID},status:stop)
+same => n,Wait(2)
+same => n,Playback(beep)
+same => n,Dial(${ARG2},${RINGTIME},M(intercomstatus))
 same => n,Hangup
-same => n(fail),UserEvent(intercomEvent,userid:${USERID},src:${SRCEXTEN},dest:${CALLEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:failed)
+same => n(fail),UserEvent(intercomEvent,userid:${USERID},src:${SRCEXTEN},dest:${CALLEE},uuid:${UUID},status:Failed)
 same => n,Hangup
 
+[macro-intercomstatus]
+exten = s,1,UserEvent(callExtenEvent,userid:${USERID},src:${SRCEXTEN},dest:${CALLEE},uuid:${UUID},status:Intercom)
+
 [clicktocall]
-exten => _[a-zA-Z0-9+*#].,1,MSet(DESTNUM=${EXTEN},CALLERID(num)=${SRCNUM})
+exten => s,1,MSet(DESTNUM=${DEST},CALLERID(num)=${SRCNUM})
 same => n,Macro(user-context,${SRCEXTEN})
 same => n,Goto(${EXTCONTEXT},${DESTNUM},1)
 
 [clicktointercom]
-exten => _[a-zA-Z0-9+*#].,1,ChanIsAvail(SIP/${EXTEN},js)
+exten => s,1,ChanIsAvail(SIP/${DEST},js)
 same => n,GoToIf($["${AVAILSTATUS}" = "1"]?autoanswer:fail)
-same => n(autoanswer),MSet(CALLERID(num)=${SRCEXTEN},__CALLEE=${EXTEN},DATE=${STRFTIME(${EPOCH},,%Y%m%d)},__UUID=${UNIQUEID},ALERTINFO=Alert-Info: Ring Answer,CALLINFO=Call-Info: <uri>\;answer-after=0)
+same => n(autoanswer),MSet(CALLERID(num)=${SRCEXTEN},__CALLEE=${DEST},DATE=${STRFTIME(${EPOCH},,%Y%m%d)},__UUID=${UNIQUEID},ALERTINFO=Alert-Info: Ring Answer,CALLINFO=Call-Info: <uri>\;answer-after=0)
 same => n,SIPAddHeader(${ALERTINFO})
 same => n,SIPAddHeader(${CALLINFO})
 same => n,System(/bin/sh /etc/scripts/shell_scripts.sh mkrcdir intercom ${DATE})
 same => n,Set(FILENAME=intercom/${DATE}/intercom-${SRCEXTEN}-${CALLEE}-${UUID}.wav)
 same => n,MixMonitor(${FILENAME},b)
-same => n,UserEvent(intercomEvent,userid:${USERID},src:${SRCEXTEN},dest:${EXTEN},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:intercom)
-same => n,Dial(SIP/${EXTEN})
+same => n,UserEvent(controlEvent,userid:${USERID},src:${SRCEXTEN},dest:${DEST},uuid:${UUID},status:stop)
+same => n,Wait(2)
+same => n,Playback(beep)
+same => n,Dial(SIP/${DEST},${RINGTIME},M(intercomstatus))
 same => n,Hangup
-same => n(fail),UserEvent(intercomEvent,userid:${USERID},src:${SRCEXTEN},dest:${CALLEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:failed)
+same => n(fail),UserEvent(intercomEvent,userid:${USERID},src:${SRCEXTEN},dest:${CALLEE},uuid:${UUID},status:Failed)
 same => n,Hangup
-exten => h,1,UserEvent(intercomEvent,userid:${USERID},src:${SRCEXTEN},dest:${CALLEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:hangup)
-same => n,NoOp(Intercom End)
 
 [clicktopaging]
 exten => s,1,MSet(CALLERID(num)=${SRCEXTEN},DATE=${STRFTIME(${EPOCH},,%Y%m%d)},__UUID=${UNIQUEID},ALERTINFO=Alert-Info: Ring Answer,CALLINFO=Call-Info: <uri>\;answer-after=0)
@@ -267,14 +271,15 @@ same => n,SIPAddHeader(${CALLINFO})
 same => n,System(/bin/sh /etc/scripts/shell_scripts.sh mkrcdir paging ${DATE})
 same => n,Set(FILENAME=paging/${DATE}/paging-${SRCEXTEN}-${UUID}.wav)
 same => n,MixMonitor(${FILENAME},b)
+same => n,UserEvent(controlEvent,userid:${USERID},src:${SRCEXTEN},dest:${DESTS},uuid:${UUID},status:stop)
+same => n,Wait(2)
+same => n,Playback(beep)
 same => n,Page(${CHANS},b(paging-update-status^s^1)q)
 same => n,Hangup
-exten => h,1,UserEvent(pagingEvent,userid:${USERID},src:${SRCEXTEN},dest:${DESTS},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:hangup)
-same => n,NoOp(Paging End)
 
 [paging-update-status]
 exten => s,1,Set(CALLEE=${CALLERID(num)})
-same => n,UserEvent(pagingEvent,userid:${USERID},src:${SRCEXTEN},dest:${CALLEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:paging)
+same => n,UserEvent(pagingEvent,userid:${USERID},src:${SRCEXTEN},dest:${CALLEE},uuid:${UUID},status:Paging)
 same => n,Return()
 
 [playback-ttspaging]
@@ -286,11 +291,26 @@ same => n,GotoIf($[${loop} > 0 ]?loop)
 same => n,hangup
 exten => h,1,System(/bin/rm -f ${AUDIOFILE})
 
+[join-confbridge]
+exten => s,1,NoOp(exten ${DEST} join conference ${CONFNUM})
+same => n,UserEvent(meetingEvent,userid:${USERID},src:${CONFNUM},dest:${DEST},uuid:${UUID},status:Meeting)
+same => n,ConfBridge(${CONFNUM},conf_bridge)
+same => n,Hangup
+
 [command-astinit]
 exten = s,1,NoOp(astinit)
-exten = s,n,System(/etc/scripts/astinit.sh)
+exten = s,n,System(/etc/scripts/conf_gen.sh)
 exten = s,n,Hangup
 
+[clickdial]
+exten => _X.,1,Set(__CAEE=${EXTEN})
+same => n,GotoIf($["${WDAutoAnswer}" = "1"]?auto:manual)
+same => n(auto),MSet(ALERTINFO=Alert-Info: Ring Answer,CALLINFO=Call-Info: <uri>\;answer-after=0)
+same => n,SIPAddHeader(${ALERTINFO})
+same => n,SIPAddHeader(${CALLINFO})
+same => n(manual),Dial(SIP/${EXTEN},${RINGTIME},ab(extringevent^s^1))
+same => n,Hangup
+
 [ipinfo]
 exten => **11,1,Answer
 exten => **11,n,agi(wanip.sh)
@@ -537,6 +557,3 @@ exten = s,n(answer),Answer()
 exten = s,n,Wait(${AutoAnswer})
 exten = s,n(notanswer),Macro(analog-custom-${DAHDICHAN})
 exten = s,n,Goto(direct-analog,direct,1)
-
-[hangup-event]
-exten => h,1,UserEvent(callExtenEvent,userid:${USERID},src:${CAID},dest:${CAEE},uuid:${UUID},user_level:${USERL},service_level:${SERVICEL},status:hangup)

+ 0 - 12
usr/local/defaults/etc/asterisk/extensions_paging_custom.conf

@@ -1,12 +0,0 @@
-[paging-group-6000]
-exten => 6000,1,NoOp(name)
-same => n,MSet(__SRCEXTEN=${CALLERID(num)},DATE=${STRFTIME(${EPOCH},,%Y%m%d)},__UUID=${UNIQUEID},ALERTINFO=Alert-Info: Ring Answer,CALLINFO=Call-Info: <uri>\;answer-after=0)
-same => n,SIPAddHeader(${ALERTINFO})
-same => n,SIPAddHeader(${CALLINFO})
-same => n,System(/bin/sh /etc/scripts/shell_scripts.sh mkrcdir paging ${DATE})
-same => n,Set(FILENAME=paging/${DATE}/paging-${SRCEXTEN}-${UUID}.wav)
-same => n,MixMonitor(${FILENAME},b)
-same => n,Page(SIP/10000&SIP/10001,b(paging-update-status^s^1)q)
-same => n,Hangup
-exten => h,1,UserEvent(pagingEvent,src:${SRCEXTEN},dest:6000,uuid:${UUID},status:hangup)
-same => n,NoOp(Paging End)

+ 10 - 10
usr/local/defaults/etc/asterisk/http.conf

@@ -6,13 +6,13 @@
 ;!
 
 [general]
-enabled = yes
-enablestatic = no
-servername=VOIP
-bindaddr = 127.0.0.1
-bindport = 8088
-prefix = 
-tlsenable=yes          ; enable tls - default no.
-tlsbindaddr=0.0.0.0:8089
-tlscertfile=/etc/httpd/certs/server.crt
-tlsprivatekey=/etc/httpd/certs/server.key
+enabled = no
+;enablestatic = no
+;servername=VOIP
+;bindaddr = 127.0.0.1
+;bindport = 8088
+;prefix = 
+;tlsenable=yes          ; enable tls - default no.
+;tlsbindaddr=0.0.0.0:8089
+;tlscertfile=/etc/httpd/certs/server.crt
+;tlsprivatekey=/etc/httpd/certs/server.key

+ 0 - 3
usr/local/defaults/etc/asterisk/manager.conf

@@ -69,11 +69,8 @@ permit = 192.168.0.0/255.255.0.0
 read = all,system,call,log,verbose,command,agent,user,config,originate
 write = all,system,call,log,verbose,command,agent,user,config,originate
 eventfilter=Event: QueueMemberPause
-eventfilter=Event: Newchannel
 eventfilter=Event: ExtensionStatus
 eventfilter=Event: Hangup
-eventfilter=Event: Newstate
-eventfilter=Event: Cdr
 eventfilter=Event: DialBegin
 eventfilter=Event: DialEnd
 eventfilter=Event: AgentCalled

+ 0 - 12
usr/local/defaults/etc/asterisk/ntp.conf

@@ -1,12 +0,0 @@
-;!
-;! Automatically generated configuration file
-;! Filename: ntp.conf (/etc/asterisk/ntp.conf)
-;! Generator: Manager
-;! Creation Date: Mon May 18 08:53:04 2015
-;!
-
-[ntp]
-NTP = yes
-NTPserver = pool.ntp.org
-TIMEZONE = CST-8
-TZNAME = Asia/Chongqing

+ 0 - 10
usr/local/defaults/etc/asterisk/service.conf

@@ -1,10 +0,0 @@
-;!
-;! Automatically generated configuration file
-;! Filename: service.conf (/etc/asterisk/service.conf)
-;! Generator: Manager
-;! Creation Date: Mon Jan  4 02:22:06 2010
-;!
-[general]
-ssh_enable = no
-ssh_port = 22
-ssh_remote = no

+ 2 - 3
usr/local/defaults/etc/asterisk/sip.conf

@@ -8,7 +8,7 @@
 [authentication]
 
 [general]
-sendrpid = yes
+sendrpid = no
 language = cn
 callerid = Unknown
 context = default
@@ -46,8 +46,6 @@ tlsprivatekey = /etc/asterisk/keys/asterisk.pem
 tlscipher = ALL
 tlsclientmethod = tlsv1
 tlsdontverifyserver = yes
-regfailmax = 10
-regfailtoblocktime = 30
 cos_sip = 3
 cos_audio = 5
 cos_video = 4
@@ -60,4 +58,5 @@ progressinband=yes		;SIP 183 yes/no/never
 realm=coocenter.com
 icesupport = no
 vmexten = *61
+#include sip_nat.conf
 #include sip_registrations.conf

BIN
usr/local/defaults/etc/asterisk/sysconf/.DS_Store


+ 55 - 12
usr/local/defaults/etc/asterisk/sysconf/database/coopaging_db.sql

@@ -284,11 +284,11 @@ UNLOCK TABLES;
 
 DROP TRIGGER IF EXISTS `USERWBEXTEN_INSERT_BEFORE`;
 DELIMITER ||
-CREATE TRIGGER `USERWBEXTEN_INSERT_BEFORE` BEFORE INSERT ON `t_pbx_users_extension`
+CREATE TRIGGER `USERWBEXTEN_INSERT_BEFORE` BEFORE INSERT ON `t_pbx_users_webrtc`
 FOR EACH ROW
 BEGIN
 SET NEW.cid_number=NEW.exten;
-SET NEW.context=CONCAT("DialRule-",NEW.exten);
+SET NEW.context=CONCAT("DialRule_",NEW.exten);
 SET NEW.mailbox=NEW.exten;
 SET NEW.callgroup=NEW.pickupgroup;
 SET NEW.srtpcapable=NEW.encryption;
@@ -656,6 +656,8 @@ LOCK TABLES `t_global_config` WRITE;
 /*!40000 ALTER TABLE `t_global_config` DISABLE KEYS */;
 INSERT INTO `t_global_config` VALUES (1,'pbx.voip.inbound','{"type":"ivr","exten":"6500"}','2019-07-31 17:58:00','2019-07-31 17:58:00');
 INSERT INTO `t_global_config` VALUES (2,'paging.services.level','{"level":["paging","warning","firefighting_warning","intercom","bell","timeing_insert_cast","timeing_cast","background_music"]}','2019-07-31 17:58:00','2019-07-31 17:58:00');
+INSERT INTO `t_global_config` VALUES (3,'default.volume.paging','{"softvolume":99,"hardvolume":10}','2019-07-31 17:58:00','2019-07-31 17:58:00');
+INSERT INTO `t_global_config` VALUES (4,'default.volume.warning','{"softvolume":99,"hardvolume":10}','2019-07-31 17:58:00','2019-07-31 17:58:00');
 /*!40000 ALTER TABLE `t_global_config` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -700,7 +702,6 @@ CREATE TABLE `t_paging_users` (
   `username` varchar(255) NOT NULL COMMENT '用户名',
   `secret` varchar(255) NOT NULL COMMENT '用户密码',
   `phonenumber` varchar(16) DEFAULT NULL COMMENT '用户联系电话',
-  `extensions` JSON DEFAULT NULL COMMENT '话机数组',
   `level` int(2) NOT NULL COMMENT '用户等级',
   `createdAt` datetime NOT NULL,
   `updatedAt` datetime NOT NULL,
@@ -715,7 +716,7 @@ CREATE TABLE `t_paging_users` (
 
 LOCK TABLES `t_paging_users` WRITE;
 /*!40000 ALTER TABLE `t_paging_users` DISABLE KEYS */;
-INSERT INTO `t_paging_users` VALUES (1,'admin','admin',NULL,NULL,0,'2019-08-02 09:36:45','2019-08-06 01:51:41');
+INSERT INTO `t_paging_users` VALUES (1,'admin','admin',NULL,0,'2019-08-02 09:36:45','2019-08-06 01:51:41');
 /*!40000 ALTER TABLE `t_paging_users` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -735,6 +736,7 @@ CREATE TABLE `t_paging_devices` (
   `contactPhone` varchar(16) DEFAULT NULL COMMENT '设备管理员联系方式',
   `address` varchar(256) DEFAULT NULL COMMENT '设备地址',
   `type_id` bigint(11) NOT NULL COMMENT '设备类型ID',
+  `user_id` bigint(11) DEFAULT NULL COMMENT '设备所属用户ID',
   `mac` varchar(32) DEFAULT NULL COMMENT '与 mqtt 绑定',
   `remark` varchar(256) DEFAULT NULL COMMENT '备注',
   `rtspUrl` varchar(256) DEFAULT NULL COMMENT 'rtsp 地址',
@@ -746,7 +748,9 @@ CREATE TABLE `t_paging_devices` (
   UNIQUE KEY `id` (`id`),
   UNIQUE KEY `exten` (`exten`),
   KEY `type_id` (`type_id`),
-  CONSTRAINT `t_paging_devices_ibfk_1` FOREIGN KEY (`type_id`) REFERENCES `t_paging_types` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE
+  KEY `user_id` (`user_id`),
+  CONSTRAINT `t_paging_devices_ibfk_1` FOREIGN KEY (`type_id`) REFERENCES `t_paging_types` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE,
+  CONSTRAINT `t_paging_devices_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `t_paging_users` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='设备信息表';
 /*!40101 SET character_set_client = @saved_cs_client */;
 
@@ -845,9 +849,9 @@ INSERT INTO `t_paging_types` VALUES (1,'paging_terminal','fas fa-bullhorn',NULL,
 INSERT INTO `t_paging_types` VALUES (2,'intercom_terminal','fab fa-intercom',NULL,'2019-08-02 08:46:19','2019-08-02 08:46:19');
 INSERT INTO `t_paging_types` VALUES (3,'phone_terminal','fas fa-phone-alt',NULL,'2019-08-02 08:46:26','2019-08-02 08:46:26');
 INSERT INTO `t_paging_types` VALUES (4,'video_terminal','fas fa-video',NULL,'2019-08-02 08:46:26','2019-08-02 08:46:26');
-INSERT INTO `t_paging_types` VALUES (5,'sip_gateway','fas fa-gateway',NULL,'2019-08-02 08:46:26','2019-08-02 08:46:26');
-INSERT INTO `t_paging_types` VALUES (6,'mic_terminal','fas fa-mic',NULL,'2019-08-02 08:46:26','2019-08-02 08:46:26');
-INSERT INTO `t_paging_types` VALUES (7,'other_terminal','fas fa-other',NULL,'2019-08-02 08:46:26','2019-08-02 08:46:26');
+INSERT INTO `t_paging_types` VALUES (5,'sip_gateway','fas fas fa-torii-gate',NULL,'2019-08-02 08:46:26','2019-08-02 08:46:26');
+INSERT INTO `t_paging_types` VALUES (6,'mic_terminal','fas fa-microphone',NULL,'2019-08-02 08:46:26','2019-08-02 08:46:26');
+INSERT INTO `t_paging_types` VALUES (7,'other_terminal','fas fa-question',NULL,'2019-08-02 08:46:26','2019-08-02 08:46:26');
 /*!40000 ALTER TABLE `t_paging_types` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -894,7 +898,7 @@ CREATE TABLE `t_paging_deviceGroups` (
   KEY `GroupId` (`GroupId`),
   CONSTRAINT `t_paging_deviceGroups_ibfk_1` FOREIGN KEY (`DeviceId`) REFERENCES `t_paging_devices` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
   CONSTRAINT `t_paging_deviceGroups_ibfk_2` FOREIGN KEY (`GroupId`) REFERENCES `t_paging_groups` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='设备信息表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='设备区域关系表';
 /*!40101 SET character_set_client = @saved_cs_client */;
 
 --
@@ -920,7 +924,7 @@ CREATE TABLE `t_paging_deviceTags` (
   KEY `TagId` (`TagId`),
   CONSTRAINT `t_paging_deviceTags_ibfk_1` FOREIGN KEY (`DeviceId`) REFERENCES `t_paging_devices` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
   CONSTRAINT `t_paging_deviceTags_ibfk_2` FOREIGN KEY (`TagId`) REFERENCES `t_paging_tags` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='设备信息表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='设备标签关系表';
 /*!40101 SET character_set_client = @saved_cs_client */;
 
 --
@@ -946,7 +950,7 @@ CREATE TABLE `t_paging_userGroups` (
   KEY `GroupId` (`GroupId`),
   CONSTRAINT `t_paging_userGroups_ibfk_1` FOREIGN KEY (`UserId`) REFERENCES `t_paging_users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
   CONSTRAINT `t_paging_userGroups_ibfk_2` FOREIGN KEY (`GroupId`) REFERENCES `t_paging_groups` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户区域关系表';
 /*!40101 SET character_set_client = @saved_cs_client */;
 
 --
@@ -972,7 +976,7 @@ CREATE TABLE `t_paging_userServices` (
   KEY `tPagingServiceId` (`tPagingServiceId`),
   CONSTRAINT `t_paging_userServices_ibfk_1` FOREIGN KEY (`UserId`) REFERENCES `t_paging_users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
   CONSTRAINT `t_paging_userServices_ibfk_2` FOREIGN KEY (`tPagingServiceId`) REFERENCES `t_paging_services` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户服务关系表';
 /*!40101 SET character_set_client = @saved_cs_client */;
 
 --
@@ -985,6 +989,45 @@ LOCK TABLES `t_paging_userServices` WRITE;
 UNLOCK TABLES;
 
 --
+-- Table structure for table `t_paging_play_list`
+--
+
+DROP TABLE IF EXISTS `t_paging_play_list`;
+/*!40101 SET @saved_cs_client     = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+
+CREATE TABLE `t_paging_play_list` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `name` varchar(255) DEFAULT NULL,
+  `remark` varchar(255) DEFAULT NULL,
+  `other` json DEFAULT NULL,
+  `order` json DEFAULT NULL,
+  `createdAt` datetime DEFAULT NULL,
+  `updatedAt` datetime DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `name` (`name`)
+) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
+
+--
+-- Dumping data for table `t_paging_play_list`
+--
+
+LOCK TABLES `t_paging_play_list` WRITE;
+/*!40000 ALTER TABLE `t_paging_play_list` DISABLE KEYS */;
+INSERT INTO `t_paging_play_list` VALUES (1,'emergency',NULL,'{"display":true}','[]','2019-08-02 08:01:07','2019-08-05 11:07:41');
+INSERT INTO `t_paging_play_list` VALUES (2,'fire',NULL,'{"display":true}','[]','2019-08-02 08:02:19','2019-08-02 08:46:19');
+INSERT INTO `t_paging_play_list` VALUES (3,'air_defence',NULL,'{"display":true}','[]','2019-08-02 08:03:26','2019-08-02 08:46:26');
+INSERT INTO `t_paging_play_list` VALUES (4,'debris_flow',NULL,'{"display":false}','[]','2019-08-02 08:04:26','2019-08-02 08:46:26');
+INSERT INTO `t_paging_play_list` VALUES (5,'tornado',NULL,'{"display":false}','[]','2019-08-02 08:05:26','2019-08-02 08:46:26');
+INSERT INTO `t_paging_play_list` VALUES (6,'earthquake',NULL,'{"display":false}','[]','2019-08-02 08:06:26','2019-08-02 08:46:26');
+INSERT INTO `t_paging_play_list` VALUES (7,'tsunami',NULL,'{"display":false}','[]','2019-08-02 08:07:26','2019-08-02 08:46:26');
+INSERT INTO `t_paging_play_list` VALUES (8,'emergency_1',NULL,'{"display":false}','[]','2019-08-02 08:08:26','2019-08-02 08:46:26');
+INSERT INTO `t_paging_play_list` VALUES (9,'emergency_2',NULL,'{"display":false}','[]','2019-08-02 08:09:26','2019-08-02 08:46:26');
+INSERT INTO `t_paging_play_list` VALUES (10,'emergency_3',NULL,'{"display":false}','[]','2019-08-02 08:10:26','2019-08-02 08:46:26');
+/*!40000 ALTER TABLE `t_paging_play_list` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
 -- Table structure for table `t_holidays_range`
 --
 

+ 2 - 3
usr/local/defaults/etc/asterisk/users.conf

@@ -1,6 +1,5 @@
 #include users_general.conf
-#include users_voiptrunk.conf
-#include users_trunk.conf
 #include users_extension.conf
-#include users_fax.conf
 #include users_webrtc.conf
+#include users_voiptrunk.conf
+#include users_trunk.conf

+ 0 - 3
usr/local/defaults/etc/asterisk/voicemail.conf

@@ -40,8 +40,5 @@ military = Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p'
 european = Europe/Copenhagen|'vm-received' a d b 'digits/at' HM
 
 [default]
-630 = 1234,630,
-631 = 1234,631,
-632 = 1234,632,
 
 [other]

+ 4 - 2
usr/src/generate_context_conf.c

@@ -332,7 +332,8 @@ mytime()\
         JOIN t_paging_userGroups on t_paging_groups.id = t_paging_userGroups.GroupId\
         JOIN t_paging_userServices on t_paging_userServices.UserId = t_paging_userGroups.UserId\
         where t_paging_userServices.tPagingServiceId in(1,4,9) and t_paging_userGroups.UserId\
-        in(select id from t_paging_users where JSON_SEARCH(extensions,'all','%s') IS NOT NULL)",g_row[0]);
+        in(select t_paging_users.id from t_paging_users join t_paging_devices on t_paging_users.id = t_paging_devices.user_id\
+        where t_paging_devices.exten=%s)",g_row[0]);
         if (executesql(sql_tmp)){
             print_mysql_error(NULL);
             exit(1);
@@ -357,7 +358,8 @@ mytime()\
             }
         }
         memset(sql_tmp,0,sizeof(sql_tmp));
-        sprintf(sql_tmp,"select id from t_paging_users where JSON_SEARCH(extensions,'all','%s') IS NOT NULL",g_row[0]);
+        sprintf(sql_tmp,"select t_paging_users.id from t_paging_users join t_paging_devices on t_paging_users.id = t_paging_devices.user_id\
+        where t_paging_devices.exten=%s",g_row[0]);
         if (executesql(sql_tmp)){
             print_mysql_error(NULL);
             exit(1);

+ 8 - 8
usr/src/generate_extension_conf.c

@@ -326,13 +326,13 @@ same => n,WaitExten(1)",ivrstr
 [voicemenu-custom-%s]
 include = default
 exten = _IVR-X.,1,NoOp(%s)
-exten = _IVR-X.,3,NoOp(Default language)
-exten = _IVR-X.,5,Set(COUNT=3)
-exten = _IVR-X.,6,Background(%s)
-exten = _IVR-X.,7,Set(COUNT=$[${COUNT}-1])
-exten = _IVR-X.,8,WaitExten(%s)
-exten = _IVR-X.,9,GotoIf($[${COUNT}>1]?6)
-exten = _IVR-X.,10,WaitExten(1)
+exten = _IVR-X.,n,NoOp(Default language)
+exten = _IVR-X.,n,Set(COUNT=3)
+exten = _IVR-X.,n(loop),Background(%s)
+exten = _IVR-X.,n,Set(COUNT=$[${COUNT}-1])
+exten = _IVR-X.,n,WaitExten(%s)
+exten = _IVR-X.,n,GotoIf($[${COUNT}>1]?6)
+exten = _IVR-X.,n,WaitExten(1)
 exten = t,1,Hangup
 */
 
@@ -368,7 +368,7 @@ fputs("[CallingRule_OutCall]\n",conf_dialrule_fp);
         }
 
         memset(dialrule,0,sizeof(dialrule));
-        sprintf(dialrule, "exten => _%s,1,Macro(trunkdial-failover,${EXTEN},SIP/%s/",g_row[1], g_row[0]);
+        sprintf(dialrule, "exten => _%s,1,Macro(trunkdial-failover,${EXTEN},%s/",g_row[1], g_row[0]);
         if(g_row[3] != NULL){
             strcat(dialrule,g_row[3]);
         }

+ 4 - 4
usr/src/generate_group_conf.c

@@ -292,7 +292,6 @@ while ((g_row=mysql_fetch_row(g_res))){ // 打印结果集
         continue;
     }
     fprintf(conf_extens_fp, "[extens-group-%s]\n",g_row[2]);
-    fprintf(conf_extens_fp, "include => hangup-event\n");
     memset(sql_tmp,0,sizeof(sql_tmp));
     sprintf(sql_tmp,"select exten,type_id from t_paging_deviceGroups JOIN t_paging_devices on t_paging_devices.id = t_paging_deviceGroups.DeviceId\
     where GroupId = %s and t_paging_devices.type_id in('1','2','3','5')",g_row[0]);
@@ -335,10 +334,11 @@ same => n,SIPAddHeader(${CALLINFO})\n\
 same => n,System(/bin/sh /etc/scripts/shell_scripts.sh mkrcdir paging ${DATE})\n\
 same => n,Set(FILENAME=paging/${DATE}/paging-${SRCEXTEN}-${UUID}.wav)\n\
 same => n,MixMonitor(${FILENAME},b)\n\
+same => n,UserEvent(controlEvent,userid:${USERID},src:${SRCEXTEN},dest:${DESTS},uuid:${UUID},status:stop)\n\
+same => n,Wait(2)\n\
+same => n,Playback(beep)\n\
 same => n,Page(%s,b(paging-update-status^s^1)q)\n\
-same => n,Hangup\n\
-exten => h,1,UserEvent(pagingEvent,src:${SRCEXTEN},dest:%s,uuid:${UUID},status:hangup)\n\
-same => n,NoOp(Paging End)\
+same => n,Hangup\
 \n\n", \
 g_row[2],\
 g_row[2],\