Repository: slackapi/python-slack-sdk
Pull request #953 (2021-02-11 02:48:10)

Add HTTPS_PROXY/HTTP_PROXY env variable support #948
## Summary

This pull request adds support for common `HTTPS_PROXY` / `HTTP_PROXY` env variables - related to #948 

This is mostly backward compatible as given `proxy` argument would be prioritized over env variables. However, if an app is running in the host which has the env variables and the application does not have `proxy` argument in constructors, its behavior could be changed. Thus, I think we should enable this in the next minor version (v3.4), not a patch version. Also, we can mention this in the release note.

### Category (place an `x` in each of the `[ ]`)

- [x] **slack_sdk.web.WebClient (sync/async)** (Web API client)
- [x] **slack_sdk.webhook.WebhookClient (sync/async)** (Incoming Webhook, response_url sender)
- [ ] **slack_sdk.models** (UI component builders)
- [ ] **slack_sdk.oauth** (OAuth Flow Utilities)
- [x] **slack_sdk.socket_mode** (Socket Mode client)
- [x] **slack_sdk.audit_logs** (Audit Logs API client)
- [x] **slack_sdk.scim** (SCIM API client)
- [x] **slack_sdk.rtm** (RTM client)
- [ ] **slack_sdk.signature** (Request Signature Verifier)
- [ ] `/docs-src` (Documents, have you run `./docs.sh`?)
- [ ] `/docs-src-v2` (Documents, have you run `./docs-v2.sh`?)
- [ ] `/tutorial` (PythOnBoardingBot tutorial)
- [ ] `tests`/`integration_tests` (Automated tests for this library)

## Requirements (place an `x` in each `[ ]`)

- [x] I've read and understood the [Contributing Guidelines](https://github.com/slackapi/python-slack-sdk/blob/main/.github/contributing.md) and have done my best effort to follow them.
- [x] I've read and agree to the [Code of Conduct](https://slackhq.github.io/code-of-conduct).
- [x] I've run `python setup.py validate` after making the changes.


