Skip to main content

View List of Twilio Sent Messages in Oracle APEX using APEX_WEB_SERVICE API

  

Twilio Integration with Oracle APEX 22.1

The objective of this blog post is to show you how to list all Twilio sent messages in Oracle APEX using APEX_WEB_SERVICE API.

Before we get into the topic, let's take a look at the following link, which will help you to understand how you can get started with Twilio and use Twilio to send messages in Oracle APEX.

View List of Twilio Sent Messages

Below are steps involved to get this process done.
  1. Get Twilio Account SID, AUTH Token and Phone Number
  2. Get Twilio View Messages List API End Point
  3. Invoke Twilio View Messages List API with Postman
  4. Display the Twilio data in the form of report using APEX_WEB_SERVICE API

I) Get Twilio Account SID, AUTH Token and Phone Number

Login Twilio with your credentials and It will take you to the console page where you could see your Twilio Account SID, AUTH Token and Phone Number.

II) Get Twilio View Messages List API End Point

Step 1: You can get the end point from Console: Login --> Explore Products --> API Explorer

Step 2: Select "Programmable SMS" from the dropdown

Step 3: Expand "Messages" and click "View Messages List", there under "Request " you can find the end point.

III) Invoke Twilio View Messages List API with Postman

Step 1: Define Twilio Account Id as global variable (account_sid) in postman. Click "Environment Quick Look" to define global variables.


Step 2: Setup Authorization (Basic Authentication) and click "Send" button to call the API.


Note: When status code is between 200 and 299, then API is working fine.

IV) Display the Twilio data in the form of report using APEX_WEB_SERVICE API

Step 1: Create a new blank page.

Step 2: Create a new region on the page (Position: Content Body). In the Property Editor, apply the following changes:

Under Identification:
     For Title - enter View Twilio Messages
     For Type- select Classical Report/Interactive Report
Under Source:
     For Location - Local Database
     For Type - select SQL Query
     For SQL Query - Copy and paste below query.

SQL Query:

SELECT
      data.to_,
      data.sid,
      data.uri,
      data.body,
      data.from_,
      data.price,
      data.status,
      data.date_sent,
      data.direction,
      data.num_media,
      data.error_code,
      data.price_unit,
      data.account_sid,
      data.api_version,
      data.date_created,
      data.date_updated,
      data.num_segments,
      data.error_message,
      data.media,
      data.feedback,
      data.messaging_service_sid
    FROM
      (SELECT *
      FROM
        (SELECT
          to_                                   AS to_,
          sid                                   AS SID,
          uri                                   AS uri,
          body                                  AS BODY,
          from_                                 AS from_,
          to_number(price)                      AS price,
          status                                AS status,
          date_sent                             AS date_sent,
          direction                             AS direction,
          to_number(num_media)                  AS num_media,
          to_number(error_code)                 AS error_code,
          price_unit                            AS price_unit,
          account_sid                           AS account_sid,
          to_date(api_version,'YYYY-MM-DD') AS api_version,
          date_created                          AS date_created,
          date_updated                          AS date_updated,
          to_number(num_segments)               AS num_segments,
          error_message                         AS error_message,
          media                                 AS media,
          feedback                              AS feedback,
          messaging_service_sid                 AS messaging_service_sid
        FROM dual, 
             json_table(apex_web_service.make_rest_request(p_url => 'https://api.twilio.com/2010-04-01/Accounts/AC2b7b7fffbc349c2f59c82f5bdaa0fd2b/Messages.json'
                                                           p_http_method => 'GET',
                                                           p_username => <<Your Twilio Account SID>>,
                                                           p_password => <<Your Twilio Account Auth Token>>),
                        '$.messages[*]' COLUMNS(to_ VARCHAR2(4000) path '$.to',
                                             sid VARCHAR2(4000) path '$.sid',
                                             uri VARCHAR2(4000) path '$.uri',
                                             body VARCHAR2(4000) path '$.body',
                                             from_ VARCHAR2(4000) path '$.from',
                                             price VARCHAR2(4000) path '$.price',
                                             status VARCHAR2(4000) path '$.status',
                                             date_sent VARCHAR2(4000) path '$.date_sent',
                                             direction VARCHAR2(4000) path '$.direction',
                                             num_media VARCHAR2(4000) path '$.num_media',
                                             error_code VARCHAR2(4000) path '$.error_code',
                                             price_unit VARCHAR2(4000) path '$.price_unit',
                                             account_sid VARCHAR2(4000) path '$.account_sid',
                                             api_version VARCHAR2(4000) path '$.api_version',
                                             date_created VARCHAR2(4000) path '$.date_created',
                                             date_updated VARCHAR2(4000) path '$.date_updated',
                                             num_segments VARCHAR2(4000) path '$.num_segments',
                                             error_message VARCHAR2(4000) path '$.error_message',
                                             media VARCHAR2(4000) path '$.subresource_uris.media',
                                             feedback VARCHAR2(4000) path '$.subresource_uris.feedback',
                                             messaging_service_sid VARCHAR2(4000) path '$.messaging_service_sid'))
        )
      ) data
