The following features may not be available to all Transposit Developer Platform users.
This walkthrough provides an introduction to the power of SQL and Transposit's relational engine. It covers a number of topics, but please see the SQL operation reference for a full view of how you can use SQL in Transposit.
list_conversations
.channels:history channels:read
in the Scope field. (If you change the scope after you have authorized, you'll want to delete your key and authorize again).You can use the documentation tab in the bottom half of the code console. If you browse to Slack > list_conversations, you'll see documentation for the operation and its parameters. Notice that next to the operation name, there is a pagination flag. This flag indicates that Transposit will automatically paginate the API for you. More on this in a bit.
Let's query Slack for 10 of your channels.
list_conversations
operation./* */
or line comments prefixed by --
.LIMIT
or Transposit will continue to fetch more results until it either runs out of results or hits the rate limit.Let's fetch a few public, non-archived channels. Your SQL should look like the following:
SELECT * FROM slack.list_conversations
WHERE types='public_channel'
AND exclude_archived=true
LIMIT 10
Click the Run button to run your operation. You should see a number of results that look like the following:
[
{
"id": "C262LCPME",
"name": "general",
"is_channel": true,
"is_group": false,
"is_im": false,
"created": 1472492750,
"is_archived": false,
"is_general": true,
"unlinked": 0,
"name_normalized": "general",
"is_shared": false,
"parent_conversation": null,
"creator": "U2615V61Z",
"is_ext_shared": false,
"is_org_shared": false,
"shared_team_ids": [
"T2615V5UK"
]
}
...
]
(For some reason the Slack API often returns one less than the limit specified)
In addition to passing parameters to an operation through the WHERE
clause, you can also filter results. Try the following (you may need to use a different value depending on the size of your Slack org):
SELECT * FROM slack.list_conversations
WHERE types='public_channel'
AND exclude_archived=true
AND num_members < 20
LIMIT 10
One of the challenges of working with APIs is that we often need to combine data across multiple APIs in order to make use of them. In this case, we need to do a separate API call to retrieve any messages for our Slack channels.
Let's create an operation that takes a channel id and returns the details for that channel.
get_channels_history
operation.channelId
. You can now reference this parameter in the SQL with @channelId
.channel
to be @channelId
and remove the optional parameters. Your SQL should look like the following:SELECT * FROM slack.get_channels_history
WHERE channel=@channelId
LIMIT 10
To test it, grab one of the IDs from the previous request above, set it as the channelId
in the parameters panel, and run the operation. You should see a result similar to:
[
{
"client_msg_id": "e97092af-540c-496f-b471-b51ba8fde632",
"type": "message",
"text": "Hello world!",
"user": "U27R7G7HD",
"ts": "1553104938.072400",
"reactions": [
{
"name": "wave",
"users": [
"UGH99TGBZ",
"UH3H388DV"
],
"count": 2
}]
...
}
]
Similar to SQL, you can easily select individual columns.
To limit the results to the timestamp and messages, try modifying your SQL to the following:
SELECT ts, text FROM slack.get_channels_history
WHERE channel=@channelId
LIMIT 10
One of the additions we've made to SQL is what we call JSON templating, which you can use to rename variables, concatenate strings, and so forth. Try modifying your SQL to the following:
SELECT {timestamp: "time: " + ts, last_message: text} FROM slack.get_channels_history
WHERE channel=@channelId
LIMIT 1
Transposit makes it easy to join data across APIs in a single data source as well as different data sources. The basic form of a SQL join is:
SELECT *
FROM connection.operation_1 AS <operation-alias-1>
JOIN connection.operation_2 AS <operation-alias-2>
ON <predicate>
Let's use a join to combine the two operations we've created so we can get the last message for each of your Slack channels.
None (blank, no templated code)
.JOIN
to combine the two operations you've created. You can reference operations in your current application using the this
syntax.Your SQL should look like:
SELECT name, last_message
FROM this.list_conversations AS LIST
JOIN this.get_channels_history AS DETAIL
ON LIST.id = DETAIL.channelId
For a closer look at using SQL in Transposit, see the SQL reference.