index.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package status
  2. import (
  3. "crm-api/internal/app/ami/action"
  4. "crm-api/internal/app/redis"
  5. "crm-api/pkg/lfshook"
  6. "strings"
  7. )
  8. // InitAsterisk 初始化状态
  9. func InitAsterisk() {
  10. // 清空存在的状态
  11. redis.ExtensionClean()
  12. // PJSIPShowContacts 查询注册状态
  13. data, err := action.PJSIPShowContacts()
  14. if err != nil {
  15. lfshook.NewLogger().Errorf("PJSIPShowContacts error %+v", err)
  16. return
  17. }
  18. extens := make([]string, 0)
  19. // core show contacts
  20. for _, point := range data {
  21. exten := strings.Split(point.ObjectName, ";")[0]
  22. exten = strings.TrimSpace(exten)
  23. addr := point.ViaAddr
  24. // 远程注册 addr 不能取 ViaAddr, 通过 uri 获取
  25. info := strings.Split(point.Uri, "@")
  26. if len(info) == 2 {
  27. addr = strings.Split(info[1], ":")[0]
  28. }
  29. redis.ExtensionSet(exten, point.Uri, addr, point.RoundtripUsec)
  30. extens = append(extens, exten)
  31. }
  32. initDNDStatus(&extens)
  33. initExtensionStatus()
  34. // 触发任务可能修改了文件
  35. // go action.Command("dialplan reload")
  36. }
  37. func initDNDStatus(extensions *[]string) {
  38. for _, extension := range *extensions {
  39. value, _ := action.DBGet("DND", extension)
  40. if value != "" {
  41. redis.ExtensionDNDSet(extension, value)
  42. }
  43. }
  44. }
  45. func initExtensionStatus() {
  46. events, err := action.ExtensionStateList()
  47. if err != nil {
  48. lfshook.NewLogger().Error(err)
  49. return
  50. }
  51. for _, event := range events {
  52. //lfshook.NewLogger().Infof("init event %+v", event)
  53. redis.ExtensionSetStatus(event)
  54. }
  55. }