channel.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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. lfshook.NewLogger().Infof("GetChannelByExtenNotBridged ================%s", exten)
  68. if err != nil {
  69. lfshook.NewLogger().Errorf("core show channels error %+v", err)
  70. return "", err
  71. }
  72. for _, event := range events {
  73. lfshook.NewLogger().Infof("CoreShowChannels event Data %+v", event.Data)
  74. if event.Data["Event"] == "CoreShowChannel" && event.Data["CallerIDNum"] == exten {
  75. channel = event.Data["Channel"]
  76. lfshook.NewLogger().Infof("GetChannelByExten get channel %s", channel)
  77. break
  78. }
  79. }
  80. if channel == "" {
  81. lfshook.NewLogger().Errorf("not found channel %s", exten)
  82. return "", errors.New("not found channel")
  83. }
  84. return channel, nil
  85. }
  86. // GetBridgedChan 通过 exten 查询对应通道
  87. func GetExtenChan(exten string) (channel string, err error) {
  88. lfshook.NewLogger().Infof("GetExtenChan %s", exten)
  89. _, events, err := AminInstance.Send(map[string]string{
  90. "Action": "CoreShowChannels",
  91. })
  92. if err != nil {
  93. lfshook.NewLogger().Errorf("core show channels error %+v", err)
  94. return "", err
  95. }
  96. for _, event := range events {
  97. lfshook.NewLogger().Infof("CoreShowChannels event Data %+v", event.Data)
  98. if event.Data["Event"] == "CoreShowChannel" && event.Data["ConnectedLineNum"] != exten && event.Data["CallerIDNum"] == exten {
  99. channel = event.Data["Channel"]
  100. lfshook.NewLogger().Infof("GetChannelByExten get channel %s", channel)
  101. break
  102. }
  103. }
  104. if channel == "" {
  105. lfshook.NewLogger().Errorf("not found channel %s", exten)
  106. return "", errors.New("not found channel")
  107. }
  108. return channel, nil
  109. }