codecov[bot]: # [Codecov](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953?src=pr&el=h1) Report
> Merging [#953](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953?src=pr&el=desc) (b0592b5) into [main](https://codecov.io/gh/slackapi/python-slack-sdk/commit/8044fa564004c2bd827c2ba77ae2304c71415ca2?el=desc) (8044fa5) will **increase** coverage by `0.00%`.
> The diff coverage is `83.67%`.

[![Impacted file tree graph](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953/graphs/tree.svg?width=650&height=150&src=pr&token=F0O7meYmtD)](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953?src=pr&el=tree)

```diff
@@           Coverage Diff           @@
##             main     #953   +/-   ##
=======================================
  Coverage   85.31%   85.31%           
=======================================
  Files          67       68    +1     
  Lines        5904     5953   +49     
=======================================
+ Hits         5037     5079   +42     
- Misses        867      874    +7     
```


| [Impacted Files](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [slack\_sdk/audit\_logs/v1/async\_client.py](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953/diff?src=pr&el=tree#diff-c2xhY2tfc2RrL2F1ZGl0X2xvZ3MvdjEvYXN5bmNfY2xpZW50LnB5) | `88.75% <80.00%> (-0.59%)` | :arrow_down: |
| [slack\_sdk/audit\_logs/v1/client.py](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953/diff?src=pr&el=tree#diff-c2xhY2tfc2RrL2F1ZGl0X2xvZ3MvdjEvY2xpZW50LnB5) | `77.90% <80.00%> (+0.12%)` | :arrow_up: |
| [slack\_sdk/rtm/v2/\_\_init\_\_.py](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953/diff?src=pr&el=tree#diff-c2xhY2tfc2RrL3J0bS92Mi9fX2luaXRfXy5weQ==) | `54.75% <80.00%> (+0.58%)` | :arrow_up: |
| [slack\_sdk/scim/v1/async\_client.py](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953/diff?src=pr&el=tree#diff-c2xhY2tfc2RrL3NjaW0vdjEvYXN5bmNfY2xpZW50LnB5) | `93.13% <80.00%> (-0.68%)` | :arrow_down: |
| [slack\_sdk/scim/v1/client.py](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953/diff?src=pr&el=tree#diff-c2xhY2tfc2RrL3NjaW0vdjEvY2xpZW50LnB5) | `90.47% <80.00%> (-0.53%)` | :arrow_down: |
| [slack\_sdk/socket\_mode/aiohttp/\_\_init\_\_.py](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953/diff?src=pr&el=tree#diff-c2xhY2tfc2RrL3NvY2tldF9tb2RlL2Fpb2h0dHAvX19pbml0X18ucHk=) | `81.15% <80.00%> (-0.05%)` | :arrow_down: |
| [slack\_sdk/socket\_mode/builtin/client.py](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953/diff?src=pr&el=tree#diff-c2xhY2tfc2RrL3NvY2tldF9tb2RlL2J1aWx0aW4vY2xpZW50LnB5) | `90.20% <80.00%> (-0.37%)` | :arrow_down: |
| [slack\_sdk/web/legacy\_base\_client.py](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953/diff?src=pr&el=tree#diff-c2xhY2tfc2RrL3dlYi9sZWdhY3lfYmFzZV9jbGllbnQucHk=) | `87.91% <80.00%> (-0.17%)` | :arrow_down: |
| [slack\_sdk/proxy\_env\_variable\_loader.py](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953/diff?src=pr&el=tree#diff-c2xhY2tfc2RrL3Byb3h5X2Vudl92YXJpYWJsZV9sb2FkZXIucHk=) | `100.00% <100.00%> (ø)` | |
| ... and [1 more](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953/diff?src=pr&el=tree-more) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953?src=pr&el=footer). Last update [8044fa5...b0592b5](https://codecov.io/gh/slackapi/python-slack-sdk/pull/953?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).


Patch:
diff --git a/docs-src/web/index.rst b/docs-src/web/index.rst
index 5f2ec4c..d1233d6 100644
--- a/docs-src/web/index.rst
+++ b/docs-src/web/index.rst
@@ -16,6 +16,8 @@ Messaging
 
 One of the primary uses of Slack is posting messages to a channel using the channel ID or as a DM to another person using their user ID. This method will handle either a channel ID or a user ID passed to the ``channel`` parameter.
 
+Note that your app's bot user needs to be in the channel (otherwise, you will get either ``not_in_channel`` or ``channel_not_found`` error code). If your app has `chat:write.public <https://api.slack.com/scopes/chat:write.public>`_ scope, your app can post messages without joining a channel as long as the channel is public. See `chat.postMessage <https://api.slack.com/methods/chat.postMessage>`_ for more info.
+
 .. code-block:: python
 
     import logging
@@ -167,7 +169,7 @@ See `chat.delete <https://api.slack.com/methods/chat.delete>`_ for more info.
 
 You can quickly respond to any message on Slack with an emoji reaction. Reactions can be used for any purpose: voting, checking off to-do items, showing excitement -— or just for fun.
 
-This method adds a reaction (emoji) to an item (``file``, ``file comment``, ``channel message``, ``group message``, or ``direct message``). One of file, file_comment, or the combination of channel and timestamp must be specified.
+This method adds a reaction (emoji) to an item (``file``, ``file comment``, ``channel message``, ``group message``, or ``direct message``). One of file, file_comment, or the combination of channel and timestamp must be specified. Also, note that your app's bot user needs to be in the channel (otherwise, you will get either ``not_in_channel`` or ``channel_not_found`` error code).
 
 .. code-block:: python
 
@@ -197,7 +199,7 @@ Files
 
 **Uploading files**
 
-You can upload files onto Slack and share the file with people in channels.
+You can upload files onto Slack and share the file with people in channels. Note that your app's bot user needs to be in the channel (otherwise, you will get either ``not_in_channel`` or ``channel_not_found`` error code).
 
 .. code-block:: python
 
diff --git a/docs/searchindex.js b/docs/searchindex.js
index 68290c1..e7f7fd4 100644
--- a/docs/searchindex.js
+++ b/docs/searchindex.js
@@ -1,1 +1,1 @@
-Search.setIndex({docnames:["about","audit-logs/index","faq","index","installation/index","metadata","oauth/index","real_time_messaging","scim/index","socket-mode/index","v3-migration/index","web/index","webhook/index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,sphinx:56},filenames:["about.rst","audit-logs/index.rst","faq.rst","index.rst","installation/index.rst","metadata.rst","oauth/index.rst","real_time_messaging.rst","scim/index.rst","socket-mode/index.rst","v3-migration/index.rst","web/index.rst","webhook/index.rst"],objects:{},objnames:{},objtypes:{},terms:{"000002":[7,11],"000003":11,"100":8,"111":[4,9],"12345":11,"123456":11,"1234567890":11,"1358878749":7,"139":6,"1476745373":11,"1476746830":11,"1920":11,"200":[3,6,11,12],"222":[4,9],"237":11,"300":6,"3000":[4,11],"3rd":9,"400":6,"403":[6,11,12],"404":[6,11,12],"429":11,"750319":11,"boolean":11,"break":[2,10],"case":[2,6],"class":[1,8,10,11,12],"default":[6,7,11],"export":[2,11],"final":4,"float":9,"function":[4,7,9],"import":[1,2,3,4,6,7,8,9,10,11,12],"int":11,"long":[10,11],"new":[2,4,7,9,10,11,12],"public":11,"return":[4,6,11,12],"short":[10,11],"super":2,"switch":[2,10],"true":[6,10,11],"try":[2,3,6,9,11],"while":[2,7,10,11],Adding:11,And:3,But:2,For:[4,7,8,10,11],IDs:[6,11],IMs:11,One:11,That:[2,10,11],The:[1,3,4,6,7,8,9,10,11,12],Then:[2,4],There:[2,9,10],Use:[9,11],Using:[],With:6,__main__:[4,11],__name__:[4,6,11,12],a111:9,abil:[4,7],abl:4,about:[1,2,4,6,7,8,11],abov:[6,11],accept:4,access:[0,1,6,8,11],access_token:[4,6],accessori:11,account:[3,8],acknowledg:[9,12],across:8,action:[1,10,12],action_id:[6,11],activ:2,actual:11,adapt:[],adaptor:7,add:[2,4,6,9,10,11],add_to_slack:6,added:[2,7],addit:[4,9,11],address:[8,10],admin:[1,8],after:[4,6,11],again:6,agre:4,agreement:0,aim:2,aiohttp:[1,8,9,10,11,12],all:[2,4,6,8,9,10,11],allow:[7,11],along:7,alreadi:[6,7,11],already_in_channel:11,also:[1,3,7,10,11,12],alt:6,alt_text:11,alwai:[2,3],ambiti:2,analysi:1,ani:[3,4,6,7,9,10,12],anoth:11,anywai:9,apart:[9,10],api:[0,3,4,6,7,9,10,12],api_cal:11,api_method:11,api_repsons:[],api_respons:[1,3,11],api_test:[2,3],app:[0,1,3,4,7,9,11,12],app_home_open:7,app_id:6,app_ment:6,app_token:9,appear:11,append:9,appli:4,applic:[1,4,11],appropri:[2,8],architectur:7,archiv:11,aren:7,arg:[4,6],argument:[8,9,11],around:2,arrai:11,articl:11,assert:[11,12],assign:11,assist:3,associ:12,async:[8,9,10,11,12],async_app:[],async_cli:[1,3,8,9,11,12],async_handl:[],asyncapp:[],asynchron:[11,12],asyncio:[1,8,10,11,12],asyncscimcli:1,asyncsocketmodehandl:[],asyncwebcli:[9,10],asyncwebhookcli:10,attach:11,attribut:[2,8,11],attributeerror:2,audit:3,audit_log:[1,3],auth:[4,6],auth_test:6,authed_us:6,authent:[3,6,11,12],author:[4,6],authorize_url_gener:6,authorizeurlgener:6,automat:[8,10],avail:[1,4,8,11,12],averag:11,avoid:4,await:[1,8,9,10,11,12],awesom:[6,11],axe:11,b00000000:12,back:[6,7],base:7,base_dir:6,basic:[4,7,9,11],basicconfig:[2,3,11],becom:11,been:[4,7,11],befor:[10,11],beforehand:[11,12],begin:[4,8],behav:8,being:[1,2,11],below:[6,7,9,11],best:[3,11],between:[10,11],biggest:10,bin:2,bit:11,bite:2,block:[6,11,12],block_id:[6,11],bodi:[6,12],bolt:6,bond:3,bot:[4,6,7,11],bot_id:6,bot_scop:6,bot_token:6,bot_user_id:6,both:2,box:[10,11],broadcast:11,bug:3,build:[0,3,4,6,11],builder:[3,11],built:[4,9],builtin:[],burst:11,button:[4,6,11],c031415926:11,c0xxxxxx:11,c0xxxxxxx:11,c0xxxxxxy:11,c16180339:11,c27182818:11,c3ukjtqac:11,cal:8,call:[1,4,6,7,8,9,10,12],callback:[6,7,11],callback_id:[6,11],can:[1,2,3,4,6,7,8,9,10,11,12],cancel:11,cannot:11,capabl:3,carli:8,chang:[4,9,10,11],changelog:2,channel:[6,7,9,11,12],channel_id:[6,7,11],channel_nam:11,channel_not_found:11,charact:11,chat:[6,11],chat_delet:11,chat_postephemer:11,chat_postmessag:[7,11],chat_upd:11,check:[1,4,6,8,11],chenderson:8,choos:[6,9],classic:7,click:[4,6],client:[2,3,4,6,10],client_id:[4,6],client_secret:[4,6],clone:3,close:11,code:[0,1,2,3,4,6,7,8,10,11],code_param:4,collect:11,com:[3,4,6,8,11,12],combin:11,comma:[6,11],command:[2,6,12],comment:11,commun:[3,7],compat:[9,10],complet:[2,4,6,7],complex:11,compon:3,compos:11,concept:[],concret:2,conduct:0,configur:[4,7,9,11],configuration_url:6,confus:10,connect:[3,7,9],connect_method:7,consider:11,consist:10,construct:3,consum:6,contain:[7,11],content:2,context:11,continu:[2,11],contribut:0,contributor:[0,2],convers:[7,10],conversations_arch:11,conversations_cr:11,conversations_info:11,conversations_join:11,conversations_leav:11,conversations_list:11,conversations_memb:11,conversations_open:11,convert:8,correspond:[3,4,7,8],could:2,count:8,coupl:2,cours:3,cover:[9,11],coverag:[2,10],creat:[2,7,8,11],create_us:8,creation_result:8,credenti:[4,7],cross:8,custom:11,dai:2,danni:11,data:[1,3,4,6,7,8,11],databas:4,deactiv:8,deal:11,debug:[2,3,11],deck:11,dedic:2,def:[4,6,7,8,9,11,12],defin:4,delai:11,delet:[8,11],delete_result:8,delete_us:8,deliv:3,demonstr:[2,6],depend:[4,9,10,11,12],deprec:[2,10],descend:11,detail:[6,7,8,11],determin:4,dev:10,develop:[0,3,7,11],devic:12,dict:7,differ:[8,9,11],direct:[4,11],directli:[3,11],discuss:[2,3],displai:11,doc:[2,7,11],document:[1,4,7,8,11],doe:7,doesn:[6,10],domain:[6,8,11],don:[2,4,6,7,9,10,11],done:2,door:11,driven:7,due:[6,11],dynam:11,each:[3,11],easi:[3,9],easier:6,edg:6,edit:2,effect:4,either:[7,8,9,11],element:[6,11],elif:6,els:[6,11],email:8,emoji:11,empti:[4,8],enabl:[3,9,11],encount:[2,11],encourag:7,end:6,endpoint:[1,4,6,11],enriquez:12,ensur:2,enterpris:[1,6],enterprise_id:6,enterprise_nam:6,enterprise_url:6,entir:4,env:2,envelope_id:9,environ:[1,2,4,6,7,8,9,11,12],environment:4,ephemer:11,error:[2,6,11],essenti:1,establish:[7,9],even:[7,8],event:[1,3,6,7,9,11,12],events_api:9,everi:4,exampl:[4,7,8,11],exce:11,excel:2,except:[6,11],exchang:[4,6,11],excit:[2,11],exclud:11,exclude_archiv:11,execut:7,exist:[8,10,11],expect:[2,10],expir:6,expiration_second:6,explain:6,explicitli:10,extern:11,external_id:11,external_url:11,eyes:9,facilit:4,fail:[6,11],fakelink:12,fallback:[11,12],fals:11,family_nam:8,far:11,featur:[3,4,9,10],feedback:2,feel:[2,11],fellow:3,felt:11,fetch:8,few:[3,9,10],fewer:11,field:11,file:2,file_com:11,fileinstallationstor:6,fileoauthstatestor:6,files_remote_add:11,files_upload:11,filter:8,find:[2,10],find_bot:6,first:[2,6,9,10],fit:3,fix:2,flask:[4,6,11,12],flask_env:11,flow:[3,4,10],focus:11,folder:2,follow:[1,2,3,6,9,11],forget:[2,4,9,11],fork:11,form:[6,11,12],format:[7,11],forward:10,found:[4,8],framework:6,fred:12,from:[0,1,2,3,4,6,7,8,9,11,12],full:[4,6,11],fulli:11,fun:11,futur:2,gain:6,gener:[2,3,4,6,12],german:11,get:[1,4,6,9,11,12],get_data:[6,11,12],git:3,github:3,give:[6,7],given:2,given_nam:8,global:11,goe:6,going:[],good:[2,3],got:11,grace:11,grant:4,great:2,greater:11,grid:[1,6],group:[3,8,11],guest:11,guid:1,guidelin:2,had:11,hand:11,handl:[4,6,7,11,12],handler:6,happen:[1,3,6],has:[2,4,10,11],hash:11,haunt:11,have:[2,7,9,10,11,12],header:[6,11,12],height:6,hello:[7,11,12],help:2,henderson:8,here:[3,6,7,8,9,10,11],higher:3,highli:10,hit:11,hole:11,hook:12,hop:11,hotel:11,how:[1,4,6,11],howev:[10,11],href:[4,6],http:[3,4,6,7,9,10,11,12],hub:11,hurri:11,hyphen:11,ident:8,imag:11,image_url:11,img:6,implement:[6,9],importantli:2,includ:[2,4,6,8,11,12],include_local:11,include_num_memb:11,incom:[3,6],incoming_webhook:6,incoming_webhook_channel:6,incoming_webhook_channel_id:6,incoming_webhook_configuration_url:6,incoming_webhook_url:6,inconveni:10,incorpor:2,increas:2,independ:3,indic:[6,11],individu:1,industri:4,inf:9,info:[10,11],inform:[1,4,7,9,11],initi:[4,9],input:[6,11],insert:3,insid:[2,7,11],instal:[1,11,12],installation_stor:6,installationstor:6,installed_enterpris:6,installed_team:6,instanti:7,instead:[7,9,10,11,12],instruct:1,integr:11,intend:4,interact:[9,11],interest:11,interfac:11,intern:[10,11,12],introduc:10,invalid:[6,11,12],invalid_auth:11,invit:11,invoc:[6,12],is_enterprise_instal:6,is_priv:11,is_valid:[6,12],is_valid_request:11,issu:[3,6,7],item:[2,11],its:[2,3,6,7,9,12],itself:11,join:11,jpeg:11,json:[4,6,11],just:[2,3,4,9,10,11,12],keen:[1,8],keep:[4,7],kei:[4,11],keyword:11,kind:11,kit:[11,12],know:[2,4],label:[6,11],larger:7,lastli:8,later:4,latter:7,layout:11,learn:[1,7,8],least:[4,8],leav:11,left:[9,11],legaci:7,legacywebcli:10,let:[0,2,4,6,9,11],letter:11,level:[2,3,9,11],librari:[1,8,10,11,12],licens:0,like:[1,7,9,10,11],limit:[1,3],line:3,linear:11,link:[4,7],list:[2,4,7,8,11],listen:[3,9],liter:11,live:10,load:[3,6,11],local:[3,11],localhost:[4,11],log:[2,3,11],logsrespons:1,longer:[10,11],look:[2,6,11],love:2,mai:[2,6,8,11],main:[8,9],maintain:0,mainten:10,make:[2,10,11],make_respons:[6,11,12],manag:[1,3,8,9],mani:[2,11],manual:10,mean:10,member:[1,11],mention:[],messag:[3,9,12],metadata:11,method:[1,3,4,6,8,9,12],middlewar:[],might:11,modal:6,mode:[3,7,10],model:[3,7,9],modul:[2,10],monitor:1,more:[1,2,4,7,8,9,10,11],most:[6,7,10,11],mpim:11,mrkdwn:[11,12],much:[2,6],multi:11,multipl:4,must:[4,7,8,11],myapp:4,myriad:8,name:[6,8,9,10,11],natur:10,nearli:11,necessari:6,need:[1,2,3,4,6,7,9,10,11],newer:[7,10],newest:11,next:7,none:[6,9],note:[2,6,7,9,11],notif:11,now:[6,10],number:11,oauth:[1,3,4,8,10,11],oauth_callback:6,oauth_redirect:4,oauth_respons:6,oauth_scop:4,oauth_start:6,oauth_v2_access:[4,6],oauthstatestor:6,object:[8,11],occur:7,off:[9,11],offer:[1,3,8,9],okai:6,old:2,onc:4,one:[2,4,7,8,9,10,11],ones:9,onli:[9,10,11],onto:11,open:[6,9,11],option:[7,10,11,12],order:4,organ:1,origin:11,other:[4,8,9,10,11],our:[2,4,7,11],out:[1,4,8,9,10,11],output:2,over:[3,9,11],overlook:11,overwrit:8,own:[1,6,9,11],packag:[2,3,10],page:[4,7,9],pane:9,param:[4,6,11],paramet:[1,4,6,11],parent:11,part:[1,3],parti:[9,11],partial_us:8,particularli:2,pass:[4,7,9,11],password:4,patch:8,patch_result:8,patch_us:8,path:3,pattern:6,payload:[4,6,7,9,11,12],pdf:11,peopl:[8,11],per:11,perform:9,period:11,permiss:[4,7],persist:[4,6],person:11,pexel:11,photo:11,pick:3,pip:[2,3,11,12],place:11,plain:7,plain_text:[6,11],plain_text_input:[6,11],platform:[0,3,6,7],pleas:[2,4,6,7,10],png:[6,11],pockag:9,polish:[],possibl:12,post:[6,7,8,11,12],post_instal:4,post_messag:11,postephemer:11,postmessag:11,potenti:4,power:3,practic:11,pre:4,pre_instal:4,prefer:[7,9],prefix:9,prepar:6,preview:11,preview_imag:11,previou:11,primari:11,print:[4,6,8,11],privat:11,private_channel:11,private_metadata:11,probabl:[],process:[6,9],program:[2,9,11,12],project:[2,3,9,10],properli:10,properti:11,propos:2,protocol:4,prototyp:11,proudli:0,provid:[1,4,6,7,8,10,11],provis:[3,8],public_channel:11,publish:4,pull:[2,3],purpos:11,push:[7,11],put:8,pypi:[2,3,9,10],python3:11,python:[2,4,6,7,10,11],queri:[3,4,6],question:[2,3],quickli:11,rais:11,random:[6,11],randomli:4,ratelimit:11,rather:[2,7],reaction:[9,11],reactions_add:[9,11],reactions_remov:11,read:[4,6,7],reason:10,rebuild:2,receiv:[3,7,9],recommend:[2,3,4,7,10],redirect:[4,6],redirect_uri:6,refer:[6,7,8,10,11],reflect:11,refus:4,regular:11,reinstal:[2,4],relat:3,releas:11,releg:11,reli:[1,8,10,11,12],remot:11,remov:[2,10,11],renam:10,repl:[2,3],replac:10,repli:[11,12],reply_broadcast:11,report:3,req:9,request:[3,4,6,9,11,12],requir:[1,4,8,9,10,11,12],res:2,resolv:[7,10],resourc:8,respond:11,respons:[4,6,7,8,9,11,12],response_url:3,restructuredtext:2,result:11,resum:11,retri:11,retriev:[4,6,11],review:[4,11],richer:12,right:6,room:11,round:11,rout:[4,6,11,12],rowdi:11,rst:2,rtm:[3,10],rtm_client:7,rtmclient:7,run:[2,3,4,8,9,11,12],run_async:10,run_on:7,runtim:[2,4],safe:4,sai:[2,7,10,11],said:[2,10,11,12],same:[6,9,11],sampl:2,save:[3,4,6,11],say_hello:7,schame:[],schema:1,scheme:1,scim:[1,3],scope:[1,4,6,7,8,9],script:2,sdk:[6,9,10],seamlessli:3,search:6,search_group:8,search_us:8,second:11,secondari:10,secret:4,section:[2,4,6,7,11,12],secur:1,sed:10,see:[1,4,6,7,11],self:[],send:[3,7,11,12],send_message_via_webhook:12,send_slack_messag:11,send_socket_mode_respons:9,sentenc:[],separ:[6,11],server:[3,6,9],servic:[8,12],set:[1,2,3,4,7,8,9,11],setup:[3,4],sever:3,shape:8,share:[4,6,11],shortcut:11,should:[8,11],show:11,side:6,siem:1,sign:8,signatur:[3,6,11,12],signature_verifi:[6,11,12],signatureverifi:[6,11,12],signing_secret:[6,12],silent:11,similar:10,similarli:8,simpl:[4,9,10,11],simplest:[11,12],simpli:[7,10,11],sinc:10,singl:[4,8,11],site:11,slack:[1,2,4,6,7,8,9,10,11,12],slack_api_token:11,slack_app:[6,11,12],slack_app_token:9,slack_bolt:[],slack_bot_token:[2,4,7,9,11],slack_client_id:[4,6],slack_client_secret:[4,6],slack_org_admin_user_token:[1,8],slack_scop:4,slack_sdk:[1,2,3,4,6,7,8,9,10,11,12],slack_signing_secret:[6,11,12],slack_token:[7,11],slackapi:3,slackapierror:[6,11],slackclient:[],slash:[6,12],sleep:[9,11],slightli:[8,11],slow:7,small:3,snippet:[6,7],social:11,socket:[3,7],socket_mod:[3,9],socket_mode_request_listen:9,socketmodecli:[],socketmoderequest:9,socketmoderespons:9,solut:6,some:[7,10,11],someth:[2,6,10],sometim:11,sorri:10,sourc:[1,2,3,4,8,9,10],special:11,specif:[9,10],specifi:[6,8,11],sphinx:2,src:[2,6],srcset:6,sso:8,stack:6,standard:[4,10,11,12],star:11,start:[2,4,6,7,9,10,11],start_async:[],start_index:8,state:[4,6,11],state_stor:6,statu:11,status_cod:12,step:[2,6,10],still:[2,10],stop:9,storag:11,store:[4,6,11],str:[11,12],straight:10,string:[4,6,11],structur:[1,8],strucutur:[],stuck:[3,11],submiss:[6,11],submit:[2,6,11],submitted_data:[6,11],subsequ:11,subtyp:9,succeed:4,success:4,successor:10,suffici:6,suppli:11,support:[3,7,8,10],sure:[2,11],surfac:11,synchron:10,sys:3,system:8,t00000000:12,tada:11,take:[4,6,11],team:[0,4,6,7,11],team_id:6,team_nam:6,technic:10,tell:11,term:10,test:[2,3,11],text:[6,7,11,12],than:11,thank:[2,6],thei:[2,3,11],them:[4,11],therefor:11,thi:[1,2,3,4,6,7,8,9,10,11,12],thing:[2,9,11],think:2,those:[3,7,10,11],though:11,thought:2,thread:[9,11],thread_t:[7,11],through:[3,6],thumbsup:11,time:[4,10,11],timelin:11,timestamp:[6,9,11,12],titl:[6,11],todo:[],toemployeeprofil:12,togeth:[3,11],token:[1,2,7,8,9,11],token_typ:6,too:[3,6,11,12],tool:[0,1,8],torrenc:11,total:2,tracker:[2,3],treat:4,tree:[],trigger_id:[6,11],turn:9,two:2,txt:10,type:[6,7,9,11,12],typed_bodi:1,u023becgf:7,u0xxxxxxx:11,u987654321:11,underscor:11,unifi:11,uninstal:[2,6],uniqu:8,unit:2,unlik:10,unreli:7,unsupport:6,until:11,updat:[2,8,11],update_result:8,update_us:8,upgrad:7,upload:11,url:[6,7,11,12],usag:4,use:[1,2,3,4,6,7,8,9,10,11,12],used:[1,3,6,8,9,11],useful:11,user:[2,3,4,6,7,8,11,12],user_id:[6,8,11],user_login:1,user_nam:8,user_scop:6,user_to_upd:8,user_token:6,useremail:8,usernam:[7,8],userwarn:10,uses:[7,11],using:[1,2,3,6,7,9,10,11,12],util:3,valid:[1,4,6,11],valida:6,valu:[4,6,8,11],variabl:[2,4],varieti:8,venv:2,veri:11,verif:3,verifi:[2,3,4,6,12],version:[7,9],via:[4,12],view:[6,11],view_id:11,view_submiss:[6,11],views_open:[6,11],views_upd:11,virtual:2,virtualenv:2,visibl:11,visit:[3,9],vote:11,w123456789:11,wai:[3,6,9,10,11,12],wait:[9,11],want:[2,11],warn:10,watch:7,web:[0,3,6,7,9,10],web_client:[7,9],webclient:[2,3,4,6,9,10,11],webhook:[3,10],webhookcli:12,webpag:6,webserv:4,websit:10,websocket:[3,7,9],websocket_cli:9,well:[6,11],what:[1,2,3,6],when:[3,6,7,11],where:[4,6],which:[4,6,7,11],whole:11,why:2,width:6,window:2,wish:[4,11],within:1,without:10,won:[10,11],work:[2,3,4,9,10,11,12],workspac:[1,6,11],world:11,would:[1,4,7],wrapper:11,write:[1,2,4,6,9],written:2,wrong:6,xapp:9,xarg:10,xoxb:[2,4,9,11],xoxp:9,xxx:[],xxxxx:4,xxxxxxxxxxxxxxxxxxxxxxxx:12,xyz:9,yield:4,you:[0,1,2,3,4,6,7,8,9,10,11,12],your:[0,1,2,3,4,6,7,8,9,10,11],your_app:10,yourself:2},titles:["About","Audit Logs API Client","FAQ","Python Slack SDK","Installation","&lt;no title&gt;","OAuth Modules","RTM Client","SCIM API Client","Socket Mode Client","Migration Guide","Web Client","Webhook Client"],titleterms:{about:0,access:4,ani:11,api:[1,8,11],app:6,asyncauditlogscli:1,asyncio:9,asyncscimcli:8,asyncwebcli:11,asyncwebhookcli:12,audit:1,auditlogscli:1,base:9,bug:2,call:11,client:[1,7,8,9,11,12],contribut:2,convers:11,document:2,event:[],faq:2,featur:2,file:11,flow:6,from:10,get:3,guid:10,help:3,incom:12,instal:[2,3,4,6],issu:2,librari:9,limit:11,log:1,lookup:6,messag:[7,11],method:11,migrat:10,modal:11,mode:9,modul:6,oauth:6,python:[0,3],rate:11,real:7,report:2,request:2,response_url:12,rtm:7,scim:8,scimclient:8,sdk:[0,3],slack:[0,3],slackclient:10,socket:9,socketmodecli:9,support:9,time:7,token:[4,6],web:11,webhook:12,websocket:[],workspac:4}})
\ No newline at end of file
+Search.setIndex({docnames:["about","audit-logs/index","faq","index","installation/index","metadata","oauth/index","real_time_messaging","scim/index","socket-mode/index","v3-migration/index","web/index","webhook/index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,sphinx:56},filenames:["about.rst","audit-logs/index.rst","faq.rst","index.rst","installation/index.rst","metadata.rst","oauth/index.rst","real_time_messaging.rst","scim/index.rst","socket-mode/index.rst","v3-migration/index.rst","web/index.rst","webhook/index.rst"],objects:{},objnames:{},objtypes:{},terms:{"000002":[7,11],"000003":11,"100":8,"111":[4,9],"12345":11,"123456":11,"1234567890":11,"1358878749":7,"139":6,"1476745373":11,"1476746830":11,"1920":11,"200":[3,6,11,12],"222":[4,9],"237":11,"300":6,"3000":[4,11],"3rd":9,"400":6,"403":[6,11,12],"404":[6,11,12],"429":11,"750319":11,"boolean":11,"break":[2,10],"case":[2,6],"class":[1,8,10,11,12],"default":[6,7,11],"export":[2,11],"final":4,"float":9,"function":[4,7,9],"import":[1,2,3,4,6,7,8,9,10,11,12],"int":11,"long":[10,11],"new":[2,4,7,9,10,11,12],"public":11,"return":[4,6,11,12],"short":[10,11],"super":2,"switch":[2,10],"true":[6,10,11],"try":[2,3,6,9,11],"while":[2,7,10,11],Adding:11,And:3,But:2,For:[4,7,8,10,11],IDs:[6,11],IMs:11,Not:[],One:11,That:[2,10,11],The:[1,3,4,6,7,8,9,10,11,12],Then:[2,4],There:[2,9,10],Use:[9,11],Using:[],With:6,__main__:[4,11],__name__:[4,6,11,12],a111:9,abil:[4,7],abl:4,about:[1,2,4,6,7,8,11],abov:[6,11],accept:4,access:[0,1,6,8,11],access_token:[4,6],accessori:11,account:[3,8],acknowledg:[9,12],across:8,action:[1,10,12],action_id:[6,11],activ:2,actual:11,adapt:[],adaptor:7,add:[2,4,6,9,10,11],add_to_slack:6,added:[2,7],addit:[4,9,11],address:[8,10],admin:[1,8],after:[4,6,11],again:6,agre:4,agreement:0,aim:2,aiohttp:[1,8,9,10,11,12],all:[2,4,6,8,9,10,11],allow:[7,11],along:7,alreadi:[6,7,11],already_in_channel:11,also:[1,3,7,10,11,12],alt:6,alt_text:11,alwai:[2,3],ambiti:2,analysi:1,ani:[3,4,6,7,9,10,12],anoth:11,anywai:9,apart:[9,10],api:[0,3,4,6,7,9,10,12],api_cal:11,api_method:11,api_repsons:[],api_respons:[1,3,11],api_test:[2,3],app:[0,1,3,4,7,9,11,12],app_home_open:7,app_id:6,app_ment:6,app_token:9,appear:11,append:9,appli:4,applic:[1,4,11],appropri:[2,8],architectur:7,archiv:11,aren:7,arg:[4,6],argument:[8,9,11],around:2,arrai:11,articl:11,assert:[11,12],assign:11,assist:3,associ:12,async:[8,9,10,11,12],async_app:[],async_cli:[1,3,8,9,11,12],async_handl:[],asyncapp:[],asynchron:[11,12],asyncio:[1,8,10,11,12],asyncscimcli:1,asyncsocketmodehandl:[],asyncwebcli:[9,10],asyncwebhookcli:10,attach:11,attribut:[2,8,11],attributeerror:2,audit:3,audit_log:[1,3],auth:[4,6],auth_test:6,authed_us:6,authent:[3,6,11,12],author:[4,6],authorize_url_gener:6,authorizeurlgener:6,automat:[8,10],avail:[1,4,8,11,12],averag:11,avoid:4,await:[1,8,9,10,11,12],awesom:[6,11],axe:11,b00000000:12,back:[6,7],base:7,base_dir:6,basic:[4,7,9,11],basicconfig:[2,3,11],becom:11,been:[4,7,11],befor:[10,11],beforehand:[11,12],begin:[4,8],behav:8,being:[1,2,11],below:[6,7,9,11],best:[3,11],between:[10,11],biggest:10,bin:2,bit:11,bite:2,block:[6,11,12],block_id:[6,11],bodi:[6,12],bolt:6,bond:3,bot:[4,6,7,11],bot_id:6,bot_scop:6,bot_token:6,bot_user_id:6,both:2,box:[10,11],broadcast:11,bug:3,build:[0,3,4,6,11],builder:[3,11],built:[4,9],builtin:[],burst:11,button:[4,6,11],c031415926:11,c0xxxxxx:11,c0xxxxxxx:11,c0xxxxxxy:11,c16180339:11,c27182818:11,c3ukjtqac:11,cal:8,call:[1,4,6,7,8,9,10,12],callback:[6,7,11],callback_id:[6,11],can:[1,2,3,4,6,7,8,9,10,11,12],cancel:11,cannot:11,capabl:3,carli:8,chang:[4,9,10,11],changelog:2,channel:[6,7,9,11,12],channel_id:[6,7,11],channel_nam:11,channel_not_found:11,charact:11,chat:[6,11],chat_delet:11,chat_postephemer:11,chat_postmessag:[7,11],chat_upd:11,check:[1,4,6,8,11],chenderson:8,choos:[6,9],classic:7,click:[4,6],client:[2,3,4,6,10],client_id:[4,6],client_secret:[4,6],clone:3,close:11,code:[0,1,2,3,4,6,7,8,10,11],code_param:4,collect:11,com:[3,4,6,8,11,12],combin:11,comma:[6,11],command:[2,6,12],comment:11,commun:[3,7],compat:[9,10],complet:[2,4,6,7],complex:11,compon:3,compos:11,concept:[],concret:2,conduct:0,configur:[4,7,9,11],configuration_url:6,confus:10,connect:[3,7,9],connect_method:7,consider:11,consist:10,construct:3,consum:6,contain:[7,11],content:2,context:11,continu:[2,11],contribut:0,contributor:[0,2],convers:[7,10],conversations_arch:11,conversations_cr:11,conversations_info:11,conversations_join:11,conversations_leav:11,conversations_list:11,conversations_memb:11,conversations_open:11,convert:8,correspond:[3,4,7,8],could:2,count:8,coupl:2,cours:3,cover:[9,11],coverag:[2,10],creat:[2,7,8,11],create_us:8,creation_result:8,credenti:[4,7],cross:8,custom:11,dai:2,danni:11,data:[1,3,4,6,7,8,11],databas:4,deactiv:8,deal:11,debug:[2,3,11],deck:11,dedic:2,def:[4,6,7,8,9,11,12],defin:4,delai:11,delet:[8,11],delete_result:8,delete_us:8,deliv:3,demonstr:[2,6],depend:[4,9,10,11,12],deprec:[2,10],descend:11,detail:[6,7,8,11],determin:4,dev:10,develop:[0,3,7,11],devic:12,dict:7,differ:[8,9,11],direct:[4,11],directli:[3,11],discuss:[2,3],displai:11,doc:[2,7,11],document:[1,4,7,8,11],doe:7,doesn:[6,10],domain:[6,8,11],don:[2,4,6,7,9,10,11],done:2,door:11,driven:7,due:[6,11],dynam:11,each:[3,11],easi:[3,9],easier:6,edg:6,edit:2,effect:4,either:[7,8,9,11],element:[6,11],elif:6,els:[6,11],email:8,emoji:11,empti:[4,8],enabl:[3,9,11],encount:[2,11],encourag:7,end:6,endpoint:[1,4,6,11],enriquez:12,ensur:2,enterpris:[1,6],enterprise_id:6,enterprise_nam:6,enterprise_url:6,entir:4,env:2,envelope_id:9,environ:[1,2,4,6,7,8,9,11,12],environment:4,ephemer:11,error:[2,6,11],essenti:1,establish:[7,9],even:[7,8],event:[1,3,6,7,9,11,12],events_api:9,everi:4,exampl:[4,7,8,11],exce:11,excel:2,except:[6,11],exchang:[4,6,11],excit:[2,11],exclud:11,exclude_archiv:11,execut:7,exist:[8,10,11],expect:[2,10],expir:6,expiration_second:6,explain:6,explicitli:10,extern:11,external_id:11,external_url:11,eyes:9,facilit:4,fail:[6,11],fakelink:12,fallback:[11,12],fals:11,family_nam:8,far:11,featur:[3,4,9,10],feedback:2,feel:[2,11],fellow:3,felt:11,fetch:8,few:[3,9,10],fewer:11,field:11,file:2,file_com:11,fileinstallationstor:6,fileoauthstatestor:6,files_remote_add:11,files_upload:11,filter:8,find:[2,10],find_bot:6,first:[2,6,9,10],fit:3,fix:2,flask:[4,6,11,12],flask_env:11,flow:[3,4,10],focus:11,folder:2,follow:[1,2,3,6,9,11],forget:[2,4,9,11],fork:11,form:[6,11,12],format:[7,11],forward:10,found:[4,8],framework:6,fred:12,from:[0,1,2,3,4,6,7,8,9,11,12],full:[4,6,11],fulli:11,fun:11,futur:2,gain:6,gener:[2,3,4,6,12],german:11,get:[1,4,6,9,11,12],get_data:[6,11,12],git:3,github:3,give:[6,7],given:2,given_nam:8,global:11,goe:6,going:[],good:[2,3],got:11,grace:11,grant:4,great:2,greater:11,grid:[1,6],group:[3,8,11],guest:11,guid:1,guidelin:2,had:11,hand:11,handl:[4,6,7,11,12],handler:6,happen:[1,3,6],has:[2,4,10,11],hash:11,haunt:11,have:[2,7,9,10,11,12],header:[6,11,12],height:6,hello:[7,11,12],help:2,henderson:8,here:[3,6,7,8,9,10,11],higher:3,highli:10,hit:11,hole:11,hook:12,hop:11,hotel:11,how:[1,4,6,11],howev:[10,11],href:[4,6],http:[3,4,6,7,9,10,11,12],hub:11,hurri:11,hyphen:11,ident:8,imag:11,image_url:11,img:6,implement:[6,9],importantli:2,includ:[2,4,6,8,11,12],include_local:11,include_num_memb:11,incom:[3,6],incoming_webhook:6,incoming_webhook_channel:6,incoming_webhook_channel_id:6,incoming_webhook_configuration_url:6,incoming_webhook_url:6,inconveni:10,incorpor:2,increas:2,independ:3,indic:[6,11],individu:1,industri:4,inf:9,info:[10,11],inform:[1,4,7,9,11],initi:[4,9],input:[6,11],insert:3,insid:[2,7,11],instal:[1,11,12],installation_stor:6,installationstor:6,installed_enterpris:6,installed_team:6,instanti:7,instead:[7,9,10,11,12],instruct:1,integr:11,intend:4,interact:[9,11],interest:11,interfac:11,intern:[10,11,12],introduc:10,invalid:[6,11,12],invalid_auth:11,invit:11,invoc:[6,12],is_enterprise_instal:6,is_priv:11,is_valid:[6,12],is_valid_request:11,issu:[3,6,7],item:[2,11],its:[2,3,6,7,9,12],itself:11,join:11,jpeg:11,json:[4,6,11],just:[2,3,4,9,10,11,12],keen:[1,8],keep:[4,7],kei:[4,11],keyword:11,kind:11,kit:[11,12],know:[2,4],label:[6,11],larger:7,lastli:8,later:4,latter:7,layout:11,learn:[1,7,8],least:[4,8],leav:11,left:[9,11],legaci:7,legacywebcli:10,let:[0,2,4,6,9,11],letter:11,level:[2,3,9,11],librari:[1,8,10,11,12],licens:0,like:[1,7,9,10,11],limit:[1,3],line:3,linear:11,link:[4,7],list:[2,4,7,8,11],listen:[3,9],liter:11,live:10,load:[3,6,11],local:[3,11],localhost:[4,11],log:[2,3,11],logsrespons:1,longer:[10,11],look:[2,6,11],love:2,mai:[2,6,8,11],main:[8,9],maintain:0,mainten:10,make:[2,10,11],make_respons:[6,11,12],manag:[1,3,8,9],mani:[2,11],manual:10,mean:10,member:[1,11],mention:[],messag:[3,9,12],metadata:11,method:[1,3,4,6,8,9,12],middlewar:[],might:11,modal:6,mode:[3,7,10],model:[3,7,9],modul:[2,10],monitor:1,more:[1,2,4,7,8,9,10,11],most:[6,7,10,11],mpim:11,mrkdwn:[11,12],much:[2,6],multi:11,multipl:4,must:[4,7,8,11],myapp:4,myriad:8,name:[6,8,9,10,11],natur:10,nearli:11,necessari:6,need:[1,2,3,4,6,7,9,10,11],newer:[7,10],newest:11,next:7,none:[6,9],not_in_channel:11,note:[2,6,7,9,11],notif:11,now:[6,10],number:11,oauth:[1,3,4,8,10,11],oauth_callback:6,oauth_redirect:4,oauth_respons:6,oauth_scop:4,oauth_start:6,oauth_v2_access:[4,6],oauthstatestor:6,object:[8,11],occur:7,off:[9,11],offer:[1,3,8,9],okai:6,old:2,onc:4,one:[2,4,7,8,9,10,11],ones:9,onli:[9,10,11],onto:11,open:[6,9,11],option:[7,10,11,12],order:4,organ:1,origin:11,other:[4,8,9,10,11],otherwis:11,our:[2,4,7,11],out:[1,4,8,9,10,11],output:2,over:[3,9,11],overlook:11,overwrit:8,own:[1,6,9,11],packag:[2,3,10],page:[4,7,9],pane:9,param:[4,6,11],paramet:[1,4,6,11],parent:11,part:[1,3],parti:[9,11],partial_us:8,particularli:2,pass:[4,7,9,11],password:4,patch:8,patch_result:8,patch_us:8,path:3,pattern:6,payload:[4,6,7,9,11,12],pdf:11,peopl:[8,11],per:11,perform:9,period:11,permiss:[4,7],persist:[4,6],person:11,pexel:11,photo:11,pick:3,pip:[2,3,11,12],place:11,plain:7,plain_text:[6,11],plain_text_input:[6,11],platform:[0,3,6,7],pleas:[2,4,6,7,10],png:[6,11],pockag:9,polish:[],possibl:12,post:[6,7,8,11,12],post_instal:4,post_messag:11,postephemer:11,postmessag:11,potenti:4,power:3,practic:11,pre:4,pre_instal:4,prefer:[7,9],prefix:9,prepar:6,preview:11,preview_imag:11,previou:11,primari:11,print:[4,6,8,11],privat:11,private_channel:11,private_metadata:11,probabl:[],process:[6,9],program:[2,9,11,12],project:[2,3,9,10],properli:10,properti:11,propos:2,protocol:4,prototyp:11,proudli:0,provid:[1,4,6,7,8,10,11],provis:[3,8],public_channel:11,publish:4,pull:[2,3],purpos:11,push:[7,11],put:8,pypi:[2,3,9,10],python3:11,python:[2,4,6,7,10,11],queri:[3,4,6],question:[2,3],quickli:11,rais:11,random:[6,11],randomli:4,ratelimit:11,rather:[2,7],reaction:[9,11],reactions_add:[9,11],reactions_remov:11,read:[4,6,7],reason:10,rebuild:2,receiv:[3,7,9],recommend:[2,3,4,7,10],redirect:[4,6],redirect_uri:6,refer:[6,7,8,10,11],reflect:11,refus:4,regular:11,reinstal:[2,4],relat:3,releas:11,releg:11,reli:[1,8,10,11,12],remot:11,remov:[2,10,11],renam:10,repl:[2,3],replac:10,repli:[11,12],reply_broadcast:11,report:3,req:9,request:[3,4,6,9,11,12],requir:[1,4,8,9,10,11,12],res:2,resolv:[7,10],resourc:8,respond:11,respons:[4,6,7,8,9,11,12],response_url:3,restructuredtext:2,result:11,resum:11,retri:11,retriev:[4,6,11],review:[4,11],richer:12,right:6,room:11,round:11,rout:[4,6,11,12],rowdi:11,rst:2,rtm:[3,10],rtm_client:7,rtmclient:7,run:[2,3,4,8,9,11,12],run_async:10,run_on:7,runtim:[2,4],safe:4,sai:[2,7,10,11],said:[2,10,11,12],same:[6,9,11],sampl:2,save:[3,4,6,11],say_hello:7,schame:[],schema:1,scheme:1,scim:[1,3],scope:[1,4,6,7,8,9,11],script:2,sdk:[6,9,10],seamlessli:3,search:6,search_group:8,search_us:8,second:11,secondari:10,secret:4,section:[2,4,6,7,11,12],secur:1,sed:10,see:[1,4,6,7,11],self:[],send:[3,7,11,12],send_message_via_webhook:12,send_slack_messag:11,send_socket_mode_respons:9,sentenc:[],separ:[6,11],server:[3,6,9],servic:[8,12],set:[1,2,3,4,7,8,9,11],setup:[3,4],sever:3,shape:8,share:[4,6,11],shortcut:11,should:[8,11],show:11,side:6,siem:1,sign:8,signatur:[3,6,11,12],signature_verifi:[6,11,12],signatureverifi:[6,11,12],signing_secret:[6,12],silent:11,similar:10,similarli:8,simpl:[4,9,10,11],simplest:[11,12],simpli:[7,10,11],sinc:10,singl:[4,8,11],site:11,slack:[1,2,4,6,7,8,9,10,11,12],slack_api_token:11,slack_app:[6,11,12],slack_app_token:9,slack_bolt:[],slack_bot_token:[2,4,7,9,11],slack_client_id:[4,6],slack_client_secret:[4,6],slack_org_admin_user_token:[1,8],slack_scop:4,slack_sdk:[1,2,3,4,6,7,8,9,10,11,12],slack_signing_secret:[6,11,12],slack_token:[7,11],slackapi:3,slackapierror:[6,11],slackclient:[],slash:[6,12],sleep:[9,11],slightli:[8,11],slow:7,small:3,snippet:[6,7],social:11,socket:[3,7],socket_mod:[3,9],socket_mode_request_listen:9,socketmodecli:[],socketmoderequest:9,socketmoderespons:9,solut:6,some:[7,10,11],someth:[2,6,10],sometim:11,sorri:10,sourc:[1,2,3,4,8,9,10],special:11,specif:[9,10],specifi:[6,8,11],sphinx:2,src:[2,6],srcset:6,sso:8,stack:6,standard:[4,10,11,12],star:11,start:[2,4,6,7,9,10,11],start_async:[],start_index:8,state:[4,6,11],state_stor:6,statu:11,status_cod:12,step:[2,6,10],still:[2,10],stop:9,storag:11,store:[4,6,11],str:[11,12],straight:10,string:[4,6,11],structur:[1,8],strucutur:[],stuck:[3,11],submiss:[6,11],submit:[2,6,11],submitted_data:[6,11],subsequ:11,subtyp:9,succeed:4,success:4,successor:10,suffici:6,suppli:11,support:[3,7,8,10],sure:[2,11],surfac:11,synchron:10,sys:3,system:8,t00000000:12,tada:11,take:[4,6,11],team:[0,4,6,7,11],team_id:6,team_nam:6,technic:10,tell:11,term:10,test:[2,3,11],text:[6,7,11,12],than:11,thank:[2,6],thei:[2,3,11],them:[4,11],therefor:11,thi:[1,2,3,4,6,7,8,9,10,11,12],thing:[2,9,11],think:2,those:[3,7,10,11],though:11,thought:2,thread:[9,11],thread_t:[7,11],through:[3,6],thumbsup:11,time:[4,10,11],timelin:11,timestamp:[6,9,11,12],titl:[6,11],todo:[],toemployeeprofil:12,togeth:[3,11],token:[1,2,7,8,9,11],token_typ:6,too:[3,6,11,12],tool:[0,1,8],torrenc:11,total:2,tracker:[2,3],treat:4,tree:[],trigger_id:[6,11],turn:9,two:2,txt:10,type:[6,7,9,11,12],typed_bodi:1,u023becgf:7,u0xxxxxxx:11,u987654321:11,underscor:11,unifi:11,uninstal:[2,6],uniqu:8,unit:2,unlik:10,unreli:7,unsupport:6,until:11,updat:[2,8,11],update_result:8,update_us:8,upgrad:7,upload:11,url:[6,7,11,12],usag:4,use:[1,2,3,4,6,7,8,9,10,11,12],used:[1,3,6,8,9,11],useful:11,user:[2,3,4,6,7,8,11,12],user_id:[6,8,11],user_login:1,user_nam:8,user_scop:6,user_to_upd:8,user_token:6,useremail:8,usernam:[7,8],userwarn:10,uses:[7,11],using:[1,2,3,6,7,9,10,11,12],util:3,valid:[1,4,6,11],valida:6,valu:[4,6,8,11],variabl:[2,4],varieti:8,venv:2,veri:11,verif:3,verifi:[2,3,4,6,12],version:[7,9],via:[4,12],view:[6,11],view_id:11,view_submiss:[6,11],views_open:[6,11],views_upd:11,virtual:2,virtualenv:2,visibl:11,visit:[3,9],vote:11,w123456789:11,wai:[3,6,9,10,11,12],wait:[9,11],want:[2,11],warn:10,watch:7,web:[0,3,6,7,9,10],web_client:[7,9],webclient:[2,3,4,6,9,10,11],webhook:[3,10],webhookcli:12,webpag:6,webserv:4,websit:10,websocket:[3,7,9],websocket_cli:9,well:[6,11],what:[1,2,3,6],when:[3,6,7,11],where:[4,6],which:[4,6,7,11],whole:11,why:2,width:6,window:2,wish:[4,11],within:1,without:[10,11],won:[10,11],work:[2,3,4,9,10,11,12],workspac:[1,6,11],world:11,would:[1,4,7],wrapper:11,write:[1,2,4,6,9,11],written:2,wrong:6,xapp:9,xarg:10,xoxb:[2,4,9,11],xoxp:9,xxx:[],xxxxx:4,xxxxxxxxxxxxxxxxxxxxxxxx:12,xyz:9,yield:4,you:[0,1,2,3,4,6,7,8,9,10,11,12],your:[0,1,2,3,4,6,7,8,9,10,11],your_app:10,yourself:2},titles:["About","Audit Logs API Client","FAQ","Python Slack SDK","Installation","&lt;no title&gt;","OAuth Modules","RTM Client","SCIM API Client","Socket Mode Client","Migration Guide","Web Client","Webhook Client"],titleterms:{about:0,access:4,ani:11,api:[1,8,11],app:6,asyncauditlogscli:1,asyncio:9,asyncscimcli:8,asyncwebcli:11,asyncwebhookcli:12,audit:1,auditlogscli:1,base:9,bug:2,call:11,client:[1,7,8,9,11,12],contribut:2,convers:11,document:2,event:[],faq:2,featur:2,file:11,flow:6,from:10,get:3,guid:10,help:3,incom:12,instal:[2,3,4,6],issu:2,librari:9,limit:11,log:1,lookup:6,messag:[7,11],method:11,migrat:10,modal:11,mode:9,modul:6,oauth:6,python:[0,3],rate:11,real:7,report:2,request:2,response_url:12,rtm:7,scim:8,scimclient:8,sdk:[0,3],slack:[0,3],slackclient:10,socket:9,socketmodecli:9,support:9,time:7,token:[4,6],web:11,webhook:12,websocket:[],workspac:4}})
\ No newline at end of file
diff --git a/docs/web/index.html b/docs/web/index.html
index 52d01be..62c0204 100644
--- a/docs/web/index.html
+++ b/docs/web/index.html
@@ -213,6 +213,7 @@
 <h2>Messaging<a class="headerlink" href="#messaging" title="Permalink to this headline">¶</a></h2>
 <p><strong>Sending a message</strong></p>
 <p>One of the primary uses of Slack is posting messages to a channel using the channel ID or as a DM to another person using their user ID. This method will handle either a channel ID or a user ID passed to the <code class="docutils literal notranslate"><span class="pre">channel</span></code> parameter.</p>
+<p>Note that your app’s bot user needs to be in the channel (otherwise, you will get either <code class="docutils literal notranslate"><span class="pre">not_in_channel</span></code> or <code class="docutils literal notranslate"><span class="pre">channel_not_found</span></code> error code). If your app has <a class="reference external" href="https://api.slack.com/scopes/chat:write.public">chat:write.public</a> scope, your app can post messages without joining a channel as long as the channel is public. See <a class="reference external" href="https://api.slack.com/methods/chat.postMessage">chat.postMessage</a> for more info.</p>
 <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">logging</span>
 <span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span>
 
@@ -335,7 +336,7 @@ deletion of threaded replies works the same as regular messages.</p>
 <p>See <a class="reference external" href="https://api.slack.com/methods/chat.delete">chat.delete</a> for more info.</p>
 <p><strong>Emoji reactions</strong></p>
 <p>You can quickly respond to any message on Slack with an emoji reaction. Reactions can be used for any purpose: voting, checking off to-do items, showing excitement -— or just for fun.</p>
-<p>This method adds a reaction (emoji) to an item (<code class="docutils literal notranslate"><span class="pre">file</span></code>, <code class="docutils literal notranslate"><span class="pre">file</span> <span class="pre">comment</span></code>, <code class="docutils literal notranslate"><span class="pre">channel</span> <span class="pre">message</span></code>, <code class="docutils literal notranslate"><span class="pre">group</span> <span class="pre">message</span></code>, or <code class="docutils literal notranslate"><span class="pre">direct</span> <span class="pre">message</span></code>). One of file, file_comment, or the combination of channel and timestamp must be specified.</p>
+<p>This method adds a reaction (emoji) to an item (<code class="docutils literal notranslate"><span class="pre">file</span></code>, <code class="docutils literal notranslate"><span class="pre">file</span> <span class="pre">comment</span></code>, <code class="docutils literal notranslate"><span class="pre">channel</span> <span class="pre">message</span></code>, <code class="docutils literal notranslate"><span class="pre">group</span> <span class="pre">message</span></code>, or <code class="docutils literal notranslate"><span class="pre">direct</span> <span class="pre">message</span></code>). One of file, file_comment, or the combination of channel and timestamp must be specified. Also, note that your app’s bot user needs to be in the channel (otherwise, you will get either <code class="docutils literal notranslate"><span class="pre">not_in_channel</span></code> or <code class="docutils literal notranslate"><span class="pre">channel_not_found</span></code> error code).</p>
 <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">response</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">reactions_add</span><span class="p">(</span>
     <span class="n">channel</span><span class="o">=</span><span class="s2">&quot;C0XXXXXXX&quot;</span><span class="p">,</span>
     <span class="n">name</span><span class="o">=</span><span class="s2">&quot;thumbsup&quot;</span><span class="p">,</span>
@@ -357,7 +358,7 @@ deletion of threaded replies works the same as regular messages.</p>
 <div class="section" id="files">
 <h2>Files<a class="headerlink" href="#files" title="Permalink to this headline">¶</a></h2>
 <p><strong>Uploading files</strong></p>
-<p>You can upload files onto Slack and share the file with people in channels.</p>
+<p>You can upload files onto Slack and share the file with people in channels. Note that your app’s bot user needs to be in the channel (otherwise, you will get either <code class="docutils literal notranslate"><span class="pre">not_in_channel</span></code> or <code class="docutils literal notranslate"><span class="pre">channel_not_found</span></code> error code).</p>
 <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">response</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">files_upload</span><span class="p">(</span>
     <span class="n">channels</span><span class="o">=</span><span class="s2">&quot;C3UKJTQAC&quot;</span><span class="p">,</span>
     <span class="n">file</span><span class="o">=</span><span class="s2">&quot;files.pdf&quot;</span><span class="p">,</span>
diff --git a/slack_sdk/audit_logs/v1/async_client.py b/slack_sdk/audit_logs/v1/async_client.py
index adef737..6847186 100644
--- a/slack_sdk/audit_logs/v1/async_client.py
+++ b/slack_sdk/audit_logs/v1/async_client.py
@@ -14,6 +14,7 @@ from .internal_utils import (
     get_user_agent,
 )
 from .response import AuditLogsResponse
+from ...proxy_env_variable_loader import load_http_proxy_from_env
 
 
 class AsyncAuditLogsClient:
@@ -75,6 +76,11 @@ class AsyncAuditLogsClient:
         )
         self.logger = logger if logger is not None else logging.getLogger(__name__)
 
+        if self.proxy is None or len(self.proxy.strip()) == 0:
+            env_variable = load_http_proxy_from_env(self.logger)
+            if env_variable is not None:
+                self.proxy = env_variable
+
     async def schemas(
         self,
         *,
diff --git a/slack_sdk/audit_logs/v1/client.py b/slack_sdk/audit_logs/v1/client.py
index 2238e85..94f8efa 100644
--- a/slack_sdk/audit_logs/v1/client.py
+++ b/slack_sdk/audit_logs/v1/client.py
@@ -15,6 +15,7 @@ from .internal_utils import (
     get_user_agent,
 )
 from .response import AuditLogsResponse
+from ...proxy_env_variable_loader import load_http_proxy_from_env
 
 
 class AuditLogsClient:
@@ -64,6 +65,11 @@ class AuditLogsClient:
         )
         self.logger = logger if logger is not None else logging.getLogger(__name__)
 
+        if self.proxy is None or len(self.proxy.strip()) == 0:
+            env_variable = load_http_proxy_from_env(self.logger)
+            if env_variable is not None:
+                self.proxy = env_variable
+
     def schemas(
         self,
         *,
diff --git a/slack_sdk/proxy_env_variable_loader.py b/slack_sdk/proxy_env_variable_loader.py
new file mode 100644
index 0000000..9eceec2
--- /dev/null
+++ b/slack_sdk/proxy_env_variable_loader.py
@@ -0,0 +1,19 @@
+import logging
+import os
+from typing import Optional
+
+_default_logger = logging.getLogger(__name__)
+
+
+def load_http_proxy_from_env(logger: logging.Logger = _default_logger) -> Optional[str]:
+    proxy_url = (
+        os.environ.get("HTTPS_PROXY")
+        or os.environ.get("https_proxy")
+        or os.environ.get("HTTP_PROXY")
+        or os.environ.get("http_proxy")
+    )
+    if proxy_url is not None:
+        logger.debug(
+            f"HTTP proxy URL has been loaded from an env variable: {proxy_url}"
+        )
+    return proxy_url
diff --git a/slack_sdk/rtm/v2/__init__.py b/slack_sdk/rtm/v2/__init__.py
index 6df3de2..e713330 100644
--- a/slack_sdk/rtm/v2/__init__.py
+++ b/slack_sdk/rtm/v2/__init__.py
@@ -9,6 +9,7 @@ from threading import Lock, Event
 from typing import Optional, Callable, List, Union
 
 from slack_sdk.errors import SlackApiError, SlackClientError
+from slack_sdk.proxy_env_variable_loader import load_http_proxy_from_env
 from slack_sdk.socket_mode.builtin.connection import Connection, ConnectionState
 from slack_sdk.socket_mode.interval_runner import IntervalRunner
 from slack_sdk.web import WebClient
@@ -75,6 +76,10 @@ class RTMClient:
         self.headers = headers
         self.ping_interval = ping_interval
         self.logger = logger or logging.getLogger(__name__)
+        if self.proxy is None or len(self.proxy.strip()) == 0:
+            env_variable = load_http_proxy_from_env(self.logger)
+            if env_variable is not None:
+                self.proxy = env_variable
 
         self.web_client = web_client or WebClient(
             token=self.token,
diff --git a/slack_sdk/scim/v1/async_client.py b/slack_sdk/scim/v1/async_client.py
index 05c850f..c0b3641 100644
--- a/slack_sdk/scim/v1/async_client.py
+++ b/slack_sdk/scim/v1/async_client.py
@@ -33,6 +33,7 @@ from .response import (
 )
 from .user import User
 from .group import Group
+from ...proxy_env_variable_loader import load_http_proxy_from_env
 
 
 class AsyncSCIMClient:
@@ -93,6 +94,11 @@ class AsyncSCIMClient:
         )
         self.logger = logger if logger is not None else logging.getLogger(__name__)
 
+        if self.proxy is None or len(self.proxy.strip()) == 0:
+            env_variable = load_http_proxy_from_env(self.logger)
+            if env_variable is not None:
+                self.proxy = env_variable
+
     # -------------------------
     # Users
     # -------------------------
diff --git a/slack_sdk/scim/v1/client.py b/slack_sdk/scim/v1/client.py
index e73dc8a..8676038 100644
--- a/slack_sdk/scim/v1/client.py
+++ b/slack_sdk/scim/v1/client.py
@@ -33,6 +33,7 @@ from .response import (
 )
 from .user import User
 from .group import Group
+from ...proxy_env_variable_loader import load_http_proxy_from_env
 
 
 class SCIMClient:
@@ -81,6 +82,11 @@ class SCIMClient:
         )
         self.logger = logger if logger is not None else logging.getLogger(__name__)
 
+        if self.proxy is None or len(self.proxy.strip()) == 0:
+            env_variable = load_http_proxy_from_env(self.logger)
+            if env_variable is not None:
+                self.proxy = env_variable
+
     # -------------------------
     # Users
     # -------------------------
diff --git a/slack_sdk/socket_mode/aiohttp/__init__.py b/slack_sdk/socket_mode/aiohttp/__init__.py
index 9312fb2..fc20be2 100644
--- a/slack_sdk/socket_mode/aiohttp/__init__.py
+++ b/slack_sdk/socket_mode/aiohttp/__init__.py
@@ -8,6 +8,7 @@ from typing import Union, Optional, List, Callable, Awaitable
 import aiohttp
 from aiohttp import ClientWebSocketResponse, WSMessage, WSMsgType, ClientConnectionError
 
+from slack_sdk.proxy_env_variable_loader import load_http_proxy_from_env
 from slack_sdk.socket_mode.async_client import AsyncBaseSocketModeClient
 from slack_sdk.socket_mode.async_listeners import (
     AsyncWebSocketMessageListener,
@@ -72,6 +73,11 @@ class SocketModeClient(AsyncBaseSocketModeClient):
         self.web_client = web_client or AsyncWebClient()
         self.closed = False
         self.proxy = proxy
+        if self.proxy is None or len(self.proxy.strip()) == 0:
+            env_variable = load_http_proxy_from_env(self.logger)
+            if env_variable is not None:
+                self.proxy = env_variable
+
         self.default_auto_reconnect_enabled = auto_reconnect_enabled
         self.auto_reconnect_enabled = self.default_auto_reconnect_enabled
         self.ping_interval = ping_interval
diff --git a/slack_sdk/socket_mode/builtin/client.py b/slack_sdk/socket_mode/builtin/client.py
index 3e27215..a2e6ecf 100644
--- a/slack_sdk/socket_mode/builtin/client.py
+++ b/slack_sdk/socket_mode/builtin/client.py
@@ -15,6 +15,7 @@ from slack_sdk.web import WebClient
 from .connection import Connection, ConnectionState
 from ..interval_runner import IntervalRunner
 from ...errors import SlackClientConfigurationError
+from ...proxy_env_variable_loader import load_http_proxy_from_env
 
 
 class SocketModeClient(BaseSocketModeClient):
@@ -113,6 +114,10 @@ class SocketModeClient(BaseSocketModeClient):
         self.message_workers = ThreadPoolExecutor(max_workers=concurrency)
 
         self.proxy = proxy
+        if self.proxy is None or len(self.proxy.strip()) == 0:
+            env_variable = load_http_proxy_from_env(self.logger)
+            if env_variable is not None:
+                self.proxy = env_variable
         self.proxy_headers = proxy_headers
 
         self.on_message_listeners = on_message_listeners or []
diff --git a/slack_sdk/socket_mode/builtin/internals.py b/slack_sdk/socket_mode/builtin/internals.py
index c910f6c..8502969 100644
--- a/slack_sdk/socket_mode/builtin/internals.py
+++ b/slack_sdk/socket_mode/builtin/internals.py
@@ -6,7 +6,7 @@ import socket
 from socket import socket as Socket
 import ssl
 import struct
-from base64 import encodebytes
+from base64 import encodebytes, b64encode
 from hmac import compare_digest
 from logging import Logger
 from typing import Tuple, Optional, Union, List, Callable, Dict
@@ -59,6 +59,11 @@ def _establish_new_socket_connection(
         sock.settimeout(receive_timeout)
         sock.connect(proxy_addr[4])  # proxy address
         message = [f"CONNECT {server_hostname}:{server_port} HTTP/1.0"]
+        if parsed_proxy.username is not None and parsed_proxy.password is not None:
+            # In the case where the proxy is "http://{username}:{password}@{hostname}:{port}"
+            raw_value = f"{parsed_proxy.username}:{parsed_proxy.password}"
+            auth = b64encode(raw_value.encode("utf-8")).decode("ascii")
+            message.append(f"Proxy-Authorization: Basic {auth}")
         if proxy_headers is not None:
             for k, v in proxy_headers.items():
                 message.append(f"{k}: {v}")
@@ -69,11 +74,11 @@ def _establish_new_socket_connection(
             logger.debug(f"Proxy connect request (session id: {session_id}):\n{req}")
         sock.send(req.encode("utf-8"))
         status, text = _parse_connect_response(sock)
-        if status != 200:
-            raise Exception(f"Failed to connect to the proxy (proxy: {proxy})")
         if trace_enabled:
             log_message = f"Proxy connect response (session id: {session_id}):\n{text}"
             logger.debug(log_message)
+        if status != 200:
+            raise Exception(f"Failed to connect to the proxy (proxy: {proxy}, connect status code: {status})")
 
         sock = ssl.SSLContext(ssl.PROTOCOL_SSLv23).wrap_socket(
             sock,
diff --git a/slack_sdk/version.py b/slack_sdk/version.py
index ff04168..3e2d550 100644
--- a/slack_sdk/version.py
+++ b/slack_sdk/version.py
@@ -1,1 +1,1 @@
-__version__ = "3.3.1"
+__version__ = "3.3.2"
diff --git a/slack_sdk/web/async_base_client.py b/slack_sdk/web/async_base_client.py
index 6bd5f0a..a41a511 100644
--- a/slack_sdk/web/async_base_client.py
+++ b/slack_sdk/web/async_base_client.py
@@ -17,6 +17,7 @@ from .internal_utils import (
     _get_url,
     get_user_agent,
 )
+from ..proxy_env_variable_loader import load_http_proxy_from_env
 
 
 class AsyncBaseClient:
@@ -55,6 +56,11 @@ class AsyncBaseClient:
             self.default_params["team_id"] = team_id
         self._logger = logger if logger is not None else logging.getLogger(__name__)
 
+        if self.proxy is None or len(self.proxy.strip()) == 0:
+            env_variable = load_http_proxy_from_env(self._logger)
+            if env_variable is not None:
+                self.proxy = env_variable
+
     async def api_call(  # skipcq: PYL-R1710
         self,
         api_method: str,
diff --git a/slack_sdk/web/base_client.py b/slack_sdk/web/base_client.py
index 456ef09..baef0c6 100644
--- a/slack_sdk/web/base_client.py
+++ b/slack_sdk/web/base_client.py
@@ -29,6 +29,7 @@ from .internal_utils import (
     _build_req_args,
 )
 from .slack_response import SlackResponse
+from ..proxy_env_variable_loader import load_http_proxy_from_env
 
 
 class BaseClient:
@@ -62,6 +63,11 @@ class BaseClient:
             self.default_params["team_id"] = team_id
         self._logger = logger if logger is not None else logging.getLogger(__name__)
 
+        if self.proxy is None or len(self.proxy.strip()) == 0:
+            env_variable = load_http_proxy_from_env(self._logger)
+            if env_variable is not None:
+                self.proxy = env_variable
+
     def api_call(  # skipcq: PYL-R1710
         self,
         api_method: str,
diff --git a/slack_sdk/web/legacy_base_client.py b/slack_sdk/web/legacy_base_client.py
index e850e10..dd5ab90 100644
--- a/slack_sdk/web/legacy_base_client.py
+++ b/slack_sdk/web/legacy_base_client.py
@@ -33,6 +33,7 @@ from .internal_utils import (
     _build_req_args,
 )
 from .legacy_slack_response import LegacySlackResponse as SlackResponse
+from ..proxy_env_variable_loader import load_http_proxy_from_env
 
 
 class LegacyBaseClient:
@@ -72,6 +73,11 @@ class LegacyBaseClient:
         if team_id is not None:
             self.default_params["team_id"] = team_id
         self._logger = logger if logger is not None else logging.getLogger(__name__)
+        if self.proxy is None or len(self.proxy.strip()) == 0:
+            env_variable = load_http_proxy_from_env(self._logger)
+            if env_variable is not None:
+                self.proxy = env_variable
+
         self._event_loop = loop
 
     def api_call(  # skipcq: PYL-R1710
diff --git a/slack_sdk/webhook/async_client.py b/slack_sdk/webhook/async_client.py
index b05a072..44ef511 100644
--- a/slack_sdk/webhook/async_client.py
+++ b/slack_sdk/webhook/async_client.py
@@ -16,6 +16,7 @@ from .internal_utils import (
     get_user_agent,
 )
 from .webhook_response import WebhookResponse
+from ..proxy_env_variable_loader import load_http_proxy_from_env
 
 
 class AsyncWebhookClient:
@@ -69,6 +70,11 @@ class AsyncWebhookClient:
         )
         self.logger = logger if logger is not None else logging.getLogger(__name__)
 
+        if self.proxy is None or len(self.proxy.strip()) == 0:
+            env_variable = load_http_proxy_from_env(self.logger)
+            if env_variable is not None:
+                self.proxy = env_variable
+
     async def send(
         self,
         *,
diff --git a/slack_sdk/webhook/client.py b/slack_sdk/webhook/client.py
index de25a7a..a062c5c 100644
--- a/slack_sdk/webhook/client.py
+++ b/slack_sdk/webhook/client.py
@@ -17,6 +17,7 @@ from .internal_utils import (
     get_user_agent,
 )
 from .webhook_response import WebhookResponse
+from ..proxy_env_variable_loader import load_http_proxy_from_env
 
 
 class WebhookClient:
@@ -58,6 +59,11 @@ class WebhookClient:
         )
         self.logger = logger if logger is not None else logging.getLogger(__name__)
 
+        if self.proxy is None or len(self.proxy.strip()) == 0:
+            env_variable = load_http_proxy_from_env(self.logger)
+            if env_variable is not None:
+                self.proxy = env_variable
+
     def send(
         self,
         *,


Test patch:
diff --git a/integration_tests/samples/socket_mode/builtin_proxy_auth_example.py b/integration_tests/samples/socket_mode/builtin_proxy_auth_example.py
new file mode 100644
index 0000000..b5914fe
--- /dev/null
+++ b/integration_tests/samples/socket_mode/builtin_proxy_auth_example.py
@@ -0,0 +1,55 @@
+# ------------------
+# Only for running this script here
+import sys
+from os.path import dirname
+
+sys.path.insert(1, f"{dirname(__file__)}/../../..")
+# ------------------
+
+import logging
+
+logging.basicConfig(
+    level=logging.DEBUG,
+    # format="%(asctime)s.%(msecs)03d %(levelname)s %(pathname)s (%(lineno)s): %(message)s",
+    # datefmt="%Y-%m-%d %H:%M:%S",
+)
+
+import os
+from threading import Event
+from slack_sdk.web import WebClient
+from slack_sdk.socket_mode.response import SocketModeResponse
+from slack_sdk.socket_mode.request import SocketModeRequest
+from slack_sdk.socket_mode import SocketModeClient
+
+# https://github.com/seratch/my-proxy-server
+# go build && ./my-proxy-sever -a
+proxy_url = "http://user:pass@localhost:9000"
+
+client = SocketModeClient(
+    app_token=os.environ.get("SLACK_SDK_TEST_SOCKET_MODE_APP_TOKEN"),
+    web_client=WebClient(
+        token=os.environ.get("SLACK_SDK_TEST_SOCKET_MODE_BOT_TOKEN"),
+        proxy=proxy_url,
+    ),
+    proxy=proxy_url,
+    # proxy="http://localhost:9000",
+    # proxy_headers={"Proxy-Authorization": "Basic dXNlcjpwYXNz"},
+    trace_enabled=True,
+    all_message_trace_enabled=True,
+)
+
+if __name__ == "__main__":
+
+    def process(client: SocketModeClient, req: SocketModeRequest):
+        if req.type == "events_api":
+            response = SocketModeResponse(envelope_id=req.envelope_id)
+            client.send_socket_mode_response(response)
+            client.web_client.reactions_add(
+                name="eyes",
+                channel=req.payload["event"]["channel"],
+                timestamp=req.payload["event"]["ts"],
+            )
+
+    client.socket_mode_request_listeners.append(process)
+    client.connect()
+    Event().wait()
diff --git a/integration_tests/samples/socket_mode/builtin_proxy_env_variable_example.py b/integration_tests/samples/socket_mode/builtin_proxy_env_variable_example.py
new file mode 100644
index 0000000..7065218
--- /dev/null
+++ b/integration_tests/samples/socket_mode/builtin_proxy_env_variable_example.py
@@ -0,0 +1,52 @@
+# ------------------
+# Only for running this script here
+import sys
+from os.path import dirname
+
+sys.path.insert(1, f"{dirname(__file__)}/../../..")
+# ------------------
+
+import logging
+
+logging.basicConfig(
+    level=logging.DEBUG,
+    # format="%(asctime)s.%(msecs)03d %(levelname)s %(pathname)s (%(lineno)s): %(message)s",
+    # datefmt="%Y-%m-%d %H:%M:%S",
+)
+
+import os
+from threading import Event
+from slack_sdk.web import WebClient
+from slack_sdk.socket_mode.response import SocketModeResponse
+from slack_sdk.socket_mode.request import SocketModeRequest
+from slack_sdk.socket_mode import SocketModeClient
+
+# pip3 install proxy.py
+# proxy --port 9000 --log-level d
+os.environ["HTTPS_PROXY"] = "http://localhost:9000"
+
+client = SocketModeClient(
+    app_token=os.environ.get("SLACK_SDK_TEST_SOCKET_MODE_APP_TOKEN"),
+    web_client=WebClient(
+        token=os.environ.get("SLACK_SDK_TEST_SOCKET_MODE_BOT_TOKEN"),
+    ),
+    proxy_headers={"Proxy-Authorization": "Basic dXNlcjpwYXNz"},
+    trace_enabled=True,
+    all_message_trace_enabled=True,
+)
+
+if __name__ == "__main__":
+
+    def process(client: SocketModeClient, req: SocketModeRequest):
+        if req.type == "events_api":
+            response = SocketModeResponse(envelope_id=req.envelope_id)
+            client.send_socket_mode_response(response)
+            client.web_client.reactions_add(
+                name="eyes",
+                channel=req.payload["event"]["channel"],
+                timestamp=req.payload["event"]["ts"],
+            )
+
+    client.socket_mode_request_listeners.append(process)
+    client.connect()
+    Event().wait()
diff --git a/integration_tests/samples/socket_mode/builtin_proxy_example.py b/integration_tests/samples/socket_mode/builtin_proxy_example.py
index f1924b9..1cf776f 100644
--- a/integration_tests/samples/socket_mode/builtin_proxy_example.py
+++ b/integration_tests/samples/socket_mode/builtin_proxy_example.py
@@ -32,7 +32,6 @@ client = SocketModeClient(
         proxy=proxy_url,
     ),
     proxy=proxy_url,
-    proxy_headers={"Proxy-Authorization": "Basic dXNlcjpwYXNz"},
     trace_enabled=True,
     all_message_trace_enabled=True,
 )
diff --git a/tests/test_proxy_env_variable_loader.py b/tests/test_proxy_env_variable_loader.py
new file mode 100644
index 0000000..d5e12a4
--- /dev/null
+++ b/tests/test_proxy_env_variable_loader.py
@@ -0,0 +1,24 @@
+import os
+import unittest
+
+from slack_sdk.proxy_env_variable_loader import load_http_proxy_from_env
+from tests.helpers import remove_os_env_temporarily, restore_os_env
+
+
+class TestProxyEnvVariableLoader(unittest.TestCase):
+    def setUp(self):
+        self.old_env = remove_os_env_temporarily()
+
+    def tearDown(self):
+        os.environ.clear()
+        restore_os_env(self.old_env)
+
+    def test_load_lower_case(self):
+        os.environ["https_proxy"] = "http://localhost:9999"
+        url = load_http_proxy_from_env()
+        self.assertEqual(url, "http://localhost:9999")
+
+    def test_load_upper_case(self):
+        os.environ["HTTPS_PROXY"] = "http://localhost:9999"
+        url = load_http_proxy_from_env()
+        self.assertEqual(url, "http://localhost:9999")