docs/reference/adapter/socket_mode/internals.html
Internal functions
def build_headers(req: slack_sdk.socket_mode.request.SocketModeRequest) ‑> Dict[str, str | Sequence[str]] | None#Expand source code
def build_headers(req: SocketModeRequest) -> Optional[Dict[str, Union[str, Sequence[str]]]]:
# Mirror the HTTP mode retry headers so middleware/listeners can detect Events API retries
headers: Dict[str, Union[str, Sequence[str]]] = {}
if req.retry_attempt is not None:
headers["x-slack-retry-num"] = str(req.retry_attempt)
if req.retry_reason is not None:
headers["x-slack-retry-reason"] = req.retry_reason
return headers or None
def run_bolt_app(app: App,req: slack_sdk.socket_mode.request.SocketModeRequest)#Expand source code
def run_bolt_app(app: App, req: SocketModeRequest):
bolt_req: BoltRequest = BoltRequest(mode="socket_mode", body=req.payload, headers=build_headers(req))
bolt_resp: BoltResponse = app.dispatch(bolt_req)
return bolt_resp
def send_response(client: slack_sdk.socket_mode.client.BaseSocketModeClient,req: slack_sdk.socket_mode.request.SocketModeRequest,bolt_resp: BoltResponse,start_time: float)#Expand source code
def send_response(
client: BaseSocketModeClient,
req: SocketModeRequest,
bolt_resp: BoltResponse,
start_time: float,
):
if bolt_resp.status == 200:
content_type = bolt_resp.headers.get("content-type", [""])[0]
if bolt_resp.body is None or len(bolt_resp.body) == 0:
client.send_socket_mode_response(SocketModeResponse(envelope_id=req.envelope_id))
elif content_type.startswith("application/json"):
dict_body = json.loads(bolt_resp.body)
client.send_socket_mode_response(SocketModeResponse(envelope_id=req.envelope_id, payload=dict_body))
else:
client.send_socket_mode_response(
SocketModeResponse(envelope_id=req.envelope_id, payload={"text": bolt_resp.body})
)
if client.logger.level <= logging.DEBUG:
spent_time = int((time() - start_time) * 1000)
client.logger.debug(f"Response time: {spent_time} milliseconds")
else:
client.logger.info(f"Unsuccessful Bolt execution result (status: {bolt_resp.status}, body: {bolt_resp.body})")