跳到主要内容

第三方平台/服务集成规格

1. 集成服务总览

服务名称用途鉴权方式重要性
Amazon MQ毫米波雷达设备接入(MQTT)Username/Password核心
埃微手表 API智能手表数据同步HTTP + DeviceToken核心
Twilio短信验证码、红色预警语音电话AccountSID/AuthToken核心
OpenAIAI 对话、TTS 语音合成、ASR 语音识别API Key核心
AWS S3文件存储(雷达数据存档、告警截图)AccessKey核心
APNsiOS 推送通知证书核心
FCMAndroid 推送通知(Firebase Cloud Messaging)API Key核心

2. 服务详细集成规格

2.1 Amazon MQ(毫米波雷达接入)

  • 接入点:环境变量 AMAZON_MQ_ENDPOINT(如 b-1234a5b6-7890-1c2d-3e4f-5a6b7c8d9e10-1.mq.us-east-1.amazonaws.com:5672
  • 用户名:环境变量 AMAZON_MQ_USERNAME
  • 密码:环境变量 AMAZON_MQ_PASSWORD敏感
  • 协议:MQTT over TLS
  • Topic 规范
    • 设备上报:/sys/{productKey}/{deviceName}/thing/event/property/post
    • 云端下发:/sys/{productKey}/{deviceName}/thing/service/property/set
  • 消息格式(JSON)
{
"deviceId": "radar_001",
"timestamp": 1713600000000,
"eventType": "fall_detected",
"data": {
"fallConfidence": 0.92,
"inRoom": true,
"distance": 1.8,
"angle": 30,
"height": 0.5
}
}
  • 后端消费:Spring Boot 集成 spring-boot-starter-amqp,消费雷达 Topic 数据入库

2.2 埃微手表数据同步

  • API 端点:环境变量 EWATRIS_API_ENDPOINT
  • 设备 Token:存储在设备表中,每设备独立
  • 数据拉取伪代码
@Service
public class EwatrisWatchService {

public WatchHealthData fetchData(String deviceToken, String date) {
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + deviceToken);

UriComponentsBuilder builder = UriComponentsBuilder
.fromHttpUrl(settings.getEwatrisApiEndpoint() + "/health/data")
.queryParam("date", date)
.queryParam("dataTypes", "heart_rate,steps,sleep");

ResponseEntity<WatchHealthData> response = restTemplate.exchange(
builder.toUriString(), HttpMethod.GET,
new HttpEntity<>(headers), WatchHealthData.class);
return response.getBody();
}
}

2.3 Twilio(短信与语音电话)

  • Account SID:环境变量 TWILIO_ACCOUNT_SID
  • Auth Token:环境变量 TWILIO_AUTH_TOKEN敏感
  • 发送短信
@Service
public class TwilioSmsService {

public void sendSmsAlert(String phone, String message) {
Message twilioMessage = Message.creator(
new PhoneNumber(phone),
new PhoneNumber(settings.getTwilioPhoneNumber()),
message
).create();
}
}
  • 语音电话(红色预警)
@Service
public class TwilioVoiceService {

public void makeEmergencyCall(String phone, String alertMessage) {
Call call = Call.creator(
new PhoneNumber(phone),
new PhoneNumber(settings.getTwilioPhoneNumber()),
new URI("http://demo.twilio.com/docs/voice.xml")
).create();
}
}
  • 用途区分
    • 普通预警通知 → 短信
    • 红色紧急预警 → 语音电话(静默穿透,直拨家属)

2.4 OpenAI(AI 对话与语音服务)

  • API Key:环境变量 OPENAI_API_KEY敏感
  • 服务用途
    • GPT-4o:Luma 智能音箱 AI 对话(生活助手、情感陪聊)
    • TTS:Luma 语音播报(提醒、问候、对话回复)
    • Whisper:Luma 本地离线唤醒词检测(本地运行,不走 API)
  • 后端调用
@Service
public class OpenAIClientService {

public String chat(String prompt) {
return OpenAI.builder()
.apiKey(settings.getOpenaiApiKey())
.build()
.chat()
.prompt(prompt)
.model("gpt-4o")
.execute();
}

public byte[] textToSpeech(String text, String voiceId) {
return OpenAI.builder()
.apiKey(settings.getOpenaiApiKey())
.build()
.audio()
.speech()
.input(text)
.voice(voiceId)
.model("tts-1")
.execute();
}
}

