agi-handler.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package agiServer
  2. import (
  3. "fmt"
  4. "os"
  5. "pbx-api-gin/internal/app/stc/priority"
  6. "pbx-api-gin/pkg/utils"
  7. "time"
  8. "github.com/CyCoreSystems/agi"
  9. )
  10. func StartAGI(serviceAddress, serviceAGIPort string) {
  11. server := fmt.Sprintf("%s:%s", serviceAddress, serviceAGIPort)
  12. err := agi.Listen(server, agiHandler)
  13. if err != nil {
  14. utils.LoggerDebug.Printf("AGI: bind addr error !")
  15. os.Exit(1)
  16. }
  17. }
  18. func agiHandler(a *agi.AGI) {
  19. defer a.Close()
  20. taskName, ok := a.Variables["agi_arg_1"]
  21. if !ok {
  22. utils.LoggerDebug.Printf("AGI: Get arg1 error !")
  23. return
  24. }
  25. time.Sleep(100 * time.Millisecond) //等待userEvent中设置priority.TaskCreating
  26. //检测当前创建中的任务是否时本任务,如果是则直接退出,如果不是则等待其他任务创建完成
  27. utils.LoggerDebug.Printf("AGI: task:%s TaskCreating:%s checking start !", taskName, priority.TaskCreating)
  28. if priority.TaskCreating != taskName {
  29. utils.LoggerDebug.Printf("AGI: %s check task creating ..... ,TaskCreating = %s", taskName, priority.TaskCreating)
  30. //action.WaitTaskCreate(taskName)
  31. for i := 0; i < 20; i++ {
  32. if priority.TaskCreating == "" || priority.TaskCreating == taskName {
  33. utils.LoggerDebug.Printf("AGI: %s check task creating ..... ,TaskCreating = %s Done !", taskName, priority.TaskCreating)
  34. time.Sleep(300 * time.Millisecond) //等待userEvent中的后续操作完成之后再执行dial
  35. return
  36. } else {
  37. utils.LoggerDebug.Printf("AGI: %s check task creating ..... ,TaskCreating = %s waiting !", taskName, priority.TaskCreating)
  38. time.Sleep(time.Millisecond * 100)
  39. }
  40. }
  41. utils.LoggerDebug.Printf("AGI: %s check task creating ..... ,TaskCreating = %s Done !", taskName, priority.TaskCreating)
  42. }
  43. time.Sleep(300 * time.Millisecond) //等待userEvent中的后续操作完成之后再执行dial
  44. }