vonage-ruby-sdk

vonage-ruby-sdk

Ruby SDK 助力开发者轻松集成 Vonage 通信功能

Vonage Ruby SDK 为开发者提供了便捷的通信 API 集成解决方案。该 SDK 支持 API 密钥和 JWT 等多种认证方式,涵盖消息发送、验证和语音通话等核心功能。此外,它还集成了日志记录、异常处理和分页等实用特性,有助于提高通信应用的开发效率。

VonageRuby SDKAPI认证WebhookGithub开源项目

Vonage Ruby 服务器 SDK

Gem 版本 覆盖率状态 codecov

<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/fb309bf6-873b-47d9-ae5e-80d2ac40a204.svg" height="48px" alt="Nexmo 现已更名为 Vonage" />

这是 Vonage API 的 Ruby 服务器 SDK。要使用它,您需要一个 Vonage 账户。在 vonage.com 免费注册

要求

Vonage Ruby 支持 MRI/CRuby(2.5 或更新版本)、JRuby(9.2.x)和 Truffleruby。

安装

使用 Rubygems 安装 Ruby 服务器 SDK:

gem install vonage

或者您可以克隆存储库:

git clone git@github.com:Vonage/vonage-ruby-sdk.git

使用

首先引入 Vonage 库:

require 'vonage'

然后使用您的密钥和密码构造一个客户端对象:

client = Vonage::Client.new(api_key: 'YOUR-API-KEY', api_secret: 'YOUR-API-SECRET')

现在您可以使用客户端对象调用 Vonage API。例如,发送短信:

client.sms.send(from: 'Ruby', to: '447700900000', text: 'Hello world')

在生产环境中,您可以指定 VONAGE_API_KEYVONAGE_API_SECRET 环境变量,而不是显式指定密钥和密码,以保护您的凭据不被纳入源代码控制。

对于使用 JWT 进行认证的 API,您还需要向 Client 构造函数传递 application_idprivate_key 参数,除了或替代 api_keyapi_secret。请参阅 JWT 认证

也可以在 Client 实例化时覆盖默认主机。请参阅 覆盖默认主机

JWT 认证

要调用支持 JWT 认证的较新端点,如语音 API 和消息 API,您还需要指定 application_idprivate_key 选项。例如:

client = Vonage::Client.new(application_id: application_id, private_key: private_key)

这两个参数的值应为字符串,对应于"创建应用程序"响应中返回的 idprivate_key 值。这些凭据可以存储在数据库中、环境变量中、源代码控制之外的磁盘上,或某种密钥管理基础设施中。

默认情况下,库为每个请求生成一个短期 JWT。要生成用于多个请求的长期 JWT 或直接指定 JWT 声明,请使用 Vonage::JWT.generate 和 token 选项。例如:

claims = { application_id: application_id, private_key: 'path/to/private.key', nbf: 1483315200, ttl: 800 } token = Vonage::JWT.generate(claims) client = Vonage::Client.new(token: token)

Vonage Ruby JWT 生成器 gem 的文档可以在这里找到:https://www.rubydoc.info/gems/vonage-jwt

该文档概述了所有可用于自定义和构建令牌的可能参数。

日志记录

使用 logger 选项指定记录器。例如:

require 'logger' logger = Logger.new(STDOUT) client = Vonage::Client.new(logger: logger)

默认情况下,如果定义了 Rails.logger,库会将记录器设置为它。

要禁用日志记录,将记录器设置为 nil

异常

当异常由 Vonage API 的错误响应引起时(HTTP 响应不在 2xx3xx 范围内),Net::HTTPResponse 对象将作为 Exception 对象的属性通过 http_response getter 方法可用(如果没有与异常相关的 Net::HTTPResponse 对象,http_response 的值将为 nil)。

您可以捕获异常以访问 http_response,并使用为响应特定部分提供的其他 getter。例如:

begin verification_request = client.verify2.start_verification( brand: 'Acme', workflow: [{channel: 'sms', to: '44700000000'}] ) rescue Vonage::APIError => error if error.http_response error.http_response # => #<Net::HTTPUnauthorized 401 Unauthorized readbody=true> error.http_response_code # => "401" error.http_response_headers # => {"date"=>["Sun, 24 Sep 2023 11:08:47 GMT"], ...其余头部} error.http_response_body # => {"title"=>"Unauthorized", ...其余正文} end end