WHERE 1=1
ORDER BY data.sid ASC NULLS LAST,
  data.body ASC NULLS LAST;


Step 3: Report created and it will list all the Twilio sent messages.

API Success Response:

{

  "first_page_uri": "/2010-04-01/Accounts/AC2b7b7fffbc349c2f59c82f5bdaa0fd2b/Messages.json?PageSize=50&Page=0",

  "end": 10,

  "previous_page_uri": null,

  "messages": [

    {

      "body": "Sent from your Twilio trial account - Thanks for showing interest to join with Oracle APEX Community\nhttps://m.twil.io/HY8a0BbXU9",

      "num_segments": "1",

      "direction": "outbound-api",

      "from": "+17755227844",

      "date_updated": "Wed, 11 May 2022 12:36:11 +0000",

      "price": "-0.08950",

      "error_message": null,

      "uri": "/2010-04-01/Accounts/AC2b7b7fffbc349c2f59c82f5bdaa0fd2b/Messages/MM625c2e6a96f54f3ebde032c6c4389d83.json",

      "account_sid": "AC2b7b7fffbc349c2f59c82f5bdaa0fd2b",

      "num_media": "1",

      "to": "+971582036853",

      "date_created": "Wed, 11 May 2022 12:36:05 +0000",

      "status": "delivered",

      "sid": "MM625c2e6a96f54f3ebde032c6c4389d83",

      "date_sent": "Wed, 11 May 2022 12:36:06 +0000",

      "messaging_service_sid": null,

      "error_code": null,

      "price_unit": "USD",

      "api_version": "2010-04-01",

      "subresource_uris": {

        "media": "/2010-04-01/Accounts/AC2b7b7fffbc349c2f59c82f5bdaa0fd2b/Messages/MM625c2e6a96f54f3ebde032c6c4389d83/Media.json",

        "feedback": "/2010-04-01/Accounts/AC2b7b7fffbc349c2f59c82f5bdaa0fd2b/Messages/MM625c2e6a96f54f3ebde032c6c4389d83/Feedback.json"

      }

    }

  ],

  "uri": "/2010-04-01/Accounts/AC2b7b7fffbc349c2f59c82f5bdaa0fd2b/Messages.json?PageSize=50&Page=0",

  "page_size": 50,

  "start": 0,

  "next_page_uri": null,

  "page": 0

}

"messages" array has 21 fields.

Output:

The demo is here.

That's it. Happy APEXing!

Related Posts:

References/Credits:

Comments

Popular posts from this blog

Printing Page Numbers in RTF Template [Oracle BI Publisher]

Here I am giving an example to print the page numbers dynamically in the RTF (Rich Text Format) template. Step 1:  Go to page footer and copy and paste the below script. Page |  <?fo:page-number?>  of  <?fo:page-number-citation:xdofo:lastpage-joinseq?> <fo:page-number> :   This is the object, which is used to represent the current page-number. <?fo:page-number-citation:xdofo:lastpage-joinseq?> :  This is the syntax, which is used to represent the total number of pages. Step 2:  Load the XML and preview the result. Output: That's it. References: fo:page-number Printing Page Number Code in Oracle XMLP RTF Template

Friendly URL: Redirect to Different Page after Login in Oracle APEX 20.1

Oracle has updated apex.oracle.com to APEX 20.1 which includes among other features the new Friendly URL option. Here i am giving an example to redirect to different page after login in Oracle APEX 20.1 [Friendly URL Enabled] Step 1: Define home page for each user in emp master table as below Step 2: To enable Friendly URL Syntax, follow below steps, 1) On the Workspace home page, click the App Builder icon. 2) Select an application (The Application home page appears). 3) From Application home page, you can access the Definition page in TWO ways: Click the Edit Application Properties button. From Shared Components:              1) Click Shared Components .              2) Under Application Logic, click Application Definition Attributes . The Definition page appears. 4) Under Properties, configure the Friendly URL s attribute: Click Apply Changes to save your ch...

Open modal/inline dialog in Oracle APEX using JS

Analysis: From Oracle Apex 4.2,  Inline dialog can be opened as modal dialog/popup using JS. Open inline dialog region as modal dialog: Step 1: Create static region. Step 2:  Set Template => Inline Dialog. Step 3:  Assign the static id to the region. Fig 1: Set template and Static ID Step 4:  Create button or change one of the report column type to Link. (Action: Redirect URL). Step 5:  Put the below JS to open the region as modal dialog.                javascript:openModal('unitpricedetails');            Fig 2:  Open simple modal dialog Open inline dialog region as modal dialog and pass values to the items: Common Steps:  Step 1 to Step 4. Step 5:  To pass value to that region, create P1_UNIT_ID in the inline  dialog.       javascript:$s('P1_UNIT_ID','#UNIT_ID#');javascript:openModal('unitpricedetai...