فهرست منبع

update priority

dujunchen 1 هفته پیش
والد
کامیت
a0504d696a
4فایلهای تغییر یافته به همراه43 افزوده شده و 90 حذف شده
  1. 2 3
      internal/app/ami/action/call.go
  2. 32 58
      internal/app/ami/action/index.go
  3. 2 0
      internal/app/ami/action/queue.go
  4. 7 29
      internal/app/stc/broadcast/stc-broadcast.go

+ 2 - 3
internal/app/ami/action/call.go

@@ -67,15 +67,14 @@ func ExtenStatus(exten string) (Status string) {
 		"Exten":   exten,
 		"Exten":   exten,
 		"Context": "default",
 		"Context": "default",
 	}
 	}
-	lfshook.NewLogger().Infof("ExtensionState action %+v", action)
+
 	res, _, err := AminInstance.Send(action)
 	res, _, err := AminInstance.Send(action)
 	if err != nil {
 	if err != nil {
 		lfshook.NewLogger().Errorf("%+v", err)
 		lfshook.NewLogger().Errorf("%+v", err)
 		return ""
 		return ""
 	}
 	}
 
 
-	lfshook.NewLogger().Info(res)
-
+	lfshook.NewLogger().Infof("================ExtensionState:res %+v", res)
 	return res["StatusText"]
 	return res["StatusText"]
 }
 }
 
 

+ 32 - 58
internal/app/ami/action/index.go

