park.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package action
  2. import (
  3. "errors"
  4. amiModel "pbx-api-gin/internal/app/ami/model"
  5. "pbx-api-gin/pkg/lfshook"
  6. "github.com/mitchellh/mapstructure"
  7. )
  8. func Park(extension, lot string) (err error) {
  9. channel, err := GetChannelByExten(extension)
  10. if err != nil {
  11. return err
  12. }
  13. action := map[string]string{
  14. "Action": "Park",
  15. "Channel": channel,
  16. }
  17. if lot != "" {
  18. action["Parkinglot"] = lot
  19. }
  20. res, events, err := AminInstance.Send(action)
  21. if err != nil {
  22. return err
  23. }
  24. lfshook.NewLogger().Infof("Park %+v %+v", res, events)
  25. if res["Response"] != "Success" {
  26. return errors.New(res["Message"])
  27. }
  28. return nil
  29. }
  30. func ParkedCalls(lot string) (result []*amiModel.ParkedCall, err error) {
  31. action := map[string]string{
  32. "Action": "ParkedCalls",
  33. "Parkinglot": lot,
  34. }
  35. res, events, err := AminInstance.Send(action)
  36. if err != nil {
  37. return nil, err
  38. }
  39. if res["Response"] != "Success" {
  40. return result, errors.New(res["Message"])
  41. }
  42. result = make([]*amiModel.ParkedCall, 0)
  43. for _, event := range events {
  44. if event.Data["Event"] == "ParkedCall" {
  45. call := &amiModel.ParkedCall{}
  46. mapstructure.Decode(event.Data, call)
  47. result = append(result, call)
  48. }
  49. }
  50. return result, nil
  51. }
  52. func Parkinglots() (result []*amiModel.Parkinglot, err error) {
  53. action := map[string]string{
  54. "Action": "Parkinglots",
  55. }
  56. res, events, err := AminInstance.Send(action)
  57. if err != nil {
  58. return nil, err
  59. }
  60. if res["Response"] != "Success" {
  61. return nil, errors.New(res["Message"])
  62. }
  63. result = make([]*amiModel.Parkinglot, 0)
  64. for _, event := range events {
  65. if event.Data["Event"] == "Parkinglot" {
  66. lot := &amiModel.Parkinglot{}
  67. mapstructure.Decode(event.Data, lot)
  68. result = append(result, lot)
  69. }
  70. }
  71. return result, nil
  72. }