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:欢迎对这个库的贡献!

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

编辑推荐精选

商汤小浣熊

商汤小浣熊

最强AI数据分析助手

小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。

imini AI

imini AI

像人一样思考的AI智能体

imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

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

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

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

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

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

Transly

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

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

讯飞智文

讯飞智文

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

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

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