Install
openclaw skills install @bsalaeddin/notifly-sending-notificationsSends a Notifly workflow to a subscriber or topic through the two-step confirmation contract and verifies it in the activity feed. Use when the user asks to 'send the order-confirmation workflow to subscriber wc-1020', 'trigger a notification', 'fire the welcome email', 'send a push notification', 'notify this user', or 'send this to a topic'. The notification is real and goes out only after the user confirms the exact preview.
openclaw skills install @bsalaeddin/notifly-sending-notificationsTrigger one workflow, show the user exactly what will be sent, and send only after they confirm.
Every tool in this skill comes from the notifly MCP server, the Notifly connector, and is written here as notifly:<tool>.
notifly:list_workflows.notifly:search_tools and notifly:execute_typescript listed (Code Mode, the default): call notifly:search_tools first, then call each tool inside notifly:execute_typescript as external_<tool> (for example external_list_workflows); the program must return its result. Scopes, confirmations and gates are identical on both surfaces.notifly:search_tools does not return the tool either, its OAuth scope was not granted; the user reconnects Notifly and approves that scope.notifly tools at all: Notifly is not connected yet. Install the Notifly power, which adds the server; it signs in with OAuth on first use.The Notifly server's default surface lists two tools, notifly:search_tools and notifly:execute_typescript. Call notifly:search_tools for the declarations, then call each operation below as external_<name>(...) inside a notifly:execute_typescript program. A denied call throws an Error whose message is "<CODE>: <JSON details>". If the operations are listed as individual tools instead, call them directly; the same denials come back as error-flagged results with the details in their structured content.
notifly:list_workflows: find the workflow identifier.notifly:get_workflow: the workflow's steps, channels, and status, to know what the send will do and which payload fields it uses.notifly:list_subscribers, notifly:get_subscriber: find and check the recipient.notifly:list_topics: find a topic when the user wants to send to a group.notifly:trigger_workflow: send the workflow. Arguments: workflowId, to (a subscriberId string, a subscriber object, a topic object, or an array of up to 100), optional payload, optional transactionId, and confirmToken on the second call only.notifly:list_notifications: confirm the send appears in the activity feed.notifly:list_workflows, then call notifly:get_workflow and note its channels and the payload fields its steps use.notifly:list_subscribers and notifly:get_subscriber, or the topic with notifly:list_topics. Use the real subscriberId or topic key, never a guessed one.workflowId, to, the payload values (ask the user for any field the workflow needs that you do not have), and a new transactionId.notifly:trigger_workflow call. It sends nothing and answers CONFIRMATION_REQUIRED with a short-lived confirmToken and expiresInSeconds. The result does not echo the send back, so the preview in step 5 comes from the exact arguments you built. In Code Mode it throws: catch the error in the program and return its message, for example try { await external_trigger_workflow(args) } catch (e) { return String(e.message) }, then read the confirmToken from the JSON after CONFIRMATION_REQUIRED: . On the full surface it is an error-flagged result. Either way this is the designed first step, not a failure.notifly:trigger_workflow again with exactly the same arguments, the same transactionId, and the confirmToken. In Code Mode, this call goes in its own notifly:execute_typescript program. Report the transaction id.notifly:list_notifications for that subscriber and show the new event and its delivery status.notifly:trigger_workflow call without the user's explicit yes to the preview in step 5. A yes covers that one send only.CONFIRMATION_REQUIRED again, and you must show the new preview and ask again.notifly:execute_typescript program, and never pass a confirmToken you did not receive from the first call.DANGEROUS_OPS_DISABLED, nothing was sent. Tell the user an administrator must enable AI dangerous operations in Notifly, pass on the settingsUrl from the details, and stop.notifly:trigger_workflow is not reachable, the user did not grant org:event:write. Say so; the read operations still work.transactionId so Notifly deduplicates it. Never create a new transactionId for a retry of the same send.