如何解决家庭助理 - 请求失败错误代码 400
我创建了这个功能,以便可以向我的 google home mini 发送通知,但我一直收到错误代码 400(错误请求)。我尝试使用多种方法来解决这个问题。
在 Home-Assistant 中,我已经设置了我的 Google Home 并且可以通过它播放媒体,但是每当我尝试使用 Home-Assistant 的“google_say”API 时,它都不起作用。
我还尝试使用名为“API 客户端”的应用通过手机调用 Home-Assistant API,但得到了相同的响应。
function ttsGoogleHome(text) {
var ttsUrl = "http://127.0.0.1:8123/api/services/tts/google_say?api_password=<MY_PASSWORD>"
var varToken = "<MY_TOKEN>"
var postData = {"entity_id": "media_player.david","message": `${text}`};
let axiosConfig = {
headers: {
'authorization': `Bearer ${varToken}`,'Content-Type': 'application/json',"Access-Control-Allow-Origin": "*",}
};
axios.post(ttsUrl,postData,axiosConfig)
.then((res) => {
console.log("RESPONSE RECEIVED: ",JSON.stringify(res));
})
.catch((err) => {
console.log("AXIOS ERROR: ",JSON.stringify(err));
})
}
这是我在服务器中得到的响应:
{
"message": "Request failed with status code 400","name": "Error","stack": "Error: Request failed with status code 400\n
at createError (/home/pi/nodejs/node_modules/axios/lib/core/createError.js:16:15)\n
at settle (/home/pi/nodejs/node_modules/axios/lib/core/settle.js:17:12)\n
at IncomingMessage.handleStreamEnd (/home/pi/nodejs/node_modules/axios/lib/adapters/http.js:260:11)\n
at IncomingMessage.emit (events.js:388:22)\n
at endReadableNT (internal/streams/readable.js:1336:12)\n
at processTicksAndRejections (internal/process/task_queues.js:82:21)","config": {
"url": "http://127.0.0.1:8123/api/services/tts/google_say?api_password=<MY_PASSWORD>","method": "post","data": "{\"entity_id\":\"media_player.david\",\"message\":\"Erste Stunde Fach Deutsch Lehrer Schemmer Raum Schemmer\"}","headers": {
"Accept": "application/json,text/plain,*/*","Content-Type": "application/json;charset=UTF-8","authorization": "Bearer <MY_TOKEN>","User-Agent": "axios/0.21.1","Content-Length": 103
},"transformRequest": [
null
],"transformResponse": [
null
],"timeout": 0,"xsrfCookieName": "XSRF-TOKEN","xsrfHeaderName": "X-XSRF-TOKEN","maxContentLength": -1,"maxBodyLength": -1
}
}
解决方法
我发现了我的错误。
我使用了错误的 api 链接
这是正确的调用方式。
function ttsGoogleHome(text) {
var ttsUrl = "http://127.0.0.1:8123/api/services/tts/google_translate_say?api_password=lolcraft"
var varToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiI1MzVmZGJiMTQ5NDQ0ZjBmYmM3NjA2MDgwNWQzYWU1ZSIsImlhdCI6MTYyNjMwMTk3NiwiZXhwIjoxOTQxNjYxOTc2fQ.FuM5960I-gO4o7prHuiqW5wvtSzNJFOBRmCT_LUk040"
var postData = `{"entity_id": "media_player.david","message": "${text}","language": "de"}`;
let axiosConfig = {
data: null,headers: {
'authorization': `Bearer ${varToken}`,'Content-Type': 'application/json',"Access-Control-Allow-Origin": "*",}
};
axios.post(ttsUrl,postData,axiosConfig)
.then((res) => {
console.clear();
console.info("RESPONSE RECEIVED: ",JSON.stringify(res));
})
.catch((err) => {
console.clear();
console.error("AXIOS ERROR: ",JSON.stringify(err));
})
}
还有我的configuration.yaml
:
# Configure a default steup of Home Assistant (frontend,api,etc)
# Text to speech
tts:
- platform: google_translate
- language: "de"
- service_name: google_say
-base_url: http://192.168.0.176:8123
group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
homeassistant:
auth_providers:
- type: legacy_api_password
api_password: !secret http_password
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。