queue.go 3.4 KB

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