第三方平台/服务集成规格
1. 集成服务总览
| 服务名称 | 用途 | 鉴权方式 | 重要性 |
|---|---|---|---|
| Amazon MQ | 毫米波雷达设备接入(MQTT) | Username/Password | 核心 |
| 埃微手表 API | 智能手表数据同步 | HTTP + DeviceToken | 核心 |
| Twilio | 短信验证码、红色预警语音电话 | AccountSID/AuthToken | 核心 |
| OpenAI | AI 对话、TTS 语音合成、ASR 语音识别 | API Key | 核心 |
| AWS S3 | 文件存储(雷达数据存档、告警截图) | AccessKey | 核心 |
| APNs | iOS 推送通知 | 证书 | 核心 |
| FCM | Android 推送通知(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_ENDPOINT | Amazon MQ 接入点 | 否 |
AMAZON_MQ_USERNAME | Amazon MQ 用户名 | 否 |
AMAZON_MQ_PASSWORD | Amazon MQ 密码 | 是 |
TWILIO_ACCOUNT_SID | Twilio Account SID | 否 |
TWILIO_AUTH_TOKEN | Twilio Auth Token | 是 |
TWILIO_PHONE_NUMBER | Twilio 发号电话号码 | 否 |
OPENAI_API_KEY | OpenAI API Key | 是 |
AWS_S3_BUCKET | S3 Bucket 名称 | 否 |
AWS_REGION | AWS Region | 否 |
AWS_ACCESS_KEY_ID | AWS AccessKey | 是 |
AWS_SECRET_ACCESS_KEY | AWS SecretKey | 是 |
APNS_CERT_PATH | APNs 证书路径 | 是 |
APNS_KEY_ID | APNs Key ID | 否 |
APNS_TEAM_ID | APNs Team ID | 否 |
FCM_SERVER_KEY | Firebase Cloud Messaging Server API Key | 是 |
APNS_KEY_ID | APNs Key ID | 否 |
APNS_TEAM_ID | APNs Team ID | 否 |
EWATRIS_API_ENDPOINT | 埃微手表 API 端点 | 否 |