Many years ago i made a text-to-speech WCF binding that i used in demos and proof-of-concepts with BizTalk Server. Its time to bring that up to 2015!
This time i will use the Azure App Service stack with a custom Azure API App that can be used from a Azure Logic App. The API App will let you connect a browser session to it that will act as the “loudspeaker”.
TalkToMe GitHub repo – instructions and code
The API app has two parts, both hosted together. First the API that hosts a SignalR hub and the second one is the UI that connects one (or more) browser as the API App “Loudspeaker”. As an Azure API App is just a ‘normal’ Web App it can host both parts and no other deployment is needed. Sweet!
- WebAPI
- SignalR Hub
- Client UI (Hosted inside the API App!)
- [mespeak.js
- SignalR client
SignalR is the brilliant communication framework that will allow us to trigger functionality in the client (browser) yet abstracting away the actual connection details (web-sockets, long-polling etc.).
To test the API App i used a Logic App that gets weather data from api.openweathermap.com that TalkToMe API then will read out. Note that by design the API will return 202/Accepted even if no browser (ie. SignalR client) is connected and no queuing or similar is performed.
How to use in Azure Logic Apps
- Deploy Azure API App
- Create and deploy a Logic App where TalkToMe is used as an ‘action’
- Connect one or more browsers to the API by browsing the root URL of the deployed API. If you are unsure of the URL you can find the link in the ‘essentials’ section of the API App in the portal.
- Run the Logic App
When the logic app runs and the TalkToMe action fires the portal should show something like
And you should hear the artificial voice read the weather 🙂
[{#user-content-test-api-using-http.anchor}Test API using HTTP
If you just want to try the API App, outside of an Logic App, you can use a simple REST call.
REST param | Value |
---|---|
URL | http://{your-apiapp-url}/api/TalkToMe |
Method | HTTP POST |
Content-Type | application/json |
Body | { “TextToRead” : “Nice weather today” } |