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

Oracle Application Express Views (APEX)

Application Express Views Search SELECT * FROM apex_dictionary WHERE column_id = 0; View Comment Parent View APEX_APPLICATIONS Applications defined in the current workspace or database user. APEX_WORKSPACES APEX_APPLICATION_ALL_AUTH All authorization schemes for all components by Application APEX_APPLICATIONS

Save Selected Interactive Grid Records into a Collection - Oracle APEX

Here I am giving an example to save selected interactive grid records into a oracle apex collection. Step 1: Create a new blank page. Note: Mine was page 20. You will need to update reference to " P20 " with your page number if it's different. Step 2: Create a new interactive grid report region to the page using below query. Set Static Id "EmpDetails" to the region. SELECT  *     FROM   ( SELECT  emp . empno ,                emp . ename ,                emp . JOB ,                dept . dname department ,                dept . loc  LOCATION ,                mgr . ename  manager ,                emp . hiredate ,                 nvl ( emp . sal , 0 )  salary ,                 nvl ( emp . comm , 0 )  commission            FROM  eba_demo_chart_emp emp ,                eba_demo_chart_dept dept ,                eba_demo_chart_emp mgr           WHERE  emp . deptno = dept . deptno             AND  emp . mgr      = mgr . empno  ( + )           ORDER   BY  emp . ename