对于某些旧版 API 产品,如 SMS APIVerify v1 APINumber Insight v1 API,即使在存在 API 相关错误的情况下也会收到 200 响应。对于在这些情况下引发的异常,Vonage::Response 对象(而不是 Net::HTTPResponse 对象)将作为异常的属性通过 response getter 方法可用。此对象的属性将取决于 API 端点提供的响应数据。例如:

begin sms = client.sms.send( from: 'Vonage', to: '44700000000', text: 'Hello World!' ) rescue Vonage::Error => error if error.is_a? Vonage::ServiceError error.response # => #<Vonage::Response:0x0000555b2e49d4f8> error.response.messages.first.status # => "4" error.response.messages.first.error_text # => "Bad Credentials" error.response.http_response # => #<Net::HTTPOK 200 OK readbody=true> end end

覆盖默认主机

要覆盖SDK用于HTTP请求的默认主机,你需要在客户端配置中指定api_hostrest_host或两者。例如:

client = Vonage::Client.new( api_host: 'api-sg-1.nexmo.com', rest_host: 'rest-sg-1.nexmo.com' )

默认情况下,主机分别设置为api.nexmo.comrest.nexmo.com

Webhook签名

某些Vonage API提供签名webhooks作为验证webhooks来源的方法。具体的签名机制因API而异。

请求体中的签名

SMS API使用哈希摘要对webhook请求进行签名。这被分配给请求体中的sig参数。

你可以使用Vonage::SMS#verify_webhook_sig方法验证webhook请求。除了接收到的webhook的请求参数外,该方法还需要访问与Vonage帐户关联的签名密钥(可从Vonage仪表板获得),以及用于签名的签名方法(例如sha512),这同样基于仪表板中的设置。

有几种不同的方法可以向该方法提供这些值:

  1. 将所有值传递给方法调用。
client = Vonage::Client.new client.sms.verify_webhook_sig( webhook_params: params, signature_secret: 'secret', signature_method: 'sha512' ) # => 如果签名有效则返回true,否则返回false
  1. Client实例化时设置signature_secretsignature_method
client = Vonage::Client.new( signature_secret: 'secret', signature_method: 'sha512' ) client.sms.verify_webhook_sig(webhook_params: params) # => 如果签名有效则返回true,否则返回false
  1. Config对象上设置signature_secretsignature_method
client = Vonage::Client.new client.config.signature_secret = 'secret' client.config.signature_method = 'sha512' client.sms.verify_webhook_sig(webhook_params: params) # => 如果签名有效则返回true,否则返回false
  1. signature_secretsignature_method设置为名为VONAGE_SIGNATURE_SECRETVONAGE_SIGNATURE_METHOD的环境变量
client = Vonage::Client.new client.sms.verify_webhook_sig(webhook_params: params) # => 如果签名有效则返回true,否则返回false

注意: SMS API的webhook签名默认情况下未开启。你需要联系support@vonage.com以在你的帐户上启用消息签名。

头部中的签名JWT

Voice APIMessages API都在其webhook请求中包含一个Authorization头。该头的值包括一个使用与你的Vonage帐户关联的签名密钥签名的JSON Web Token (JWT)。

Vonage::VoiceVonage::Messaging类都定义了一个verify_webhook_token方法,可用于验证在webhook Authorization头中接收到的JWT。

要验证JWT,你首先需要从Authorization头中提取它。头的值看起来类似于以下内容:

"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE1OTUyN" # 为简洁起见,省略了令牌的其余部分

注意:我们只对令牌本身感兴趣,它在单词Bearer和空格之后。

一旦你提取了令牌,你可以将其传递给verify_webhook_token方法以验证它。

该方法还需要访问与Vonage帐户关联的签名密钥(可从Vonage仪表板获得)。有几种不同的方法可以向该方法提供这个值:

  1. 将所有值传递给方法调用。
client = Vonage::Client.new client.voice.verify_webhook_token( token: extracted_token, signature_secret: 'secret' ) # => 如果令牌有效则返回true,否则返回false
  1. Client实例化时设置signature_secret
client = Vonage::Client.new( signature_secret: 'secret' ) client.voice.verify_webhook_token(token: extracted_token) # => 如果令牌有效则返回true,否则返回false
  1. Config对象上设置signature_secret
