qismo 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -12
- data/Gemfile.lock +1 -1
- data/lib/qismo/api.rb +281 -154
- data/lib/qismo/client.rb +31 -19
- data/lib/qismo/model.rb +10 -10
- data/lib/qismo/util.rb +1 -1
- data/lib/qismo/version.rb +1 -1
- data/lib/qismo.rb +18 -20
- metadata +6 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 23e999cca8b986d2783ea662573e0fab71db0c0bb1e6bf0a1603b4442eea6acc
         | 
| 4 | 
            +
              data.tar.gz: fc35ba076ba1c6597e1fb8f13b26c2a4319a92dc8c0a6215529c4f5aff2b9a09
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: d45397820b9bdf5214ff8e45d164f2253824d20c4e8d2017d3c4cec9993c1e550e51754f4743be566b5296edb90d6eb7b1c6b82f098f25ce67b74db87422ee31
         | 
| 7 | 
            +
              data.tar.gz: 40b3d89d5d06bce5e7460d7d36b3c0010da9fd583f0e7d66574a052be6b61bfda33688751380b32c1b6e436553f79f0661a739941e742aaf876800707fbb19cf
         | 
    
        data/.rubocop.yml
    CHANGED
    
    | @@ -5,15 +5,4 @@ AllCops: | |
| 5 5 | 
             
              TargetRubyVersion: 2.6
         | 
| 6 6 | 
             
              Exclude:
         | 
| 7 7 | 
             
                - "bin/**/*"
         | 
| 8 | 
            -
                - "examples/*"
         | 
| 9 | 
            -
             | 
| 10 | 
            -
            Style/StringLiterals:
         | 
| 11 | 
            -
              Enabled: true
         | 
| 12 | 
            -
              EnforcedStyle: double_quotes
         | 
| 13 | 
            -
             | 
| 14 | 
            -
            Style/StringLiteralsInInterpolation:
         | 
| 15 | 
            -
              Enabled: true
         | 
| 16 | 
            -
              EnforcedStyle: double_quotes
         | 
| 17 | 
            -
             | 
| 18 | 
            -
            Layout/LineLength:
         | 
| 19 | 
            -
              Max: 120
         | 
| 8 | 
            +
                - "examples/*"
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/lib/qismo/api.rb
    CHANGED
    
    | @@ -2,25 +2,29 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            module Qismo
         | 
| 4 4 | 
             
              module Api
         | 
| 5 | 
            +
                # @!parse include Qismo::Client
         | 
| 6 | 
            +
             | 
| 5 7 | 
             
                # List customer rooms
         | 
| 6 8 | 
             
                #
         | 
| 7 | 
            -
                # @ | 
| 8 | 
            -
                # @ | 
| 9 | 
            -
                 | 
| 10 | 
            -
             | 
| 11 | 
            -
                   | 
| 9 | 
            +
                # @see https://s.id/list-customer-rooms
         | 
| 10 | 
            +
                # @param options [Hash]
         | 
| 11 | 
            +
                # @return [Qismo::CollectionObject]
         | 
| 12 | 
            +
                def rooms(options = {})
         | 
| 13 | 
            +
                  body = post("/api/v2/customer_rooms", options)
         | 
