value); } return new self(message: $message); } /** * 从错误枚举创建 */ public static function fromError(VoiceMessage $error): self { return new self(errorMessage: $error); } /** * 设置语音消息 */ public function withMessage(string|VoiceMessage $message): self { $msg = $message instanceof VoiceMessage ? $message->value : $message; return new self( message: $msg, errorMessage: $this->errorMessage, expectedNextStep: $this->expectedNextStep, templateParams: $this->templateParams ); } /** * 设置错误消息 */ public function withError(VoiceMessage $error): self { return new self( message: $this->message, errorMessage: $error, expectedNextStep: $this->expectedNextStep, templateParams: $this->templateParams ); } /** * 设置期望下一步 */ public function withExpectedNextStep(VoiceMessage $expected): self { return new self( message: $this->message, errorMessage: $this->errorMessage, expectedNextStep: $expected, templateParams: $this->templateParams ); } /** * 添加语音前缀 */ public function prependMessage(string $prefix): self { return new self( message: $prefix . $this->message, errorMessage: $this->errorMessage, expectedNextStep: $this->expectedNextStep, templateParams: $this->templateParams ); } /** * 设置模板参数 */ public function withTemplateParams(array $params): self { return new self( message: $this->message, errorMessage: $this->errorMessage, expectedNextStep: $this->expectedNextStep, templateParams: $params ); } /** * 获取完整语音(优先返回 message,否则返回 errorMessage) */ public function getFullVoice(): string { if (!empty($this->message)) { return $this->message; } return $this->errorMessage->value; } /** * 是否有错误 */ public function hasError(): bool { return $this->errorMessage !== VoiceMessage::NONE; } /** * 是否有期望下一步提示 */ public function hasExpectedNextStep(): bool { return $this->expectedNextStep !== VoiceMessage::NONE; } /** * 转换为数组 */ public function toArray(): array { return [ 'message' => $this->message, 'errorMessage' => $this->errorMessage->name, 'expectedNextStep' => $this->expectedNextStep->name, 'templateParams' => $this->templateParams, ]; } }