client = Vonage::Client.new client.config.signature_secret = 'secret' client.config.signature_method = 'sha512' client.voice.verify_webhook_token(token: extracted_token) # => 如果令牌有效则返回true,否则返回false
  1. signature_secret设置为名为VONAGE_SIGNATURE_SECRET的环境变量
client = Vonage::Client.new client.voice.verify_webhook_token(token: extracted_token) # => 如果令牌有效则返回true,否则返回false

分页

Vonage API对列表请求进行分页。这意味着如果请求的集合大于API默认值,API将返回集合中的第一页项目。Ruby SDK提供了一个auto_advance参数,它将遍历所有页面并在一个响应对象中返回所有结果。

以下API的auto_advance参数默认设置为true

要修改auto_advance行为,你可以在方法中指定它:

client.applications.list(auto_advance: false)

Messages API

Vonage Messages API允许你通过多个不同的渠道发送消息,以及每个渠道内的各种消息类型。请查看Vonage开发者文档以获取列出所有渠道和消息类型组合的完整API参考。 Ruby SDK 允许您为特定的消息渠道构建消息数据。除了短信(只有一种类型 -- 文本)之外,您需要将消息的:type以及:message本身作为参数传递给相应的消息方法,同时还可以根据需要传递任何可选属性。

# 创建短信消息 message = Vonage::Messaging::Message.sms(message: 'Hello world!') # 创建 WhatsApp 文本消息 message = Vonage::Messaging::Message.whatsapp(type: 'text', message: 'Hello world!') # 创建 WhatsApp 图片消息 message = Vonage::Messaging::Message.whatsapp(type: 'image', message: { url: 'https://example.com/image.jpg' }) # 创建带有可选属性的 MMS 音频消息 message = Vonage::Messaging::Message.mms(type: 'audio', message: { url: 'https://example.com/audio.mp3' }, opts: {client_ref: "abc123"})

一旦创建了消息数据,您就可以发送该消息。

response = client.messaging.send(to: "447700900000", from: "447700900001", **message)

Verify API v2

Vonage Verify API v2 允许您通过多种不同的渠道(如短信、WhatsApp、WhatsApp 交互式、语音、电子邮件和静默认证)管理双因素认证验证流程,可以单独使用或组合使用这些渠道。请参阅 Vonage 开发者文档以获取完整的 API 参考,其中列出了所有的渠道、验证选项和回调类型。

Ruby SDK 提供了两种与 Verify v2 API 交互的方法:

  • Verify2#start_verification:启动新的验证请求。在这里,您可以为请求指定选项和要使用的工作流程。
  • Verify2#check_code:对于向最终用户发送一次性代码的渠道,此方法用于根据由 start_verification 方法创建的验证请求的 request_id 验证代码。

创建 Verify2 对象

verify = client.verify2

发起验证请求

对于简单的请求,您可能更喜欢手动设置 workflow 的值(一个或多个包含特定渠道设置的哈希数组)和任何可选参数。

带有必需的 :brand:workflow 参数的示例:

verification_request = verify.start_verification( brand: 'Acme', workflow: [{channel: 'sms', to: '447000000000'}] )

带有必需的 :brand:workflow 参数,以及可选的 code_length 的示例:

verification_request = verify.start_verification( brand: 'Acme', workflow: [{channel: 'sms', to: '447000000000'}], code_length: 6 )

对于更复杂的请求(例如具有多个工作流程渠道或额外选项),或者要利用内置的输入验证,您可以使用 StartVerificationOptions 对象以及 Workflow 和各种渠道对象或 WorkflowBuilder

使用 StartVerificationOptions 对象创建选项

opts = verify.start_verification_options( locale: 'fr-fr', code_length: 6, client_ref: 'abc-123' ).to_h verification_request = verify.start_verification( brand: 'Acme', workflow: [{channel: 'email', to: 'alice.example.com'}], **opts )

使用 Workflow 和 Channel 对象创建工作流程

