diff --git a/.env-example b/.env-example index e139f7d..8ae9d7b 100644 --- a/.env-example +++ b/.env-example @@ -30,6 +30,9 @@ WHATSAPP_TEMPLATE_NAME= WHATSAPP_AUTH_TEMPLATE_NAME= WHATSAPP_TEMPLATE_REPLACEMENT_TEXT= +## For RCS messaging +RCS_SENDER_ID= + ## For media messaging (WhatsApp, Messenger, Viber) IMAGE_URL= IMAGE_CAPTION= @@ -38,6 +41,11 @@ FILE_CAPTION= AUDIO_URL= VIDEO_URL= +## For Update Action + +MESSAGE_UUID= +GEOSPECIFIC_VONAGE_API_HOST= + # Vonage Number Insight variables INSIGHT_NUMBER= diff --git a/messages/rcs/revoke-message.rb b/messages/rcs/revoke-message.rb new file mode 100644 index 0000000..3fdac49 --- /dev/null +++ b/messages/rcs/revoke-message.rb @@ -0,0 +1,18 @@ +require 'dotenv/load' +require 'vonage' + +VONAGE_APPLICATION_ID = ENV['VONAGE_APPLICATION_ID'] +VONAGE_APPLICATION_PRIVATE_KEY_PATH = ENV['VONAGE_APPLICATION_PRIVATE_KEY_PATH'] +GEOSPECIFIC_VONAGE_API_HOST = ENV['GEOSPECIFIC_VONAGE_API_HOST'] +MESSAGE_UUID = ENV['MESSAGE_UUID'] + +client = Vonage::Client.new( + application_id: VONAGE_APPLICATION_ID, + private_key: File.read(VONAGE_APPLICATION_PRIVATE_KEY_PATH), + api_host: GEOSPECIFIC_VONAGE_API_HOST +) + +client.messaging.update( + message_uuid: MESSAGE_UUID, + status: 'revoked' +) \ No newline at end of file diff --git a/messages/rcs/send-file.rb b/messages/rcs/send-file.rb new file mode 100644 index 0000000..7a5c73c --- /dev/null +++ b/messages/rcs/send-file.rb @@ -0,0 +1,26 @@ +require 'dotenv/load' +require 'vonage' + +VONAGE_APPLICATION_ID = ENV['VONAGE_APPLICATION_ID'] +VONAGE_APPLICATION_PRIVATE_KEY_PATH = ENV['VONAGE_APPLICATION_PRIVATE_KEY_PATH'] +RCS_SENDER_ID = ENV['RCS_SENDER_ID'] +TO_NUMBER = ENV['TO_NUMBER'] +FILE_URL = ENV['FILE_URL'] + +client = Vonage::Client.new( + application_id: VONAGE_APPLICATION_ID, + private_key: File.read(VONAGE_APPLICATION_PRIVATE_KEY_PATH) +) + +message = client.messaging.rcs( + type: 'file', + message: { + url: ENV['FILE_URL'], + } +) + +client.messaging.send( + from: RCS_SENDER_ID, + to: TO_NUMBER, + **message +) diff --git a/messages/rcs/send-image.rb b/messages/rcs/send-image.rb new file mode 100644 index 0000000..1e1407d --- /dev/null +++ b/messages/rcs/send-image.rb @@ -0,0 +1,26 @@ +require 'dotenv/load' +require 'vonage' + +VONAGE_APPLICATION_ID = ENV['VONAGE_APPLICATION_ID'] +VONAGE_APPLICATION_PRIVATE_KEY_PATH = ENV['VONAGE_APPLICATION_PRIVATE_KEY_PATH'] +RCS_SENDER_ID = ENV['RCS_SENDER_ID'] +TO_NUMBER = ENV['TO_NUMBER'] +IMAGE_URL = ENV['IMAGE_URL'] + +client = Vonage::Client.new( + application_id: VONAGE_APPLICATION_ID, + private_key: File.read(VONAGE_APPLICATION_PRIVATE_KEY_PATH) +) + +message = client.messaging.rcs( + type: 'image', + message: { + url: ENV['IMAGE_URL'], + } +) + +client.messaging.send( + from: RCS_SENDER_ID, + to: TO_NUMBER, + **message +) diff --git a/messages/rcs/send-rich-card-carousel.rb b/messages/rcs/send-rich-card-carousel.rb new file mode 100644 index 0000000..c3211dc --- /dev/null +++ b/messages/rcs/send-rich-card-carousel.rb @@ -0,0 +1,73 @@ +require 'dotenv/load' +require 'vonage' + +VONAGE_APPLICATION_ID = ENV['VONAGE_APPLICATION_ID'] +VONAGE_APPLICATION_PRIVATE_KEY_PATH = ENV['VONAGE_APPLICATION_PRIVATE_KEY_PATH'] +RCS_SENDER_ID = ENV['RCS_SENDER_ID'] +TO_NUMBER = ENV['TO_NUMBER'] +IMAGE_URL = ENV['IMAGE_URL'] +VIDEO_URL = ENV['VIDEO_URL'] + +client = Vonage::Client.new( + application_id: VONAGE_APPLICATION_ID, + private_key: File.read(VONAGE_APPLICATION_PRIVATE_KEY_PATH) +) + +message = client.messaging.rcs( + type: 'custom', + message: { + contentMessage: { + richCard: { + carouselCard: { + cardWidth: "MEDIUM", + cardContents: [ + { + title: "Option 1: Photo", + description: "Do you prefer this photo?", + media: { + height: "MEDIUM", + contentInfo: { + fileUrl: ENV['IMAGE_URL'], + forceRefresh: false + } + }, + suggestions: [ + { + reply: { + text: "Option 1", + postbackData: "card_1" + } + } + ] + }, + { + title: "Option 1: Video", + description: "Or this video?", + media: { + height: "MEDIUM", + contentInfo: { + fileUrl: ENV['VIDEO_URL'], + forceRefresh: false + } + }, + suggestions: [ + { + reply: { + text: "Option 2", + postbackData: "card_2" + } + } + ] + } + ] + } + } + } + } +) + +client.messaging.send( + from: RCS_SENDER_ID, + to: TO_NUMBER, + **message +) diff --git a/messages/rcs/send-rich-card-standalone.rb b/messages/rcs/send-rich-card-standalone.rb new file mode 100644 index 0000000..06191ad --- /dev/null +++ b/messages/rcs/send-rich-card-standalone.rb @@ -0,0 +1,58 @@ +require 'dotenv/load' +require 'vonage' + +VONAGE_APPLICATION_ID = ENV['VONAGE_APPLICATION_ID'] +VONAGE_APPLICATION_PRIVATE_KEY_PATH = ENV['VONAGE_APPLICATION_PRIVATE_KEY_PATH'] +RCS_SENDER_ID = ENV['RCS_SENDER_ID'] +TO_NUMBER = ENV['TO_NUMBER'] +IMAGE_URL = ENV['IMAGE_URL'] + +client = Vonage::Client.new( + application_id: VONAGE_APPLICATION_ID, + private_key: File.read(VONAGE_APPLICATION_PRIVATE_KEY_PATH) +) + +message = client.messaging.rcs( + type: 'custom', + message: { + contentMessage: { + richCard: { + standaloneCard: { + thumbnailImageAlignment: "RIGHT", + cardOrientation: "VERTICAL", + cardContent: { + title: "Quick question", + description: "Do you like this picture?", + media: { + height: "TALL", + contentInfo: { + fileUrl: ENV['IMAGE_URL'], + forceRefresh: false + } + }, + suggestions: [ + { + reply: { + text: "Yes", + postbackData: "suggestion_1" + } + }, + { + reply: { + text: "I love it!", + postbackData: "suggestion_2" + } + } + ] + } + } + } + } + } +) + +client.messaging.send( + from: RCS_SENDER_ID, + to: TO_NUMBER, + **message +) diff --git a/messages/rcs/send-suggested-action-create-calendar-event.rb b/messages/rcs/send-suggested-action-create-calendar-event.rb new file mode 100644 index 0000000..7a3e629 --- /dev/null +++ b/messages/rcs/send-suggested-action-create-calendar-event.rb @@ -0,0 +1,42 @@ +require 'dotenv/load' +require 'vonage' + +VONAGE_APPLICATION_ID = ENV['VONAGE_APPLICATION_ID'] +VONAGE_APPLICATION_PRIVATE_KEY_PATH = ENV['VONAGE_APPLICATION_PRIVATE_KEY_PATH'] +RCS_SENDER_ID = ENV['RCS_SENDER_ID'] +TO_NUMBER = ENV['TO_NUMBER'] + +client = Vonage::Client.new( + application_id: VONAGE_APPLICATION_ID, + private_key: File.read(VONAGE_APPLICATION_PRIVATE_KEY_PATH) +) + +message = client.messaging.rcs( + type: 'custom', + message: { + contentMessage: { + text: "Product Launch: Save the date!", + suggestions: [ + { + action: { + text: "Save to calendar", + postbackData: "postback_data_1234", + fallbackUrl: "https://www.google.com/calendar", + createCalendarEventAction: { + startTime: "2024-08-24T20:00:00Z", + endTime: "2024-08-24T22:00:00Z", + title: "Vonage API Product Launch", + description: "Join us for the launch of our latest product!", + } + } + } + ] + } + } +) + +client.messaging.send( + from: RCS_SENDER_ID, + to: TO_NUMBER, + **message +) diff --git a/messages/rcs/send-suggested-action-dial.rb b/messages/rcs/send-suggested-action-dial.rb new file mode 100644 index 0000000..fd8024a --- /dev/null +++ b/messages/rcs/send-suggested-action-dial.rb @@ -0,0 +1,39 @@ +require 'dotenv/load' +require 'vonage' + +VONAGE_APPLICATION_ID = ENV['VONAGE_APPLICATION_ID'] +VONAGE_APPLICATION_PRIVATE_KEY_PATH = ENV['VONAGE_APPLICATION_PRIVATE_KEY_PATH'] +RCS_SENDER_ID = ENV['RCS_SENDER_ID'] +TO_NUMBER = ENV['TO_NUMBER'] + +client = Vonage::Client.new( + application_id: VONAGE_APPLICATION_ID, + private_key: File.read(VONAGE_APPLICATION_PRIVATE_KEY_PATH) +) + +message = client.messaging.rcs( + type: 'custom', + message: { + contentMessage: { + text: "Call us to claim your free gift!", + suggestions: [ + { + action: { + text: "Call now!", + postbackData: "postback_data_1234", + fallbackUrl: "https://www.example.com/contact/", + dialAction: { + phoneNumber: "+447900000000" + } + } + } + ] + } + } +) + +client.messaging.send( + from: RCS_SENDER_ID, + to: TO_NUMBER, + **message +) diff --git a/messages/rcs/send-suggested-action-multiple.rb b/messages/rcs/send-suggested-action-multiple.rb new file mode 100644 index 0000000..677ff18 --- /dev/null +++ b/messages/rcs/send-suggested-action-multiple.rb @@ -0,0 +1,48 @@ +require 'dotenv/load' +require 'vonage' + +VONAGE_APPLICATION_ID = ENV['VONAGE_APPLICATION_ID'] +VONAGE_APPLICATION_PRIVATE_KEY_PATH = ENV['VONAGE_APPLICATION_PRIVATE_KEY_PATH'] +RCS_SENDER_ID = ENV['RCS_SENDER_ID'] +TO_NUMBER = ENV['TO_NUMBER'] + +client = Vonage::Client.new( + application_id: VONAGE_APPLICATION_ID, + private_key: File.read(VONAGE_APPLICATION_PRIVATE_KEY_PATH) +) + +message = client.messaging.rcs( + type: 'custom', + message: { + contentMessage: { + text: "Need some help? Call us now or visit our website for more information.", + suggestions: [ + { + action: { + text: "Call us", + postbackData: "postback_data_1234", + fallbackUrl: "https://www.example.com/contact/", + dialAction: { + phoneNumber: "+447900000000" + } + } + }, + { + action: { + text: "Visit site", + postbackData: "postback_data_1234", + openUrlAction: { + url: "http://example.com/" + } + } + } + ] + } + } +) + +client.messaging.send( + from: RCS_SENDER_ID, + to: TO_NUMBER, + **message +) diff --git a/messages/rcs/send-suggested-action-open-url.rb b/messages/rcs/send-suggested-action-open-url.rb new file mode 100644 index 0000000..09d9e08 --- /dev/null +++ b/messages/rcs/send-suggested-action-open-url.rb @@ -0,0 +1,38 @@ +require 'dotenv/load' +require 'vonage' + +VONAGE_APPLICATION_ID = ENV['VONAGE_APPLICATION_ID'] +VONAGE_APPLICATION_PRIVATE_KEY_PATH = ENV['VONAGE_APPLICATION_PRIVATE_KEY_PATH'] +RCS_SENDER_ID = ENV['RCS_SENDER_ID'] +TO_NUMBER = ENV['TO_NUMBER'] + +client = Vonage::Client.new( + application_id: VONAGE_APPLICATION_ID, + private_key: File.read(VONAGE_APPLICATION_PRIVATE_KEY_PATH) +) + +message = client.messaging.rcs( + type: 'custom', + message: { + contentMessage: { + text: "Check out our latest offers!", + suggestions: [ + { + action: { + text: "Open product page", + postbackData: "postback_data_1234", + openUrlAction: { + url: "http://example.com/" + } + } + } + ] + } + } +) + +client.messaging.send( + from: RCS_SENDER_ID, + to: TO_NUMBER, + **message +) diff --git a/messages/rcs/send-suggested-action-share-location.rb b/messages/rcs/send-suggested-action-share-location.rb new file mode 100644 index 0000000..cad1339 --- /dev/null +++ b/messages/rcs/send-suggested-action-share-location.rb @@ -0,0 +1,36 @@ +require 'dotenv/load' +require 'vonage' + +VONAGE_APPLICATION_ID = ENV['VONAGE_APPLICATION_ID'] +VONAGE_APPLICATION_PRIVATE_KEY_PATH = ENV['VONAGE_APPLICATION_PRIVATE_KEY_PATH'] +RCS_SENDER_ID = ENV['RCS_SENDER_ID'] +TO_NUMBER = ENV['TO_NUMBER'] + +client = Vonage::Client.new( + application_id: VONAGE_APPLICATION_ID, + private_key: File.read(VONAGE_APPLICATION_PRIVATE_KEY_PATH) +) + +message = client.messaging.rcs( + type: 'custom', + message: { + contentMessage: { + text: "Your driver will come and meet you at your specified location.", + suggestions: [ + { + action: { + text: "Share a location", + postbackData: "postback_data_1234", + shareLocationAction: {} + } + } + ] + } + } +) + +client.messaging.send( + from: RCS_SENDER_ID, + to: TO_NUMBER, + **message +) diff --git a/messages/rcs/send-suggested-action-view-location.rb b/messages/rcs/send-suggested-action-view-location.rb new file mode 100644 index 0000000..b349c0f --- /dev/null +++ b/messages/rcs/send-suggested-action-view-location.rb @@ -0,0 +1,43 @@ +require 'dotenv/load' +require 'vonage' + +VONAGE_APPLICATION_ID = ENV['VONAGE_APPLICATION_ID'] +VONAGE_APPLICATION_PRIVATE_KEY_PATH = ENV['VONAGE_APPLICATION_PRIVATE_KEY_PATH'] +RCS_SENDER_ID = ENV['RCS_SENDER_ID'] +TO_NUMBER = ENV['TO_NUMBER'] + +client = Vonage::Client.new( + application_id: VONAGE_APPLICATION_ID, + private_key: File.read(VONAGE_APPLICATION_PRIVATE_KEY_PATH) +) + +message = client.messaging.rcs( + type: 'custom', + message: { + contentMessage: { + text: "Drop by our office!", + suggestions: [ + { + action: { + text: "View map", + postbackData: "postback_data_1234", + fallbackUrl: "https://www.google.com/maps/place/Vonage/@51.5230371,-0.0852492,15z", + viewLocationAction: { + latLong: { + latitude: 51.5230371, + longitude: -0.0852492 + }, + label: "Vonage London Office" + } + } + } + ] + } + } +) + +client.messaging.send( + from: RCS_SENDER_ID, + to: TO_NUMBER, + **message +) diff --git a/messages/rcs/send-suggested-reply.rb b/messages/rcs/send-suggested-reply.rb new file mode 100644 index 0000000..705e7d7 --- /dev/null +++ b/messages/rcs/send-suggested-reply.rb @@ -0,0 +1,41 @@ +require 'dotenv/load' +require 'vonage' + +VONAGE_APPLICATION_ID = ENV['VONAGE_APPLICATION_ID'] +VONAGE_APPLICATION_PRIVATE_KEY_PATH = ENV['VONAGE_APPLICATION_PRIVATE_KEY_PATH'] +RCS_SENDER_ID = ENV['RCS_SENDER_ID'] +TO_NUMBER = ENV['TO_NUMBER'] + +client = Vonage::Client.new( + application_id: VONAGE_APPLICATION_ID, + private_key: File.read(VONAGE_APPLICATION_PRIVATE_KEY_PATH) +) + +message = client.messaging.rcs( + type: 'custom', + message: { + contentMessage: { + text: "What do you think of Vonage APIs?", + suggestions: [ + { + reply: { + text: "They're great!", + postbackData: "suggestion_1" + } + }, + { + reply: { + text: "They're awesome!", + postbackData: "suggestion_2" + } + } + ] + } + } +) + +client.messaging.send( + from: RCS_SENDER_ID, + to: TO_NUMBER, + **message +) diff --git a/messages/rcs/send-text.rb b/messages/rcs/send-text.rb new file mode 100644 index 0000000..6f1a233 --- /dev/null +++ b/messages/rcs/send-text.rb @@ -0,0 +1,23 @@ +require 'dotenv/load' +require 'vonage' + +VONAGE_APPLICATION_ID = ENV['VONAGE_APPLICATION_ID'] +VONAGE_APPLICATION_PRIVATE_KEY_PATH = ENV['VONAGE_APPLICATION_PRIVATE_KEY_PATH'] +RCS_SENDER_ID = ENV['RCS_SENDER_ID'] +TO_NUMBER = ENV['TO_NUMBER'] + +client = Vonage::Client.new( + application_id: VONAGE_APPLICATION_ID, + private_key: File.read(VONAGE_APPLICATION_PRIVATE_KEY_PATH) +) + +message = client.messaging.rcs( + type: 'text', + message: 'This is an RCS text message sent via the Vonage Messages API' +) + +client.messaging.send( + from: RCS_SENDER_ID, + to: TO_NUMBER, + **message +) diff --git a/messages/rcs/send-video.rb b/messages/rcs/send-video.rb new file mode 100644 index 0000000..c7984b7 --- /dev/null +++ b/messages/rcs/send-video.rb @@ -0,0 +1,26 @@ +require 'dotenv/load' +require 'vonage' + +VONAGE_APPLICATION_ID = ENV['VONAGE_APPLICATION_ID'] +VONAGE_APPLICATION_PRIVATE_KEY_PATH = ENV['VONAGE_APPLICATION_PRIVATE_KEY_PATH'] +RCS_SENDER_ID = ENV['RCS_SENDER_ID'] +TO_NUMBER = ENV['TO_NUMBER'] +VIDEO_URL = ENV['VIDEO_URL'] + +client = Vonage::Client.new( + application_id: VONAGE_APPLICATION_ID, + private_key: File.read(VONAGE_APPLICATION_PRIVATE_KEY_PATH) +) + +message = client.messaging.rcs( + type: 'video', + message: { + url: ENV['VIDEO_URL'], + } +) + +client.messaging.send( + from: RCS_SENDER_ID, + to: TO_NUMBER, + **message +) diff --git a/messages/whatsapp/mark-as-read.rb b/messages/whatsapp/mark-as-read.rb new file mode 100644 index 0000000..8cfaf06 --- /dev/null +++ b/messages/whatsapp/mark-as-read.rb @@ -0,0 +1,18 @@ +require 'dotenv/load' +require 'vonage' + +VONAGE_APPLICATION_ID = ENV['VONAGE_APPLICATION_ID'] +VONAGE_APPLICATION_PRIVATE_KEY_PATH = ENV['VONAGE_APPLICATION_PRIVATE_KEY_PATH'] +GEOSPECIFIC_VONAGE_API_HOST = ENV['GEOSPECIFIC_VONAGE_API_HOST'] +MESSAGE_UUID = ENV['MESSAGE_UUID'] + +client = Vonage::Client.new( + application_id: VONAGE_APPLICATION_ID, + private_key: File.read(VONAGE_APPLICATION_PRIVATE_KEY_PATH), + api_host: GEOSPECIFIC_VONAGE_API_HOST +) + +client.messaging.update( + message_uuid: MESSAGE_UUID, + status: 'read' +) \ No newline at end of file