dialog-api 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8e372a4430bbd304f323b1bc031d73f16a566ca5
4
+ data.tar.gz: b6d19f20daac02a080787b8253587ec2dcca9235
5
+ SHA512:
6
+ metadata.gz: ae426620a85e5b85b96156797de093f379a10a264619245a5b5568023fa151ec073e53b1bbe621b7a79a0e146f328d520bfcf196af4baea2f2ea54f19c84ae9f
7
+ data.tar.gz: 1c5ea3c74da2304f4d0e7671bf30f10e6695fe0c3438642907812d322ef5e7509911629de132aba3176d9fb2a80a3df92b592e102c13f41d8a4909a25ee7c9a1
@@ -0,0 +1,19 @@
1
+ module Dialog
2
+ module API
3
+ module Conversation
4
+
5
+ # Lists all conversations
6
+ # @return [Array]
7
+ def conversations
8
+ get("b/#{bot_id}/conversations")
9
+ end
10
+
11
+ # Retrieves a conversation
12
+ # @param id [String]
13
+ # @return [Hash]
14
+ def conversation(id)
15
+ get("b/#{bot_id}/conversations/#{id}")
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,26 @@
1
+ module Dialog
2
+ module API
3
+ module Interlocutor
4
+
5
+ # Lists all interlocutors
6
+ # @return [Array]
7
+ def interlocutors
8
+ get("b/#{bot_id}/interlocutors")
9
+ end
10
+
11
+ # Retrieves an interlocutor
12
+ # @param id [String] Interlocutor Id
13
+ # @return [Hash]
14
+ def interlocutor(id)
15
+ get("b/#{bot_id}/interlocutors#{id}")
16
+ end
17
+
18
+ # Creates an interlocutor
19
+ # @param attributes [Hash]
20
+ # @return [Hash]
21
+ def create_interlocutor(attributes)
22
+ post("b/#{bot_id}/interlocutors", body: { interlocutor: attributes })
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,21 @@
1
+ module Dialog
2
+ module API
3
+ module Message
4
+
5
+ # Lists all messages associated to a conversation
6
+ # @param conversation_id [String]
7
+ # @return
8
+ def messages(conversation_id)
9
+ get("b/#{bot_id}/conversations/#{conversation_id}/messages")
10
+ end
11
+
12
+ # Retrieves a message
13
+ # @param id [String]
14
+ # @param conversation_id [String]
15
+ # @return
16
+ def message(id, conversation_id)
17
+ get("b/#{bot_id}/conversations/#{conversation_id}/messages/#{id}")
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,29 @@
1
+ module Dialog
2
+ module API
3
+ module Track
4
+
5
+ # Tracks a message
6
+ # @param payload [Hash]
7
+ # @return
8
+ def track(payload)
9
+ body = {
10
+ message: {
11
+ conversation_distinct_id: payload[:conversation_distinct_id],
12
+ creator_distinct_id: payload[:creator_distinct_id],
13
+ creator_type: payload[:creator_type],
14
+ distinct_id: payload[:distinct_id],
15
+ platform: payload[:platform],
16
+ provider: payload[:provider],
17
+ mtype: payload[:mtype],
18
+ sent_at: payload[:sent_at],
19
+ properties: {
20
+ text: payload[:text]
21
+ }
22
+ }
23
+ }
24
+
25
+ post("b/#{bot_id}/track", body: body)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,34 @@
1
+ require 'dialog-api/request'
2
+ require 'dialog-api/api/conversation'
3
+ require 'dialog-api/api/interlocutor'
4
+ require 'dialog-api/api/message'
5
+ require 'dialog-api/api/track'
6
+
7
+ module Dialog
8
+ class Client
9
+ include Dialog::Request
10
+ include Dialog::API::Conversation
11
+ include Dialog::API::Interlocutor
12
+ include Dialog::API::Message
13
+ include Dialog::API::Track
14
+
15
+ attr_accessor *Configuration::VALID_OPTIONS_KEYS
16
+
17
+ # @param options [Hash]
18
+ def initialize(options = {})
19
+ options = Dialog.options.merge(options)
20
+ Configuration::VALID_OPTIONS_KEYS.each do |key|
21
+ send("#{key}=", options[key])
22
+ end
23
+ end
24
+
25
+ # Wraps an url into a trackable Dialog url
26
+ # @param id [String] A conversation distinct Id provided by the platform or the provider
27
+ # @param url [String]
28
+ # @return [String]
29
+ def link(id, url)
30
+ escaped = URI.escape(url, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
31
+ URI.join(api_endpoint, "v1/click/", id, "?url=#{escaped}").to_s
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,36 @@
1
+ require 'dialog-api/version'
2
+
3
+ module Dialog
4
+ module Configuration
5
+ VALID_OPTIONS_KEYS = [:api_endpoint, :api_token, :user_agent, :bot_id, :on_error].freeze
6
+
7
+ DEFAULT_API_ENDPOINT = "https://api.dialoganalytics.com/v1/"
8
+ DEFAULT_API_TOKEN = nil
9
+ DEFAULT_USER_AGENT = "Dialog Ruby Gem #{Dialog::VERSION}".freeze
10
+
11
+ attr_accessor *VALID_OPTIONS_KEYS
12
+
13
+ def self.extended(base)
14
+ base.reset!
15
+ end
16
+
17
+ # Convenience method to allow configuration options to be set in a block
18
+ def configure
19
+ yield self
20
+ end
21
+
22
+ def options
23
+ Hash[ * VALID_OPTIONS_KEYS.map { |key| [key, send(key)] }.flatten ]
24
+ end
25
+
26
+ def reset!
27
+ self.api_endpoint = DEFAULT_API_ENDPOINT
28
+ self.api_token = DEFAULT_API_TOKEN
29
+ self.user_agent = DEFAULT_USER_AGENT
30
+ self.on_error = Proc.new {}
31
+ self.bot_id = nil
32
+
33
+ return true
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,55 @@
1
+ require 'http'
2
+
3
+ module Dialog
4
+ module Request
5
+
6
+ # Performs a HTTP Get request
7
+ #
8
+ # @param path [String]
9
+ # @param params [Hash]
10
+ def get(path, params: {})
11
+ request(:get, URI.parse(api_endpoint).merge(path), params: params)
12
+ end
13
+
14
+ # Performs a HTTP Post request
15
+ #
16
+ # @param path [String]
17
+ # @param params [Hash]
18
+ # @param body [Hash]
19
+ def post(path, params: {}, body: {})
20
+ request(:post, URI.parse(api_endpoint).merge(path), params: params, body: body)
21
+ end
22
+
23
+
24
+ private
25
+
26
+ # @return [HTTP::Client]
27
+ # @raise [ArgumentError]
28
+ def request(method, path, params: {}, body: {})
29
+ raise ArgumentError, ("Please configure Dialog.api_token first") unless api_token
30
+ raise ArgumentError, ("Please configure Dialog.bot_id first") unless bot_id
31
+
32
+ headers = {
33
+ 'accept' => "application/json",
34
+ 'User-Agent' => Dialog.user_agent,
35
+ 'Authorization' => "Api-Key #{api_token}"
36
+ }
37
+
38
+ response = Http.headers(headers).send(method, path, params: params, json: body)
39
+
40
+ # Pass on errors when HTTP status included in 400 to 599
41
+ if (400..599).include?(response.code)
42
+ begin
43
+ body = response.parse['error']
44
+ rescue HTTP::Error
45
+ body = nil
46
+ end
47
+
48
+ on_error.call(response.code, response.reason, body)
49
+ end
50
+
51
+ # Return parsed json body
52
+ response.parse
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,3 @@
1
+ module Dialog
2
+ VERSION = "0.0.2"
3
+ end
data/lib/dialog-api.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'dialog-api/configuration'
2
+ require 'dialog-api/client'
3
+
4
+ module Dialog
5
+ extend Configuration
6
+
7
+ # Alias for Dialog::Client.new
8
+ #
9
+ # @return [Dialog::Client]
10
+ def new(options = {})
11
+ Dialog::Client.new(options)
12
+ end
13
+ module_function :new
14
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dialog-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Philippe Dionne
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-09-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: http
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ description: Dialog is a conversational analytics platform. See https://dialoganalytics.com
28
+ for details.
29
+ email:
30
+ - p@dialoganalytics.com
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - lib/dialog-api.rb
36
+ - lib/dialog-api/api/conversation.rb
37
+ - lib/dialog-api/api/interlocutor.rb
38
+ - lib/dialog-api/api/message.rb
39
+ - lib/dialog-api/api/track.rb
40
+ - lib/dialog-api/client.rb
41
+ - lib/dialog-api/configuration.rb
42
+ - lib/dialog-api/request.rb
43
+ - lib/dialog-api/version.rb
44
+ homepage: https://github.com/dialoganalytics/dialog-ruby
45
+ licenses:
46
+ - MIT
47
+ metadata: {}
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubyforge_project:
64
+ rubygems_version: 2.6.6
65
+ signing_key:
66
+ specification_version: 4
67
+ summary: A ruby client for the Dialog API.
68
+ test_files: []