channel.go 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package action
  2. import (
  3. "errors"
  4. "pbx-api-gin/api/model"
  5. "pbx-api-gin/internal/app/ami"
  6. "pbx-api-gin/pkg/lfshook"
  7. "pbx-api-gin/pkg/utils"
  8. )
  9. // CoreShowChannels 获取通话通道
  10. func CoreShowChannels() (result []model.CoreShowChannelResVO, err error) {
  11. // 通过 src 查询对应通道
  12. _, events, err := ami.AminInstance.Send(map[string]string{
  13. "Action": "CoreShowChannels",
  14. })
  15. if err != nil {
  16. lfshook.NewLogger().Errorf("core show channels error %+v", err)
  17. return nil, err
  18. }
  19. lfshook.NewLogger().Tracef("events %+v", events)
  20. result = make([]model.CoreShowChannelResVO, 0)
  21. for _, event := range events {
  22. if event.Data["Event"] == "CoreShowChannel" {
  23. channel := model.CoreShowChannelResVO{
  24. CallerIDName: event.Data["CallerIDName"],
  25. CallerIDNum: event.Data["CallerIDNum"],
  26. ConnectedLineName: event.Data["ConnectedLineName"],
  27. ConnectedLineNum: event.Data["ConnectedLineNum"],
  28. Channel: event.Data["Channel"],
  29. Duration: event.Data["Duration"],
  30. DurationSecond: utils.TimeStringToSecond(event.Data["Duration"]),
  31. }
  32. result = append(result, channel)
  33. }
  34. }
  35. lfshook.NewLogger().Tracef("channels %+v", result)
  36. return result, nil
  37. }
  38. // GetChannelByExten 通过 exten 查询对应通道
  39. func GetChannelByExten(exten string) (channel string, err error) {
  40. lfshook.NewLogger().Infof("GetChannelByExten %s", exten)
  41. _, events, err := ami.AminInstance.Send(map[string]string{
  42. "Action": "CoreShowChannels",
  43. })
  44. if err != nil {
  45. lfshook.NewLogger().Errorf("core show channels error %+v", err)
  46. return "", err
  47. }
  48. for _, event := range events {
  49. lfshook.NewLogger().Infof("CoreShowChannels event Data %+v", event.Data)
  50. if event.Data["Event"] == "CoreShowChannel" && event.Data["ConnectedLineNum"] == exten && event.Data["CallerIDNum"] != exten {
  51. channel = event.Data["Channel"]
  52. lfshook.NewLogger().Infof("GetChannelByExten get channel %s", channel)
  53. break
  54. }
  55. }
  56. if channel == "" {
  57. lfshook.NewLogger().Errorf("not found channel %s", exten)
  58. return "", errors.New("not found channel")
  59. }
  60. return channel, nil
  61. }
  62. // GetBridgedChan 通过 exten 查询对应通道
  63. func GetExtenChan(exten string) (channel string, err error) {
  64. lfshook.NewLogger().Infof("GetExtenChan %s", exten)
  65. _, events, err := ami.AminInstance.Send(map[string]string{
  66. "Action": "CoreShowChannels",
  67. })
  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["ConnectedLineNum"] != exten && 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. }