# 实例化一个 Workflow 对象 workflow = verify.workflow # 向工作流程添加渠道 workflow << workflow.sms(to: '447000000000') workflow << workflow.email(to: 'alice.example.com') # 渠道数据被封装在存储在 Workflow 列表数组中的渠道对象中 workflow.list # => [ #<Vonage::Verify2::Channels::SMS:0x0000561474a74778 @channel="sms", @to="447000000000">, #<Vonage::Verify2::Channels::Email:0x0000561474c51a28 @channel="email", @to="alice.example.com">] # 要在 `start_verification` 请求调用中将列表用作 `:workflow` 的值, # 必须将对象转换为哈希形式 workflow_list = workflow.hashified_list # => [{:channel=>"sms", :to=>"447000000000"}, {:channel=>"email", :to=>"alice.example.com"}] verification_request = verify.start_verification(brand: 'Acme', workflow: workflow_list)

使用 WorkflowBuilder 创建工作流程

workflow = verify.workflow_builder.build do |builder| builder.add_voice(to: '447000000001') builder.add_whatsapp(to: '447000000000') end workflow_list = workflow.hashified_list # => [{:channel=>"voice", :to=>"447000000001"}, {:channel=>"whatsapp", :to=>"447000000000"}] verification_request = verify.start_verification(brand: 'Acme', workflow: workflow_list)

取消请求

您可以取消正在进行的验证请求

# 从 `start_verification` 方法调用返回的 Vonage#Response 对象中获取 `request_id` request_id = verification_request.request_id verify.cancel_verification_request(request_id: request_id)

检查代码

# 从 `start_verification` 方法调用返回的 Vonage#Response 对象中获取 `request_id` request_id = verification_request.request_id # 通过用户输入获取一次性代码 # 例如,从表单输入的路由处理程序或控制器操作的参数中获取 code = params[:code] begin code_check = verify.check_code(request_id: request_id, code: code) rescue => error # 无效的代码将引发 Vonage::ClientError 类型的异常 end if code_check.http_response.code == '200' # 代码有效 end

Voice API

Vonage Voice API 允许您通过创建通话、流式传输音频、播放文字转语音、播放 DTMF 音调和其他操作来自动化语音交互。请参阅 Vonage 开发者文档以获取完整的 API 参考,其中列出了所有 Voice API 的功能。

Ruby SDK 提供了多种与 Voice v2 API 交互的方法。以下是使用 create 方法进行外呼文字转语音通话的示例:

response = client.voice.create( to: [{ type: 'phone', number: '447700900000' }], from: { type: 'phone', number: '447700900001' }, answer_url: [ 'https://raw.githubusercontent.com/nexmo-community/ncco-examples/gh-pages/text-to-speech.json' ] )

NCCO 构建器

Vonage语音API通过称为NCCO的JSON对象接受指令。每个NCCO可以由多个按书写顺序执行的操作组成。Vonage API开发者门户包含一个NCCO参考,其中提供了所有可能参数的说明和信息。

SDK包含一个NCCO构建器,您可以用它为您的语音API方法构建NCCO。

例如,要构建talkinput NCCO操作,然后将它们合并为单个NCCO,您可以执行以下操作:

talk = Vonage::Voice::Ncco.talk(text: 'Hello World!') input = Vonage::Voice::Ncco.input(type: ['dtmf'], dtmf: { bargeIn: true }) ncco = Vonage::Voice::Ncco.build(talk, input) # => [{:action=>"talk", :text=>"Hello World!"}, {:action=>"input", :type=>["dtmf"], :dtmf=>{:bargeIn=>true}}]

构建好NCCO后,您可以在语音API请求中使用它:

response = client.voice.create({ to: [{type: 'phone', number: '14843331234'}], from: {type: 'phone', number: '14843335555'}, ncco: ncco })

文档

Vonage Ruby SDK文档:https://www.rubydoc.info/gems/vonage

Vonage Ruby SDK代码示例:https://github.com/Vonage/vonage-ruby-code-snippets

Vonage APIs API参考:https://developer.vonage.com/api

支持的API

以下是Ruby SDK当前支持的Vonage API列表:

* SDK部分支持主动连接API。具体来说,支持事件、项目和列表端点。

其他SDK和工具

您可以在我们的开发者门户上找到有关其他Vonage SDK和工具的信息。

许可证

该库在Apache 2.0许可证下发布

欢迎贡献!

我们:heart:欢迎对这个库的贡献!

如果您计划添加任何新功能,最好先与我们沟通。 否则,我们始终欢迎错误报告错误修复以及对库的反馈。

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多