API 2.0 기준 Bot 메시지 전송 오류관련 문의 드립니다.

개발하자

2024.03.18읽음 149

VisualStudio C#에서 API 2.0 기준으로 Bot 메시지 발송하려고 합니다.
아래와 같은 오류코드가 발생하는데 원인을 찾을 수 없어 문의 드립니다.

오류코드 : CodeBadRequest
(※ 오류 메시지 : {"원격 서버에서 (400) 잘못된 요청 오류를 반환했습니다."} System.Net.WebException )
dataParams  {content="content": {"type": "text","text": "Message / Hello"}} System.Text.StringBuilder
botID  = 숫자코드
UserID = 사원번호 or 이메일주소    
- Bot 메시지 전송
 
     JsonObjectCollection Content = new JsonObjectCollection("content"); //content 배열로 넘길 Object                
               Content.Add(new JsonStringValue("type", "text"));
               Content.Add(new JsonStringValue("text", "Message / Hello"));
               StringBuilder dataParams = new StringBuilder();                
               dataParams.Append("content=" + Content);
               
               // 요청 String -> 요청 Byte 변환
               byte[] byteDataParams = UTF8Encoding.UTF8.GetBytes(dataParams.ToString());
               // HttpWebRequest 객체 생성, 설정
               string strUri = string.Format("https://www.worksapis.com/v1.0/bots/{0}/users/{1}/messages", botID, UserID);
               HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strUri);
               request.Headers.Add("Authorization", string.Format("Bearer {0}", ConnResult.access_token)); // 서버토큰
               request.Method = "POST";    // 기본값 "GET"
               request.ContentType = "application/json";
               request.ContentLength = byteDataParams.Length;
               // 요청 Byte -> 요청 Stream 변환
               Stream stDataParams = request.GetRequestStream();
               stDataParams.Write(byteDataParams, 0, byteDataParams.Length);
               stDataParams.Close();
- API 인증
 
WebClient webClient = new WebClient();
               webClient.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded");
               webClient.Headers.Add(HttpRequestHeader.AcceptCharset, "UTF-8");
               //webClient.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + jwt);
               System.Collections.Specialized.NameValueCollection frmData = new System.Collections.Specialized.NameValueCollection();
               frmData["assertion"] = jwt;
               frmData["grant_type"] = "urn:ietf:params:oauth:grant-type:jwt-bearer";
               frmData["client_id"] = ClientID;
               frmData["client_secret"] = ClientSecurity;
               frmData["scope"] = "bot";
               byte[] responseBytes = webClient.UploadValues("https://auth.worksmobile.com/oauth2/v2.0/token", "POST", frmData);
               string response = Encoding.UTF8.GetString(responseBytes);
               ConnResult = JsonConvert.DeserializeObject<clsResult>(response);
     

댓글3

  • 업데이트 된 답글입니다.

    ptmt

    사용자 대상 메시지 전송을 하시려는 것으로 보이는데요
    400 bad request는 클라이언트 요청이 서버에서 이해할 수 없는 형태일 때 발생하는 것으로 알고있어요
    JSON 형식이 유효한지, 필수 매개변수가 누락된 것은 없는지, 인증은 문제없이 동작하는지 전반적으로 점검을 해보셔야 할 것 같습니다
    URI가 잘못 되었을 때에도 400이 뜰 수 있으므로
    URI의 botID와 userID를 배열에서 가져오시는것으로 보이는데 정상적으로 가져와지는지도 확인 해보아야 할 것 같습니다

    2024.03.18

    0
  • 업데이트 된 답글입니다.

    개발하자 작성자

    관리자(Master) Bot API 에서 확인결과 서비스 성공여부에 "실패"로 나타나고 있습니다.
    사용자 인증정보와 Bot No. 등이 확인 되는 것으로 봐서는 JSON에서 문제가 있을 거라 생각되어 문의 요청 드렸는데요..
    API 2.0 연동시 Body Request에서 문제가 있는지 다른 정보 확인 방법이 있는지 문의 드려요..
    JSON :  {content="content": {"type": "text","text": "Message / Hello"}}

    2024.03.19

    0
  • 업데이트 된 답글입니다.

    개발하자 작성자

    자문자답
    JSON :  {content="content": {"type": "text","text": "Message / Hello"}}

    JSON :  {{"type": "text","text": "Message / Hello"}}
    위 내용으로 변경하여 처리 하였습니다.

    2024.03.21

    0
이전 글JWT 인증 절차
다음 글제가 만든 프로그램을 다른 도메인 사용자가 사용할 수 없나요?
목록

궁금한 점을 해결하지 못하셨나요?
지금 바로 NAVER WORKS 사용자들에게 물어보세요!