nlsCppSdk/framework/feature/da/dialogAssistantRequest.h (79 lines of code) (raw):

/* * Copyright 2021 Alibaba Group Holding Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef NLS_SDK_DIALOG_ASSISTANT_REQUEST_H #define NLS_SDK_DIALOG_ASSISTANT_REQUEST_H #include "iNlsRequest.h" #include "nlsEvent.h" #include "nlsGlobal.h" namespace AlibabaNls { class DialogAssistantParam; class DialogAssistantCallback { public: DialogAssistantCallback(); ~DialogAssistantCallback(); void setOnTaskFailed(NlsCallbackMethod _event, void* para = NULL); void setOnRecognitionStarted(NlsCallbackMethod _event, void* para = NULL); void setOnRecognitionResultChanged(NlsCallbackMethod _event, void* para = NULL); void setOnRecognitionCompleted(NlsCallbackMethod _event, void* para = NULL); void setOnDialogResultGenerated(NlsCallbackMethod _event, void* para = NULL); void setOnWakeWordVerificationCompleted(NlsCallbackMethod _event, void* para = NULL); void setOnChannelClosed(NlsCallbackMethod _event, void* para = NULL); NlsCallbackMethod _onTaskFailed; NlsCallbackMethod _onRecognitionStarted; NlsCallbackMethod _onRecognitionCompleted; NlsCallbackMethod _onRecognitionResultChanged; NlsCallbackMethod _onDialogResultGenerated; NlsCallbackMethod _onWakeWordVerificationCompleted; NlsCallbackMethod _onChannelClosed; std::map<NlsEvent::EventType, void*> _paramap; }; class NLS_SDK_CLIENT_EXPORT DialogAssistantRequest : public INlsRequest { public: DialogAssistantRequest(int version = 0, const char* sdkName = "cpp", bool isLongConnection = false); ~DialogAssistantRequest(); /** * @brief 设置一句话识别服务URL地址 * @note 必填参数.默认为公网服务URL地址. * @param value 服务url字符串 * @return 成功则返回0,否则返回负值错误码 */ int setUrl(const char* value); /** * @brief 设置appKey * @note 必填参数, 请参照官网申请 * @param value appKey字符串 * @return 成功则返回0,否则返回负值错误码 */ int setAppKey(const char* value); /** * @brief 口令认证。所有的请求都必须通过SetToken方法认证通过,才可以使用 * @note token需要申请获取, 必填参数 * @param value 申请的token字符串 * @return 成功则返回0,否则返回负值错误码 */ int setToken(const char* value); /** * @brief 设置Token的超期时间 * @note 启用预连接池功能才有效, 用于刷新预连接池内部的节点. 如果不设置, * 则按照加入预连接池时间戳+12h为超期时间. * @param value Unix时间戳, 单位ms. 为Token创建时间获得. * @return 成功则返回0,否则返回负值错误码 */ int setTokenExpirationTime(uint64_t value); /** * @brief 设置音频数据编码格式字段Format * @param value 可选参数, 目前支持pcm|opus|opu. 默认是pcm * @return 成功则返回0,否则返回负值错误码 */ int setFormat(const char* value); /** * @brief 设置字段sample_rate * @param value 可选参数. 目前支持16000, 8000. 默认是16000 * @return 成功则返回0,否则返回负值错误码 */ int setSampleRate(int value); /** * @brief 设置链接超时时间 * @param value 超时时间(ms), 默认500ms. 内部会以value(ms)尝试4次链接. * @return 成功则返回0,否则返回负值错误码 */ int setTimeout(int value); /** * @brief 设置接收超时时间 * @param value 超时时间(ms), 默认15000ms * @return 成功则返回0,否则返回负值错误码 */ int setRecvTimeout(int value); /** * @brief 设置发送超时时间 * @param value 超时时间(ms), 默认5000ms * @return 成功则返回0,否则返回负值错误码 */ int setSendTimeout(int value); /** * @brief 设置输出文本的编码格式 * @param value 编码格式 UTF-8 or GBK * @return 成功则返回0,否则返回负值错误码 */ int setOutputFormat(const char* value); /** * @brief 对话服务的会话ID. * @note 必填参数 * @param sessionId 会话ID * @return 成功则返回0,否则返回负值错误码 */ int setSessionId(const char* sessionId); /** * @brief 对话参数. * @note 可选参数 * @param value 待定 * @return 成功则返回0,否则返回负值错误码 */ int setQueryParams(const char* value); /** * @brief 对话附加信息. * @note 可选参数 * @param value 附加信息 * @return 成功则返回0,否则返回负值错误码 */ int setQueryContext(const char* value); /** * @brief 对话的输入文本. * @note 调用sendExecuteDialog()时必填.调用start()时, 不用填写. * @param value 输入文本 * @return 成功则返回0,否则返回负值错误码 */ int setQuery(const char* value); /** * @brief 参数设置 * @note 暂不对外开放 * @param value 参数. * @return 成功则返回0,否则返回负值错误码 */ int setPayloadParam(const char* value); /** * @brief 设置用户自定义参数 * @param value 参数 * @return 成功则返回0,否则返回负值错误码 */ int setContextParam(const char* value); /** * @brief 是否对语音唤醒进行云端确认. 可选, 默认是false. * @param value 参数 * @return 成功则返回0,否则返回负值错误码 */ int setEnableWakeWordVerification(bool value); /** * @brief 客户端检测到的唤醒词. * @note setEnableWakeWordVerification如果设置为true, 此参数必须设置 * @param value 参数 * @return 成功则返回0, 否则返回负值错误码. */ int setWakeWord(const char* value); /** * @brief 唤醒词服务的模型名称. 可选. * @note setEnableWakeWordVerification如果设置为true, 此参数必须设置 * @param value 参数 * @return 成功则返回0, 否则返回负值错误码. */ int setWakeWordModel(const char* value); /** * @brief 设置用户自定义ws阶段http header参数 * @param key 参数名称 * @param value 参数内容 * @return 成功则返回0,否则返回负值错误码 */ int AppendHttpHeaderParam(const char* key, const char* value); /** * @brief 启动DialogAssistantRequest * @note 异步操作。成功返回started事件。失败返回TaskFailed事件。 * @return 成功则返回0,否则返回负值错误码 */ int start(); /** * @brief 会与服务端确认关闭,正常停止DialogAssistantRequest链接操作 * @note 异步操作。失败返回TaskFailed。 * @return 成功则返回0,否则返回负值错误码 */ int stop(); /** * @brief 直接关闭DialogAssistantRequest链接. * @note 调用cancel之后不会返回任何回调事件。 * @return 成功则返回0,否则返回负值错误码 */ int cancel(); /** * @brief 会与服务端确认关闭,正常停止DialogAssistantRequest链接操作 * @note 阻塞操作,等待服务端响应才会返回 * @return 成功则返回0,否则返回负值错误码 */ int StopWakeWordVerification(); /** * @brief 启用文本进, 文本出 * @return 成功则返回0,失败返回负值错误码 */ int queryText(); /** * @brief 发送语音数据 * @note 异步操作。request * @param data 语音数据 * @param dataSize 语音数据长度(建议每次100ms左右数据, 且推荐少于16K字节) * @param type ENCODER_NONE 表示原始音频进行传递, 建议每次100ms音频数据,支持16K和8K; ENCODER_OPU 表示以定制OPUS压缩后进行传递, 建议每次大于20ms音频数据(即大于640bytes), 格式要求16K16b1c ENCODER_OPUS 表示以OPUS压缩后进行传递, 强烈建议使用此类型, 建议每次大于20ms音频数据(即大于640/320bytes), 支持16K16b1c和8K16b1c * @return 成功则返回字节数(可能为0,即留下包音频数据再发送),失败返回负值,查看nlsGlobal.h中错误码详细定位。 */ int sendAudio(const uint8_t* data, size_t dataSize, ENCODER_TYPE type = ENCODER_NONE); /** * @brief 获得当前请求的全部运行信息 * @note *{ * "block": { * // 表示调用了stop, 已经运行了10014ms, 阻塞 * "stop": "running", * "stop_duration_ms": 10014, * "stop_timestamp": "2024-04-26_15:19:44.783" * }, * "callback": { * // 表示回调SentenceBegin阻塞 * "name": "SentenceBegin", * "start": "2024-04-26_15:15:25.607", * "status": "running" * }, * "data": { * "recording_bytes": 183764, * "send_count": 288 * }, * "last": { * "action": "2024-04-26_15:15:30.897", * "send": "2024-04-26_15:15:30.894", * "status": "NodeStop" * }, * "timestamp": { * "create": "2024-04-26_15:15:24.862", * "start": "2024-04-26_15:15:24.862", * "started": "2024-04-26_15:15:25.124", * "stop": "2024-04-26_15:15:30.897" * } *} * @return */ const char* dumpAllInfo(); /** * @brief 设置错误回调函数 * @note 在请求过程中出现错误时, sdk内部线程上报该回调. * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void */ void setOnTaskFailed(NlsCallbackMethod _event, void* para = NULL); /** * @brief 设置语音助手开始回调函数 * @note 用于通知客户端服务端已准备好接受音频数据. * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void */ void setOnRecognitionStarted(NlsCallbackMethod _event, void* para = NULL); /** * @brief 用于通知客户端, 随着语音数据增多, 语音识别结果发生了变化. * 客户端可以根据这个事件更新UI状态 * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void */ void setOnRecognitionResultChanged(NlsCallbackMethod _event, void* para = NULL); /** * @brief 用于通知客户端识, 最终的识别结果已经确定, 不会再发生变化. * 客户端可以根据这个事件更新UI状态 * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void */ void setOnRecognitionCompleted(NlsCallbackMethod _event, void* para = NULL); /** * @brief 用于通知客户端用户的意图已经被确认 * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void */ void setOnDialogResultGenerated(NlsCallbackMethod _event, void* para = NULL); /** * @brief 用于语音唤醒的二次确认 * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void */ void setOnWakeWordVerificationCompleted(NlsCallbackMethod _event, void* para = NULL); /** * @brief 设置通道关闭回调函数 * @note 在请求过程中通道关闭时, sdk内部线程上报该回调. * @param _event 回调方法 * @param para 用户传入参数, 默认为NULL * @return void */ void setOnChannelClosed(NlsCallbackMethod _event, void* para = NULL); void setEnableMultiGroup(bool value); private: DialogAssistantParam* _dialogAssistantParam; DialogAssistantCallback* _callback; INlsRequestListener* _listener; }; } // namespace AlibabaNls #endif // NLS_SDK_DIALOG_ASSISTANT_REQUEST_H