Skip to content

Commit 131be52

Browse files
authored
DEVX-8749: Add Verify v2 Custom Templates (#318)
* Adding Templates and Template Fragments to Verify2 implementation
1 parent 68ff52b commit 131be52

File tree

11 files changed

+520
-1
lines changed

11 files changed

+520
-1
lines changed

Diff for: CHANGES.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# 7.28.0
2+
3+
* Adds templates and template fragments to the Verify v2 implementation. [#318](https://github.com/Vonage/vonage-ruby-sdk/pull/318)
4+
15
# 7.27.1
26

37
* Fixes a bug with setting options on the HTTP client. [#319](https://github.com/Vonage/vonage-ruby-sdk/pull/319)

Diff for: README.md

+60
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,66 @@ if code_check.http_response.code == '200'
488488
end
489489
```
490490

491+
### Working with Verify Custom Templates and Template Fragments
492+
493+
Verify custom templates allow you to customize the message sent to deliver an OTP to your users, rather than using the default Vonage templates. See the [Template Management Guide document](https://developer.vonage.com/en/verify/guides/custom-templates) for more information.
494+
495+
#### Templates
496+
497+
```ruby
498+
# Get a list of all templates
499+
template_list = verify.templates.list
500+
501+
# Get details of a specific template
502+
template = verify.templates.info(template_id: '8f35a1a7-eb2f-4552-8fdf-fffdaee41bc9')
503+
504+
# Create a new template
505+
verify.templates.create(name: 'my-template')
506+
507+
# Update an existing template
508+
verify.templates.update(
509+
template_id: '8f35a1a7-eb2f-4552-8fdf-fffdaee41bc9',
510+
name: 'my-updated-template'
511+
)
512+
513+
# Delete a template
514+
verify.templates.delete(template_id: '8f35a1a7-eb2f-4552-8fdf-fffdaee41bc9')
515+
```
516+
517+
#### Template Fragments
518+
519+
```ruby
520+
# Get a list of template fragments for a specific template
521+
template_fragment_list = verify.template_fragments.list(template_id: '8f35a1a7-eb2f-4552-8fdf-fffdaee41bc9')
522+
523+
# Get details of a specific template fragment
524+
template_fragment = verify.template_fragments.info(
525+
template_id: '8f35a1a7-eb2f-4552-8fdf-fffdaee41bc9',
526+
template_fragment_id: 'c70f446e-997a-4313-a081-60a02a31dc19'
527+
)
528+
529+
# Create a new template fragement
530+
verify.template_fragments.create(
531+
template_id: '8f35a1a7-eb2f-4552-8fdf-fffdaee41bc9',
532+
channel: 'sms',
533+
locale: 'en-gb',
534+
text: 'Your code is: ${code}'
535+
)
536+
537+
# Update an existing template fragment
538+
verify.template_fragments.update(
539+
template_id: '8f35a1a7-eb2f-4552-8fdf-fffdaee41bc9',
540+
template_fragment_id: 'c70f446e-997a-4313-a081-60a02a31dc1',
541+
text: 'Your one-time code is: ${code}'
542+
)
543+
544+
# Delete a template fragment
545+
verify.template_fragments.delete(
546+
template_id: '8f35a1a7-eb2f-4552-8fdf-fffdaee41bc9',
547+
template_fragment_id: 'c70f446e-997a-4313-a081-60a02a31dc19'
548+
)
549+
```
550+
491551
## Voice API
492552

493553
The [Vonage Voice API](The [Vonage Verify API v2](https://developer.vonage.com/en/verify/verify-v2/overview) allows you to automate voice interactions by creating calls, streaming audio, playing text to speech, playing DTMF tones, and other actions. See the Vonage Developer Documentation for a [complete API reference](https://developer.vonage.com/en/api/voice) listing all the Voice API capabilities.

Diff for: lib/vonage/verify2.rb

+12
Original file line numberDiff line numberDiff line change
@@ -96,5 +96,17 @@ def workflow
9696
def workflow_builder
9797
WorkflowBuilder.itself
9898
end
99+
100+
# @return [Templates]
101+
# Returns existing or instantiates a new Vonage::Verify2::Templates object
102+
def templates
103+
@templates ||= Templates.new(@config)
104+
end
105+
106+
# @return [TemplateFragments]
107+
# Returns existing or instantiates a new Vonage::Verify2::Templates object
108+
def template_fragments
109+
@template_fragments ||= TemplateFragments.new(@config)
110+
end
99111
end
100112
end

Diff for: lib/vonage/verify2/template_fragments.rb

+125
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
# typed: true
2+
# frozen_string_literal: true
3+
4+
module Vonage
5+
class Verify2::TemplateFragments < Namespace
6+
CHANNELS = ['sms', 'voice'].freeze
7+
8+
self.authentication = BearerToken
9+
10+
self.request_body = JSON
11+
12+
# Get a list of of template fragments for a specific template.
13+
#
14+
# @example
15+
# template_fragment_list = client.verify2.template_fragments.list(template_id: '8f35a1a7-eb2f-4552-8fdf-fffdaee41bc9')
16+
#
17+
# @param [required, String] :template_id. The ID of the template for which to retreive the fragments
18+
#
19+
# @param [optional, Integer] :page_size. The amount of template fragments to list per page
20+
#
21+
# @param [optional, Integer] :page. The page number to retrieve
22+
#
23+
# @return [ListResponse]
24+
#
25+
# @see https://developer.vonage.com/en/api/verify.v2#listTemplateFragments
26+
def list(template_id:, **params)
27+
request("/v2/verify/templates/#{template_id}/template_fragments", params: params, response_class: ListResponse)
28+
end
29+
30+
# Get details of a specific template fragment.
31+
#
32+
# @example
33+
# template_fragment = client.verify2.template_fragments.info(
34+
# template_id: '8f35a1a7-eb2f-4552-8fdf-fffdaee41bc9',
35+
# template_fragment_id: 'c70f446e-997a-4313-a081-60a02a31dc19'
36+
# )
37+
#
38+
# @param [required, String] :template_id. The ID of the template for which to retreive the fragment
39+
#
40+
# @param [required, String] :template_fragment_id. The ID of the fragment to be retreived
41+
#
42+
# @return [Response]
43+
#
44+
# @see https://developer.vonage.com/en/api/verify.v2#getTemplateFragment
45+
def info(template_id:, template_fragment_id:)
46+
request("/v2/verify/templates/#{template_id}/template_fragments/#{template_fragment_id}")
47+
end
48+
49+
# Create a new template fragment.
50+
#
51+
# @example
52+
# client.verify2.template_fragments.create(
53+
# template_id: '8f35a1a7-eb2f-4552-8fdf-fffdaee41bc9',
54+
# channel: 'sms',
55+
# locale: 'en-gb',
56+
# text: 'Your code is: ${code}'
57+
# )
58+
#
59+
# @param [required, String] :template_id. The ID of the template for which to create the fragment
60+
#
61+
# @param [required, String] :channel. The verification channel for which to create the fragment. Must be one of 'sms' or 'voice'
62+
#
63+
# @param [required, String] :locale. The locale for which to create the fragment.
64+
#
65+
# @param [required, String] :text. The text to be used in the template fragment.
66+
# There are 4 reserved variables available to use as part of the text: ${code}, ${brand}, ${time-limit} and ${time-limit-unit}
67+
#
68+
# @return [Response]
69+
#
70+
# @see https://developer.vonage.com/en/api/verify.v2#addTemplateFragmentToTemplate
71+
def create(template_id:, channel:, locale:, text:)
72+
raise ArgumentError, "Invalid 'channel' #{channel}. Must be one of #{CHANNELS.join(', ')}" unless CHANNELS.include?(channel)
73+
request(
74+
"/v2/verify/templates/#{template_id}/template_fragments",
75+
params: {
76+
channel: channel,
77+
locale: locale,
78+
text: text
79+
},
80+
type: Post)
81+
end
82+
83+
# Update an existing template fragment.
84+
#
85+
# @example
86+
# client.verify2.template_fragments.update(
87+
# template_id: '8f35a1a7-eb2f-4552-8fdf-fffdaee41bc9',
88+
# template_fragment_id: 'c70f446e-997a-4313-a081-60a02a31dc19',
89+
# text: 'Your one-time code is: ${code}'
90+
# )
91+
#
92+
# @param [required, String] :template_id. The ID of the template with which the fragment to be updated is associated
93+
#
94+
# @param [required, String] :template_fragment_id. The ID of the fragment to be updated
95+
#
96+
# @param [required, String] :text. The text to be used in the template fragment.
97+
# There are 4 reserved variables available to use as part of the text: ${code}, ${brand}, ${time-limit} and ${time-limit-unit}
98+
#
99+
# @return [Response]
100+
#
101+
# @see https://developer.vonage.com/en/api/verify.v2#updateTemplateFragment
102+
def update(template_id:, template_fragment_id:, text:)
103+
request("/v2/verify/templates/#{template_id}/template_fragments/#{template_fragment_id}", params: {text: text}, type: Patch)
104+
end
105+
106+
# Delete a template fragment.
107+
#
108+
# @example
109+
# client.verify2.template_fragments.delete(
110+
# template_id: '8f35a1a7-eb2f-4552-8fdf-fffdaee41bc9',
111+
# template_fragment_id: 'c70f446e-997a-4313-a081-60a02a31dc19'
112+
# )
113+
#
114+
# @param [required, String] :template_id. The ID of the template with which the fragment to be deleted is associated
115+
#
116+
# @param [required, String] :template_fragment_id. The ID of the fragment to be deleted
117+
#
118+
# @return [Response]
119+
#
120+
# @see https://developer.vonage.com/en/api/verify.v2#deleteTemplateFragment
121+
def delete(template_id:, template_fragment_id:)
122+
request("/v2/verify/templates/#{template_id}/template_fragments/#{template_fragment_id}", type: Delete)
123+
end
124+
end
125+
end
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# typed: true
2+
3+
class Vonage::Verify2::TemplateFragments::ListResponse < Vonage::Response
4+
include Enumerable
5+
6+
def each
7+
return enum_for(:each) unless block_given?
8+
9+
@entity._embedded.template_fragments.each { |item| yield item }
10+
end
11+
end

Diff for: lib/vonage/verify2/templates.rb

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# typed: true
2+
# frozen_string_literal: true
3+
4+
module Vonage
5+
class Verify2::Templates < Namespace
6+
self.authentication = BearerToken
7+
8+
self.request_body = JSON
9+
10+
# Get a list of all templates.
11+
#
12+
# @example
13+
# template_list = client.verify2.templates.list
14+
#
15+
# @param [optional, Integer] :page_size. The amount of templates to list per page
16+
#
17+
# @param [optional, Integer] :page. The page number to retrieve
18+
#
19+
# @return [ListResponse]
20+
#
21+
# @see https://developer.vonage.com/en/api/verify.v2#listTemplates
22+
def list(**params)
23+
request('/v2/verify/templates', params: params, response_class: ListResponse)
24+
end
25+
26+
# Get details of a specific template.
27+
#
28+
# @example
29+
# template = client.verify2.templates.info(template_id: '8f35a1a7-eb2f-4552-8fdf-fffdaee41bc9')
30+
#
31+
# @param [required, String] :template_id. The ID of the template to be retreived
32+
#
33+
# @return [Response]
34+
#
35+
# @see https://developer.vonage.com/en/api/verify.v2#getTemplate
36+
def info(template_id:)
37+
request('/v2/verify/templates/' + template_id)
38+
end
39+
40+
# Create a new template.
41+
#
42+
# @example
43+
# client.verify2.templates.create(name: 'my-template')
44+
#
45+
# @param [required, String] :name. The name of the template. The following characters are permitted: [A-Z a-z 0-9 _ -]
46+
#
47+
# @return [Response]
48+
#
49+
# @see https://developer.vonage.com/en/api/verify.v2#createTemplate
50+
def create(name:)
51+
request('/v2/verify/templates', params: { name: name }, type: Post)
52+
end
53+
54+
# Update an existing template.
55+
#
56+
# @example
57+
# client.verify2.templates.update(template_id: '8f35a1a7-eb2f-4552-8fdf-fffdaee41bc9', name: 'my-updated-template')
58+
#
59+
# @param [required, String] :template_id. The ID of the template to be updated
60+
#
61+
# @param [optional, String] :name. The name of the template. The following characters are permitted: [A-Z a-z 0-9 _ -]
62+
#
63+
# @param [optional, Boolean] :is_default. Whether the template is the default template for a specific locale/channel combination
64+
#
65+
# @return [Response]
66+
#
67+
# @see https://developer.vonage.com/en/api/verify.v2#updateTemplate
68+
def update(template_id:, **params)
69+
request('/v2/verify/templates/' + template_id, params: params, type: Patch)
70+
end
71+
72+
# Delete a template.
73+
#
74+
# @example
75+
# client.verify2.templates.delete(template_id: '8f35a1a7-eb2f-4552-8fdf-fffdaee41bc9')
76+
#
77+
# @param [required, String] :template_id. The ID of the template to be deleted
78+
#
79+
# @return [Response]
80+
#
81+
# @see https://developer.vonage.com/en/api/verify.v2#deleteTemplate
82+
def delete(template_id:)
83+
request('/v2/verify/templates/' + template_id, type: Delete)
84+
end
85+
end
86+
end

Diff for: lib/vonage/verify2/templates/list_response.rb

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# typed: true
2+
3+
class Vonage::Verify2::Templates::ListResponse < Vonage::Response
4+
include Enumerable
5+
6+
def each
7+
return enum_for(:each) unless block_given?
8+
9+
@entity._embedded.templates.each { |item| yield item }
10+
end
11+
end

Diff for: lib/vonage/version.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# typed: strong
22

33
module Vonage
4-
VERSION = '7.27.1'
4+
VERSION = '7.28.0'
55
end

0 commit comments

Comments
 (0)