def step( self, callback_id: Union[str, Pattern, AsyncWorkflowStep, AsyncWorkflowStepBuilder], edit: Optional[Union[Callable[..., Optional[BoltResponse]], AsyncListener, Sequence[Callable]]] = None, save: Optional[Union[Callable[..., Optional[BoltResponse]], AsyncListener, Sequence[Callable]]] = None, execute: Optional[Union[Callable[..., Optional[BoltResponse]], AsyncListener, Sequence[Callable]]] = None, ): """Registers a new Workflow Step listener Unlike others, this method doesn't behave as a decorator. If you want to register a workflow step by a decorator, use AsyncWorkflowStepBuilder's methods. """ step = callback_id if isinstance(callback_id, (str, Pattern)): step = AsyncWorkflowStep( callback_id=callback_id, edit=edit, save=save, execute=execute, ) elif isinstance(step, AsyncWorkflowStepBuilder): step = step.build() elif not isinstance(step, AsyncWorkflowStep): raise BoltError(f"Invalid step object ({type(step)})") self.use(AsyncWorkflowStepMiddleware(step, self._async_listener_runner))
def step( self, callback_id: Union[str, Pattern, AsyncWorkflowStep], edit: Optional[ Union[ Callable[..., Optional[BoltResponse]], AsyncListener, Sequence[Callable] ] ] = None, save: Optional[ Union[ Callable[..., Optional[BoltResponse]], AsyncListener, Sequence[Callable] ] ] = None, execute: Optional[ Union[ Callable[..., Optional[BoltResponse]], AsyncListener, Sequence[Callable] ] ] = None, ): """Registers a new Workflow Step listener""" step = callback_id if isinstance(callback_id, (str, Pattern)): step = AsyncWorkflowStep( callback_id=callback_id, edit=edit, save=save, execute=execute, ) elif not isinstance(step, AsyncWorkflowStep): raise BoltError("Invalid step object") self.use(AsyncWorkflowStepMiddleware(step, self._async_listener_runner))
AsyncUpdate, AsyncComplete, AsyncFail, AsyncWorkflowStep, ) logging.basicConfig(level=logging.DEBUG) # export SLACK_SIGNING_SECRET=*** # export SLACK_BOT_TOKEN=xoxb-*** app = AsyncApp() # https://api.slack.com/tutorials/workflow-builder-steps copy_review_step = AsyncWorkflowStep.builder("copy_review") @copy_review_step.edit async def edit(ack: AsyncAck, step: dict, configure: AsyncConfigure): await ack() await configure( blocks=[ { "type": "section", "block_id": "intro-section", "text": { "type": "plain_text", "text": "Create a task in one of the listed projects. The link to the task and other details will be available as variable data in later steps.", }, },