Slackbot 구축을 통해 API-2를 배우는 방법
전체 코드를 사용할 수 있습니다 here.
노선도
>> 섹션 3: 최종 버전 (다음)
나의 최초의 노선도를 되돌아보면 이것이 우리의 입장이다.
프레젠테이션
목표
이 버전에서 나의 목표는 다음과 같다.
목표
이 버전에서 나의 목표는 다음과 같다.
Modal
을 통해 직원 ID를 물었다.헤버트는 답을 나에게 돌려주었다.
리소스
BambooHR API
파일Documentation이 명확하고 질서정연하다.API는 활동(보고서, 로그인, 직원)별로 그룹화됩니다.
고객을 위해 Heybot을 만들고 싶습니다. 그래서 저는 (1) 계정만 필요합니다. (주의: 계정은 7일 이내에만 유효합니다.) (2) 하위 영역은 제가 테스트 계정을 열 때 만든'mycompany'(우리 회사는monsterinc:D), (3) API 키 하나입니다. 저는 테스트 계정인'Settings'에서 만듭니다.
API 키를 만드는 방법:
API 키를 복사하여 주석에 저장하는 것이 좋습니다. 자주 사용해야 하기 때문입니다.
주의해야 할 또 다른 중요한 사항은 * 머리의 AUTHORIZATION_토큰("기본 NDJim*****")입니다.
Why do we need this?
API 키를 사용하여 BambooHR에 직접 HTTP 요청을 보낼 수 없습니다.API 키를 인증 토큰으로 변환해야 합니다.
Flask 응용 프로그램을 실행하기 전에 환경 변수 export AUTHORIZATION_TOKEN= "NDJim**********
및 SLACK_TOKEN
와 같은 환경 변수 SLACK_SIGNING_SECRET
를 사용해야 합니다.
How to use BambooHR API Key to find AUTHORIZATION TOKEN
?
API Reference 페이지로 이동하여 API를 선택하고 평가판을 선택합니다.
과제 및 솔루션
Slack API에서 올바른 문서 찾기
Slack은 API를 계속 업그레이드하고 있기 때문에 일부 기능이나 방법은 사용을 중지하거나 사용하고 있지만 지원 자원은 사용되지 않습니다.
HelloGalaxy 버전에서는 다음과 같은 구성이 필요합니다.
Why do we need this?
How to use BambooHR API Key to find AUTHORIZATION TOKEN
?
Slack API에서 올바른 문서 찾기
Slack은 API를 계속 업그레이드하고 있기 때문에 일부 기능이나 방법은 사용을 중지하거나 사용하고 있지만 지원 자원은 사용되지 않습니다.
HelloGalaxy 버전에서는 다음과 같은 구성이 필요합니다.
#1에 대해 느슨함
Blocks
(블록 세트 생성기에서 지원하여 post에 따라 교체attachments
를 도입했다.이번 업그레이드의 목적은 더 많은 상호작용 (투표, 버튼, 메뉴) 이나 풍부한 내용 (영상, 링크, 이미지) 을 지원하는 것이다.Blocks
로 구축한 조작 메시지이며 chat_postMessage()
방법을 통해 사용자에게 발송한다.너는
def understood_greeting(self, user)
아래에서 나의 Block payload here을 볼 수 있다.#2의 경우
Modal
에 따라 post 대체Dialogs
.이 변화는 dialog.open()
방법의 은퇴를 초래했고 views.open()
방법을 도입하여 모드를 열 수 없었다 chat_postMessage()
또는 다른 일반적인 방법으로 열 수 없었다 Modal
.요청 본문에서 내용을 가져옵니다. 내용 형식은 응용 프로그램/x-www-form-urlencoded
일반적으로 사용
Content-type = application/JSON
은 매우 간단명료하다.우리는 request.data
, request.get_data
, request.json
, request.get_json
, application/x-www-form-urlencoded
를 사용할 수 있다.request.data
bytestring 형식의 파일입니다.따라서 만약 우리가 block_actions
(흔히 볼 수 있는 해결 방안) 을 사용한다면, 우리는 빈 문자열을 얻을 것이다.이것StackOverflow post은 전면적인 답안이다.나의 상세한 답안도 여기에 있다.다음은 신속하게 볼 수 있는 제 솔루션입니다.
@ app.route('/slack/request_handler', methods=['POST'])
def request_handler():
# return an ImmutableMultiDict with 1 pair
payload = request.form
# get value of key 'payload'
a1 = payload['payload']
# Note that if you have single quotes as a part
# of your keys or values, this will fail due to
# improper character replacement.
# Convert a string (representation of a Dict))
# to a Dict
a2 = json.loads(a1)
# Get value of key "channel"
channel = a2["channel"]
print(channel)
# {'id': 'D01ACC2E8S3', 'name': 'directmessage'}
개인_메타데이터를 사용하여 보기_제출 부하의 제한을 해결합니다.
참고: 단추를 누르면
channel_id
payload8이 action_id
,view_submission
로 되돌아옵니다.모드가 종료(제출)되면 유효 하중block_actions
이 전송됩니다.나는
view_submission
유효 하중과 GET
유효 하중here의 견본을 저장했다.Context:
- A
Modal
appears to get Employee ID input from a user. Once the user provided the ID and clicked "Submit", aview_submission
payload was sent to my server.
Problem:
올바른 함수를 호출하여 BambooHR에
action_id
요청을 보내고 올바른 템플릿 메시지를 구축하려면 Block
메시지를 만들 때 설정된 view_submission
메시지가 필요합니다.action_id
유효 하중이 없습니다channel_id
.답변을 위해서는
view_submission
을 제공해야 합니다.channel_id
유효 하중이 없습니다private_metadata
.Solution:
Slack은 이 방면에 관한 공식 문서가 없습니다.그러나 나는
action_id
유효 부하에서 수신한 block_actions
를 저장하기 위해 channel_id
을 사용한다.이 Slack doc 는
private_metadata
에 저장하는 것을 권장합니다.Pseudocode
Code
# build view payload
def get_employee_id_modal(self, channel_id, action_id):
private_metadata = {
"channel_id": channel_id,
"action_id": action_id
}
# jsonify a dict into a string
# (required type for private_metadata)
json_private_metadata =
json.dumps(private_metadata)
# return a block
return ({
"type": "modal",
"private_metadata": json_private_metadata,
"callback_id": "employee_id_modal",
[....]
})
읽어주셔서 감사합니다!비비
Reference
이 문제에 관하여(Slackbot 구축을 통해 API-2를 배우는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/totorosyd/how-i-m-learning-about-apis-by-building-a-slackbot-part-2-9mc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)