queue.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package action
  2. import (
  3. "errors"
  4. "pbx-api-gin/internal/app/ami/model"
  5. "pbx-api-gin/pkg/lfshook"
  6. "github.com/mitchellh/mapstructure"
  7. )
  8. // QueueStatus 队列信息
  9. func QueueStatus(queue, member string) (queueParams *model.QueueParams, err error) {
  10. action := map[string]string{
  11. "Action": "QueueStatus",
  12. }
  13. if queue != "" {
  14. action["Queue"] = queue
  15. }
  16. if member != "" {
  17. action["Member"] = member
  18. }
  19. _, events, _ := AminInstance.Send(action)
  20. for _, event := range events {
  21. if event.Data["Event"] == "QueueParams" {
  22. queueParams = &model.QueueParams{Members: make([]*model.QueueMember, 0), Entrys: make([]*model.QueueEntry, 0)}
  23. mapstructure.Decode(event.Data, queueParams)
  24. }
  25. if event.Data["Event"] == "QueueMember" {
  26. member := &model.QueueMember{}
  27. mapstructure.Decode(event.Data, member)
  28. queueParams.Members = append(queueParams.Members, member)
  29. }
  30. if event.Data["Event"] == "QueueEntry" {
  31. entry := &model.QueueEntry{}
  32. mapstructure.Decode(event.Data, entry)
  33. queueParams.Entrys = append(queueParams.Entrys, entry)
  34. }
  35. }
  36. lfshook.NewLogger().Infof("================QueueStatus calls:%v===========", queueParams.Calls)
  37. return queueParams, nil
  38. }
  39. // QueueAllStatus 队列信息
  40. func QueueAllStatus(queue, member string) (queuesMap map[string]*model.QueueParams, err error) {
  41. queuesMap = make(map[string]*model.QueueParams)
  42. action := map[string]string{
  43. "Action": "QueueStatus",
  44. }
  45. if queue != "" {
  46. action["Queue"] = queue
  47. }
  48. if member != "" {
  49. action["Member"] = member
  50. }
  51. _, events, _ := AminInstance.Send(action)
  52. for _, event := range events {
  53. if event.Data["Event"] == "QueueParams" {
  54. queueParams := &model.QueueParams{Members: make([]*model.QueueMember, 0), Entrys: make([]*model.QueueEntry, 0)}
  55. // data, _ := json.Marshal(event.Data)
  56. // json.Unmarshal(data, queueParams)
  57. mapstructure.Decode(event.Data, queueParams)
  58. queuesMap[queueParams.Queue] = queueParams
  59. }
  60. if event.Data["Event"] == "QueueMember" {
  61. member := &model.QueueMember{}
  62. mapstructure.Decode(event.Data, member)
  63. if queue, ok := queuesMap[member.Queue]; ok {
  64. queue.Members = append(queue.Members, member)
  65. }
  66. }
  67. if event.Data["Event"] == "QueueEntry" {
  68. entry := &model.QueueEntry{}
  69. mapstructure.Decode(event.Data, entry)
  70. if queue, ok := queuesMap[entry.Queue]; ok {
  71. queue.Entrys = append(queue.Entrys, entry)
  72. }
  73. }
  74. }
  75. return queuesMap, nil
  76. }
  77. // QueueAdd 添加到队列
  78. func QueueAdd(queue, interface_value, pause string) error {
  79. action := map[string]string{
  80. "Action": "QueueAdd",
  81. "Queue": queue,
  82. "Interface": interface_value,
  83. "Paused": pause,
  84. }
  85. res, _, err := AminInstance.Send(action)
  86. if err != nil {
  87. return err
  88. }
  89. if res["Response"] != "Success" {
  90. return errors.New(res["Message"])
  91. }
  92. return nil
  93. }
  94. // QueueRemove 从队列移除
  95. func QueueRemove(queue, interface_value string) error {
  96. action := map[string]string{
  97. "Action": "QueueRemove",
  98. "Queue": queue,
  99. "Interface": interface_value,
  100. }
  101. res, _, err := AminInstance.Send(action)
  102. if err != nil {
  103. return err
  104. }
  105. if res["Response"] != "Success" {
  106. return errors.New(res["Message"])
  107. }
  108. return nil
  109. }
  110. // QueuePasue 暂停控制
  111. func QueuePasue(queue, interface_value, pause string) error {
  112. action := map[string]string{
  113. "Action": "QueuePause",
  114. "Queue": queue,
  115. "Interface": interface_value,
  116. "Paused": pause,
  117. }
  118. res, _, err := AminInstance.Send(action)
  119. if err != nil {
  120. return err
  121. }
  122. if res["Response"] != "Success" {
  123. return errors.New(res["Message"])
  124. }
  125. return nil
  126. }