@@ -1,8 +1,6 @@
 package action
 package action
 
 
 import (
 import (
-	"pbx-api-gin/internal/app/ami/model"
-	"pbx-api-gin/internal/app/mysql"
 	"pbx-api-gin/internal/app/stc/active"
 	"pbx-api-gin/internal/app/stc/active"
 	"pbx-api-gin/internal/app/stc/priority"
 	"pbx-api-gin/internal/app/stc/priority"
 	alstatus "pbx-api-gin/internal/app/stc/sendstatus"
 	alstatus "pbx-api-gin/internal/app/stc/sendstatus"
@@ -34,6 +32,14 @@ func HandleAMI(event map[string]string) {
 		lfshook.NewLogger().Infof("========event:%s   File:%s", event["Event"], event["FILENAME"])
 		lfshook.NewLogger().Infof("========event:%s   File:%s", event["Event"], event["FILENAME"])
 		if event["UserEvent"] == "SetRecordFile" { //get  record file name
 		if event["UserEvent"] == "SetRecordFile" { //get  record file name
 			alstatus.SendRecordFile(event["FILENAME"], event["RecordType"])
 			alstatus.SendRecordFile(event["FILENAME"], event["RecordType"])
+		} else if event["UserEvent"] == "CallType" && event["Type"] == "PA" { //check manual PA priority
+			if priority.CheckPriority("ManuPa") {
+				HangupAll()
+			}
+		} else if event["UserEvent"] == "CallType" && event["Type"] == "C2C" { //check cab cab priority
+			if priority.CheckPriority("CabCab") {
+				HangupAll()
+			}
 		}
 		}
 
 
 	case "Newchannel":
 	case "Newchannel":
@@ -110,22 +116,11 @@ func HandleAMI(event map[string]string) {
 				alstatus.OccPad("end")
 				alstatus.OccPad("end")
 				break
 				break
 			} else { //OCC queue is not empty
 			} else { //OCC queue is not empty
-				var extOCC1 model.Extension
-				_, er := mysql.DBOrmInstance.Where("exten = ?", "1411").Get(&extOCC1)
-				if er != nil {
-					lfshook.NewLogger().Logger.Infof("update special voice to exten err : %+v", er.Error())
-				}
 
 
-				var extOCC8 model.Extension
-				_, er = mysql.DBOrmInstance.Where("exten = ?", "1481").Get(&extOCC8)
-				if er != nil {
-					lfshook.NewLogger().Logger.Infof("update special voice to exten err : %+v", er.Error())
-				}
-
-				if active.CabNum == "1" && active.Actived && extOCC1.Status == "Idle" { //check active and OCC status
+				if active.CabNum == "1" && active.Actived && ExtenStatus("1411") == "Idle" { //check active and OCC status
 					Dial("0401", "0512", "pad-rule-pacus-occ", "ano1", event["CallerIDNum"], "1") // PACUs dial OCC1
 					Dial("0401", "0512", "pad-rule-pacus-occ", "ano1", event["CallerIDNum"], "1") // PACUs dial OCC1
 					//goto ConfbridgeJoin, OCC1 answer PAD
 					//goto ConfbridgeJoin, OCC1 answer PAD
-				} else if active.CabNum == "8" && active.Actived && extOCC8.Status == "Idle" {
+				} else if active.CabNum == "8" && active.Actived && ExtenStatus("1481") == "Idle" {
 					Dial("0401", "0512", "pad-rule-pacus-occ", "ano8", event["CallerIDNum"], "8") // PACUs dial OCC8
 					Dial("0401", "0512", "pad-rule-pacus-occ", "ano8", event["CallerIDNum"], "8") // PACUs dial OCC8
 					//goto ConfbridgeJoin, OCC8 answer PAD
 					//goto ConfbridgeJoin, OCC8 answer PAD
 				}
 				}
@@ -165,30 +160,20 @@ func HandleAMI(event map[string]string) {
 			break
 			break
 		}
 		}
 
 
-		//first caller goto OCC
-		var extOCC1 model.Extension
-		_, er := mysql.DBOrmInstance.Where("exten = ?", "1411").Get(&extOCC1)
-		if er != nil {
-			lfshook.NewLogger().Logger.Infof("update special voice to exten err : %+v", er.Error())
-		}
-
-		var extOCC8 model.Extension
-		_, er = mysql.DBOrmInstance.Where("exten = ?", "1481").Get(&extOCC8)
-		if er != nil {
-			lfshook.NewLogger().Logger.Infof("update special voice to exten err : %+v", er.Error())
-		}
-
+		//first PAD caller goto OCC
 		if utils.IsPAIU(event["CallerIDNum"]) && event["Queue"] == "0301" && priority.OCCAnswer == 0 { // The first PAD to OCC ,caller is PAD
 		if utils.IsPAIU(event["CallerIDNum"]) && event["Queue"] == "0301" && priority.OCCAnswer == 0 { // The first PAD to OCC ,caller is PAD
-			if active.CabNum == "1" && active.Actived && extOCC1.Status == "Idle" { //check active and OCC status
+			if active.CabNum == "1" && active.Actived && ExtenStatus("1411") == "Idle" { //check active and OCC status
 				priority.OCCAnswer = 1
 				priority.OCCAnswer = 1
 				alstatus.OccPad("start")
 				alstatus.OccPad("start")
-				priority.RunningType, _ = strconv.Atoi(priority.Priority.PADOCC)
+				priority.RunningType, _ = strconv.Atoi(priority.Priority.PADOCC)              //Set running priority
 				Dial("0401", "0512", "pad-rule-pacus-occ", "ano1", event["CallerIDNum"], "1") // PACUs dial OCC1
 				Dial("0401", "0512", "pad-rule-pacus-occ", "ano1", event["CallerIDNum"], "1") // PACUs dial OCC1
-			} else if active.CabNum == "8" && active.Actived && extOCC8.Status == "Idle" {
+				//Goto event=ConfbridgeJoin;OCC answer PAD
+			} else if active.CabNum == "8" && active.Actived && ExtenStatus("1481") == "Idle" {
 				priority.OCCAnswer = 1
 				priority.OCCAnswer = 1
-				priority.RunningType, _ = strconv.Atoi(priority.Priority.PADOCC)
+				priority.RunningType, _ = strconv.Atoi(priority.Priority.PADOCC) //Set running priority
 				alstatus.OccPad("start")
 				alstatus.OccPad("start")
 				Dial("0401", "0512", "pad-rule-pacus-occ", "ano8", event["CallerIDNum"], "8") // PACUs dial OCC8
 				Dial("0401", "0512", "pad-rule-pacus-occ", "ano8", event["CallerIDNum"], "8") // PACUs dial OCC8
+				//Goto event=ConfbridgeJoin;OCC answer PAD
 			}
 			}
 		}
 		}
 
 
@@ -209,19 +194,21 @@ func HandleAMI(event map[string]string) {
 		}
 		}
 
 
 		//ICP answer PAD;
 		//ICP answer PAD;
-		//ICP8->whisper->ICP1; PAD->whisper->ICP8
 		if event["ConnectedLineNum"] == "ani1" && event["Exten"] == "0511" { //PAD answered by ICP; PACUs connected ICP1
 		if event["ConnectedLineNum"] == "ani1" && event["Exten"] == "0511" { //PAD answered by ICP; PACUs connected ICP1
 			lfshook.NewLogger().Infof("====PAD answered by ICP1:%s=====", event["ConnectedLineName"])
 			lfshook.NewLogger().Infof("====PAD answered by ICP1:%s=====", event["ConnectedLineName"])
 			alstatus.AlarmStatus(event["ConnectedLineName"], "connect")
 			alstatus.AlarmStatus(event["ConnectedLineName"], "connect")
-			go Dial("0402", "2311", "chanspy-rule-whisper", "ani1", event["ConnectedLineName"], "8") //trigger ChanSpyStart ,ICP8 whisper ICP1
+
+			go RedirectInQueue(event["ConnectedLineName"], "2311", "chanspy-rule-whisper", event["ConnectedLineName"])               //PAD chanspy(EqW) ICP1
+			go Dial("0402", event["ConnectedLineName"], "chanspy-rule", event["ConnectedLineName"], event["ConnectedLineName"], "8") //ICP8 chanspy PAD
 			//goto event=ChanSpyStart; PAD whisper ICP8
 			//goto event=ChanSpyStart; PAD whisper ICP8
 			break
 			break
 		}
 		}
-		//ICP1->whisper->ICP8; PAD->whisper->ICP1
 		if event["ConnectedLineNum"] == "ani8" && event["Exten"] == "0511" { //PAD ansered by ICP8; PACUs connected ICP8
 		if event["ConnectedLineNum"] == "ani8" && event["Exten"] == "0511" { //PAD ansered by ICP8; PACUs connected ICP8
 			lfshook.NewLogger().Infof("====PAD answered by ICP8:%s=====", event["ConnectedLineName"])
 			lfshook.NewLogger().Infof("====PAD answered by ICP8:%s=====", event["ConnectedLineName"])
 			alstatus.AlarmStatus(event["ConnectedLineName"], "connect")
 			alstatus.AlarmStatus(event["ConnectedLineName"], "connect")
-			go Dial("0402", "2381", "chanspy-rule-whisper", "ani8", event["ConnectedLineName"], "1") //trigger ChanSpyStart ,ICP1 whisper ICP8
+
+			go RedirectInQueue(event["ConnectedLineName"], "2381", "chanspy-rule-whisper", event["ConnectedLineName"])               //PAD chanspy(EqW) ICP8
+			go Dial("0402", event["ConnectedLineName"], "chanspy-rule", event["ConnectedLineName"], event["ConnectedLineName"], "1") //ICP1 chanspy PAD
 			//goto event=ChanSpyStart; PAD whisper ICP1
 			//goto event=ChanSpyStart; PAD whisper ICP1
 			break
 			break
 		}
 		}
@@ -230,34 +217,22 @@ func HandleAMI(event map[string]string) {
 		if event["ConnectedLineNum"] == "ano1" && event["Exten"] == "0512" { //PAD answered by OCC; PACUs connected IO1
 		if event["ConnectedLineNum"] == "ano1" && event["Exten"] == "0512" { //PAD answered by OCC; PACUs connected IO1
 			lfshook.NewLogger().Infof("====PAD answered by OCC1:%s=====", event["ConnectedLineName"])
 			lfshook.NewLogger().Infof("====PAD answered by OCC1:%s=====", event["ConnectedLineName"])
 			alstatus.AlarmStatus(event["ConnectedLineName"], "connect")
 			alstatus.AlarmStatus(event["ConnectedLineName"], "connect")
-			go RedirectInQueue(event["ConnectedLineName"], "1411", "chanspy-rule-whisper", "") //PAD whisper IO1
+
+			go RedirectInQueue(event["ConnectedLineName"], "1411", "chanspy-rule-whisper", event["ConnectedLineName"]) //PAD chanspy(EqW) IO1
 			//goto event=ChanSpyStart; ICPs spy PAD
 			//goto event=ChanSpyStart; ICPs spy PAD
 			break
 			break
 		}
 		}
-
 		if event["ConnectedLineNum"] == "ano8" && event["Exten"] == "0512" { //PAD ansered by OCC8; PACUs connected IO8
 		if event["ConnectedLineNum"] == "ano8" && event["Exten"] == "0512" { //PAD ansered by OCC8; PACUs connected IO8
 			lfshook.NewLogger().Infof("====PAD answered by OCC8:%s=====", event["ConnectedLineName"])
 			lfshook.NewLogger().Infof("====PAD answered by OCC8:%s=====", event["ConnectedLineName"])
 			alstatus.AlarmStatus(event["ConnectedLineName"], "connect")
 			alstatus.AlarmStatus(event["ConnectedLineName"], "connect")
-			go RedirectInQueue(event["ConnectedLineName"], "1481", "chanspy-rule-whisper", "") //PAD whisper IO8
+
+			go RedirectInQueue(event["ConnectedLineName"], "1481", "chanspy-rule-whisper", event["ConnectedLineName"]) //PAD chanspy(EqW) IO8
 			//goto event=ChanSpyStart; ICPs spy PAD
 			//goto event=ChanSpyStart; ICPs spy PAD
 			break
 			break
 		}
 		}
 
 
 	case "ChanSpyStart":
 	case "ChanSpyStart":
-		lfshook.NewLogger().Infof("=========%s", event["Event"])
-		//PAD answered by ICP ; PAD whisper ICP
-		if event["SpyerConnectedLineName"] == "2381" && event["SpyerCallerIDNum"] == "2311" { //check if it is ICP8 whisper ICP1
-			lfshook.NewLogger().Infof("====PAD answered by ICP===;PAD whisper 2381=====")
-			go RedirectInQueue(event["SpyeeConnectedLineName"], "2381", "chanspy-rule-whisper", "") //PAD whisper ICP8
-			break
-		}
-
-		if event["SpyerConnectedLineName"] == "2311" && event["SpyerCallerIDNum"] == "2381" { //check if it is ICP1 whisper ICP8
-			lfshook.NewLogger().Infof("====PAD answered by ICP===;PAD whisper 2311=====")
-			go RedirectInQueue(event["SpyeeConnectedLineName"], "2311", "chanspy-rule-whisper", "") //PAD whisper ICP1
-			break
-		}
-
+		lfshook.NewLogger().Infof("=========event:%s   callerid:%s   SpyeeConnectedLineName:%s  SpyerExten:%s", event["Event"], event["CallerIDNum"], event["SpyeeConnectedLineName"], event["SpyerExten"])
 		//PAD answered by OCC; ICPs chanspy PAD
 		//PAD answered by OCC; ICPs chanspy PAD
 		if utils.IsPAIU(event["SpyeeConnectedLineName"]) && utils.IsIO(event["SpyerExten"]) { // check if it is PAD whisper IO
 		if utils.IsPAIU(event["SpyeeConnectedLineName"]) && utils.IsIO(event["SpyerExten"]) { // check if it is PAD whisper IO
 			go Dial("0404", event["SpyeeConnectedLineName"], "chanspy-rule", "ano", "ano", "") //ICPs chanspy PAD
 			go Dial("0404", event["SpyeeConnectedLineName"], "chanspy-rule", "ano", "ano", "") //ICPs chanspy PAD
@@ -293,11 +268,9 @@ func HandleAMI(event map[string]string) {
 		}
 		}
 
 
 	case "ExtensionStatus":
 	case "ExtensionStatus":
-		lfshook.NewLogger().Infof("=========event:%s   status:%s", event["Event"], event["StatusText"])
+		lfshook.NewLogger().Infof("=========event:%s  Ext:%s status:%s ", event["Event"], event["extension"], event["StatusText"])
 
 
 		//update extension status
 		//update extension status
-		alstatus.ExtenStatMap[event["Exten"]] = event["StatusText"]
-
 		if event["StatusText"] == "Idle" || event["StatusText"] == "Unavailable" {
 		if event["StatusText"] == "Idle" || event["StatusText"] == "Unavailable" {
 			if len(event["Exten"]) > 3 && utils.IsPAIU(event["Exten"]) {
 			if len(event["Exten"]) > 3 && utils.IsPAIU(event["Exten"]) {
 				alstatus.AlarmStatus(event["Exten"], event["StatusText"]) // PAD idle + unavailable
 				alstatus.AlarmStatus(event["Exten"], event["StatusText"]) // PAD idle + unavailable
@@ -313,11 +286,12 @@ func HandleAMI(event map[string]string) {
 
 
 			if active.CabNum == "1" && active.Actived {
 			if active.CabNum == "1" && active.Actived {
 				go RedirectInQueue(event["CallerIDName"], "2311", "chanspy-rule-whisper", "") //PAD chanspy(EqW) ICP1
 				go RedirectInQueue(event["CallerIDName"], "2311", "chanspy-rule-whisper", "") //PAD chanspy(EqW) ICP1
+				go Dial("0403", event["CallerIDName"], "chanspy-rule", "2381", "2381", "8")   //ICP8---chanspy----PAD
 			} else if active.CabNum == "8" && active.Actived {
 			} else if active.CabNum == "8" && active.Actived {
 				go RedirectInQueue(event["CallerIDName"], "2381", "chanspy-rule-whisper", "") //PAD chanspy(EqW) ICP8
 				go RedirectInQueue(event["CallerIDName"], "2381", "chanspy-rule-whisper", "") //PAD chanspy(EqW) ICP8
+				go Dial("0403", event["CallerIDName"], "chanspy-rule", "2311", "2311", "1")   //ICP1---chanspy----PAD
 			}
 			}
-			//Goto ChanSpyStart; ICP spy PAD
-		} else if utils.IsPAIU(event["CallerIDNum"]) {
+		} else if utils.IsPAIU(event["CallerIDNum"]) { // PAD connect ICP-TMS;PACU not available
 			lfshook.NewLogger().Infof("====send pad status=====")
 			lfshook.NewLogger().Infof("====send pad status=====")
 			alstatus.AlarmStatus(event["CallerIDNum"], "connect") // PAD connect ICP-TMS
 			alstatus.AlarmStatus(event["CallerIDNum"], "connect") // PAD connect ICP-TMS
 		}
 		}

+ 2 - 0
internal/app/ami/action/queue.go

@@ -3,6 +3,7 @@ package action
 import (
 import (
 	"errors"
 	"errors"
 	"pbx-api-gin/internal/app/ami/model"
 	"pbx-api-gin/internal/app/ami/model"
+	"pbx-api-gin/pkg/lfshook"
 
 
 	"github.com/mitchellh/mapstructure"
 	"github.com/mitchellh/mapstructure"
 )
 )
@@ -36,6 +37,7 @@ func QueueStatus(queue, member string) (queueParams *model.QueueParams, err erro
 			queueParams.Entrys = append(queueParams.Entrys, entry)
 			queueParams.Entrys = append(queueParams.Entrys, entry)
 		}
 		}
 	}
 	}
+	lfshook.NewLogger().Infof("================QueueStatus calls:%v===========", queueParams.Calls)
 	return queueParams, nil
 	return queueParams, nil
 }
 }
 
 

+ 7 - 29
internal/app/stc/broadcast/stc-broadcast.go

@@ -122,7 +122,8 @@ func processPacket(packet []byte) {
 	case 0x0a:
 	case 0x0a:
 		if priority.CheckPriority("PAD-TMS") {
 		if priority.CheckPriority("PAD-TMS") {
 			action.HangupAll()
 			action.HangupAll()
-			AlarmHandleTMS(packet)
+			//AlarmHandleTMS(packet)
+			AlarmHandleICP(packet) //for test
 		}
 		}
 
 
 	case 0x0b:
 	case 0x0b:
@@ -284,16 +285,6 @@ func AnnStop(data [4]byte) {
 
 
 	priority.RunningType = 0
 	priority.RunningType = 0
 	alstatus.PaStatus("", PaType, "end")
 	alstatus.PaStatus("", PaType, "end")
-	/*
-		for _, ext := range Pacus {
-			action.Hangup(ext)
-		}
-		//update pa type
-		_, er := mysql.DBOrmInstance.Cols("patype").Where("pa_type = ?", RunningType).Update(&model.Extension{PaType: ""})
-		if er != nil {
-			lfshook.NewLogger().Logger.Infof("update special voice to exten err : %+v", er.Error())
-		}
-	*/
 	action.HangupAll()
 	action.HangupAll()
 
 
 }
 }
@@ -336,16 +327,7 @@ func VolumeAdjust(data []byte) {
 		action.PlaybackPacu(filename, int(cycleCount), int(delay), "VOL")
 		action.PlaybackPacu(filename, int(cycleCount), int(delay), "VOL")
 	case 0x02: //stop
 	case 0x02: //stop
 
 
-		/*		//Pa status report
-				priority.RunningType = 0
-				alstatus.PaStatus("", "VOL", "end")
-
-				for _, ext := range Pacus {
-					asterisk.Hangup(ext)
-				}
-				asterisk.Hangup("2311")
-				asterisk.Hangup("2381")
-		*/
+		alstatus.PaStatus("", "VOL", "end")
 		action.HangupAll()
 		action.HangupAll()
 	}
 	}
 }
 }
