You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何将AVAYA电话系统返回的错误字符串拆分为可读语句

AVAYA电话系统返回错误的解析方案

报文格式规律梳理

明确返回内容的固定结构是解析的核心依据:

  • 首行是用户执行的操作命令,示例中为cadd hunt-group 109(添加寻线组109的操作)
  • 所有有效错误条目均以e+数字开头,每行对应一条独立错误
  • 单条错误行的结构固定:错误码 8位十六进制状态码 4位十六进制状态码 [可选的双引号包裹的分机号] 错误描述文本
  • 末尾单独的t是系统返回结束的标记,无实际业务含义

解析实现思路

不需要拆分所有单词,按固定格式匹配即可:

  1. 预处理:将原始返回按\n拆分,过滤空行、首尾冗余引号、回车符,再剔除末尾的结束标记t
  2. 提取首行作为执行的操作命令存储
  3. 遍历剩余错误行,用正则匹配固定结构的各个字段即可

C# 实现示例(匹配你此前的C#开发场景)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

// 解析结果存储结构
public class AvayaCommandResult
{
    /// <summary>
    /// 执行的AVAYA操作命令
    /// </summary>
    public string ExecutedCommand { get; set; }
    /// <summary>
    /// 返回的错误列表
    /// </summary>
    public List<AvayaErrorItem> Errors { get; set; } = new();
}

public class AvayaErrorItem
{
    /// <summary>
    /// 错误码 e2/e3等
    /// </summary>
    public string ErrorCode { get; set; }
    /// <summary>
    /// 十六进制状态码1
    /// </summary>
    public string HexStatusCode1 { get; set; }
    /// <summary>
    /// 十六进制状态码2
    /// </summary>
    public string HexStatusCode2 { get; set; }
    /// <summary>
    /// 关联的分机号(可选)
    /// </summary>
    public string RelatedExtension { get; set; }
    /// <summary>
    /// 原始错误描述
    /// </summary>
    public string ErrorMessage { get; set; }
    /// <summary>
    /// 错误描述中文
    /// </summary>
    public string ErrorMessageCn => ErrorCode switch
    {
        "e3" => "分机号已被分配,请选择其他分机号",
        "e2" => "必须指定组分机号",
        _ => ErrorMessage
    };
}

public static class AvayaErrorParser
{
    // 预编译正则,分组依次匹配错误码、状态码1、状态码2、可选分机号、错误描述
    private static readonly Regex _errorLineRegex = new Regex(@"^(e\d+)\s+([0-9a-fA-F]{8})\s+([0-9a-fA-F]{4})\s+(?:""([^""]+)""\s+)?(.*)$", RegexOptions.Compiled);

    public static AvayaCommandResult Parse(string rawResponse)
    {
        var result = new AvayaCommandResult();
        if (string.IsNullOrWhiteSpace(rawResponse)) return result;

        // 拆分+清洗行数据
        var allLines = rawResponse.Split('\n')
            .Select(l => l.Trim(' ', '"', '\r'))
            .Where(l => !string.IsNullOrWhiteSpace(l))
            .ToList();

        if (!allLines.Any()) return result;

        // 提取首行命令
        result.ExecutedCommand = allLines[0];

        // 处理错误行,跳过结束标记t
        var errorLines = allLines.Skip(1).Where(l => l != "t");
        foreach (var line in errorLines)
        {
            var match = _errorLineRegex.Match(line);
            if (!match.Success) continue;

            result.Errors.Add(new AvayaErrorItem
            {
                ErrorCode = match.Groups[1].Value,
                HexStatusCode1 = match.Groups[2].Value,
                HexStatusCode2 = match.Groups[3].Value,
                RelatedExtension = match.Groups[4].Success ? match.Groups[4].Value.Trim() : null,
                ErrorMessage = match.Groups[5].Value.Trim()
            });
        }

        return result;
    }
}

解析效果示例

用你给出的原始报文测试,解析后结果为:

  • 执行命令:cadd hunt-group 109
  • 错误列表:
    1. 错误码e3,关联分机号34257,错误描述:分机号已被分配,请选择其他分机号
    2. 错误码e2,无关联分机号,错误描述:必须指定组分机号

内容的提问来源于stack exchange,提问作者DaveM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:24:09