Skip to main content

Oracle APEX – Amazon ALEXA integration WITHOUT Amazon Lambda ! (PART 2)

In the last blog post I prepared Oracle side. In this post I will show, how to prepare ALEXA Skill and how to integrate all layers.

Few weeks ago Amazon implemented new version of Alexa Skill Kit. Alexa Skill Kit is like a APEX builder. Low code technology, so you don't need to write any code :)

Let's start ! Go to Amazon Developer Console

1. Click Get Started on Alexa Skills Kit

2. As you can see on screen below there is already one skill on my list. Click on Create Skill to Create new one.

3. The name of my Skill will be - APEXUTIL Pizza  :) but you can name it as you wish.

4. Select Custom

5. Create Invocation. Users say a skill's invocation name to begin an interaction with a particular custom skill.
For example, if the invocation name is "apex pizza", users can say:
"Alexa, ask apex pizza ...."

6. One skill can have one or more Intents. An intent represents an action that fulfills a user's spoken request. For demo I'll use only one Intent: "howmanyorders". There are few others Intents but these are predefined and you can't edit.

7. Intent will use one Utterance with one Slot (slot is some like variable). The utterances specify the words and phrases users can say to invoke your intents. Each intent is mapped to several utterances. Slots are indicated within the utterances with curly brackets.
I used "askdate" slot name in type. can converts words that represent dates into a ISO-8601 date format. You can read more in documentation. (if you want to define Slot use "{}" ).

If you are here it means your skill is ready! Now you need to setup Endpoint - connection between skill and Oracle REST service.

8. As I mentioned in previous post blog your web service must be secured (SSL). It's obligatory rule. Also as I mentioned in topic you can build whole solution without Lambda microservice, you can use only HTTPS Endpoint.

If you don't remember your REST service URL you can check it in SQLDeveloper.

Instead of http://localhost:8080 use your domain. In my case final URL looks like this:

If you successful Build your Model you can start test it. Click Test tab from top menu.

As you can see my skill passed all tests !

The last step is the Launch proces. From top menu select Launch tab. If you want to use skill as a Dev skill it's not neccessary, but if you complete these informations your skill will look more proffessioinall.

Before you start test skill with Echo device check is skill accessed on your mobile Alexa app. Open Alexa application on mobile device -> Menu ->Skills->Your skill ->DEV SKILLS

If skill is Enabled let's try with your Echo !
"Alexa ask Apex Pizza how many orders have been placed this week ?"

or watch my ECHO : )


  1. Thank you for this blog. It's very interesting. I followed all steps you described and got the model successfuly built. However, I got an error using the skill I created. I tried to test another skill using your URL: and got the following error: There was a problem communicating with the requested skill.
    Anything wrong/missed while using your URL?

  2. If you wish to test my web service try this

    1. Instead of http://localhost:8080 use your domain. In my case final URL looks like this:

      How did you use domain?could you please let me know i am trying to cal my local host from amazon skill though i am getting json response from oracle apex but when i cal it from amazon skill it isn't working i am guessing it is beacuse of local host

    2. Localhost is your local address. Alex-a will never reach this address. You must to have public IP with domain (or dynamic DNS service)

  3. Late to the party on this one but, how would you secure it in a multi user environment? So, if you had sales and HR and they shouldn't be able to query the others data?


Post a Comment

Popular posts from this blog

TWO-Factor Authentication with APEX application.

Two-factor authentication means that you must have two factors, to access your account. The first factor is something you know, like your login and password combination. The second is something you have, like a mobile device with a security app installed. That second factor — the mobile device with a security app — adds an extra layer of protection to your account. Even if hackers steal your password, they can’t log in, because they don't have your mobile device. Try 2FA on our SANDBOX environment! It is the most popular 2FA option based on Times-based One-Time Password (TOTP) alghoritm described in RFC 6238 and RFC 4226. TOTP is supported by Google Authenticator, Microsoft Authenticator, Authy 2-Factor Authentication and many other mobile apps. The most popular online services like Facebook, Google, Twitter use TOTP to protect user's accounts. TOTP is a standard algorithm based on cryptographic hash method SHA-1. SHA-1 algorithm's implementation is available sin


About 10 years ago I tried to build APEX application on MS SQLServer. It was possible but performance was not satisfactory. (You can read this post here) ... Today I will describe how to use APEX with MySQL. Obviusly I don't think it is good idea to build APEX app only on MySQL. It can be used as part of Hybryd solution (Oracle + MySQL or Postrgres). My description covers integration with MySQL. As a result will be APEX application with Interactive Report and CRUD form based on MySQL data. Description contains two parts: First part is a MySQL site, Second part is a APEX application part Prerequisites: Oracle 11g+ APEX 18.1+ MySQL/Postgres RestSQL I. MySQL Part 1. MySQL contains simple  apexdb database with one apexutil table. 2. To use this database install RestSQL. What is RestSQL? RestSQL is an open-source, ultra-lightweight data access layer for HTTP clients. RestSQL is a persistence framework or engine in the middle tier of a classic three tier archi

How to return json with null value using apex_json.write(ref_cursor)

Few days ago I had to develop dynamic query json export module. As a sandbox I prepared PLSQL block: DECLARE c sys_refcursor; l_sql varchar2(4000) := 'select null as "col1", 100 as "col2" from dual union all select 200 as "col1", null as "col2" from dual'; l_file clob; BEGIN open c for l_sql; apex_json.initialize_clob_output; apex_json.open_object; apex_json.write('rowset', c); apex_json.close_object; l_file := apex_json.get_clob_output; apex_json.free_output; DBMS_OUTPUT.PUT_line(l_file); END; { "rowset": [{ "col2": 100 }, { "col1": 200 } ] } As you can see above PLSQL code doesn't return null value pairs : ( apex_json.write(p_name IN VARCHAR2, p_cursor IN OUT NOCOPY sys_refcursor) procedure Signature 14 doesn't support null. How to fix it... ? APEX API provides apex_js