2.5 AWS S3(文件存储)

  • Bucket:环境变量 AWS_S3_BUCKET
  • Region:环境变量 AWS_REGION(如 us-east-1
  • AccessKey:环境变量 AWS_ACCESS_KEY_ID敏感
  • SecretKey:环境变量 AWS_SECRET_ACCESS_KEY敏感
  • 目录规范
    • /radar-data/ - 雷达原始数据存档
    • /alert-screenshots/ - 告警截图
    • /voice-messages/ - 语音留言
  • SDK 调用(Java)
@Service
public class S3FileService {

public String uploadAlertScreenshot(String deviceId, byte[] imageData) {
String key = String.format("alert-screenshots/%s/%d.jpg",
deviceId, System.currentTimeMillis());

PutObjectRequest request = PutObjectRequest.builder()
.bucket(settings.getS3Bucket())
.key(key)
.build();

s3Client.putObject(request, RequestBody.fromBytes(imageData));
return String.format("https://%s.s3.%s.amazonaws.com/%s",
settings.getS3Bucket(), settings.getRegion(), key);
}
}

2.6 APNs(iOS 推送)

  • 证书:环境变量 APNS_CERT_PATH.p8 文件)
  • Key ID:环境变量 APNS_KEY_ID
  • Team ID:环境变量 APNS_TEAM_ID
  • 用途:向家属 App 推送预警通知(红色/黄色/普通三级)
  • 后端集成:Spring Boot + provider-push 框架
@Service
public class ApplePushService {

public void sendPush(String deviceToken, String alertTitle, String alertBody) {
ApsPayload payload = ApsPayload.builder()
.alert(Alert.builder()
.title(alertTitle)
.body(alertBody)
.build())
.sound("default")
.badge(1)
.build();

// 推送至 APNs
}
}

2.7 FCM(Android 推送)

  • API Key:环境变量 FCM_SERVER_KEY敏感
  • 用途:向 Android 家属 App 推送预警通知(红色/黄色/普通三级),与 APNs 互为双平台推送方案
  • 后端集成:Spring Boot + Firebase Admin SDK
@Service
public class FirebasePushService {

public void sendPush(String deviceToken, String alertTitle, String alertBody) {
Message message = Message.builder()
.setNotification(Notification.builder()
.setTitle(alertTitle)
.setBody(alertBody)
.build())
.setAndroidConfig(AndroidConfig.builder()
.setPriority(Priority.HIGH)
.setNotification(AndroidNotification.builder()
.setChannelId("reflekt_alerts")
.setPriority(Priority.HIGH)
.build())
.build())
.setToken(deviceToken)
.build();

FirebaseMessaging.getInstance().send(message);
}
}

3. 环境变量清单

变量名说明敏感
AMAZON_MQ_ENDPOINTAmazon MQ 接入点
AMAZON_MQ_USERNAMEAmazon MQ 用户名
AMAZON_MQ_PASSWORDAmazon MQ 密码
TWILIO_ACCOUNT_SIDTwilio Account SID
TWILIO_AUTH_TOKENTwilio Auth Token
TWILIO_PHONE_NUMBERTwilio 发号电话号码
OPENAI_API_KEYOpenAI API Key
AWS_S3_BUCKETS3 Bucket 名称
AWS_REGIONAWS Region
AWS_ACCESS_KEY_IDAWS AccessKey
AWS_SECRET_ACCESS_KEYAWS SecretKey
APNS_CERT_PATHAPNs 证书路径
APNS_KEY_IDAPNs Key ID
APNS_TEAM_IDAPNs Team ID
FCM_SERVER_KEYFirebase Cloud Messaging Server API Key
APNS_KEY_IDAPNs Key ID
APNS_TEAM_IDAPNs Team ID
EWATRIS_API_ENDPOINT埃微手表 API 端点

4. 第三方服务限制参考

服务限制项限制值备注
Twilio SMS短信发送量10条/日/手机号告警通知限制
Amazon MQ单连接心跳60秒低于设备心跳
埃微 API数据查询频率10次/小时/设备轮询限制
OpenAIAPI 调用限制按套餐GPT-4o + TTS 共用配额