| 14 | 
            +
                  CollectionObject.new(
         | 
| 12 15 | 
             
                    body.data.customer_rooms,
         | 
| 13 16 | 
             
                    prev_page: body.meta&.cursor_before,
         | 
| 14 17 | 
             
                    next_page: body.meta&.cursor_after,
         | 
| 15 | 
            -
                    prev_func: -> { rooms( | 
| 16 | 
            -
                    next_func: -> { rooms( | 
| 18 | 
            +
                    prev_func: -> { rooms(options.merge(cursor_before: body.meta&.cursor_before)) },
         | 
| 19 | 
            +
                    next_func: -> { rooms(options.merge(cursor_after: body.meta&.cursor_after)) },
         | 
| 17 20 | 
             
                  )
         | 
| 18 21 | 
             
                end
         | 
| 19 22 |  | 
| 20 23 | 
             
                # Get room by id
         | 
| 21 24 | 
             
                #
         | 
| 25 | 
            +
                # @see https://s.id/get-room-by-room-id
         | 
| 22 26 | 
             
                # @param room_id [Integer]
         | 
| 23 | 
            -
                # @return [Qismo:: | 
| 27 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 24 28 | 
             
                def room(room_id)
         | 
| 25 29 | 
             
                  body = get("/api/v2/customer_rooms/#{room_id}")
         | 
| 26 30 | 
             
                  if body.data.customer_room.nil?
         | 
| @@ -32,23 +36,26 @@ module Qismo | |
| 32 36 |  | 
| 33 37 | 
             
                # List tags inside room
         | 
| 34 38 | 
             
                #
         | 
| 39 | 
            +
                # @see https://s.id/list-room-tags
         | 
| 35 40 | 
             
                # @param room_id [Integer]
         | 
| 36 | 
            -
                # @return [Qismo:: | 
| 41 | 
            +
                # @return [Qismo::CollectionObject]
         | 
| 37 42 | 
             
                def room_tags(room_id)
         | 
| 38 | 
            -
                  get("/api/v2/room_tags/#{room_id}").data
         | 
| 43 | 
            +
                  CollectionObject.new(get("/api/v2/room_tags/#{room_id}").data)
         | 
| 39 44 | 
             
                end
         | 
| 40 45 |  | 
| 41 46 | 
             
                # Add room tag
         | 
| 42 47 | 
             
                #
         | 
| 48 | 
            +
                # @see https://s.id/add-room-tag
         | 
| 43 49 | 
             
                # @param room_id [Integer]
         | 
| 44 | 
            -
                # @param  | 
| 45 | 
            -
                # @return [Qismo:: | 
| 46 | 
            -
                def add_room_tag(room_id,  | 
| 47 | 
            -
                  post("/api/v2/room_tags/#{room_id}", tag:  | 
| 50 | 
            +
                # @param tag_name [String]
         | 
| 51 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 52 | 
            +
                def add_room_tag(room_id, tag_name)
         | 
| 53 | 
            +
                  post("/api/v2/room_tags/#{room_id}", tag: tag_name).data
         | 
| 48 54 | 
             
                end
         | 
| 49 55 |  | 
| 50 56 | 
             
                # Delete room tag
         | 
| 51 57 | 
             
                #
         | 
| 58 | 
            +
                # @see https://s.id/delete-room-tag
         | 
| 52 59 | 
             
                # @param room_id [Integer]
         | 
| 53 60 | 
             
                # @param tag_id [Integer]
         | 
| 54 61 | 
             
                # @return [TrueClass]
         | 
| @@ -59,68 +66,88 @@ module Qismo | |
| 59 66 |  | 
| 60 67 | 
             
                # List room additional info
         | 
| 61 68 | 
             
                #
         | 
| 69 | 
            +
                # @see https://s.id/list-room-info
         | 
| 62 70 | 
             
                # @param room_id [Integer]
         | 
| 63 | 
            -
                # @return [Qismo:: | 
| 71 | 
            +
                # @return [Qismo::CollectionObject]
         | 
| 64 72 | 
             
                def room_additional_info(room_id)
         | 
| 65 | 
            -
                   | 
| 66 | 
            -
             | 
| 73 | 
            +
                  CollectionObject.new(
         | 
| 74 | 
            +
                    get(
         | 
| 75 | 
            +
                      "/api/v1/qiscus/room/#{room_id}/user_info",
         | 
| 76 | 
            +
                    ).data&.extras&.user_properties,
         | 
| 77 | 
            +
                  ) || CollectionObject.new
         | 
| 67 78 | 
             
                end
         | 
| 68 79 |  | 
| 80 | 
            +
                alias_method :room_info, :room_additional_info
         | 
| 81 | 
            +
             | 
| 69 82 | 
             
                # Set room additional info
         | 
| 70 83 | 
             
                #
         | 
| 84 | 
            +
                # @see https://s.id/set-room-info
         | 
| 71 85 | 
             
                # @note This will replace your current room additional info
         | 
| 72 86 | 
             
                # @param room_id [Integer]
         | 
| 73 | 
            -
                # @param  | 
| 74 | 
            -
                # @return [Qismo:: | 
| 75 | 
            -
                def set_room_additional_info(room_id,  | 
| 76 | 
            -
                   | 
| 77 | 
            -
             | 
| 87 | 
            +
                # @param additional_info [Array<Hash>]
         | 
| 88 | 
            +
                # @return [Qismo::CollectionObject]
         | 
| 89 | 
            +
                def set_room_additional_info(room_id, additional_info)
         | 
| 90 | 
            +
                  CollectionObject.new(
         | 
| 91 | 
            +
                    post(
         | 
| 92 | 
            +
                      "/api/v1/qiscus/room/#{room_id}/user_info",
         | 
| 93 | 
            +
                      user_properties: additional_info,
         | 
| 94 | 
            +
                    ).data&.extras&.user_properties,
         | 
| 95 | 
            +
                  ) || CollectionObject.new
         | 
| 78 96 | 
             
                end
         | 
| 79 97 |  | 
| 98 | 
            +
                alias_method :set_room_info, :set_room_additional_info
         | 
| 99 | 
            +
                alias_method :create_room_info, :set_room_additional_info
         | 
| 100 | 
            +
                alias_method :create_room_additional_info, :set_room_additional_info
         | 
| 101 | 
            +
             | 
| 80 102 | 
             
                # Update room additional info
         | 
| 81 103 | 
             
                #
         | 
| 82 104 | 
             
                # @param room_id [Integer]
         | 
| 83 | 
            -
                # @param  | 
| 84 | 
            -
                # @return [Qismo:: | 
| 85 | 
            -
                def update_room_additional_info(room_id,  | 
| 105 | 
            +
                # @param additional_info [Array]
         | 
| 106 | 
            +
                # @return [Qismo::CollectionObject]
         | 
| 107 | 
            +
                def update_room_additional_info(room_id, additional_info)
         | 
| 86 108 | 
             
                  old_additional_info = room_additional_info(room_id)
         | 
| 87 109 | 
             
                  new_additional_info = (additional_info + old_additional_info).uniq { |h| h.values_at("key") }
         | 
| 88 | 
            -
                  set_room_additional_info(room_id,  | 
| 110 | 
            +
                  set_room_additional_info(room_id, new_additional_info)
         | 
| 89 111 | 
             
                end
         | 
| 90 112 |  | 
| 113 | 
            +
                alias_method :update_room_info, :update_room_additional_info
         | 
| 114 | 
            +
             | 
| 91 115 | 
             
                # List Whatsapp broadcast history inside room
         | 
| 92 116 | 
             
                #
         | 
| 117 | 
            +
                # @see https://s.id/list-room-broadcast-history
         | 
| 93 118 | 
             
                # @param room_id [Integer]
         | 
| 94 | 
            -
                # @param  | 
| 95 | 
            -
                # @return [Qismo:: | 
| 96 | 
            -
                def room_broadcast_history(room_id,  | 
| 97 | 
            -
                  body = get("/api/v2/customer_rooms/#{room_id}/broadcast_history",  | 
| 119 | 
            +
                # @param options [Hash]
         | 
| 120 | 
            +
                # @return [Qismo::CollectionObject]
         | 
| 121 | 
            +
                def room_broadcast_history(room_id, options = {})
         | 
| 122 | 
            +
                  body = get("/api/v2/customer_rooms/#{room_id}/broadcast_history", options)
         | 
| 98 123 |  | 
| 99 124 | 
             
                  next_page = body.meta.page < body.meta.total_page ? (body.meta.page + 1) : nil
         | 
| 100 125 | 
             
                  prev_page = body.meta.page > 1 ? (body.meta.page - 1) : nil
         | 
| 101 126 |  | 
| 102 | 
            -
                   | 
| 127 | 
            +
                  CollectionObject.new(
         | 
| 103 128 | 
             
                    body.data.broadcast_logs,
         | 
| 104 129 | 
             
                    next_page: next_page,
         | 
| 105 130 | 
             
                    prev_page: prev_page,
         | 
| 106 | 
            -
                    next_func: -> { room_broadcast_history( | 
| 107 | 
            -
                    prev_func: -> { room_broadcast_history( | 
| 131 | 
            +
                    next_func: -> { room_broadcast_history(options.merge(page: next_page)) },
         | 
| 132 | 
            +
                    prev_func: -> { room_broadcast_history(options.merge(page: prev_page)) },
         | 
| 108 133 | 
             
                  )
         | 
| 109 134 | 
             
                end
         | 
| 110 135 |  | 
| 111 136 | 
             
                # Assign agent to room
         | 
| 112 137 | 
             
                #
         | 
| 138 | 
            +
                # @see https://s.id/assign-agent
         | 
| 113 139 | 
             
                # @param room_id [Integer]
         | 
| 114 140 | 
             
                # @param agent_id [Integer]
         | 
| 115 | 
            -
                # @param  | 
| 116 | 
            -
                # @return [Qismo:: | 
| 117 | 
            -
                def assign_agent(room_id, agent_id,  | 
| 118 | 
            -
                  body = post("/api/v1/admin/service/assign_agent",  | 
| 141 | 
            +
                # @param options [Hash]
         | 
| 142 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 143 | 
            +
                def assign_agent(room_id, agent_id, options = {})
         | 
| 144 | 
            +
                  body = post("/api/v1/admin/service/assign_agent", options.merge(room_id: room_id.to_s, agent_id: agent_id))
         | 
| 119 145 | 
             
                  body.data.added_agent
         | 
| 120 146 | 
             
                end
         | 
| 121 147 |  | 
| 122 148 | 
             
                # Remove agent from room
         | 
| 123 149 | 
             
                #
         | 
| 150 | 
            +
                # @see https://s.id/remove-agent
         | 
| 124 151 | 
             
                # @param room_id [Integer]
         | 
| 125 152 | 
             
                # @param agent_id [Integer]
         | 
| 126 153 | 
             
                # @return [TrueClass]
         | 
| @@ -131,13 +158,14 @@ module Qismo | |
| 131 158 |  | 
| 132 159 | 
             
                # Resolve room
         | 
| 133 160 | 
             
                #
         | 
| 161 | 
            +
                # @see https://s.id/resolve-room
         | 
| 134 162 | 
             
                # @param room_id [Integer]
         | 
| 135 163 | 
             
                # @param last_comment_id [Integer]
         | 
| 136 | 
            -
                # @param  | 
| 137 | 
            -
                # @return [Qismo:: | 
| 138 | 
            -
                def resolve_room(room_id, last_comment_id,  | 
| 164 | 
            +
                # @param options [Hash]
         | 
| 165 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 166 | 
            +
                def resolve_room(room_id, last_comment_id, options = {})
         | 
| 139 167 | 
             
                  body = post("/api/v1/admin/service/mark_as_resolved",
         | 
| 140 | 
            -
                     | 
| 168 | 
            +
                    options.merge(room_id: room_id.to_s, last_comment_id: last_comment_id))
         | 
| 141 169 | 
             
                  body.data.service
         | 
| 142 170 | 
             
                end
         | 
| 143 171 |  | 
| @@ -145,59 +173,63 @@ module Qismo | |
| 145 173 |  | 
| 146 174 | 
             
                # Get agent that can be assigned to room
         | 
| 147 175 | 
             
                #
         | 
| 176 | 
            +
                # @see https://s.id/allocate-agent
         | 
| 148 177 | 
             
                # @param source [String]
         | 
| 149 | 
            -
                # @param  | 
| 150 | 
            -
                # @return [Qismo:: | 
| 151 | 
            -
                def allocate_agent(source,  | 
| 152 | 
            -
                  body = post("/api/v1/admin/service/allocate_agent",  | 
| 178 | 
            +
                # @param options [Hash]
         | 
| 179 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 180 | 
            +
                def allocate_agent(source, options = {})
         | 
| 181 | 
            +
                  body = post("/api/v1/admin/service/allocate_agent", options.merge(source: source))
         | 
| 153 182 | 
             
                  body.data.agent
         | 
| 154 183 | 
             
                end
         | 
| 155 184 |  | 
| 156 185 | 
             
                # Get agent that can be allocated to room and automatically assign them
         | 
| 157 186 | 
             
                #
         | 
| 187 | 
            +
                # @see https://s.id/allocate-and-assign-agent
         | 
| 158 188 | 
             
                # @param room_id [Integer]
         | 
| 159 | 
            -
                # @param  | 
| 160 | 
            -
                # @return [Qismo:: | 
| 161 | 
            -
                def allocate_and_assign_agent(room_id,  | 
| 162 | 
            -
                  body = post("/api/v1/admin/service/allocate_assign_agent",  | 
| 189 | 
            +
                # @param options [Hash]
         | 
| 190 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 191 | 
            +
                def allocate_and_assign_agent(room_id, options = {})
         | 
| 192 | 
            +
                  body = post("/api/v1/admin/service/allocate_assign_agent", options.merge(room_id: room_id))
         | 
| 163 193 | 
             
                  body.data.agent
         | 
| 164 194 | 
             
                end
         | 
| 165 195 |  | 
| 166 196 | 
             
                # List agents that are not in room and can be assigned to room
         | 
| 167 197 | 
             
                #
         | 
| 198 | 
            +
                # @see https://s.id/list-other-agents
         | 
| 168 199 | 
             
                # @param room_id [Integer]
         | 
| 169 | 
            -
                # @param  | 
| 170 | 
            -
                # @return [Qismo:: | 
| 171 | 
            -
                def other_agents(room_id,  | 
| 172 | 
            -
                  body = get("/api/v2/admin/service/other_agents",  | 
| 173 | 
            -
                   | 
| 200 | 
            +
                # @param options [Hash]
         | 
| 201 | 
            +
                # @return [Qismo::CollectionObject]
         | 
| 202 | 
            +
                def other_agents(room_id, options = {})
         | 
| 203 | 
            +
                  body = get("/api/v2/admin/service/other_agents", options.merge(room_id: room_id))
         | 
| 204 | 
            +
                  CollectionObject.new(
         | 
| 174 205 | 
             
                    body.data.agents,
         | 
| 175 206 | 
             
                    prev_page: body.meta&.cursor_before,
         | 
| 176 207 | 
             
                    next_page: body.meta&.cursor_after,
         | 
| 177 | 
            -
                    prev_func: -> { other_agents( | 
| 178 | 
            -
                    next_func: -> { other_agents( | 
| 208 | 
            +
                    prev_func: -> { other_agents(options.merge(cursor_before: body.meta&.cursor_before)) },
         | 
| 209 | 
            +
                    next_func: -> { other_agents(options.merge(cursor_after: body.meta&.cursor_after)) },
         | 
| 179 210 | 
             
                  )
         | 
| 180 211 | 
             
                end
         | 
| 181 212 |  | 
| 182 213 | 
             
                # List available agents in room
         | 
| 183 214 | 
             
                #
         | 
| 215 | 
            +
                # @see https://s.id/list-available-agents
         | 
| 184 216 | 
             
                # @param room_id [Integer]
         | 
| 185 | 
            -
                # @param  | 
| 186 | 
            -
                # @return [Qismo:: | 
| 187 | 
            -
                def available_agents(room_id,  | 
| 188 | 
            -
                  body = get("/api/v2/admin/service/available_agents",  | 
| 189 | 
            -
                   | 
| 217 | 
            +
                # @param options [Hash]
         | 
| 218 | 
            +
                # @return [Qismo::CollectionObject]
         | 
| 219 | 
            +
                def available_agents(room_id, options = {})
         | 
| 220 | 
            +
                  body = get("/api/v2/admin/service/available_agents", options.merge(room_id: room_id))
         | 
| 221 | 
            +
                  CollectionObject.new(
         | 
| 190 222 | 
             
                    body.data.agents,
         | 
| 191 223 | 
             
                    prev_page: body.meta&.cursor_before,
         | 
| 192 224 | 
             
                    next_page: body.meta&.cursor_after,
         | 
| 193 | 
            -
                    prev_func: -> { available_agents( | 
| 194 | 
            -
                    next_func: -> { available_agents( | 
| 225 | 
            +
                    prev_func: -> { available_agents(options.merge(cursor_before: body.meta&.cursor_before)) },
         | 
| 226 | 
            +
                    next_func: -> { available_agents(options.merge(cursor_after: body.meta&.cursor_after)) },
         | 
| 195 227 | 
             
                  )
         | 
| 196 228 | 
             
                end
         | 
| 197 229 |  | 
| 198 230 | 
             
                # Get new session webhook config
         | 
| 199 231 | 
             
                #
         | 
| 200 | 
            -
                # @return [Qismo:: | 
| 232 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 201 233 | 
             
                def new_session_webhook
         | 
| 202 234 | 
             
                  get("/api/v2/app/config/new_session_webhook").data.configs
         | 
| 203 235 | 
             
                end
         | 
| @@ -205,15 +237,15 @@ module Qismo | |
| 205 237 | 
             
                # Set new session webhook
         | 
| 206 238 | 
             
                #
         | 
| 207 239 | 
             
                # @param url [String]
         | 
| 208 | 
            -
                # @param  | 
| 209 | 
            -
                # @return [Qismo:: | 
| 210 | 
            -
                def set_new_session_webhook(url,  | 
| 211 | 
            -
                  post("/api/v2/app/config/new_session_webhook",  | 
| 240 | 
            +
                # @param options [Hash]
         | 
| 241 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 242 | 
            +
                def set_new_session_webhook(url, options = {})
         | 
| 243 | 
            +
                  post("/api/v2/app/config/new_session_webhook", options.merge(url: url)).data.configs
         | 
| 212 244 | 
             
                end
         | 
| 213 245 |  | 
| 214 246 | 
             
                # Get auth webhook config
         | 
| 215 247 | 
             
                #
         | 
| 216 | 
            -
                # @return [Qismo:: | 
| 248 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 217 249 | 
             
                def auth_webhook
         | 
| 218 250 | 
             
                  get("/api/v2/app/config/auth_webhook").data.configs
         | 
| 219 251 | 
             
                end
         | 
| @@ -221,15 +253,15 @@ module Qismo | |
| 221 253 | 
             
                # Set auth webhook
         | 
| 222 254 | 
             
                #
         | 
| 223 255 | 
             
                # @param url [String]
         | 
| 224 | 
            -
                # @param  | 
| 225 | 
            -
                # @return [Qismo:: | 
| 226 | 
            -
                def set_auth_webhook(url,  | 
| 227 | 
            -
                  post("/api/v2/app/config/auth_webhook",  | 
| 256 | 
            +
                # @param options [Hash]
         | 
| 257 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 258 | 
            +
                def set_auth_webhook(url, options = {})
         | 
| 259 | 
            +
                  post("/api/v2/app/config/auth_webhook", options.merge(url: url)).data.configs
         | 
| 228 260 | 
             
                end
         | 
| 229 261 |  | 
| 230 262 | 
             
                # Get resolve webhook config
         | 
| 231 263 | 
             
                #
         | 
| 232 | 
            -
                # @return [Qismo:: | 
| 264 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 233 265 | 
             
                def resolve_webhook
         | 
| 234 266 | 
             
                  get("/api/v1/app/webhook/mark_as_resolved").data
         | 
| 235 267 | 
             
                end
         | 
| @@ -237,116 +269,127 @@ module Qismo | |
| 237 269 | 
             
                # Set resolve webhook
         | 
| 238 270 | 
             
                #
         | 
| 239 271 | 
             
                # @param url [String]
         | 
| 240 | 
            -
                # @param  | 
| 241 | 
            -
                # @return [Qismo:: | 
| 242 | 
            -
                def set_resolve_webhook(url,  | 
| 243 | 
            -
                  post("/api/v1/app/webhook/mark_as_resolved",  | 
| 272 | 
            +
                # @param options [Hash]
         | 
| 273 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 274 | 
            +
                def set_resolve_webhook(url, options = {})
         | 
| 275 | 
            +
                  post("/api/v1/app/webhook/mark_as_resolved", options.merge(url: url)).data
         | 
| 244 276 | 
             
                end
         | 
| 245 277 |  | 
| 246 278 | 
             
                # List agents
         | 
| 247 279 | 
             
                #
         | 
| 248 | 
            -
                # @ | 
| 249 | 
            -
                # @ | 
| 250 | 
            -
                 | 
| 251 | 
            -
             | 
| 252 | 
            -
             | 
| 280 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#849205ca-00d9-4356-9fdd-f05bff777b4e
         | 
| 281 | 
            +
                # @param options [Hash]
         | 
| 282 | 
            +
                # @return [Qismo::CollectionObject]
         | 
| 283 | 
            +
                def agents(options = {})
         | 
| 284 | 
            +
                  if options[:page].nil? || options[:page].empty?
         | 
| 285 | 
            +
                    options[:page] = 1
         | 
| 253 286 | 
             
                  end
         | 
| 254 287 |  | 
| 255 | 
            -
                  body = get("/api/v2/admin/agents",  | 
| 288 | 
            +
                  body = get("/api/v2/admin/agents", options)
         | 
| 256 289 |  | 
| 257 290 | 
             
                  total_page = (body.meta.total_count.to_f / body.meta.per_page.to_f).ceil
         | 
| 258 | 
            -
                  next_page =  | 
| 259 | 
            -
                  prev_page =  | 
| 291 | 
            +
                  next_page = options[:page] < total_page ? (options[:page] + 1) : nil
         | 
| 292 | 
            +
                  prev_page = options[:page] > 1 ? (options[:page] - 1) : nil
         | 
| 260 293 |  | 
| 261 | 
            -
                   | 
| 294 | 
            +
                  CollectionObject.new(
         | 
| 262 295 | 
             
                    body.data.agents,
         | 
| 263 296 | 
             
                    next_page: next_page,
         | 
| 264 297 | 
             
                    prev_page: prev_page,
         | 
| 265 | 
            -
                    next_func: -> { agents( | 
| 266 | 
            -
                    prev_func: -> { agents( | 
| 298 | 
            +
                    next_func: -> { agents(options.merge(page: next_page)) },
         | 
| 299 | 
            +
                    prev_func: -> { agents(options.merge(page: prev_page)) },
         | 
| 267 300 | 
             
                  )
         | 
| 268 301 | 
             
                end
         | 
| 269 302 |  | 
| 270 303 | 
             
                # List agents by id
         | 
| 271 304 | 
             
                #
         | 
| 272 | 
            -
                # @ | 
| 273 | 
            -
                # @ | 
| 274 | 
            -
                 | 
| 275 | 
            -
             | 
| 305 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#3db6c8c8-8ffe-4a88-b630-41f9d5b62298
         | 
| 306 | 
            +
                # @param ids [Array<Integer>]
         | 
| 307 | 
            +
                # @return [Qismo::CollectionObject]
         | 
| 308 | 
            +
                def agents_by_ids(ids)
         | 
| 309 | 
            +
                  CollectionObject.new(get("/api/v1/admin/agents/get_by_ids", { "ids[]": ids }).data) || CollectionObject.new
         | 
| 276 310 | 
             
                end
         | 
| 277 311 |  | 
| 278 312 | 
             
                # List agents by divisions
         | 
| 279 313 | 
             
                #
         | 
| 280 | 
            -
                # @ | 
| 281 | 
            -
                # @param  | 
| 282 | 
            -
                # @ | 
| 283 | 
            -
                 | 
| 284 | 
            -
             | 
| 314 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#94eeb9cb-dd70-4baf-9f63-361e7922299a
         | 
| 315 | 
            +
                # @param division_ids [Array<Integer>]
         | 
| 316 | 
            +
                # @param options [Hash]
         | 
| 317 | 
            +
                # @return [Qismo::CollectionObject]
         | 
| 318 | 
            +
                def agents_by_divisions(division_ids, options = {})
         | 
| 319 | 
            +
                  body = get("/api/v2/admin/agents/by_division", options.merge({ "division_ids[]": division_ids }))
         | 
| 285 320 |  | 
| 286 321 | 
             
                  next_page = body.meta.page < body.meta.total_page ? (body.meta.page + 1) : nil
         | 
| 287 322 | 
             
                  prev_page = body.meta.page > 1 ? (body.meta.page - 1) : nil
         | 
| 288 323 |  | 
| 289 | 
            -
                   | 
| 324 | 
            +
                  CollectionObject.new(
         | 
| 290 325 | 
             
                    body.data,
         | 
| 291 326 | 
             
                    next_page: next_page,
         | 
| 292 327 | 
             
                    prev_page: prev_page,
         | 
| 293 | 
            -
                    next_func: -> { agents_by_divisions( | 
| 294 | 
            -
                    prev_func: -> { agents_by_divisions( | 
| 328 | 
            +
                    next_func: -> { agents_by_divisions(options.merge(page: next_page)) },
         | 
| 329 | 
            +
                    prev_func: -> { agents_by_divisions(options.merge(page: prev_page)) },
         | 
| 295 330 | 
             
                  )
         | 
| 296 331 | 
             
                end
         | 
| 297 332 |  | 
| 298 333 | 
             
                # Get agent by id
         | 
| 299 334 | 
             
                #
         | 
| 335 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#c6184a6b-ba4d-4f3e-a4da-c6d0fa4597af
         | 
| 300 336 | 
             
                # @param agent_id [Integer]
         | 
| 301 | 
            -
                # @return [Qismo:: | 
| 337 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 302 338 | 
             
                def agent(agent_id)
         | 
| 303 339 | 
             
                  get("/api/v2/admin/agent/#{agent_id}").data.agent
         | 
| 304 340 | 
             
                end
         | 
| 305 341 |  | 
| 306 342 | 
             
                # Get office hour config
         | 
| 307 343 | 
             
                #
         | 
| 308 | 
            -
                # @ | 
| 344 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#6f3f0cb0-a391-4945-b01a-95ce81138913
         | 
| 345 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 309 346 | 
             
                def office_hours
         | 
| 310 347 | 
             
                  data = get("/api/v1/admin/office_hours").data
         | 
| 311 348 | 
             
                  data_hash = data.as_json
         | 
| 312 349 | 
             
                  data_hash["is_in_office_hour"] = Util.in_office_hour?(data)
         | 
| 313 350 |  | 
| 314 | 
            -
                   | 
| 351 | 
            +
                  SingleObject.new(data_hash)
         | 
| 315 352 | 
             
                end
         | 
| 316 353 |  | 
| 317 354 | 
             
                # List WA broadcast templates
         | 
| 318 355 | 
             
                #
         | 
| 319 | 
            -
                # @ | 
| 320 | 
            -
                # @ | 
| 321 | 
            -
                 | 
| 322 | 
            -
             | 
| 356 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#e38d2244-9559-4015-99d5-8c707f6c01bd
         | 
| 357 | 
            +
                # @param options [Hash]
         | 
| 358 | 
            +
                # @return [Qismo::CollectionObject]
         | 
| 359 | 
            +
                def wa_broadcast_templates(options = {})
         | 
| 360 | 
            +
                  body = get("/api/v3/admin/hsm", options)
         | 
| 323 361 |  | 
| 324 362 | 
             
                  meta = body.meta
         | 
| 325 363 | 
             
                  next_page = meta.page < meta.total_page ? (meta.page + 1) : nil
         | 
| 326 364 | 
             
                  prev_page = meta.page > 1 ? (meta.page - 1) : nil
         | 
| 327 365 |  | 
| 328 | 
            -
                   | 
| 366 | 
            +
                  CollectionObject.new(
         | 
| 329 367 | 
             
                    body.data.hsm_templates,
         | 
| 330 368 | 
             
                    next_page: next_page,
         | 
| 331 369 | 
             
                    prev_page: prev_page,
         | 
| 332 | 
            -
                    next_func: -> { wa_broadcast_templates( | 
| 333 | 
            -
                    prev_func: -> { wa_broadcast_templates( | 
| 370 | 
            +
                    next_func: -> { wa_broadcast_templates(options.merge(page: next_page)) },
         | 
| 371 | 
            +
                    prev_func: -> { wa_broadcast_templates(options.merge(page: prev_page)) },
         | 
| 334 372 | 
             
                  )
         | 
| 335 373 | 
             
                end
         | 
| 336 374 |  | 
| 375 | 
            +
                alias_method :wa_message_templates, :wa_broadcast_templates
         | 
| 376 | 
            +
                alias_method :wa_outbound_templates, :wa_broadcast_templates
         | 
| 377 | 
            +
             | 
| 337 378 | 
             
                # Send WA outbound message
         | 
| 338 379 | 
             
                #
         | 
| 339 | 
            -
                # @ | 
| 340 | 
            -
                # @ | 
| 341 | 
            -
                 | 
| 342 | 
            -
             | 
| 380 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#d0183cf6-deca-439b-aff3-2e2f007c15a9
         | 
| 381 | 
            +
                # @param options [Hash]
         | 
| 382 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 383 | 
            +
                def send_wa_outbound(options = {})
         | 
| 384 | 
            +
                  post("/api/v3/admin/broadcast/client", options).data
         | 
| 343 385 | 
             
                end
         | 
| 344 386 |  | 
| 345 387 | 
             
                # Upload wa broadcast file that want to be sent in broadcast
         | 
| 346 388 | 
             
                #
         | 
| 389 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#030acde2-21cf-4373-8d11-075206053c1d
         | 
| 347 390 | 
             
                # @param file [HTTP::FormData]
         | 
| 348 391 | 
             
                # @param template_detail_id [Integer]
         | 
| 349 | 
            -
                # @return [Qismo:: | 
| 392 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 350 393 | 
             
                def upload_wa_broadcast_csv(file, template_detail_id)
         | 
| 351 394 | 
             
                  raise ArgumentError, "Invalid file" unless file.is_a?(HTTP::FormData::File)
         | 
| 352 395 |  | 
| @@ -355,88 +398,98 @@ module Qismo | |
| 355 398 |  | 
| 356 399 | 
             
                # Send wa broadcast
         | 
| 357 400 | 
             
                #
         | 
| 358 | 
            -
                # @ | 
| 359 | 
            -
                # @ | 
| 360 | 
            -
                 | 
| 361 | 
            -
             | 
| 401 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#717c1a12-facb-4945-aed5-04557696b873
         | 
| 402 | 
            +
                # @param options [Hash]
         | 
| 403 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 404 | 
            +
                def send_wa_broadcast(options = {})
         | 
| 405 | 
            +
                  post("/api/v3/admin/broadcast/send_broadcast", options).data.broadcast_job
         | 
| 362 406 | 
             
                end
         | 
| 363 407 |  | 
| 408 | 
            +
                alias_method :create_wa_broadcast, :send_wa_broadcast
         | 
| 409 | 
            +
             | 
| 364 410 | 
             
                # List wa broadcast jobs
         | 
| 365 411 | 
             
                #
         | 
| 366 | 
            -
                # @ | 
| 367 | 
            -
                # @ | 
| 368 | 
            -
                 | 
| 369 | 
            -
             | 
| 412 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#3a4caa8b-eef4-427f-adcb-d065989899c9
         | 
| 413 | 
            +
                # @param options [Hash]
         | 
| 414 | 
            +
                # @return [Qismo::CollectionObject]
         | 
| 415 | 
            +
                def wa_broadcast_jobs(options = {})
         | 
| 416 | 
            +
                  body = get("/api/v2/admin/broadcast_jobs", options)
         | 
| 370 417 |  | 
| 371 418 | 
             
                  prev_page = body.meta.page > 1 ? (body.meta.meta - 1) : nil
         | 
| 372 419 | 
             
                  next_page = body.meta.page < body.meta.total_page ? (body.meta.page + 1) : nil
         | 
| 373 420 |  | 
| 374 | 
            -
                   | 
| 421 | 
            +
                  CollectionObject.new(
         | 
| 375 422 | 
             
                    body.data.broadcast_jobs,
         | 
| 376 423 | 
             
                    next_page: next_page,
         | 
| 377 424 | 
             
                    prev_page: prev_page,
         | 
| 378 | 
            -
                    next_func: -> { wa_broadcast_jobs( | 
| 379 | 
            -
                    prev_func: -> { wa_broadcast_jobs( | 
| 425 | 
            +
                    next_func: -> { wa_broadcast_jobs(options.merge(page: next_page)) },
         | 
| 426 | 
            +
                    prev_func: -> { wa_broadcast_jobs(options.merge(page: prev_page)) },
         | 
| 380 427 | 
             
                  )
         | 
| 381 428 | 
             
                end
         | 
| 382 429 |  | 
| 383 430 | 
             
                # Get wa broadcast job by id
         | 
| 384 431 | 
             
                #
         | 
| 432 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#ed0806c8-2e4a-4ea4-8acb-45c84c63c2da
         | 
| 385 433 | 
             
                # @param broadcast_job_id [Integer]
         | 
| 386 | 
            -
                # @return [Qismo:: | 
| 434 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 387 435 | 
             
                def wa_broadcast_job(broadcast_job_id)
         | 
| 388 436 | 
             
                  get("/api/v2/admin/broadcast_jobs/#{broadcast_job_id}").data.broadcast_job
         | 
| 389 437 | 
             
                end
         | 
| 390 438 |  | 
| 391 439 | 
             
                # List wa broadcast logs
         | 
| 392 440 | 
             
                #
         | 
| 441 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#3f2d8ba8-ab14-43b2-af82-74c8b766216f
         | 
| 393 442 | 
             
                # @param broadcast_job_id [Integer]
         | 
| 394 | 
            -
                # @param  | 
| 395 | 
            -
                # @return [Qismo:: | 
| 396 | 
            -
                def wa_broadcast_logs(broadcast_job_id,  | 
| 397 | 
            -
                  body = get("/api/v2/admin/broadcast_logs/#{broadcast_job_id}",  | 
| 443 | 
            +
                # @param options [Hash]
         | 
| 444 | 
            +
                # @return [Qismo::CollectionObject]
         | 
| 445 | 
            +
                def wa_broadcast_logs(broadcast_job_id, options = {})
         | 
| 446 | 
            +
                  body = get("/api/v2/admin/broadcast_logs/#{broadcast_job_id}", options)
         | 
| 398 447 |  | 
| 399 448 | 
             
                  prev_page = body.meta.page > 1 ? (body.meta.meta - 1) : nil
         | 
| 400 449 | 
             
                  next_page = body.meta.page < body.meta.total_page ? (body.meta.page + 1) : nil
         | 
| 401 450 |  | 
| 402 | 
            -
                   | 
| 451 | 
            +
                  CollectionObject.new(
         | 
| 403 452 | 
             
                    body.data.broadcast_logs,
         | 
| 404 453 | 
             
                    next_page: next_page,
         | 
| 405 454 | 
             
                    prev_page: prev_page,
         | 
| 406 | 
            -
                    next_func: -> { wa_broadcast_logs( | 
| 407 | 
            -
                    prev_func: -> { wa_broadcast_jobs( | 
| 455 | 
            +
                    next_func: -> { wa_broadcast_logs(options.merge(page: next_page)) },
         | 
| 456 | 
            +
                    prev_func: -> { wa_broadcast_jobs(options.merge(page: prev_page)) },
         | 
| 408 457 | 
             
                  )
         | 
| 409 458 | 
             
                end
         | 
| 410 459 |  | 
| 411 460 | 
             
                # Send message as bot
         | 
| 412 461 | 
             
                #
         | 
| 413 | 
            -
                # @ | 
| 462 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#bb77c653-5daa-4e1c-a866-43bca7c494fc
         | 
| 463 | 
            +
                # @param options [Hash]
         | 
| 414 464 | 
             
                # @return [TrueClass]
         | 
| 415 | 
            -
                def send_bot_message( | 
| 416 | 
            -
                  post("#{app_id}/bot",  | 
| 465 | 
            +
                def send_bot_message(options = {})
         | 
| 466 | 
            +
                  post("#{app_id}/bot", options)
         | 
| 417 467 | 
             
                  true
         | 
| 418 468 | 
             
                end
         | 
| 419 469 |  | 
| 420 470 | 
             
                # Enable chabot in room
         | 
| 421 471 | 
             
                #
         | 
| 472 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#494d825f-a49c-4b18-954e-eaaccb738bcd
         | 
| 422 473 | 
             
                # @param room_id [Integer]
         | 
| 423 474 | 
             
                # @return [TrueClass]
         | 
| 424 | 
            -
                def  | 
| 475 | 
            +
                def enable_bot_in_room(room_id)
         | 
| 425 476 | 
             
                  post("/bot/#{room_id}/activate", is_active: true)
         | 
| 426 477 | 
             
                  true
         | 
| 427 478 | 
             
                end
         | 
| 428 479 |  | 
| 429 | 
            -
                # Disable  | 
| 480 | 
            +
                # Disable chatbot in room
         | 
| 430 481 | 
             
                #
         | 
| 482 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#494d825f-a49c-4b18-954e-eaaccb738bcd
         | 
| 431 483 | 
             
                # @param room_id [Integer]
         | 
| 432 484 | 
             
                # @return [TrueClass]
         | 
| 433 | 
            -
                def  | 
| 485 | 
            +
                def disable_bot_in_room(room_id)
         | 
| 434 486 | 
             
                  post("/bot/#{room_id}/activate", is_active: false)
         | 
| 435 487 | 
             
                  true
         | 
| 436 488 | 
             
                end
         | 
| 437 489 |  | 
| 438 490 | 
             
                # Handover room from chatbot to human agent
         | 
| 439 491 | 
             
                #
         | 
| 492 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#40867e85-7412-4e0d-84bd-e2506df23df8
         | 
| 440 493 | 
             
                # @param room_id [Integer]
         | 
| 441 494 | 
             
                # @return [TrueClass]
         | 
| 442 495 | 
             
                def handover_room_from_bot(room_id)
         | 
| @@ -446,36 +499,110 @@ module Qismo | |
| 446 499 |  | 
| 447 500 | 
             
                # Handover room from chatbot to human agent in specific divisions
         | 
| 448 501 | 
             
                #
         | 
| 502 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#8218db08-9753-4d74-ae5f-0ee62f8579b9
         | 
| 449 503 | 
             
                # @param room_id [Integer]
         | 
| 450 | 
            -
                # @param  | 
| 451 | 
            -
                # @param  | 
| 504 | 
            +
                # @param roles [Array<Integer>]
         | 
| 505 | 
            +
                # @param options [Hash]
         | 
| 452 506 | 
             
                # @return [TrueClass]
         | 
| 453 | 
            -
                def handover_room_from_bot_to_division(room_id, roles,  | 
| 454 | 
            -
                  post("/#{app_id}/bot/#{room_id}/hand_over_to_role",  | 
| 507 | 
            +
                def handover_room_from_bot_to_division(room_id, roles, options = {})
         | 
| 508 | 
            +
                  post("/#{app_id}/bot/#{room_id}/hand_over_to_role", options.merge(roles: roles))
         | 
| 455 509 | 
             
                  true
         | 
| 456 510 | 
             
                end
         | 
| 457 511 |  | 
| 458 512 | 
             
                # Initiate chat using Qiscus widget channel
         | 
| 459 513 | 
             
                #
         | 
| 514 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#d5a555de-59e0-4705-9582-c216d79e9390
         | 
| 460 515 | 
             
                # @param user_id [String]
         | 
| 461 516 | 
             
                # @param name [String]
         | 
| 462 | 
            -
                # @param  | 
| 463 | 
            -
                # @return [Qismo:: | 
| 464 | 
            -
                def initiate_widget_chat(user_id, name,  | 
| 465 | 
            -
                   | 
| 466 | 
            -
                  post("/api/v2/qiscus/initiate_chat",  | 
| 517 | 
            +
                # @param options [Hash]
         | 
| 518 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 519 | 
            +
                def initiate_widget_chat(user_id, name, options = {})
         | 
| 520 | 
            +
                  options = options.merge(app_id: app_id, user_id: user_id, name: name)
         | 
| 521 | 
            +
                  post("/api/v2/qiscus/initiate_chat", options).data.customer_room
         | 
| 467 522 | 
             
                end
         | 
| 468 523 |  | 
| 524 | 
            +
                alias_method :initiate_chat, :initiate_widget_chat
         | 
| 525 | 
            +
             | 
| 469 526 | 
             
                # Send message to custom channel
         | 
| 470 527 | 
             
                #
         | 
| 528 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#aee54b21-68f1-4d31-9d81-d3c73b3e125b
         | 
| 471 529 | 
             
                # @param identifier_key [String]
         | 
| 472 530 | 
             
                # @param user_id [String]
         | 
| 473 531 | 
             
                # @param name [String]
         | 
| 474 | 
            -
                # @param  | 
| 475 | 
            -
                # @return [Qismo:: | 
| 476 | 
            -
                def send_message_to_custom_channel(identifier_key, user_id, name,  | 
| 532 | 
            +
                # @param options [Hash]
         | 
| 533 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 534 | 
            +
                def send_message_to_custom_channel(identifier_key, user_id, name, options = {})
         | 
| 477 535 | 
             
                  post("/#{app_id}/api/v2/custom_channel/send",
         | 
| 478 | 
            -
                     | 
| 536 | 
            +
                    options.merge(identifier_key: identifier_key, user_id: user_id, name: name)).data
         | 
| 537 | 
            +
                end
         | 
| 538 | 
            +
             | 
| 539 | 
            +
                # List integrated channels
         | 
| 540 | 
            +
                #
         | 
| 541 | 
            +
                # @see https://documenter.getpostman.com/view/8259884/TVsuCSeT#aee54b21-68f1-4d31-9d81-d3c73b3e125b
         | 
| 542 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 543 | 
            +
                def channels
         | 
| 544 | 
            +
                  get("/api/v2/channels").data
         | 
| 545 | 
            +
                end
         | 
| 546 | 
            +
             | 
| 547 | 
            +
                # Create customchannel
         | 
| 548 | 
            +
                #
         | 
| 549 | 
            +
                # @param identifier_key [String]
         | 
| 550 | 
            +
                # @param name [String]
         | 
| 551 | 
            +
                # @param webhook_url [String]
         | 
| 552 | 
            +
                # @param options [Hash]
         | 
| 553 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 554 | 
            +
                def create_custom_channel(identifier_key, name, webhook_url, options = {})
         | 
| 555 | 
            +
                  options = options.merge(
         | 
| 556 | 
            +
                    identifier_key: identifier_key,
         | 
| 557 | 
            +
                    name: name,
         | 
| 558 | 
            +
                    webhook_url: webhook_url,
         | 
| 559 | 
            +
                  )
         | 
| 560 | 
            +
             | 
| 561 | 
            +
                  options[:is_active] = true unless options[:is_active].nil?
         | 
| 562 | 
            +
             | 
| 563 | 
            +
                  post("/api/v1/custom_channel/connect", options.merge).data
         | 
| 564 | 
            +
                end
         | 
| 565 | 
            +
             | 
| 566 | 
            +
                # Update custom channel
         | 
| 567 | 
            +
                #
         | 
| 568 | 
            +
                # @param id [Integer]
         | 
| 569 | 
            +
                # @param options [Hash]
         | 
| 570 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 571 | 
            +
                def update_custom_channel(id, options = {})
         | 
| 572 | 
            +
                  channel = channels.custom_channels.find { |cc| cc.id == id }
         | 
| 573 | 
            +
                  if channel.nil?
         | 
| 574 | 
            +
                    raise Qismo::NotFoundError.new("Channel not found", status_code: 404, response_body: nil)
         | 
| 575 | 
            +
                  end
         | 
| 576 | 
            +
             | 
| 577 | 
            +
                  channel_hash = JSON.parse(channel.to_json, symbolize_names: true)
         | 
| 578 | 
            +
                  new_channel_config = channel_hash.merge(options)
         | 
| 579 | 
            +
             | 
| 580 | 
            +
                  post("/api/v1/custom_channel/connect/update", new_channel_config).data
         | 
| 581 | 
            +
                end
         | 
| 582 | 
            +
             | 
| 583 | 
            +
                # Activate custom channel
         | 
| 584 | 
            +
                #
         | 
| 585 | 
            +
                # @param id [Integer]
         | 
| 586 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 587 | 
            +
                def activate_custom_channel(id)
         | 
| 588 | 
            +
                  update_custom_channel(id, is_active: true)
         | 
| 589 | 
            +
                end
         | 
| 590 | 
            +
             | 
| 591 | 
            +
                # Deactivate custom channel
         | 
| 592 | 
            +
                #
         | 
| 593 | 
            +
                # @param id [Integer]
         | 
| 594 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 595 | 
            +
                def deactivate_custom_channel(id)
         | 
| 596 | 
            +
                  update_custom_channel(id, is_active: false)
         | 
| 597 | 
            +
                end
         | 
| 598 | 
            +
             | 
| 599 | 
            +
                # Delete custom channel
         | 
| 600 | 
            +
                #
         | 
| 601 | 
            +
                # @param id [Integer]
         | 
| 602 | 
            +
                # @return [TrueClass]
         | 
| 603 | 
            +
                def delete_custom_channel(id)
         | 
| 604 | 
            +
                  post("/api/v2/custom_channel/connect/#{id}/delete")
         | 
| 605 | 
            +
                  true
         | 
| 479 606 | 
             
                end
         | 
| 480 607 | 
             
              end
         | 
| 481 608 | 
             
            end
         | 
    
        data/lib/qismo/client.rb
    CHANGED
    
    | @@ -28,9 +28,9 @@ module Qismo | |
| 28 28 |  | 
| 29 29 | 
             
                # Initialize client
         | 
| 30 30 | 
             
                #
         | 
| 31 | 
            -
                # @param  | 
| 32 | 
            -
                def initialize( | 
| 33 | 
            -
                  DEFAULT_OPTIONS.merge( | 
| 31 | 
            +
                # @param options [Hash]
         | 
| 32 | 
            +
                def initialize(options = {})
         | 
| 33 | 
            +
                  DEFAULT_OPTIONS.merge(options).each do |key, value|
         | 
| 34 34 | 
             
                    instance_variable_set("@#{key}", value)
         | 
| 35 35 | 
             
                  end
         | 
| 36 36 | 
             
                end
         | 
| @@ -39,43 +39,55 @@ module Qismo | |
| 39 39 | 
             
                #
         | 
| 40 40 | 
             
                # @param path [String]
         | 
| 41 41 | 
             
                # @param body [Hash]
         | 
| 42 | 
            -
                # @return [Qismo:: | 
| 42 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 43 43 | 
             
                def post(path, body = {})
         | 
| 44 44 | 
             
                  request(:post, path, json: body)
         | 
| 45 45 | 
             
                end
         | 
| 46 46 |  | 
| 47 | 
            -
                #  | 
| 47 | 
            +
                # Send HTTP request with post method to upload file
         | 
| 48 48 | 
             
                #
         | 
| 49 49 | 
             
                # @param path [String]
         | 
| 50 50 | 
             
                # @param body [Hash]
         | 
| 51 | 
            -
                # @return [Qismo:: | 
| 51 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 52 52 | 
             
                def post_upload(path, body = {})
         | 
| 53 53 | 
             
                  request(:post, form: body)
         | 
| 54 54 | 
             
                end
         | 
| 55 55 |  | 
| 56 | 
            -
                # Send  | 
| 56 | 
            +
                # Send HTTP request with get method
         | 
| 57 57 | 
             
                #
         | 
| 58 58 | 
             
                # @param path [String]
         | 
| 59 59 | 
             
                # @param params [Hash]
         | 
| 60 | 
            -
                # @return [Qismo:: | 
| 61 | 
            -
                def get(path,  | 
| 60 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 61 | 
            +
                def get(path, params = {})
         | 
| 62 62 | 
             
                  request(:get, path, params: params)
         | 
| 63 63 | 
             
                end
         | 
| 64 64 |  | 
| 65 | 
            -
                 | 
| 66 | 
            -
             | 
| 65 | 
            +
                # Send HTTP request with delete method
         | 
| 66 | 
            +
                #
         | 
| 67 | 
            +
                # @param path [String]
         | 
| 68 | 
            +
                # @param params [Hash]
         | 
| 69 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 70 | 
            +
                def delete(path, params = {})
         | 
| 71 | 
            +
                  request(:delete, path, params: params)
         | 
| 67 72 | 
             
                end
         | 
| 68 73 |  | 
| 69 | 
            -
                # Send  | 
| 74 | 
            +
                # Send HTTP request
         | 
| 70 75 | 
             
                #
         | 
| 71 76 | 
             
                # @param method [Symbol, String]
         | 
| 72 77 | 
             
                # @param path [String]
         | 
| 73 | 
            -
                # @param  | 
| 74 | 
            -
                # @ | 
| 75 | 
            -
                 | 
| 76 | 
            -
             | 
| 78 | 
            +
                # @param headers [Hash]
         | 
| 79 | 
            +
                # @param params [Hash]
         | 
| 80 | 
            +
                # @param json [Hash]
         | 
| 81 | 
            +
                # @return [Qismo::SingleObject]
         | 
| 82 | 
            +
                def request(method, path, headers: {}, params: {}, json: {})
         | 
| 83 | 
            +
                  res = connection.request(method, @url + path, {
         | 
| 84 | 
            +
                    headers: headers,
         | 
| 85 | 
            +
                    params: params,
         | 
| 86 | 
            +
                    json: json,
         | 
| 87 | 
            +
                  })
         | 
| 88 | 
            +
             | 
| 77 89 | 
             
                  if res.status.success?
         | 
| 78 | 
            -
                    return  | 
| 90 | 
            +
                    return SingleObject.new(JSON.parse(res.to_s))
         | 
| 79 91 | 
             
                  end
         | 
| 80 92 |  | 
| 81 93 | 
             
                  if res.status.server_error?
         | 
| @@ -83,10 +95,10 @@ module Qismo | |
| 83 95 | 
             
                  end
         | 
| 84 96 |  | 
| 85 97 | 
             
                  if res.status.client_error?
         | 
| 86 | 
            -
                    body =  | 
| 98 | 
            +
                    body = SingleObject.new(JSON.parse(res.to_s))
         | 
| 87 99 |  | 
| 88 100 | 
             
                    error = body.errors
         | 
| 89 | 
            -
                    error = error.message if error.is_a?( | 
| 101 | 
            +
                    error = error.message if error.is_a?(SingleObject)
         | 
| 90 102 |  | 
| 91 103 | 
             
                    error_klass_map = {
         | 
| 92 104 | 
             
                      400 => BadRequestError,
         | 
    
        data/lib/qismo/model.rb
    CHANGED
    
    | @@ -3,14 +3,14 @@ | |
| 3 3 | 
             
            module Qismo
         | 
| 4 4 | 
             
              # Class to handle http response body
         | 
| 5 5 | 
             
              #
         | 
| 6 | 
            -
              class  | 
| 6 | 
            +
              class SingleObject
         | 
| 7 7 | 
             
                # Initiate data object
         | 
| 8 8 | 
             
                #
         | 
| 9 | 
            -
                # @param  | 
| 10 | 
            -
                def initialize( | 
| 11 | 
            -
                   | 
| 9 | 
            +
                # @param options [Hash]
         | 
| 10 | 
            +
                def initialize(options = {})
         | 
| 11 | 
            +
                  options.each do |key, value|
         | 
| 12 12 | 
             
                    value = if value.is_a?(Array)
         | 
| 13 | 
            -
                      handle_array(value)
         | 
| 13 | 
            +
                      CollectionObject.new(handle_array(value))
         | 
| 14 14 | 
             
                    elsif value.is_a?(Hash)
         | 
| 15 15 | 
             
                      self.class.new(value)
         | 
| 16 16 | 
             
                    elsif value.is_a?(TrueClass) || value.is_a?(FalseClass)
         | 
| @@ -54,15 +54,15 @@ module Qismo | |
| 54 54 |  | 
| 55 55 | 
             
              # Class to handle response body that contain pagination
         | 
| 56 56 | 
             
              #
         | 
| 57 | 
            -
              class  | 
| 57 | 
            +
              class CollectionObject < Array
         | 
| 58 58 | 
             
                # Initiate collection
         | 
| 59 59 | 
             
                #
         | 
| 60 | 
            -
                # @param data [Qismo:: | 
| 60 | 
            +
                # @param data [Qismo::SingleObject]
         | 
| 61 61 | 
             
                # @param prev_page [String, Integer]
         | 
| 62 62 | 
             
                # @param next_page [String, Integer]
         | 
| 63 63 | 
             
                # @param prev_func [Proc, NilClass]
         | 
| 64 64 | 
             
                # @param next_func [Proc, NilClass]
         | 
| 65 | 
            -
                def initialize(data, prev_page: nil, next_page: nil, prev_func: -> { nil }, next_func: -> { nil })
         | 
| 65 | 
            +
                def initialize(data = [], prev_page: nil, next_page: nil, prev_func: -> { nil }, next_func: -> { nil })
         | 
| 66 66 | 
             
                  super(data)
         | 
| 67 67 |  | 
| 68 68 | 
             
                  @prev_page = prev_page
         | 
| @@ -87,14 +87,14 @@ module Qismo | |
| 87 87 |  | 
| 88 88 | 
             
                # Call api request for next page
         | 
| 89 89 | 
             
                #
         | 
| 90 | 
            -
                # @return [Qismo:: | 
| 90 | 
            +
                # @return [Qismo::SingleObject, Qismo::CollectionObject]
         | 
| 91 91 | 
             
                def next_page
         | 
| 92 92 | 
             
                  @next_func.call if has_next_page?
         | 
| 93 93 | 
             
                end
         | 
| 94 94 |  | 
| 95 95 | 
             
                # Call api request for previous page
         | 
| 96 96 | 
             
                #
         | 
| 97 | 
            -
                # @return [Qismo:: | 
| 97 | 
            +
                # @return [Qismo::SingleObject, Qismo::CollectionObject]
         | 
| 98 98 | 
             
                def prev_page
         | 
| 99 99 | 
             
                  @prev_func.call if has_prev_page?
         | 
| 100 100 | 
             
                end
         | 
    
        data/lib/qismo/util.rb
    CHANGED
    
    
    
        data/lib/qismo/version.rb
    CHANGED
    
    
    
        data/lib/qismo.rb
    CHANGED
    
    | @@ -11,7 +11,8 @@ require "qismo/api" | |
| 11 11 | 
             
            require "qismo/client"
         | 
| 12 12 |  | 
| 13 13 | 
             
            module Qismo
         | 
| 14 | 
            -
              # @! | 
| 14 | 
            +
              # @!parse extend Qismo::Api
         | 
| 15 | 
            +
             | 
| 15 16 | 
             
              class << self
         | 
| 16 17 | 
             
                def configure
         | 
| 17 18 | 
             
                  yield client
         | 
| @@ -21,34 +22,31 @@ module Qismo | |
| 21 22 |  | 
| 22 23 | 
             
                # Initiate Qismo ruby client
         | 
| 23 24 | 
             
                #
         | 
| 24 | 
            -
                # @param  | 
| 25 | 
            +
                # @param options [Hash]
         | 
| 25 26 | 
             
                # @return [Qismo::Client]
         | 
| 26 | 
            -
                def new( | 
| 27 | 
            -
                  @client = Client.new( | 
| 27 | 
            +
                def new(options = {})
         | 
| 28 | 
            +
                  @client = Client.new(options)
         | 
| 28 29 | 
             
                end
         | 
| 29 30 |  | 
| 30 | 
            -
                 | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 31 | 
            +
                # @return [Qismo::Client]
         | 
| 32 | 
            +
                def client
         | 
| 33 | 
            +
                  @client ||= Client.new
         | 
| 34 | 
            +
                end
         | 
| 33 35 |  | 
| 34 | 
            -
             | 
| 35 | 
            -
                  end
         | 
| 36 | 
            -
                else
         | 
| 37 | 
            -
                  def method_missing(method, *args, &block)
         | 
| 38 | 
            -
                    return super unless client.respond_to?(method)
         | 
| 36 | 
            +
                private
         | 
| 39 37 |  | 
| 40 | 
            -
             | 
| 41 | 
            -
                   | 
| 42 | 
            -
                end
         | 
| 38 | 
            +
                def method_missing(method, *args, &block)
         | 
| 39 | 
            +
                  return super unless client.respond_to?(method)
         | 
| 43 40 |  | 
| 44 | 
            -
             | 
| 45 | 
            -
                  Qismo::Client.instance_methods.include?(method_name)
         | 
| 41 | 
            +
                  client.send(method * args, &block)
         | 
| 46 42 | 
             
                end
         | 
| 47 43 |  | 
| 48 | 
            -
                 | 
| 44 | 
            +
                def respond_to?(method_name, include_private = false)
         | 
| 45 | 
            +
                  client.respond_to?(method_name, include_private) || super(method_name, include_private)
         | 
| 46 | 
            +
                end
         | 
| 49 47 |  | 
| 50 | 
            -
                def  | 
| 51 | 
            -
                   | 
| 48 | 
            +
                def respond_to_missing?(method_name, include_private = false)
         | 
| 49 | 
            +
                  client.respond_to?(method_name, include_private) || super(method_name, include_private)
         | 
| 52 50 | 
             
                end
         | 
| 53 51 | 
             
              end
         | 
| 54 52 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: qismo
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.11.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Qiscus Integration
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2022-12- | 
| 11 | 
            +
            date: 2022-12-08 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -129,12 +129,14 @@ files: | |
| 129 129 | 
             
            - lib/qismo/model.rb
         | 
| 130 130 | 
             
            - lib/qismo/util.rb
         | 
| 131 131 | 
             
            - lib/qismo/version.rb
         | 
| 132 | 
            -
            homepage: https://qiscus | 
| 132 | 
            +
            homepage: https://bitbucket.org/qiscus/qismo-rb
         | 
| 133 133 | 
             
            licenses:
         | 
| 134 134 | 
             
            - MIT
         | 
| 135 135 | 
             
            metadata:
         | 
| 136 136 | 
             
              allowed_push_host: https://rubygems.org
         | 
| 137 137 | 
             
              source_code_uri: https://bitbucket.org/qiscus/qismo-rb
         | 
| 138 | 
            +
              homepage_uri: https://bitbucket.org/qiscus/qismo-rb
         | 
| 139 | 
            +
              documentation_uri: https://www.rubydoc.info/gems/qismo
         | 
| 138 140 | 
             
            post_install_message: 
         | 
| 139 141 | 
             
            rdoc_options: []
         | 
| 140 142 | 
             
            require_paths:
         | 
| @@ -153,5 +155,5 @@ requirements: [] | |
| 153 155 | 
             
            rubygems_version: 3.1.6
         | 
| 154 156 | 
             
            signing_key: 
         | 
| 155 157 | 
             
            specification_version: 4
         | 
| 156 | 
            -
            summary: Qiscus Omnichannel  | 
| 158 | 
            +
            summary: Ruby wrapper for Qiscus Omnichannel public API
         | 
| 157 159 | 
             
            test_files: []
         |