park.go 1.8 KB

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