126 lines
3.9 KiB
Plaintext
126 lines
3.9 KiB
Plaintext
---
|
|
title: Action
|
|
---
|
|
|
|
An action is what a block can do when it is executed with Typebot. A [block](./block) can have multiple actions.
|
|
|
|
Here is the `sendMessage` action of the Telegram block:
|
|
|
|
```ts
|
|
import { createAction, option } from '@typebot.io/forge'
|
|
import { auth } from '../auth'
|
|
import ky from 'ky'
|
|
|
|
export const sendMessage = createAction({
|
|
auth,
|
|
name: 'Send message',
|
|
options: option.object({
|
|
chatId: option.string.layout({
|
|
label: 'Chat ID',
|
|
placeholder: '@username',
|
|
}),
|
|
text: option.string.layout({
|
|
label: 'Message text',
|
|
input: 'textarea',
|
|
}),
|
|
}),
|
|
run: {
|
|
server: async ({ credentials: { token }, options: { chatId, text } }) => {
|
|
try {
|
|
await ky.post(`https://api.telegram.org/bot${token}/sendMessage`, {
|
|
json: {
|
|
chat_id: chatId,
|
|
text,
|
|
},
|
|
})
|
|
} catch (error) {
|
|
console.log('ERROR', await error.response.text())
|
|
}
|
|
},
|
|
},
|
|
})
|
|
```
|
|
|
|
<Frame>
|
|
<img src="/images/contribute/action-example.png" alt="Action example" />
|
|
</Frame>
|
|
|
|
## Props
|
|
|
|
<ResponseField name="name" type="string" required>
|
|
The name of the action.
|
|
</ResponseField>
|
|
|
|
<ResponseField name="auth" type="Auth">
|
|
If the block requires authentication, the auth object needs to be passed to
|
|
the action.
|
|
</ResponseField>
|
|
|
|
<ResponseField name="baseOptions" type="z.ZodObject<any>">
|
|
If the block has options defined (see [block props](./block#props)), this
|
|
needs to be provided here.
|
|
</ResponseField>
|
|
|
|
<ResponseField name="options" type="z.ZodObject<any>">
|
|
The action configuration options. See <a href="./options">Options</a> for more
|
|
information.
|
|
</ResponseField>
|
|
|
|
<ResponseField name="run">
|
|
Check out the <a href="./run">Run</a> documentation for more information on how this can be configured depending of your scenario.
|
|
<Expandable title="properties">
|
|
<ResponseField name="server" type="ServerRunFunction">
|
|
The function to execute on the server when the block is triggered. See{' '}
|
|
<a href="./run">Run</a> for more information.
|
|
</ResponseField>
|
|
<ResponseField name="stream">
|
|
<Expandable title="properties">
|
|
<ResponseField
|
|
name="getStreamVariableId"
|
|
type="(options) => string | undefined"
|
|
>
|
|
A function that returns the variable ID to stream.
|
|
</ResponseField>
|
|
<ResponseField name="run" type="StreamRunFunction">
|
|
The function to execute to stream the variable.
|
|
</ResponseField>
|
|
</Expandable>
|
|
</ResponseField>
|
|
<ResponseField name="web">
|
|
<Expandable title="properties">
|
|
<ResponseField
|
|
name="displayEmbedBubble"
|
|
type="(options) => string | undefined"
|
|
>
|
|
<Expandable title="properties">
|
|
<ResponseField
|
|
name="parseInitFunction"
|
|
type="WebFunctionParser"
|
|
>
|
|
See <a href="./run#client-function">Client function</a> for more information.
|
|
</ResponseField>
|
|
<ResponseField name="waitForEvent">
|
|
<Expandable title="properties">
|
|
<ResponseField
|
|
name="getSaveVariableId"
|
|
type="(options) => string | undefined"
|
|
>
|
|
A function that returns the variable ID to save as the result of the `waitForEvent` function.
|
|
</ResponseField>
|
|
<ResponseField name="parseFunction" type="WebFunctionParser">
|
|
See <a href="./run#client-function">Client function</a> for more information.
|
|
</ResponseField>
|
|
</Expandable>
|
|
</ResponseField>
|
|
</Expandable>
|
|
</ResponseField>
|
|
<ResponseField name="parseFunction" type="WebFunctionParser">
|
|
A function that parses the function to execute on the client. See <a href="./run#client-function">Client function</a> for more information.
|
|
</ResponseField>
|
|
</Expandable>
|
|
|
|
</ResponseField>
|
|
|
|
</Expandable>
|
|
</ResponseField>
|