奕玖科技 > 新闻中心 > 技术文章

阿里云语音服务IvrCall asp.net core 的接入方法

来源: 奕玖科技 Fly | 2025/8/27 11:23:50

最近因为有客户需要接入语音服务(在线打电话),综合了市面上的产品,最后还是选择了阿里云的语音服务。阿里云的业务比较广泛,说实话找官网的SDK文档确实很浪费时间,其实接入并不复杂,但是官网的SDK示例并不是完全的契合asp.net core还是需要自己改造代码的,但是在改造代码的时候我因为是直接通过NuGet 安装的AlibabaCloud.SDK.DyvmsApi20170525,改造好的代码一直提示:MissingMethodException: Method not found: 'Void Aliyun.Credentials.Client..ctor(Aliyun.Credentials.Models.Config)'. 搞的我一直以为是自己的代码有问题,白白浪费了好几天。所以我这里还是推荐大家通过官网的SDK给出的dotnet add package AlibabaCloud.SDK.Dyvmsapi20170525 --version 3.2.2命令来安装。正确安装完成后的截图如下

安装好了阿里云的SDK然后在Program.cs注册/配置一下IvrCall 的单例服务。代码如下

// 注册IVR客户端
builder.Services.AddSingLeton<Client>(sp =>
{
    // 工程代码建议使用更安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378671.html。
    Aliyun.Credentials.Client credential = new Aliyun.Credentials.Client(
         new Aliyun.Credentials.Models.Config()
         {
             Type = "access_key",
             AccessKeyId = "AccessKeyId ",
             AccessKeySecret = "AccessKeyId "

         }
        );
    AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
    {
        Credential = credential,
    };
    // Endpoint 请参考 https://api.aliyun.com/product/Dyvmsapi
    config.Endpoint = "dyvmsapi.aliyuncs.com";
    return new AlibabaCloud.SDK.Dyvmsapi20170525.Client(config);

});

我这里使用的是明文写入AccessKeyId,您也可以根据实际情况按照选择更安全的方式。

然后我们开始正式编写发送代码了,您也可以通过IvrCall_云通信语音服务_API调试-阿里云OpenAPI开发者门户调试好发送代码的各项参数。我写的函数如下

    public class HomeController(Client ivrClient) : Controller
    {
        private readonly Client _ivrClient = ivrClient;

        /// <summary>
        /// 发起IVR呼叫
        /// </summary>
        /// <param name="request">IVR呼叫参数 https://next.api.aliyun.com/api/Dyvmsapi/2017-05-25/IvrCall?RegionId=cn-hangzhou</param>
        /// <returns>呼叫结果</returns>
        [HttpPost]
        [HttpGet]
        [Route("/Call/")]
        public Async Task<IActionResult> Call(IvrCallRequest request)
        {
            AlibabaCloud.SDK.Dyvmsapi20170525.Client client = _ivrClient;
            AlibabaCloud.SDK.Dyvmsapi20170525.Models.IvrCallRequest.IvrCallRequestMenuKeyMap menuKeyMap0 = new AlibabaCloud.SDK.Dyvmsapi20170525.Models.IvrCallRequest.IvrCallRequestMenuKeyMap
            {
                Key = "1",
                Code = "TTS_xxxx",
            };
            AlibabaCloud.SDK.Dyvmsapi20170525.Models.IvrCallRequest.IvrCallRequestMenuKeyMap menuKeyMap1 = new AlibabaCloud.SDK.Dyvmsapi20170525.Models.IvrCallRequest.IvrCallRequestMenuKeyMap
            {
                Key = "0",
                Code = "TTS_xxxx",
            };
            AlibabaCloud.SDK.Dyvmsapi20170525.Models.IvrCallRequest ivrCallRequest = new AlibabaCloud.SDK.Dyvmsapi20170525.Models.IvrCallRequest
            {
                CalledShowNumber = "05715xxx172",
                CalledNumber = "1906xxxx955",
                StartCode = "TTS_xxx",
                StartTtsParams = "{\"address\":\"资溪县\",\"times\":\"2012年12月30日\",\"hour\":\"3\"}",
                OutId = "fdf",
                MenuKeyMap = new List<AlibabaCloud.SDK.Dyvmsapi20170525.Models.IvrCallRequest.IvrCallRequestMenuKeyMap>
                {
                    menuKeyMap0,
                    menuKeyMap1
                },
            };
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            try
            {
                // 复制代码运行请自行打印 API 的返回值
                Var response = Await client.IvrCallWithOptionsAsync(ivrCallRequest, runtime);
                return Ok(new
                {
                    Success = true,
                    response.Body.RequestId,
                    response.Body.Code,
                    response.Body.Message
                });
            }
            catch (TeaException error)
            {
                // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
                // 错误 message
                Console.WriteLine(error.Message);
                // 诊断地址
                Console.WriteLine(error.Data["Recommend"]);

                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);

                return Ok(new
                {
                    error.Message
                });

        
            }
            catch (Exception _error)
            {
                TeaException error = new TeaException(new Dictionary<string, object>
                {
                    { "message", _error.Message }
                });
                // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
                // 错误 message
                Console.WriteLine(error.Message);
                // 诊断地址
                Console.WriteLine(error.Data["Recommend"]);
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                return Ok(new
                {
                    _error.Message
                });
            }

        }
    }

打开测试,电话拨打成功。我着唯一的坑就是安装sdk的时候,可能是选错sdk或则什么原因,一直报错,最后还是把所有的sdk删除,然后通过命令行的方式安装了sdk才正常,具体原因也不清楚。

栏目导航
相关文章
文章标签
关于我们
公司简介
企业文化
资质荣誉
服务项目
高端网站定制
微信小程序开发
SEO排名推广
新闻动态
行业新闻
技术学院
常见问题
联系我们
联系我们
人才招聘
联系方式
Q Q:24722
微信:24722
电话:13207941926
地址:江西省抚州市赣东大道融旺国际3栋
Copyright©2008-2022 抚州市奕玖科技有限公司 备案号:赣ICP备2022010182号-1