Building blocks: connected systems
In short: five blocks work with the systems the organisation has connected through plugins. plugin.read (Fetch from a connected system) requests data with parameters you fill in yourself. record.find (Customer’s record) finds the customer’s record of one kind. record.read (Read the record’s details) reads the details of that record. plugin.action (Plugin action) does something in the system, as a proposal or at once. document.create (Make a document) makes a PDF that a plugin action can send along. How to combine them is described in Data from connected systems in a workflow.
Where to find this
Account > Workflows, open a workflow, Add step: plugin.read, record.find and record.read are in the group Fetch, plugin.action and document.create in Do. Who: from the role Organisation admin. Which actions, read operations and record kinds you can choose depends on the plugins the organisation has connected and switched on.
A Plugin action step in the workflow editor with the Action choice, How (Propose to a person or Execute at once), Parameters, Summary, For, Deadline (minutes) and, for each exit, the If choice.
plugin.read: Fetch from a connected system
Asks a connected system for data with one of the read operations the plugin offers to the AI, with parameters you fill in (usually from earlier steps). Only reads; changes nothing.
Input
| Name | Label | Type | Required | Explanation |
|---|---|---|---|---|
read |
What to read | PluginRead | yes | pluginId/operationId of a read operation of the organisation. |
input |
Parameters | Json | yes | The parameters as an object following the operation’s schema. Values are usually references, such as {"serialNumber": "{{extract.serial}}"}. |
A new step starts with {"input": {}}.
Exits
| Exit | Label | When |
|---|---|---|
found |
found | The system gave an answer. |
none |
not found | The system does not know what was requested. |
failed |
failed | The plugin is not connected or is switched off, the operation does not exist (any more), the parameters do not fit the schema, or the system gave an error or no answer. |
Output fields: data (Data), the system’s answer; error (Error) with none or failed. You read fields in the answer with a path, for example {{machine.data.assetReference}}.
Which operations: only read operations the plugin offers to the AI, with exactly one input, that do not return a file and that describe their parameters. An AI assistant sees them under “Plugin reads” in the guide from workflows_get_guide.
Good to know: what the answer says about a customer or record is not taken over as an identity; the block only reads. If the run is about a conversation, the answer is kept with that conversation, like a lookup on the ticket.
record.find: Customer’s record
Finds the customer’s record of one kind in a connected system, such as the dossier, so that a following step can continue with it. It only searches among the records linked to the customer on strong evidence (found on e-mail address or phone number, or linked by a person). A record that was only found by name may belong to someone with the same name and does not count.
Input
| Name | Label | Type | Required | Explanation |
|---|---|---|---|---|
kind |
Kind of record | RecordKind | yes | A record kind that the organisation’s connected systems offer, such as dossier or order. |
plugin |
Plugin | Text | no | The plugin id, if several systems have records of this kind. |
customer |
Customer | Text | no | The id of the customer. By default the customer of the run. |
Exits
| Exit | Label | When |
|---|---|---|
found |
found | Exactly one record. |
none |
none | No record, or the run has no customer. |
several |
several | More than one record. The newest one comes first. |
Output fields
| Field | Label | Content |
|---|---|---|
recordId |
Record | The id of the record in aishaa. You pass this to record.read. |
itemId |
Number in the system | The number the plugin knows the record by. You often fill this in for a plugin action. |
title |
Title | |
subtitle |
Subtitle | |
reference |
Reference | |
recordedAt |
Date | |
pluginId |
Plugin | |
count |
Number found | 0, 1 or more (at most 10 in the list). |
records |
All found | Only with several: the list of records found (at most 10, newest first), each with the same fields. |
With several, the separate fields contain the newest record. With none, only count (0) is filled.
Good to know
- A workflow of one organisation only finds records of that organisation.
- If
customerdoes not name a customer of the account, or the run is about several customers withoutcustomerchoosing one, the step fails. - Without record kinds in the organisation you cannot use this block.
record.read: Read the record’s details
Fetches the details of a record from the system it comes from, such as the order lines of an order that record.find found. The record itself determines what the read operation is called with; you pass no parameters.
Input
| Name | Label | Type | Required | Explanation |
|---|---|---|---|---|
read |
What to read | RecordRead | yes | pluginId/operationId of a read operation on records that the organisation offers. |
record |
Record | Text | yes | The record, usually {{<record.find step>.recordId}}. |
Exits
| Exit | Label | When |
|---|---|---|
found |
found | The system gave the details. |
none |
none | There is no record (the reference is empty or the record does not exist in this organisation), or the system does not know it. |
failed |
failed | The record comes from a different plugin than the read operation, the plugin is not connected or is switched off, the operation does not read records of this kind, or the system gave an error. |
Output fields: data (Data), the system’s answer; error (Error).
Which operations: only read operations that the plugin’s wiring binds to a record through the record’s id alone, and that do not return a file. Which ones those are is determined by the plugin’s wiring; see Decide for yourself what a plugin offers. An AI assistant sees them under “Record reads” in the guide, with the record kinds each operation reads.
plugin.action: Plugin action
Does something in a connected system, through the same proposal and approval process as everywhere in aishaa.
Input
| Name | Label | Type | Required | Explanation |
|---|---|---|---|---|
action |
Action | PluginAction | yes | pluginId/operationId of a plugin action of the organisation. |
mode |
How | Choice | no | propose (default, Propose to a person): a colleague approves, edits or rejects, and the step waits. execute (Execute at once): the action happens straight away, in the name of the workflow. |
input |
Parameters | Json | no | The action’s parameters as an object following its schema. Values may be references. |
summary |
Summary | Text | no | One sentence the colleague reads about this action. |
assignee |
For | User | no | Only with propose: the colleague who decides. User id or a reference such as {{trigger.recordedByUserId}}. |
deadlineMinutes |
Deadline (minutes) | Number | no | Only with propose: minutes until the proposal expires. 7 days by default, at most 30 days. |
A new step starts with {"mode": "propose"}.
Exits
| Exit | Label | When |
|---|---|---|
executed |
executed | The action has been carried out. |
failed |
failed | The action failed, or was not possible: the plugin is not connected or is switched off, it is not an action of that plugin, or the action is switched off for this organisation. |
rejected |
rejected | A colleague rejected the proposal. |
expired |
expired | Nobody decided before the deadline. |
Output fields
| Field | Label | Content |
|---|---|---|
result |
Result | The plugin’s answer. |
status |
Status | Executed, Failed, Rejected or Expired. |
input |
Parameters | The parameters the action was actually carried out with. |
edited |
Edited by a person | true if a colleague edited the parameters. |
executedBy |
Executed by | Who carried it out; empty with execute. |
error |
Error | The error, if there was one. |
rejectedBy |
Rejected by | Who rejected it. |
rejectionReason |
Reason for rejection | Why. |
actionId |
Action | The id of the action. |
Good to know
- When you publish, aishaa only checks whether
actionhas the formpluginId/operationId. Whether the action exists in the organisation only becomes clear when the step runs (thenfailed). So only use actions from the organisation’s list. - A proposal lands in To do and on the ticket if the run has one. An action that has been carried out reaches the plugin as an automation.
- Without connected plugin actions in the organisation you cannot use this block.
document.create: Make a document
Makes a PDF from a text, such as a report an ai.transform step wrote, and keeps it with the customer (with their documents) or, without a customer, with the organisation. A plugin action in the same run may always send that document along.
Input
| Name | Label | Type | Required | Explanation |
|---|---|---|---|---|
title |
Title | Text | yes | The heading of the document and also the file name. Longer than 120 characters is shortened. |
text |
Text | LongText | yes | The text, usually a reference such as {{verslag.text}}. A line starting with # becomes a heading; with - a bullet. At most 200,000 characters. |
customer |
Customer | Text | no | The id of the customer the document goes to. By default the customer of the run. |
Exits: none; continues with next.
Output fields
| Field | Label | Content |
|---|---|---|
attachmentId |
Document | The id of the document. Pass this in the parameter of the plugin action that accepts an attachment. |
fileName |
File name | The title with .pdf. |
sizeBytes |
Size | In bytes. |
Good to know: if the step runs again (for example after a disruption), it finds the document it already made and does not make a second one. If the run is about several customers without customer, the step fails. When you try out a workflow, the step makes no document; it only states the file name.
object.read: Read an object (can no longer be added)
This block used to read the content of an object, such as the transcript of a recording. It still works in workflows that already use it, but you can no longer add it and it is no longer in the guide for AI assistants. Use the content field instead, for example {{trigger.recording.transcript}}.
Good to know
- All calls happen within the run’s organisation, through the plugin’s first switched-on connection.
- Reading (
plugin.read,record.find,record.read) changes nothing. So when you try out a workflow, aishaa really reads, and you only see data you may see yourself. A plugin action is never carried out when you try out a workflow. - Do not let the AI calculate with what you fetch. Use
data.formatfor dates, amounts and lists.
