queue.go 3.4 KB

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