channel.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package action
  2. import (
  3. "errors"
  4. "pbx-api-gin/api/model"
  5. "pbx-api-gin/pkg/lfshook"
  6. "pbx-api-gin/pkg/utils"
  7. )
  8. // CoreShowChannels 获取通话通道
  9. func CoreShowChannels() (result []model.CoreShowChannelResVO, err error) {
  10. // 通过 src 查询对应通道
  11. _, events, err := AminInstance.Send(map[string]string{
  12. "Action": "CoreShowChannels",
  13. })
  14. if err != nil {
  15. lfshook.NewLogger().Errorf("core show channels error %+v", err)
  16. return nil, err
  17. }
  18. lfshook.NewLogger().Tracef("events %+v", events)
  19. result = make([]model.CoreShowChannelResVO, 0)
  20. for _, event := range events {
  21. if event.Data["Event"] == "CoreShowChannel" {
  22. channel := model.CoreShowChannelResVO{
  23. CallerIDName: event.Data["CallerIDName"],
  24. CallerIDNum: event.Data["CallerIDNum"],
  25. ConnectedLineName: event.Data["ConnectedLineName"],
  26. ConnectedLineNum: event.Data["ConnectedLineNum"],
  27. Channel: event.Data["Channel"],
  28. Duration: event.Data["Duration"],
  29. DurationSecond: utils.TimeStringToSecond(event.Data["Duration"]),
  30. }
  31. result = append(result, channel)
  32. }
  33. }
  34. lfshook.NewLogger().Tracef("channels %+v", result)
  35. return result, nil
  36. }
  37. // GetChannelByExten 通过 exten 查询对应通道
  38. func GetChannelByExten(exten string) (channel string, err error) {
  39. lfshook.NewLogger().Infof("GetChannelByExten %s", exten)
  40. _, events, err := AminInstance.Send(map[string]string{
  41. "Action": "CoreShowChannels",
  42. })
  43. if err != nil {
  44. lfshook.NewLogger().Errorf("core show channels error %+v", err)
  45. return "", err
  46. }
  47. for _, event := range events {
  48. lfshook.NewLogger().Infof("CoreShowChannels event Data %+v", event.Data)
  49. if event.Data["Event"] == "CoreShowChannel" && event.Data["ConnectedLineNum"] == exten && event.Data["CallerIDNum"] != exten {
  50. channel = event.Data["Channel"]
  51. lfshook.NewLogger().Infof("GetChannelByExten get channel %s", channel)
  52. break
  53. }
  54. }
  55. if channel == "" {
  56. lfshook.NewLogger().Errorf("not found channel %s", exten)
  57. return "", errors.New("not found channel")
  58. }
  59. return channel, nil
  60. }
  61. // GetChannelByExten 通过 exten 查询对应通道
  62. func GetChannelByExtenNotBridged(exten string) (channel string, err error) {
  63. lfshook.NewLogger().Infof("GetChannelByExten %s", exten)
  64. _, events, err := AminInstance.Send(map[string]string{
  65. "Action": "CoreShowChannels",
  66. })
  67. if err != nil {
  68. lfshook.NewLogger().Errorf("core show channels error %+v", err)
  69. return "", err
  70. }
  71. for _, event := range events {
  72. lfshook.NewLogger().Infof("CoreShowChannels event Data %+v", event.Data)
  73. if event.Data["Event"] == "CoreShowChannel" && event.Data["CallerIDNum"] == exten {
  74. channel = event.Data["Channel"]
  75. lfshook.NewLogger().Infof("GetChannelByExten get channel %s", channel)
  76. break
  77. }
  78. }
  79. if channel == "" {
  80. lfshook.NewLogger().Errorf("not found channel %s", exten)
  81. return "", errors.New("not found channel")
  82. }
  83. return channel, nil
  84. }
  85. // GetBridgedChan 通过 exten 查询对应通道
  86. func GetExtenChan(exten string) (channel string, err error) {
  87. lfshook.NewLogger().Infof("GetExtenChan %s", exten)
  88. _, events, err := AminInstance.Send(map[string]string{
  89. "Action": "CoreShowChannels",
  90. })
  91. if err != nil {
  92. lfshook.NewLogger().Errorf("core show channels error %+v", err)
  93. return "", err
  94. }
  95. for _, event := range events {
  96. lfshook.NewLogger().Infof("CoreShowChannels event Data %+v", event.Data)
  97. if event.Data["Event"] == "CoreShowChannel" && event.Data["ConnectedLineNum"] != exten && event.Data["CallerIDNum"] == exten {
  98. channel = event.Data["Channel"]
  99. lfshook.NewLogger().Infof("GetChannelByExten get channel %s", channel)
  100. break
  101. }
  102. }
  103. if channel == "" {
  104. lfshook.NewLogger().Errorf("not found channel %s", exten)
  105. return "", errors.New("not found channel")
  106. }
  107. return channel, nil
  108. }