dujunchen преди 2 седмици
родител
ревизия
b2e6a525e3

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

@@ -27,8 +27,7 @@ func Hangup(channel string) {
 
 // Dial 拨打号码
 func Dial(src, dst, dialrule, callerID, callerName string, callType string) {
-	chanel := fmt.Sprintf("%s/%s@ani-rule", "Local", src)
-	//chanel := fmt.Sprintf("Local/%s@pacu-ani-rule", src)
+	chanel := fmt.Sprintf("%s/%s@default", "Local", src)
 	action := map[string]string{
 		"Action":   "Originate",
 		"Channel":  chanel,
@@ -47,6 +46,25 @@ func Dial(src, dst, dialrule, callerID, callerName string, callType string) {
 	lfshook.NewLogger().Info(res)
 }
 
+// 获取分机状态
+func ExtenStatus(exten string) (Status string) {
+	action := map[string]string{
+		"Action":  "ExtensionState",
+		"Exten":   exten,
+		"Context": "default",
+	}
+	lfshook.NewLogger().Infof("ExtensionState action %+v", action)
+	res, _, err := AminInstance.Send(action)
+	if err != nil {
+		lfshook.NewLogger().Errorf("%+v", err)
+		return ""
+	}
+
+	lfshook.NewLogger().Info(res)
+
+	return res["StatusText"]
+}
+
 // PACU ChanSpy
 func ChanSpy(src, dst string, whisper, bargein bool) {
 	lfshook.NewLogger().Infof("chan spy src:%s dst:%s", src, dst)

+ 165 - 46
internal/app/ami/action/index.go

@@ -4,10 +4,12 @@ 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/priority"
 	alstatus "pbx-api-gin/internal/app/stc/sendstatus"
 	"pbx-api-gin/internal/pkg/configs"
 	"pbx-api-gin/pkg/lfshook"
 	"pbx-api-gin/pkg/utils"
+	"time"
 
 	"github.com/sirupsen/logrus"
 	"github.com/tqcenglish/amigo-go"
@@ -26,12 +28,6 @@ func HandleAMI(event map[string]string) {
 	}
 
 	switch event["Event"] {
-	/*case "DialBegin":
-	lfshook.NewLogger().Infof("=========%s", event["Event"])
-	if utils.IsPAIU(event["CallerIDNum"]) && utils.IsICP(event["DestCallerIDNum"]) {
-		alstatus.AlarmStatus(event["CallerIDNum"], "dial") // Alarm dial ICP start
-	}
-	*/
 
 	case "UserEvent":
 		lfshook.NewLogger().Infof("========event:%s   File:%s", event["Event"], event["FILENAME"])
@@ -65,58 +61,181 @@ func HandleAMI(event map[string]string) {
 		}
 
 	case "Hangup":
+
 		lfshook.NewLogger().Infof("=========%s", event["Event"])
-		if utils.IsPAIU(event["CallerIDNum"]) && utils.IsICP(event["Exten"]) { // PAD status , hangup
-			alstatus.PaStatus(event["CallerIDNum"], "PAD", "end")
+		if utils.IsPACU(event["CallerIDNum"]) && utils.IsICP(event["ConnectedLineNum"]) { // TMS-ICP answer PAD, hangup
+			res, _ := QueueStatus("0300", "") // check ICP queue ,if empty PAD end
+			if res.Calls == "0" {
+				priority.ICPAnswer = 0
+				alstatus.PaStatus(event["CallerIDNum"], "PAD", "end")
+				break
+			}
 		}
 
-	case "QueueCallerJoin":
-		lfshook.NewLogger().Infof("=========%s", event["Event"])
-		if utils.IsPAIU(event["CallerIDNum"]) && event["Queue"] == "0300" { // Alarm join the queue, PAD in the queue
-			alstatus.AlarmStatus(event["CallerIDNum"], "queue")
+		if utils.IsPAIU(event["CallerIDNum"]) && utils.IsICP(event["ConnectedLineNum"]) { // TMS-ICP answer PAD(PACU not availabe), hangup
+			res, _ := QueueStatus("0300", "") // check ICP queue ,if empty PAD end
+			if res.Calls == "0" {
+				priority.ICPAnswer = 0
+				alstatus.PaStatus(event["CallerIDNum"], "PAD", "end")
+				break
+			}
 		}
 
-		if utils.IsPAIU(event["CallerIDNum"]) && event["Queue"] == "0301" { // caller is PAD
+		if (event["CallerIDNum"] == "ani1" || event["CallerIDNum"] == "ani8") && utils.IsICP(event["ConnectedLineNum"]) { // ICP answer PAD, hangup
+			res, _ := QueueStatus("0300", "") // check ICP queue ,if empty PAD end
+			if res.Calls == "0" {
+				priority.ICPAnswer = 0
+				alstatus.PaStatus(event["CallerIDNum"], "PAD", "end")
+				break
+			}
+		}
 
-			if active.CabNum == "1" && active.Actived {
-				Dial("0401", "0511", "pad-rule-cab1", "ano-1", event["CallerIDNum"], "1") // PACUs dial OCC1
-			} else if active.CabNum == "8" && active.Actived {
-				Dial("0401", "0512", "pad-rule-cab8", "ano-8", event["CallerIDNum"], "8") // PACUs dial OCC8
+		//OCC answer PAD, hangup, redirect the next PAD to OCC
+		if (event["CallerIDNum"] == "ano1" || event["CallerIDNum"] == "ano8") && utils.IsIO(event["ConnectedLineNum"]) {
+			res, _ := QueueStatus("0301", "") // check OCC queue ,if empty PAD end
+			if res.Calls == "0" {             //OCC queue is empty
+				priority.OCCAnswer = 0
+				alstatus.OccPad("end")
+				break
+			} else { //OCC queue is not empty
+				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
+				} else if active.CabNum == "8" && active.Actived && ExtenStatus("1481") == "Idle" {
+					Dial("0401", "0512", "pad-rule-pacus-occ", "ano8", event["CallerIDNum"], "8") // PACUs dial OCC8
+				}
 			}
 		}
-		/*
-			case "QueueCallerLeave": // Alarm timeout , redirect to OCC
-				lfshook.NewLogger().Infof("====PAD timeout=====%s", event["Event"])
-				if utils.IsPAIU(event["CallerIDNum"]) { // caller is PAD
 
-					if active.CabNum == "1" && active.Actived {
-						Dial("0401", "0511", "pad-rule-cab1", "ano-1", event["CallerIDNum"], "1") // PACUs dial OCC1
-					} else if active.CabNum == "8" && active.Actived {
-						Dial("0401", "0512", "pad-rule-cab8", "ano-8", event["CallerIDNum"], "8") // PACUs dial OCC8
+	case "QueueCallerJoin":
+		lfshook.NewLogger().Infof("=========%s", event["Event"])
+		if priority.OCCAnswer == 1 && event["Queue"] == "0300" { //New PAD Goto the OCC queue in the first time, if OCC answered
+			go RedirectInQueue(event["CallerIDNum"], "0301", "queues-occ", "")
+			break
+		}
+
+		if utils.IsPAIU(event["CallerIDNum"]) && event["Queue"] == "0300" { // Alarm join the queue, PAD in the queue
+			alstatus.AlarmStatus(event["CallerIDNum"], "queue") //send status to STC
+
+			time.AfterFunc(30*time.Second, func() { // check the PAD 30s timeout
+				if priority.ICPAnswer == 0 { //ICP did not answer any
+
+					res, err := QueueStatus("0301", "") // check OCC queue , if empty OCC-PAD start
+					if err != nil {
+						lfshook.NewLogger().Infof("===OCC-QueueStatus==%+v", err)
+					}
+					if res.Calls == "0" { // OCC queue empty
+
+						resCaller, err := QueueStatus("0300", "") // check ICP queue, get entries
+						if err != nil {
+							lfshook.NewLogger().Infof("===QueueStatus==%+v", err)
+						}
+
+						for _, caller := range resCaller.Entrys {
+							go RedirectInQueue(caller.CallerIDNum, "0301", "queues-occ", "") // redirect All ICP-PAD redirect to OCC queue
+						}
 					}
 				}
-		*/
+			})
+			break
+		}
+
+		//first caller goto OCC
+		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 && ExtenStatus("1411") == "Idle" { //check active and OCC status
+				priority.OCCAnswer = 1
+				alstatus.OccPad("start")
+				Dial("0401", "0512", "pad-rule-pacus-occ", "ano1", event["CallerIDNum"], "1") // PACUs dial OCC1
+			} else if active.CabNum == "8" && active.Actived && ExtenStatus("1481") == "Idle" {
+				priority.OCCAnswer = 1
+				alstatus.OccPad("start")
+				Dial("0401", "0512", "pad-rule-pacus-occ", "ano8", event["CallerIDNum"], "8") // PACUs dial OCC8
+			}
+		}
+
 	case "ConfbridgeJoin":
 		lfshook.NewLogger().Infof("=========%s", event["Event"])
 		if utils.IsICP(event["CallerIDNum"]) && event["Exten"] == "0500" { // PA start
 			lfshook.NewLogger().Infof("====PA status:%s=====", "start")
 			alstatus.PaStatus(event["CallerIDNum"], "PA", "start")
+			break
 		}
+
 		if utils.IsIO(event["CallerIDNum"]) && event["Exten"] == "0501" { //CPA start
 			lfshook.NewLogger().Infof("====CPA status:%s=====", "start")
 			alstatus.PaStatus(event["CallerIDNum"], "CPA", "start")
+			break
 		}
 
+		//ICP answer PAD;
+		//ICP8->whisper->ICP1; PAD->whisper->ICP8
 		if event["ConnectedLineNum"] == "ani1" && event["Exten"] == "0511" { //PAD answered by ICP; PACUs connected ICP1
-			lfshook.NewLogger().Infof("====PAD answered by ICP1:%s=====", event["CallerIDNum"])
+			lfshook.NewLogger().Infof("====PAD answered by ICP1:%s=====", event["ConnectedLineName"])
+			alstatus.AlarmStatus(event["ConnectedLineName"], "connect")
+			go Dial("0402", "2311", "chanspy-rule", "ani1", event["ConnectedLineName"], "8") //trigger ChanSpyStart ,ICP8 whisper ICP1
+			//goto event=ChanSpyStart; PAD whisper ICP8
+			break
+		}
+		//ICP1->whisper->ICP8; PAD->whisper->ICP1
+		if event["ConnectedLineNum"] == "ani8" && event["Exten"] == "0511" { //PAD ansered by ICP8; PACUs connected ICP8
+			lfshook.NewLogger().Infof("====PAD answered by ICP8:%s=====", event["ConnectedLineName"])
+			alstatus.AlarmStatus(event["ConnectedLineName"], "connect")
+			go Dial("0402", "2381", "chanspy-rule", "ani8", event["ConnectedLineName"], "1") //trigger ChanSpyStart ,ICP1 whisper ICP8
+			//goto event=ChanSpyStart; PAD whisper ICP1
+			break
+		}
+
+		//OCC answer PAD;
+		if event["ConnectedLineNum"] == "ano1" && event["Exten"] == "0512" { //PAD answered by OCC; PACUs connected IO1
+			lfshook.NewLogger().Infof("====PAD answered by OCC1:%s=====", event["ConnectedLineName"])
+			alstatus.AlarmStatus(event["ConnectedLineName"], "connect")
+			go RedirectInQueue(event["ConnectedLineName"], "1411", "chanspy-rule", "") //PAD whisper IO1
+			//goto event=ChanSpyStart; ICPs spy PAD
+			break
+		}
+
+		if event["ConnectedLineNum"] == "ano8" && event["Exten"] == "0512" { //PAD ansered by OCC8; PACUs connected IO8
+			lfshook.NewLogger().Infof("====PAD answered by OCC8:%s=====", event["ConnectedLineName"])
 			alstatus.AlarmStatus(event["ConnectedLineName"], "connect")
-			go RedirectInQueue(event["ConnectedLineName"], "2311", "chanspy-rule", "") //PAD whisper ICP1
+			go RedirectInQueue(event["ConnectedLineName"], "1481", "chanspy-rule", "") //PAD whisper IO8
+			//goto event=ChanSpyStart; ICPs spy PAD
+			break
 		}
 
-		if event["ConnectedLineNum"] == "ani8" && event["Exten"] == "0512" { //PAD ansered by ICP8; PACUs connected ICP8
-			lfshook.NewLogger().Infof("====PAD answered by ICP8:%s=====", event["CallerIDNum"])
+		//ICP-TMS answer PAD, PACU idle
+		if utils.IsPACU(event["ConnectedLineNum"]) && event["Exten"] == "0403" { //PAD ansered by ICP-TMS; PACU Page() ICPs connected
+			lfshook.NewLogger().Infof("====PAD answered by ICP-TMS:%s===PACU idle==", event["ConnectedLineName"])
+			alstatus.AlarmStatus(event["ConnectedLineName"], "connect")
+			if active.CabNum == "1" && active.Actived {
+				go RedirectInQueue(event["ConnectedLineName"], "2311", "chanspy-rule", "") //PAD whisper ICP1
+			} else if active.CabNum == "8" && active.Actived {
+				go RedirectInQueue(event["ConnectedLineName"], "2381", "chanspy-rule", "") //PAD whisper ICP8
+			}
+			break
+		}
+		if utils.IsPAIU(event["ConnectedLineName"]) && event["Exten"] == "0403" { //PAD ansered by ICP-TMS; PAD Page() ICPs connected
+			lfshook.NewLogger().Infof("====PAD answered by ICP-TMS:%s==PADU no available===", event["ConnectedLineName"])
 			alstatus.AlarmStatus(event["ConnectedLineName"], "connect")
-			go RedirectInQueue(event["ConnectedLineName"], "2381", "chanspy-rule", "") //PAD whisper ICP8
+			break
+		}
+
+	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", "") //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", "") //PAD whisper ICP1
+			break
+		}
+
+		//PAD answered by OCC; ICPs chanspy PAD
+		if utils.IsPAIU(event["SpyeeConnectedLineName"]) && utils.IsIO(event["SpyerExten"]) { // check if it is PAD whisper IO
+			Dial("0404", event["SpyeeConnectedLineName"], "chanspy-rule-icps", "ano", "ano", "") //ICPs chanspy PAD
 		}
 
 	case "ConfbridgeLeave":
@@ -160,22 +279,22 @@ func HandleAMI(event map[string]string) {
 			}
 		}
 
-	case "BridgeEnter":
-		lfshook.NewLogger().Infof("=========event:%s   callerid:%s", event["Event"], event["CallerIDNum"])
-		//ICP and PACU connected
-		if utils.IsPACU(event["CallerIDNum"]) && utils.IsPAIU(event["CallerIDName"]) { //TMS-ICP connected PACU
-			lfshook.NewLogger().Infof("====BridgeEnter==IN action===%s===ID:%s   Name:%s", event["Event"], event["CallerIDNum"], event["CallerIDName"])
-			alstatus.AlarmStatus(event["CallerIDName"], "connect") // Alarm connected
+		/*	case "BridgeEnter":
+			lfshook.NewLogger().Infof("=========event:%s   callerid:%s", event["Event"], event["CallerIDNum"])
+				//ICP and PACU connected
+				if utils.IsPACU(event["CallerIDNum"]) && utils.IsPAIU(event["CallerIDName"]) { //TMS-ICP connected PACU
+					lfshook.NewLogger().Infof("====BridgeEnter==IN action===%s===ID:%s   Name:%s", event["Event"], event["CallerIDNum"], event["CallerIDName"])
+					alstatus.AlarmStatus(event["CallerIDName"], "connect") // Alarm connected
 
-			if active.CabNum == "1" && active.Actived {
-				go RedirectInQueue(event["CallerIDName"], "2311", "chanspy-rule", "") // 1车TMS-ICP接听PAIU, PAD whisper ICP
-			} else if active.CabNum == "8" && active.Actived {
-				go RedirectInQueue(event["CallerIDName"], "2381", "chanspy-rule", "") // 8车TMS-ICP接听PAIU, PAD whisper ICP
-			}
-		} else if utils.IsPAIU(event["CallerIDNum"]) {
-			lfshook.NewLogger().Infof("====send pad status=====")
-			alstatus.AlarmStatus(event["CallerIDNum"], "connect") // PAD connect ICP-TMS
-		}
+					if active.CabNum == "1" && active.Actived {
+						go RedirectInQueue(event["CallerIDName"], "2311", "chanspy-rule", "") // 1车TMS-ICP接听PAIU, PAD whisper ICP
+					} else if active.CabNum == "8" && active.Actived {
+						go RedirectInQueue(event["CallerIDName"], "2381", "chanspy-rule", "") // 8车TMS-ICP接听PAIU, PAD whisper ICP
+					}
+				} else if utils.IsPAIU(event["CallerIDNum"]) {
+					lfshook.NewLogger().Infof("====send pad status=====")
+					alstatus.AlarmStatus(event["CallerIDNum"], "connect") // PAD connect ICP-TMS
+				}*/
 	}
 }
 

+ 5 - 2
internal/app/stc/active/index.go

@@ -1,7 +1,10 @@
 package active
 
-var ActiveCab string
+// var ActiveCab string
 var CabNum string
 var Actived bool
 
-var ActivedMC int
+var ICPAnswer = 0
+var OCCAnswer = 0
+
+//var ActivedMC int

+ 20 - 45
internal/app/stc/broadcast/stc-broadcast.go

@@ -384,11 +384,10 @@ func AlarmHandleICP(data []byte) {
 		//NotifyPaiu(exten, "answer")
 
 		lfshook.NewLogger().Logger.Infof("================ICP Answer PAD================:%s ", exten)
-
 		if active.CabNum == "1" && active.Actived {
-			action.Dial("0402", "0511", "pad-rule-cab1", "ani1", exten, "1") // PACU dial ICP MC1
+			action.Dial("0402", "0511", "pad-rule-pacus", "ani1", exten, "1") // PACU dial ICP MC1
 		} else if active.CabNum == "8" && active.Actived {
-			action.Dial("0402", "0512", "pad-rule-cab8", "ani8", exten, "8") // PACU dial ICP MC8
+			action.Dial("0402", "0511", "pad-rule-pacus", "ani8", exten, "8") // PACU dial ICP MC8
 		}
 
 	case 0x02: //hold  重新放回队列里面
@@ -397,19 +396,15 @@ func AlarmHandleICP(data []byte) {
 		if err != nil {
 			lfshook.NewLogger().Info(err)
 		}
-		if active.CabNum == "1" && active.Actived {
-			action.Hangup("2311") //1 车接听
-		} else if active.CabNum == "8" && active.Actived {
-			action.Hangup("2381") //8 车接听
-		}
+		action.Hangup("2311") //1 车接听
+		action.Hangup("2381") //8 车接听
+
 	case 0x03: //hangup
 		//NotifyPaiu(exten, "hangup")
-		action.Hangup(exten)
-		if active.CabNum == "1" && active.Actived {
-			action.Hangup("2311") //1 车接听
-		} else if active.CabNum == "8" && active.Actived {
-			action.Hangup("2381") //8 车接听
-		}
+		action.Hangup(exten)  //Pad
+		action.Hangup("2311") //1 车接听
+		action.Hangup("2381") //8 车接听
+
 	}
 }
 
@@ -442,27 +437,11 @@ func AlarmHandleTMS(data []byte) {
 	switch handler {
 	case 0x01: //answer(ICP+Alarm+PACU)
 		//NotifyPaiu(exten, "answer")
-
-		//get pacu status
-		var infoExt model.Extension
-		_, er := mysql.DBOrmInstance.Where("exten = ?", PacuNum).Get(&infoExt)
-		if er != nil {
-			lfshook.NewLogger().Logger.Infof("update special voice to exten err : %+v", er.Error())
-		}
-
-		lfshook.NewLogger().Logger.Infof("================TMS Answer PAD:%s===PACU:%s========:%s ====%+v", exten, PacuNum, infoExt)
-		if infoExt.Status == "Idle" {
-			if active.CabNum == "1" && active.Actived {
-				action.Dial("0402", PacuNum, "default", PacuNum, exten, "1") // PACU dial ICP MC1
-			} else if active.CabNum == "8" && active.Actived {
-				action.Dial("0402", PacuNum, "default", PacuNum, exten, "8") // PACU dial ICP MC8
-			}
+		lfshook.NewLogger().Logger.Infof("================TMS Answer PAD:%s===PACU:%s========:%s ====", exten, PacuNum)
+		if action.ExtenStatus(PacuNum) == "Idle" {
+			action.Dial("0403", PacuNum, "default", PacuNum, exten, "") // PACU dial ICPs
 		} else {
-			if active.CabNum == "1" && active.Actived {
-				action.RedirectInQueue(exten, "0402", "default", "1") // PAD dial ICP MC1
-			} else if active.CabNum == "8" && active.Actived {
-				action.RedirectInQueue(exten, "0402", "default", "8") // PAD dial ICP MC8
-			}
+			action.RedirectInQueue(exten, "0403", "default", "1") // PAD dial ICPs
 		}
 
 	case 0x02: //hold  重新放回队列里面
@@ -471,19 +450,15 @@ func AlarmHandleTMS(data []byte) {
 		if err != nil {
 			lfshook.NewLogger().Info(err)
 		}
-		if active.CabNum == "1" && active.Actived {
-			action.Hangup("2311") //1 车接听
-		} else if active.CabNum == "8" && active.Actived {
-			action.Hangup("2381") //8 车接听
-		}
+
+		action.Hangup("2311") //1 车接听
+		action.Hangup("2381") //8 车接听
+
 	case 0x03: //hangup
 		//NotifyPaiu(exten, "hangup")
-		action.Hangup(exten)
-		if active.CabNum == "1" && active.Actived {
-			action.Hangup("2311") //1 车接听
-		} else if active.CabNum == "8" && active.Actived {
-			action.Hangup("2381") //8 车接听
-		}
+		action.Hangup(exten)  //PAD
+		action.Hangup("2311") //1 车接听
+		action.Hangup("2381") //8 车接听
 	}
 }
 

+ 3 - 0
internal/app/stc/priority/index.go

@@ -1,3 +1,6 @@
 package priority
 
+var ICPAnswer = 0
+var OCCAnswer = 0
+
 //path = "/etc/asterisk/priority.conf"

+ 31 - 1
internal/app/stc/sendstatus/status.go

@@ -87,7 +87,7 @@ func AlarmStatus(exten string, status string) {
 
 // report broadcast status to STC
 func PaStatus(src string, patype string, operation string) {
-
+	lfshook.NewLogger().Logger.Infof("===PAStatus=Startext:%s=== type:%s=========action:%s", src, patype, operation)
 	protocol := msgdata.NewProtocol()
 	protocol.MessageID = 0x22
 	protocol.DataLength = 0x04
@@ -151,6 +151,36 @@ func PaStatus(src string, patype string, operation string) {
 	}
 }
 
+// report broadcast status to STC
+func OccPad(operation string) {
+	lfshook.NewLogger().Logger.Infof("===OCC-PAD========action:%s", operation)
+	protocol := msgdata.NewProtocol()
+	protocol.MessageID = 0x2A
+	protocol.DataLength = 0x04
+	protocol.Data = make([]byte, 4)
+
+	//广播发起方
+	switch operation {
+	case "start": //mc1
+		protocol.Data[0] = 0x01
+	case "end": //mc8
+		protocol.Data[0] = 0x02
+	case "": //
+		protocol.Data[0] = 0x00
+	}
+
+	encoded, errEn := protocol.Encode()
+	if errEn != nil {
+		fmt.Println("Encode error:", errEn)
+		return
+	}
+
+	if active.Actived {
+		SendToStc(socket.Conn, encoded)
+		SendToStc(socket.Conn8, encoded)
+	}
+}
+
 // report broadcast status to STC
 func SendRecordFile(filename, rcdtype string) {