@@ -372,13 +354,6 @@ func SelfCheck(data []byte) {
 		//Pa status report
 		//Pa status report
 		priority.RunningType = 0
 		priority.RunningType = 0
 		alstatus.PaStatus("", "CHK", "end")
 		alstatus.PaStatus("", "CHK", "end")
-		/*
-			for _, ext := range Pacus {
-				asterisk.Hangup(ext)
-			}
-			asterisk.Hangup("2311")
-			asterisk.Hangup("2381")
-		*/
 		action.HangupAll()
 		action.HangupAll()
 	}
 	}
 }
 }
@@ -404,6 +379,9 @@ func AlarmHandleICP(data []byte) {
 	key := suppressKey(exten, handler)
 	key := suppressKey(exten, handler)
 
 
 	//Drop other handler in 2 sec
 	//Drop other handler in 2 sec
+	//PACUs---call---->ICP1
+	//PAD---->Chanspy(WEq)-->ICP1
+	//ICP2--->Chanspy(Eq)---->PAD
 	if handler == 0x01 {
 	if handler == 0x01 {
 		if _, loaded := suppressedExts.LoadOrStore(key, struct{}{}); loaded {
 		if _, loaded := suppressedExts.LoadOrStore(key, struct{}{}); loaded {
 			lfshook.NewLogger().Logger.Infof("Suppressed duplicate ICP Alarm (handler=0x01) for exten: %s within 4 seconds", exten)
 			lfshook.NewLogger().Logger.Infof("Suppressed duplicate ICP Alarm (handler=0x01) for exten: %s within 4 seconds", exten)
@@ -491,7 +469,7 @@ func AlarmHandleTMS(data []byte) {
 				//goto ami event BridgeEnter, ICP1 whisper ICP8
 				//goto ami event BridgeEnter, ICP1 whisper ICP8
 			}
 			}
 		} else {
 		} else {
-			action.RedirectInQueue(exten, "0405", "default", "PAD") // PAD dial ICPs
+			action.RedirectInQueue(exten, "0405", "default", exten) // PAD dial ICPs
 		}
 		}
 
 
 	case 0x02: //hold  重新放回队列里面
 	case 0x02: //hold  重新放回队列里面