我正在使用Swift gRPC库(它好奇地未在gRPC的网站上列出,但它有一个GitHub repo)构建了针对macOS的Google Assistant SDK的实现。我已经获得了我的OAuth2凭据和令牌,并且正在尝试发起初始请求以开始对话,但它未能这样做。如何验证Assistant SDK的gRPC调用?
我总是得到错误Google_Assistant_Embedded_V1Alpha1_EmbeddedAssistantClientError error 1.)
和gRPC.CallError error 1.
我跑Wireshark的尝试和调试的问题,我看到我的电脑是尝试建立连接,但最终还是结束了中止连接。我认为这可能是由于TLS问题引起的,但我不确定实际情况是否如此,或者如何解决该问题。
我注意到,您可以指定证书的服务初始化函数具有过载,但我不知道要放什么东西在那里(或者,如果需要在所有使用该功能)
typealias AssistantService = Google_Assistant_Embedded_V1Alpha1_EmbeddedAssistantService
typealias AssistantCall = Google_Assistant_Embedded_V1Alpha1_EmbeddedAssistantConverseCall
typealias AudioInConfig = Google_Assistant_Embedded_V1alpha1_AudioInConfig
typealias AudioOutConfig = Google_Assistant_Embedded_V1alpha1_AudioOutConfig
typealias ConverseRequest = Google_Assistant_Embedded_V1alpha1_ConverseRequest
typealias ConverseConfig = Google_Assistant_Embedded_V1alpha1_ConverseConfig
var service: AssistantService?
var currentCall: AssistantCall?
public init() {
service = AssistantService(address: Constants.ASSISTANT_API_ENDPOINT)
let token = "Bearer \(UserDefaults.standard.string(forKey: Constants.AUTH_TOKEN_KEY)!)"
service?.metadata = Metadata(["authorization" : token])
}
func initiateRequest() {
var request = ConverseRequest()
request.config = ConverseConfig()
var audioInConfig = AudioInConfig()
audioInConfig.sampleRateHertz = 16000
audioInConfig.encoding = .linear16
request.config.audioInConfig = audioInConfig
var audioOutConfig = AudioOutConfig()
audioOutConfig.sampleRateHertz = 16000
audioOutConfig.encoding = .linear16
audioOutConfig.volumePercentage = 50
request.config.audioOutConfig = audioOutConfig
do {
currentCall = try service?.converse(completion: { result in
print("Result code \(result.statusCode)")
print("Result description \(result.description)")
print("Metadata \(String(describing: result.initialMetadata))")
print("Status message \(result.statusMessage ?? "Error")")
print("Obj description \(String(describing: result))")
print("result \(result)")
})
try currentCall?.send(request) { err in
print("Error in initial request: \(err)")
}
} catch {
print("Initial error \(error)")
}
}
是的,我确实已将API端点设置为该URL。 (我隐藏了屏幕截图以隐藏我的IP)。对于验证令牌,我每次刷新它都会刷新它。此外,您认为auth信息的“基本”部分是什么? – vanshg
哎呀。大脑 - 我的一部分。意思是“承载者”,这个问题已得到解决。 – Prisoner
不幸的是,删除“承载者”似乎也不能解决问题 – vanshg