zendesk_polly 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 269764c0e5de3cb725c7c4ebfba2cea5c2647351
4
+ data.tar.gz: e74d1ef832be18aaec6d6aa1da83d8744f800a32
5
+ SHA512:
6
+ metadata.gz: f437279099fff99f89ef812077e467b655395bcf26656967f1f4a38f3e58839af3ec1d1e7e0f008188a9ffb67ce2a3a772834e7f9ad3ac11ce777b04e05a94c8
7
+ data.tar.gz: abbe6e29888222feeb8add23de6343b63ccccf84f943ea51ed79733f668eb7dca37bef274f1a2bb2dcaf64d04a7088b9e0b08b556c9f1e8996a148facea65e55
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ .zp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3.1
5
+ before_install: gem install bundler -v 1.12.5
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in zendesk_polly.gemspec
4
+ gemspec
@@ -0,0 +1,100 @@
1
+ # Zendesk Polly
2
+
3
+ Too shy to record your own voice for __Zendesk Talk__ greetings? How about letting someone else read your text?
4
+ __ZendeskPolly__ uses __Amazon Polly__ text-to-speech engine to convert your text messages into audio files.
5
+
6
+ This gem is far from being production ready. As of now, it's just a spike to get to know a bit of Zendesk's API.
7
+
8
+
9
+ ## Installation
10
+
11
+ Install the gem and use the command line:
12
+
13
+ ```bash
14
+ $ gem install zendesk_polly
15
+ ```
16
+
17
+ Or add this line to your application's Gemfile:
18
+
19
+ ```ruby
20
+ gem 'zendesk_polly'
21
+ ```
22
+
23
+ And then provide ZendeskPolly with the required credentials and account details:
24
+
25
+ ```bash
26
+ $ zp init
27
+ ```
28
+ This command will start an interactive shell session and will save your credentials at `~/.zendesk_polly`.
29
+
30
+ ## Usage
31
+
32
+ ```
33
+ $ zp --help
34
+
35
+ NAME:
36
+
37
+ ZendeskPolly
38
+
39
+ DESCRIPTION:
40
+
41
+ Client to create zendesk greetings with Aws Polly
42
+
43
+ COMMANDS:
44
+
45
+ categories Lists available greeting categories
46
+ create Creates a Zendesk greeting with Aws Polly
47
+ help Display global or [command] help documentation
48
+ init Configures ZendeskPolly
49
+ voices Lists available voices
50
+ ```
51
+
52
+
53
+ ## Usage
54
+
55
+ Most commands have interactive mode, but can be initialized with some options.
56
+ Use `zp [command] --help` for details.
57
+
58
+ # Examples
59
+
60
+ ```bash
61
+ # creating an IVR greeting
62
+ $ zp create --name 'My new greeting' --category 'ivr' --voice 'Joanna' --text 'This will be read by Joanna'
63
+
64
+ # or just
65
+ $ zp create
66
+ ```
67
+
68
+ You can also use ZendeskPolly's client inside your own application.
69
+
70
+ ```ruby
71
+ client = ZendeskPolly::Client.new do |c|
72
+ c.aws_region = ... # defaults to 'us-east-1'
73
+ c.zendesk_token = ... # create an API token at `[your_zd_url]agent/admin/api/settings`
74
+ c.zendesk_username = ... # your email
75
+ c.zendesk_url = ... # https://{your_zd_portal}.zendesk.com/api/v2
76
+ c.aws_key = ... # Create an AMI user and grant access to Polly services
77
+ c.aws_secret = ...
78
+ end
79
+
80
+ # This won't create the greeting just yet. You have a change to listen to it before submitting to Zendesk.
81
+ greeting = client.polly_greeting.new(name: 'greeting name', text: "I've just initialized a voice message")
82
+
83
+ # Opens your default player and plays the converted audio file
84
+ greeting.play
85
+
86
+ # To submit to zendesk use:
87
+ greeting.save
88
+
89
+ ```
90
+
91
+ ## Development
92
+
93
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
94
+
95
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
96
+
97
+ ## Contributing
98
+
99
+ Bug reports and pull requests are welcome on GitHub at https://github.com/angelim/zendesk_polly.
100
+
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "zendesk_polly"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/bin/zp ADDED
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "zendesk_polly"
5
+ require 'commander/import'
6
+ LANGUAGES = [
7
+ "all",
8
+ "en-US",
9
+ "en-AU",
10
+ "en-GB",
11
+ "en-GB-WLS",
12
+ "en-IN",
13
+ "cy-GB",
14
+ "da-DK",
15
+ "de-DE",
16
+ "es-ES",
17
+ "es-US",
18
+ "fr-CA",
19
+ "fr-FR",
20
+ "is-IS",
21
+ "it-IT",
22
+ "ja-JP",
23
+ "nb-NO",
24
+ "nl-NL",
25
+ "pl-PL",
26
+ "pt-BR",
27
+ "pt-PT",
28
+ "ro-RO",
29
+ "ru-RU",
30
+ "sv-SE",
31
+ "tr-TR"
32
+ ]
33
+
34
+ program :name, 'ZendeskPolly'
35
+ program :version, ZendeskPolly::VERSION
36
+ program :description, 'Client to create zendesk greetings with Aws Polly'
37
+
38
+ command :create do |c|
39
+ c.syntax = 'zp create'
40
+ c.description = 'Creates a Zendesk greeting with Aws Polly'
41
+
42
+ c.option '--name STRING', String, 'Greeting name'
43
+ c.option '--category STRING', String, 'Greeting category'
44
+ c.option '--voice STRING', String, 'Greeting voice'
45
+ c.option '--text STRING', String, 'Greeting text'
46
+
47
+ c.action do |args, options|
48
+ client = ZendeskPolly::Client.new
49
+ client.check_configurations
50
+
51
+ name = options.name || ask("Greeting name: ")
52
+ category = options.category || choose("Greeting Category", *ZendeskPolly::Greeting::CATEGORIES.keys)
53
+ voice = options.voice || choose("Choose a voice from the list", *client.voice_names)
54
+ text = options.text || ask("Type your message:")
55
+
56
+ greeting = client.poly_greeting(
57
+ name: name,
58
+ category: category,
59
+ voice: voice,
60
+ text: text
61
+ )
62
+
63
+ should_play = agree("Would you like to play the message(y/n)?")
64
+ greeting.play if should_play
65
+
66
+ if agree("Would you like to save the message(y/n)?")
67
+ say "Creating... #{name}"
68
+ greeting.save
69
+ else
70
+ say "Message was not created"
71
+ end
72
+ end
73
+ end
74
+
75
+ command :init do |c|
76
+ c.syntax = 'zp init .'
77
+ c.description = 'Configures ZendeskPolly'
78
+ c.action do |args, options|
79
+ say 'Initializing Configuration'
80
+ config = ZendeskPolly::Config.new
81
+ config.aws_key = ask("AWS key: ")
82
+ config.aws_secret = ask("AWS secret: ")
83
+ config.aws_region = ask("AWS region: ")
84
+ config.zendesk_username = ask("Zendesk username: ")
85
+ config.zendesk_token = ask("Zendesk token: ")
86
+ config.zendesk_url = ask("Zendesk url: ")
87
+ config.serialize_to_file
88
+ end
89
+ end
90
+
91
+ command :voices do |c|
92
+ c.syntax = 'zp voices'
93
+ c.description = 'Lists available voices'
94
+ c.option '--language String', String, 'Language code'
95
+ c.action do |args, options|
96
+ code = options.language || choose('Which language', *LANGUAGES)
97
+ say 'These are the available voices:'
98
+ client = ZendeskPolly::Client.new
99
+ client.voices(code)
100
+ end
101
+ end
102
+
103
+ command :categories do |c|
104
+ c.syntax = 'zp categories'
105
+ c.description = 'Lists available greeting categories'
106
+ c.action do |args, options|
107
+ say 'These are the available greeting categories'
108
+ say ZendeskPolly::Greeting::CATEGORIES.keys.map(&:to_s)
109
+ end
110
+ end
@@ -0,0 +1,15 @@
1
+ require "zendesk_polly/version"
2
+ require 'aws-sdk-core'
3
+ require 'zendesk_api'
4
+ require 'zendesk_polly/client'
5
+ require 'zendesk_polly/greeting'
6
+ require 'pry-nav'
7
+
8
+ module ZendeskPolly
9
+
10
+ # uri = "http://www.ruby-lang.org"
11
+ # Launchy.open( uri ) do |exception|
12
+ # puts "Attempted to open #{uri} and failed because #{exception}"
13
+ # end
14
+
15
+ end
@@ -0,0 +1,88 @@
1
+ require 'zendesk_polly/config'
2
+ require 'command_line_reporter'
3
+
4
+ module ZendeskPolly
5
+ class Client
6
+ include CommandLineReporter
7
+
8
+ ZendeskPollyError = Class.new(ArgumentError)
9
+
10
+ attr_reader :polly, :zendesk, :config
11
+
12
+ def initialize
13
+ @config = Config.new(self)
14
+ yield config if block_given?
15
+ end
16
+
17
+ # Call when config is dirty
18
+ def reset!
19
+ @polly_client = nil
20
+ @zendesk_client = nil
21
+ end
22
+
23
+ def polly
24
+ check_polly_configuration
25
+ @polly_client ||= begin
26
+ Aws::Polly::Client.new(
27
+ access_key_id: config.aws_key,
28
+ secret_access_key: config.aws_secret,
29
+ region: config.aws_region
30
+ )
31
+ end
32
+ end
33
+
34
+ def zendesk
35
+ check_zendesk_configuration
36
+ @zendesk_client ||= begin
37
+ ZendeskAPI::Client.new do |z|
38
+ z.token = config.zendesk_token
39
+ z.username = config.zendesk_username
40
+ z.url = config.zendesk_url
41
+ end
42
+ end
43
+ end
44
+
45
+ def check_configurations
46
+ check_zendesk_configuration
47
+ check_polly_configuration
48
+ end
49
+
50
+ def check_zendesk_configuration
51
+ if attr = config.zendesk_configuration.find{ |_, v| v.nil? }
52
+ raise ZendeskPollyError.new("missing #{attr}")
53
+ end
54
+ end
55
+
56
+ def check_polly_configuration
57
+ if attr = config.polly_configuration.find{ |_, v| v.nil? }
58
+ raise ZendeskPollyError.new("missing #{attr}")
59
+ end
60
+ end
61
+
62
+ def poly_greeting(options = {})
63
+ Greeting.new(self, options)
64
+ end
65
+
66
+ def voice_names
67
+ polly.describe_voices.voices.map(&:id)
68
+ end
69
+
70
+ def voices(code)
71
+ code = nil if code == "all"
72
+ table border: true do
73
+ row do
74
+ column 'Voice'
75
+ column 'Language'
76
+ column 'Gender'
77
+ end
78
+ polly.describe_voices({language_code: code}).voices.each do |voice|
79
+ row do
80
+ column voice.id
81
+ column voice.language_name
82
+ column voice.gender
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,56 @@
1
+ require 'fileutils'
2
+ require 'yaml'
3
+
4
+ module ZendeskPolly
5
+ class Config
6
+ attr_accessor :zendesk_token, :zendesk_username, :zendesk_url
7
+ attr_accessor :aws_key, :aws_secret, :aws_region
8
+ attr_reader :client
9
+
10
+ def initialize(client = nil)
11
+ @client = client # retrieves the client to allow reseting when changing attributes
12
+ deserialize_from_file if File.exist?(config_file)
13
+ @aws_region ||= 'us-east-1'
14
+ end
15
+
16
+ def config_file
17
+ @config_file ||= File.join(File.expand_path('~'), '.zendesk_polly')
18
+ end
19
+
20
+ def deserialize_from_file
21
+ self.attributes = YAML.load_file(config_file)
22
+ end
23
+
24
+ def serialize_to_file
25
+ File.write(config_file, attributes.to_yaml)
26
+ end
27
+
28
+ def attributes=(options)
29
+ self.zendesk_token = options[:zendesk_token]
30
+ self.zendesk_username = options[:zendesk_username]
31
+ self.zendesk_url = options[:zendesk_url]
32
+ self.aws_region = options[:aws_region]
33
+ self.aws_key = options[:aws_key]
34
+ self.aws_secret = options[:aws_secret]
35
+ end
36
+
37
+ def attributes
38
+ {
39
+ zendesk_token: zendesk_token,
40
+ zendesk_username: zendesk_username,
41
+ zendesk_url: zendesk_url,
42
+ aws_key: aws_key,
43
+ aws_secret: aws_secret,
44
+ aws_region: aws_region
45
+ }
46
+ end
47
+
48
+ def zendesk_configuration
49
+ attributes.select{ |k, _| k =~ /\Azendesk/ }
50
+ end
51
+
52
+ def polly_configuration
53
+ attributes.select{ |k, _| k =~ /\Aaws/ }
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,70 @@
1
+ require 'forwardable'
2
+ require 'launchy'
3
+ require 'tempfile'
4
+ require 'digest'
5
+
6
+ module ZendeskPolly
7
+ class Greeting
8
+ extend Forwardable
9
+
10
+ AUDIO_CONTENT_TYPE = 'audio/mpeg'
11
+ OUTPUT_FORMAT = 'mp3'
12
+
13
+ CATEGORIES = {
14
+ voicemail: 1,
15
+ available: 2,
16
+ wait: 3,
17
+ hold: 4,
18
+ ivr: 5,
19
+ callback: 6,
20
+ callback_confirmation: 7
21
+ }
22
+
23
+ attr_accessor :name, :category, :text, :mp3_file, :voice
24
+ attr_reader :client
25
+
26
+ def initialize(client, options = {})
27
+ @client = client
28
+ @text = options[:text]
29
+ raise ArgumentError.new("text is required") unless text
30
+
31
+ @voice = options[:voice] || 'Joanna'
32
+ @name = options[:name] || encoded_text
33
+ @category = options[:category] || :ivr
34
+ @category = category.to_sym
35
+ @mp3_file = "/tmp/#{encoded_text}.mp3" if options[:text]
36
+ synthesize_speech
37
+ end
38
+
39
+ def encoded_text
40
+ @et ||= Digest::MD5.hexdigest(text)
41
+ end
42
+
43
+ def play
44
+ Launchy.open("file://#{mp3_file}")
45
+ end
46
+
47
+ def save
48
+ placeholder = client.zendesk.greetings.create!(name: name, category_id: CATEGORIES[category])
49
+ upload(placeholder.id)
50
+ end
51
+
52
+ def synthesize_speech
53
+ client.polly.synthesize_speech({
54
+ voice_id: voice,
55
+ text: text,
56
+ output_format: OUTPUT_FORMAT,
57
+ response_target: mp3_file
58
+ })
59
+ end
60
+
61
+ def upload(greeting_id)
62
+ raise ArgumentError.new("voice was not generated") unless mp3_file
63
+ client.zendesk.greetings.update!(
64
+ id: greeting_id,
65
+ upload_attributes: { uploaded_data: Faraday::UploadIO.new(mp3_file, AUDIO_CONTENT_TYPE) }
66
+ )
67
+ end
68
+
69
+ end
70
+ end
@@ -0,0 +1,3 @@
1
+ module ZendeskPolly
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'zendesk_polly/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "zendesk_polly"
8
+ spec.version = ZendeskPolly::VERSION
9
+ spec.authors = ["Alexandre Angelim"]
10
+ spec.email = ["angelim@angelim.com.br"]
11
+
12
+ spec.summary = %q{Zendesk Talk integration with AWS Polly}
13
+ spec.description = %q{Create Zendesk Talk greetings using AWS Polly text-to-speech engine}
14
+ spec.homepage = "http://github.com/angelim/zendesk_polly"
15
+ spec.license = 'MIT'
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "bin"
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_runtime_dependency 'commander', '~> 4.4'
23
+ spec.add_runtime_dependency 'aws-sdk', '~> 2.10'
24
+ spec.add_runtime_dependency 'zendesk_api', '~> 1.14'
25
+ spec.add_runtime_dependency 'launchy', '~> 2.4'
26
+ spec.add_runtime_dependency 'command_line_reporter', '~> 3.0'
27
+
28
+ spec.add_development_dependency "pry-nav", "~> 0.2"
29
+ spec.add_development_dependency "bundler", "~> 1.12"
30
+ spec.add_development_dependency "rake", "~> 10.0"
31
+ spec.add_development_dependency "rspec", "~> 3.0"
32
+ end
metadata ADDED
@@ -0,0 +1,188 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zendesk_polly
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Alexandre Angelim
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-07-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: commander
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: aws-sdk
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.10'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.10'
41
+ - !ruby/object:Gem::Dependency
42
+ name: zendesk_api
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.14'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.14'
55
+ - !ruby/object:Gem::Dependency
56
+ name: launchy
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.4'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: command_line_reporter
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry-nav
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.2'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.2'
97
+ - !ruby/object:Gem::Dependency
98
+ name: bundler
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.12'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.12'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '10.0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '10.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '3.0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '3.0'
139
+ description: Create Zendesk Talk greetings using AWS Polly text-to-speech engine
140
+ email:
141
+ - angelim@angelim.com.br
142
+ executables:
143
+ - console
144
+ - setup
145
+ - zp
146
+ extensions: []
147
+ extra_rdoc_files: []
148
+ files:
149
+ - ".gitignore"
150
+ - ".rspec"
151
+ - ".travis.yml"
152
+ - Gemfile
153
+ - README.md
154
+ - Rakefile
155
+ - bin/console
156
+ - bin/setup
157
+ - bin/zp
158
+ - lib/zendesk_polly.rb
159
+ - lib/zendesk_polly/client.rb
160
+ - lib/zendesk_polly/config.rb
161
+ - lib/zendesk_polly/greeting.rb
162
+ - lib/zendesk_polly/version.rb
163
+ - zendesk_polly.gemspec
164
+ homepage: http://github.com/angelim/zendesk_polly
165
+ licenses:
166
+ - MIT
167
+ metadata: {}
168
+ post_install_message:
169
+ rdoc_options: []
170
+ require_paths:
171
+ - lib
172
+ required_ruby_version: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
177
+ required_rubygems_version: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ requirements: []
183
+ rubyforge_project:
184
+ rubygems_version: 2.6.12
185
+ signing_key:
186
+ specification_version: 4
187
+ summary: Zendesk Talk integration with AWS Polly
188
+ test_files: []