Class: Whatsapp::Messages
- Inherits:
-
Object
- Object
- Whatsapp::Messages
- Extended by:
- ResponseHandling
- Includes:
- ResponseHandling
- Defined in:
- lib/ruby/whatsapp/messages.rb,
lib/ruby/whatsapp/messages/base.rb,
lib/ruby/whatsapp/messages/text.rb,
lib/ruby/whatsapp/messages/audio.rb,
lib/ruby/whatsapp/messages/image.rb,
lib/ruby/whatsapp/messages/video.rb,
lib/ruby/whatsapp/messages/address.rb,
lib/ruby/whatsapp/messages/sticker.rb,
lib/ruby/whatsapp/messages/contacts.rb,
lib/ruby/whatsapp/messages/document.rb,
lib/ruby/whatsapp/messages/location.rb,
lib/ruby/whatsapp/messages/reaction.rb,
lib/ruby/whatsapp/messages/response.rb,
lib/ruby/whatsapp/messages/template.rb,
lib/ruby/whatsapp/messages/interactive.rb,
lib/ruby/whatsapp/messages/contacts/org.rb,
lib/ruby/whatsapp/messages/contacts/url.rb,
lib/ruby/whatsapp/messages/contacts/name.rb,
lib/ruby/whatsapp/messages/contacts/email.rb,
lib/ruby/whatsapp/messages/contacts/phone.rb,
lib/ruby/whatsapp/messages/contacts/address.rb,
lib/ruby/whatsapp/messages/contacts/contact.rb,
lib/ruby/whatsapp/messages/interactive/base.rb,
lib/ruby/whatsapp/messages/interactive/body.rb,
lib/ruby/whatsapp/messages/location_request.rb,
lib/ruby/whatsapp/messages/response/contacts.rb,
lib/ruby/whatsapp/messages/response/messages.rb,
lib/ruby/whatsapp/messages/template/language.rb,
lib/ruby/whatsapp/messages/interactive/footer.rb,
lib/ruby/whatsapp/messages/interactive/header.rb,
lib/ruby/whatsapp/messages/template/component.rb,
lib/ruby/whatsapp/messages/template/parameter.rb,
lib/ruby/whatsapp/messages/mark_message_as_read.rb,
lib/ruby/whatsapp/messages/interactive/url_button.rb,
lib/ruby/whatsapp/messages/interactive/list_buttons.rb,
lib/ruby/whatsapp/messages/interactive/reply_buttons.rb,
lib/ruby/whatsapp/messages/interactive/media_carousel.rb,
lib/ruby/whatsapp/messages/interactive/product_carousel.rb,
lib/ruby/whatsapp/messages/interactive/media_carousel/card.rb,
lib/ruby/whatsapp/messages/interactive/list_buttons/section.rb,
lib/ruby/whatsapp/messages/interactive/reply_buttons/button.rb,
lib/ruby/whatsapp/messages/interactive/product_carousel/card.rb,
lib/ruby/whatsapp/messages/interactive/list_buttons/section/row.rb,
lib/ruby/whatsapp/messages/interactive/media_carousel/card/button.rb,
lib/ruby/whatsapp/messages/interactive/media_carousel/card/button/quick_reply.rb
Defined Under Namespace
Classes: Address, Audio, Base, Contacts, Document, Image, Interactive, Location, LocationRequest, MarkMessageAsRead, PayloadError, Reaction, Response, Sticker, Template, Text, Video
Constant Summary collapse
- KINDS =
Maps a public message kind to its implementing class. Resolution goes through this frozen whitelist (never
const_geton caller input), so an unknown or hostilekindcan only raise, never resolve an arbitrary constant. { text: Text, image: Image, audio: Audio, video: Video, document: Document, sticker: Sticker, contacts: Contacts, reaction: Reaction, location: Location, address: Address, location_request: LocationRequest, template: Template, interactive: Interactive, }.freeze
Constants included from ResponseHandling
ResponseHandling::MAX_ERROR_BODY
Instance Attribute Summary collapse
Class Method Summary collapse
-
.mark_message_as_read!(message_id:, client: Client.new) ⇒ Whatsapp::Messages::Response
Marks a previously received message as read.
Instance Method Summary collapse
-
#initialize(kind:, payload:, client: Client.new) ⇒ Messages
constructor
A new instance of Messages.
-
#send! ⇒ Object
Sends the message to the WhatsApp API.
Constructor Details
#initialize(kind:, payload:, client: Client.new) ⇒ Messages
Returns a new instance of Messages.
75 76 77 78 79 80 81 82 |
# File 'lib/ruby/whatsapp/messages.rb', line 75 def initialize(kind:, payload:, client: Client.new) klass = KINDS.fetch(kind.to_sym) do raise PayloadError, "Unknown message kind: #{kind.inspect}. Known kinds: #{KINDS.keys.join(', ')}" end @payload = klass.new(**payload) @client = client end |
Instance Attribute Details
#client ⇒ Whatsapp::Client
69 70 71 |
# File 'lib/ruby/whatsapp/messages.rb', line 69 def client @client end |
#payload ⇒ Whatsapp::Messages::Base
65 66 67 |
# File 'lib/ruby/whatsapp/messages.rb', line 65 def payload @payload end |
Class Method Details
.mark_message_as_read!(message_id:, client: Client.new) ⇒ Whatsapp::Messages::Response
Marks a previously received message as read. Deliberately not part of KINDS: this action has no recipient/type envelope, so it can't be dispatched through the kind:/payload: factory the way the rest of the message kinds are.
48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/ruby/whatsapp/messages.rb', line 48 def (message_id:, client: Client.new) payload = MarkMessageAsRead.new(message_id:) response = client.connection.post( client.path_for(client.phone_id, "messages"), json: payload.serialize ) checked_response = handle_response!(response, error_class: RequestError, action: "mark message as read") Response.deserialize(parse_json(checked_response)) end |
Instance Method Details
#send! ⇒ Object
Sends the message to the WhatsApp API. @return [Whatsapp::Messages::Response] The response from the API @raise [Whatsapp::Messages::PayloadError] if the payload is invalid @raise [Whatsapp::RequestError] if the request fails
88 89 90 91 92 93 |
# File 'lib/ruby/whatsapp/messages.rb', line 88 def send! raise PayloadError, "Invalid message: #{payload.errors..join(', ')}" unless payload.valid? response = perform_request! parse!(response) end |